python小欢喜(七)游戏编程 (2) 挡球游戏的改进:使用中文提示并添加声音效果
生活随笔
收集整理的這篇文章主要介紹了
python小欢喜(七)游戏编程 (2) 挡球游戏的改进:使用中文提示并添加声音效果
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在前面的文章《python小歡喜(六)動畫 (1) pygame的安裝與初步使用》中介紹了如何安裝pygame。
《python小歡喜(七)游戲編程 (1) 擋球》實現(xiàn)了一個小游戲。接下來對這個小游戲做兩方面的改進(jìn)
1 使用中文提示
2 添加上碰撞時的聲音效果
游戲界面如下:
可以看到,窗口上方的提示變成了中文,如果戴上耳機(jī)或使用音箱,可以聽到足球碰到擋板或下邊界時發(fā)出的聲音。
python代碼如下:
# -*- coding:utf-8 -*- # 擋球游戲 import pygame #導(dǎo)入pygame模塊 pygame.init()screen = pygame.display.set_mode([800,600]) #設(shè)置圖形窗口大小為800*600 pygame.display.set_caption("擋球") #設(shè)置圖形窗口標(biāo)題BLACK = (0,0,0) # 用RGB值定義黑色 WHITE = (255,255,255) # 用RGB值定義白色 BROWN = (166,134,95) # 用RGB值定義棕色ball = pygame.image.load("ball.png") # 加載足球圖片 picx = 0 #圖片的x坐標(biāo)的初始值設(shè)為0 picy = 0 #圖片的y坐標(biāo)的初始值設(shè)為0 picw = 100 #圖片的寬度 pich = 100 #圖片的高度speedx = 5 #足球的水平速度值 speedy = 5 #足球的垂直速度值paddlex = 300 #擋板的x坐標(biāo)的初始值設(shè)為300 paddley = 550 #擋板的y坐標(biāo)的初始值設(shè)為550 ,窗口高度為600,檔板靠近窗口底部 paddlew = 200 #擋板的寬度 paddleh = 25 #擋板的高度points = 0 #游戲得分 lives = 5 #玩家生命值font = pygame.font.Font("C:\Windows\Fonts\STSONG.TTF", 24) #設(shè)置輸出文本所用的字體pygame.mixer.init() # 初始化混音器 pop = pygame.mixer.Sound("pop.wav") #加載聲音文件 blip = pygame.mixer.Sound("blip.wav") #加載聲音文件timer = pygame.time.Clock() #生成一個定時器對象 keepGoing = True while keepGoing: # 事件處理循環(huán)for event in pygame.event.get(): if event.type == pygame.QUIT: keepGoing = False#根據(jù)速度值修正足球圖片的當(dāng)前位置,如果碰到邊緣,則將速度值取反,得到回彈的效果picx += speedx picy += speedy if picx <= 0 or picx + ball.get_width() >= 800:speedx = -speedxif picy <= 0:speedy = -speedyif picy >= 500:lives -= 1 #碰到底邊,生命值減1speedy = -speedyblip.play() #播放聲音screen.fill(BLACK) screen.blit(ball, (picx, picy))# 根據(jù)鼠標(biāo)的當(dāng)前位置繪制擋板,只使用的鼠標(biāo)當(dāng)前位置的x坐標(biāo)paddlex = pygame.mouse.get_pos()[0]paddlex -= paddlew/2pygame.draw.rect(screen, BROWN, (paddlex, paddley, paddlew, paddleh))# 檢查足球是否與檔板發(fā)生了碰撞,如果是,則得分?jǐn)?shù)加1,并使足球回彈if picy + pich >= paddley and picy + pich <= paddley + paddleh \and speedy > 0:if picx + picw / 2 >= paddlex and picx + picw / 2 <= paddlex + \paddlew:points += 1speedy = -speedypop.play() #播放聲音# 輸出提示信息tip = "生命值: " + str(lives) + ", 得分: " + str(points) text = font.render(tip, True, WHITE)text_rect = text.get_rect()text_rect.centerx = screen.get_rect().centerxtext_rect.y = 10 screen.blit(text, text_rect)pygame.display.update() #刷新窗口timer.tick(60) #設(shè)置幀率不超過60 pygame.quit() # 退出pygame為了顯示中文,做了如下一些改動:
font = pygame.font.SysFont("Times", 24) #設(shè)置輸出文本所用的字體改為:
font = pygame.font.Font("C:\Windows\Fonts\STSONG.TTF", 24) #設(shè)置輸出文本所用的字體其中 “C:\Windows\Fonts\STSONG.TTF” 是中文宋體的字體文件,24 是字號
tip = "Lives: " + str(lives) + " Points: " + str(points)改為:
tip = "生命值: " + str(lives) + ", 得分: " + str(points)值得注意的是,如果前面不設(shè)置中文字體,直接修改 tip = "生命值: " + str(lives) + ", 得分: " + str(points) ,會導(dǎo)致中文輸出的內(nèi)容為亂碼
為了添加聲音效果,做了如下一些改動
添加下面三行,加載聲音文件
pygame.mixer.init() # 初始化混音器 pop = pygame.mixer.Sound("pop.wav") #加載聲音文件 blip = pygame.mixer.Sound("blip.wav") #加載聲音文件然后在發(fā)生碰撞時執(zhí)行
blip.play() #播放聲音或者:
pop.play() #播放聲音可見有了pygame.mixer之后,播放聲音變得相當(dāng)?shù)暮唵巍?/p>
補(bǔ)充說明:
程序中用到的兩個聲音文件可在此處下載
提取碼:34yu
總結(jié)
以上是生活随笔為你收集整理的python小欢喜(七)游戏编程 (2) 挡球游戏的改进:使用中文提示并添加声音效果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIDE手机编程初级教程(零基础向) 3
- 下一篇: tmux terminal multi