这篇文章主要讲解了“Python如何实现打地鼠游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何实现打地鼠游戏”吧!
开发工具
python版本:3.6.4
相关模块
pygame;以及一些python自带的模块。
环境搭建
安装python并添加到环境变量,pip安装需要的相关模块即可。
原理简介
打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠呗~首先,让我们确定一下游戏中有哪些元素。打地鼠打地鼠,地鼠当然得有啦,那我们就写个地鼠的游戏精灵类呗 显然,地鼠有被锤子击中和未被锤子击中这两种状态,所以需要加载两张图,当地鼠被击中时从未被击中的地鼠状态图切换到被击中后的地鼠状态图(我找的图可能不太像地鼠,请各位老哥见谅)。然后我们再来定义一下锤子这个游戏精灵类,和地鼠类似,锤子也有未锤下去和已锤下去两种状态,只不过锤下去之后需要迅速恢复回未锤下去的状态,具体而言,代码实现如下:
主要代码
游戏初始化
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.USEREVENTpygame.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()# 分数your_score = 0flag = False
我注释了大家可以看看
下面就到我们的游戏主循环啦
# 游戏主循环while True:# --游戏时间为60stime_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 = Trueelif 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()# --游戏结束if time_remain < 0: breakcount_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# --分数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秒之后,游戏结束,我们就可以将分数统计起来然后和历史最高分做一下 对比:
# 读取最佳分数(try块避免第一次游戏无.rec文件)try:best_score = int(open(cfg.RECORD_PATH).read())except:best_score = 0# 若当前分数大于最佳分数则更新最佳分数if your_score > best_score:f = open(cfg.RECORD_PATH, 'w')f.write(str(your_score))f.close()
然后我们来让我们的游戏看着正式一点,整点仪式感,就添加一个开始界面和结束界面呗:
# 结束界面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如何实现打地鼠游戏”的内容了,经过本文的学习后,相信大家对Python如何实现打地鼠游戏这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!