Python實現(xiàn)打地鼠游戲
開發(fā)工具
python版本:3.6.4
相關模塊
pygame;以及一些python自帶的模塊。
環(huán)境搭建
安裝python并添加到環(huán)境變量,pip安裝需要的相關模塊即可。
原理簡介
打地鼠的游戲規(guī)則相信大家都知道,這里就不多介紹了,反正就是不停地拿錘子打洞里鉆出來的地鼠唄~首先,讓我們確定一下游戲中有哪些元素。打地鼠打地鼠,地鼠當然得有啦,那我們就寫個地鼠的游戲精靈類唄 顯然,地鼠有被錘子擊中和未被錘子擊中這兩種狀態(tài),所以需要加載兩張圖,當?shù)厥蟊粨糁袝r從未被擊中的地鼠狀態(tài)圖切換到被擊中后的地鼠狀態(tài)圖(我找的圖可能不太像地鼠,請各位老哥見諒)。然后我們再來定義一下錘子這個游戲精靈類,和地鼠類似,錘子也有未錘下去和已錘下去兩種狀態(tài),只不過錘下去之后需要迅速恢復回未錘下去的狀態(tài),具體而言,代碼實現(xiàn)如下:
主要代碼
游戲初始化
def initGame():
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode(cfg.SCREENSIZE)
pygame.display.set_caption('PythonQQ交流群:932574150')
return screen
ok,將準備工作都做好啦,我們就可以開始寫主程序啦。首先當然是我們的游戲初始化呀:
初始化
screen = initGame()
然后我們就要加載一下我們必要的游戲素材和必要的游戲變量?
# 加載背景音樂和其他音效
pygame.mixer.music.load(cfg.BGM_PATH)
pygame.mixer.music.play(-1)
audios = {
'count_down': pygame.mixer.Sound(cfg.COUNT_DOWN_SOUND_PATH),
'hammering': pygame.mixer.Sound(cfg.HAMMERING_SOUND_PATH)
}
# 加載字體
font = pygame.font.Font(cfg.FONT_PATH, 40)
# 加載背景圖片
bg_img = pygame.image.load(cfg.GAME_BG_IMAGEPATH)
# 開始界面
startInterface(screen, cfg.GAME_BEGIN_IMAGEPATHS)
# 地鼠改變位置的計時
hole_pos = random.choice(cfg.HOLE_POSITIONS)
change_hole_event = pygame.USEREVENT
pygame.time.set_timer(change_hole_event, 800)
# 地鼠
mole = Mole(cfg.MOLE_IMAGEPATHS, hole_pos)
# 錘子
hammer = Hammer(cfg.HAMMER_IMAGEPATHS, (500, 250))
# 時鐘
clock = pygame.time.Clock()
# 分數(shù)
your_score = 0
flag = False
我注釋了大家可以看看
下面就到我們的游戲主循環(huán)啦
# 游戲主循環(huán)
while True:
# --游戲時間為60s
time_remain = round((61000 - pygame.time.get_ticks()) / 1000.)
# --游戲時間減少, 地鼠變位置速度變快
if time_remain == 40 and not flag:
hole_pos = random.choice(cfg.HOLE_POSITIONS)
mole.reset()
mole.setPosition(hole_pos)
pygame.time.set_timer(change_hole_event, 650)
flag = True
elif time_remain == 20 and flag:
hole_pos = random.choice(cfg.HOLE_POSITIONS)
mole.reset()
mole.setPosition(hole_pos)
pygame.time.set_timer(change_hole_event, 500)
flag = False
# --倒計時音效
if time_remain == 10:
audios['count_down'].play()
# --游戲結(jié)束
if time_remain < 0: break
count_down_text = font.render('Time: '+str(time_remain), True, cfg.WHITE)
# --按鍵檢測
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEMOTION:
hammer.setPosition(pygame.mouse.get_pos())
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
hammer.setHammering()
elif event.type == change_hole_event:
hole_pos = random.choice(cfg.HOLE_POSITIONS)
mole.reset()
mole.setPosition(hole_pos)
# --碰撞檢測
if hammer.is_hammering and not mole.is_hammer:
is_hammer = pygame.sprite.collide_mask(hammer, mole)
if is_hammer:
audios['hammering'].play()
mole.setBeHammered()
your_score += 10
# --分數(shù)
your_score_text = font.render('Score: '+str(your_score), True, cfg.BROWN)
# --綁定必要的游戲元素到屏幕(注意順序)
screen.blit(bg_img, (0, 0))
screen.blit(count_down_text, (875, 8))
screen.blit(your_score_text, (800, 430))
mole.draw(screen)
hammer.draw(screen)
# --更新
pygame.display.flip()
clock.tick(60)
邏輯很簡單的,我就不多廢話了,大家看看我寫的注釋60秒之后,游戲結(jié)束,我們就可以將分數(shù)統(tǒng)計起來然后和歷史最高分做一下 對比:
# 讀取最佳分數(shù)(try塊避免第一次游戲無.rec文件) try: best_score = int(open(cfg.RECORD_PATH).read()) except: best_score = 0 # 若當前分數(shù)大于最佳分數(shù)則更新最佳分數(shù) if your_score > best_score: f = open(cfg.RECORD_PATH, 'w') f.write(str(your_score)) f.close()
然后我們來讓我們的游戲看著正式一點,整點儀式感,就添加一個開始界面和結(jié)束界面唄:
# 結(jié)束界面
score_info = {'your_score': your_score, 'best_score': best_score}
is_restart = endInterface(screen, cfg.GAME_END_IMAGEPATH, cfg.GAME_AGAIN_IMAGEPATHS, score_info, cfg.FONT_PATH, [cfg.WHITE, cfg.RED], cfg.SCREENSIZE)
return is_restart
最后添加運行代碼
if __name__ == '__main__': while True: is_restart = main() if not is_restart: break
到此這篇關于Python實現(xiàn)打地鼠游戲的文章就介紹到這了,更多相關Python打地鼠游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Pytorch中的tensor數(shù)據(jù)結(jié)構(gòu)
torch.Tensor 是一種包含單一數(shù)據(jù)類型元素的多維矩陣,類似于 numpy 的 array,這篇文章主要介紹了Pytorch中的tensor數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下2022-09-09
Django使用Channels實現(xiàn)WebSocket的方法
WebSocket是一種在單個TCP連接上進行全雙工通訊的協(xié)議。WebSocket允許服務端主動向客戶端推送數(shù)據(jù)。這篇文章主要介紹了Django使用Channels實現(xiàn)WebSocket,需要的朋友可以參考下2019-07-07
Python實現(xiàn)B站UP主自動監(jiān)控功能詳解
眾所周知,B站有很多有趣的UP主,可以教大家一些"實用"的知識,但是他們一般都沒有固定的更新時間。因此,本文將用Python編寫一個腳本,自動監(jiān)控UP是否更新了視頻,感興趣的可以了解一下2022-03-03
pandas apply使用多列計算生成新的列實現(xiàn)示例
這篇文章主要介紹了pandas apply使用多列計算生成新的列實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02

