用Python做一个打地鼠游戏的思路和方法是什么

Admin 2022-05-20 群英技术资讯 362 次浏览

这篇文章主要介绍了用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.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()
	# 分数
	your_score = 0
	flag = False

我注释了大家可以看看

下面就到我们的游戏主循环啦

# 游戏主循环
	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()
		# --游戏结束
		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
		# --分数
		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做一个打地鼠游戏的思路和方法是什么”的介绍了,感谢各位的阅读,如果大家想要了解更多相关的内容,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
群英智防CDN,智能加速解决方案
标签: Python打地鼠

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服