我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PythonPygame实现兔子猎人守护城堡游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PythonPygame实现兔子猎人守护城堡游戏

效果图

守卫类游戏大家应该玩过吧,什么植物大战僵尸呀,保卫萝卜呀,今天我们自己用python来写一个自己的守护类小游戏兔子猎人守护城堡,让大家看看效果图。

主要代码

下面我来说一下是怎么得到的将代码分享一下给大家

首先得将要用到的库导入进来


import cfg
import math
import random
import pygame
from modules.Sprites import *
from modules.interfaces import *

游戏初始化

 初始化pygame, 设置展示窗口


pygame.init()
	pygame.mixer.init()
	screen = pygame.display.set_mode(cfg.SCREENSIZE)
	pygame.display.set_caption(' QQ群号: 932574150')

加载必要的游戏素材


game_images = {}
	for key, value in cfg.IMAGE_PATHS.items():
		game_images[key] = pygame.image.load(value)
	game_sounds = {}
	for key, value in cfg.SOUNDS_PATHS.items():
		if key != 'moonlight':
			game_sounds[key] = pygame.mixer.Sound(value)
	return screen, game_images, game_sounds

主函数

初始化


screen, game_images, game_sounds = initGame()

播放背景音乐


pygame.mixer.music.load(cfg.SOUNDS_PATHS['moonlight'])
	pygame.mixer.music.play(-1, 0.0)

加载字体


font = pygame.font.Font(None, 24)

定义兔子


bunny = BunnySprite(image=game_images.get('rabbit'), position=(100, 100))

跟踪玩家的精度变量, 记录了射出的箭头数和被击中的獾的数量.


acc_record = [0., 0.]

生命值


healthvalue = 194

弓箭


arrow_sprites_group = pygame.sprite.Group()


badguy_sprites_group = pygame.sprite.Group()
	badguy = BadguySprite(game_images.get('badguy'), position=(640, 100))
	badguy_sprites_group.add(badguy)

定义了一个定时器, 使得游戏里经过一段时间后就新建一支獾


badtimer = 100
	badtimer1 = 0

游戏主循环, running变量会跟踪游戏是否结束, exitcode变量会跟踪玩家是否胜利.


running, exitcode = True, False
	clock = pygame.time.Clock()
	while running:

在给屏幕画任何东西之前用黑色进行填充


screen.fill(0)

添加的风景也需要画在屏幕上


		for x in range(cfg.SCREENSIZE[0]//game_images['grass'].get_width()+1):
			for y in range(cfg.SCREENSIZE[1]//game_images['grass'].get_height()+1):
				screen.blit(game_images['grass'], (x*100, y*100))
		for i in range(4): screen.blit(game_images['castle'], (0, 30+105*i))

倒计时信息


countdown_text = font.render(str((90000-pygame.time.get_ticks())//60000)+":"+str((90000-pygame.time.get_ticks())//1000%60).zfill(2), True, (0, 0, 0))
		countdown_rect = countdown_text.get_rect()
		countdown_rect.topright = [635, 5]
		screen.blit(countdown_text, countdown_rect)

按键检测,退出与射击


		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				pygame.quit()
				sys.exit()
			elif event.type == pygame.MOUSEBUTTONDOWN:
				game_sounds['shoot'].play()
				acc_record[1] += 1
				mouse_pos = pygame.mouse.get_pos()
				angle = math.atan2(mouse_pos[1]-(bunny.rotated_position[1]+32), mouse_pos[0]-(bunny.rotated_position[0]+26))
				arrow = ArrowSprite(game_images.get('arrow'), (angle, bunny.rotated_position[0]+32, bunny.rotated_position[1]+26))
				arrow_sprites_group.add(arrow)

移动兔子


key_pressed = pygame.key.get_pressed()
		if key_pressed[pygame.K_w]:
			bunny.move(cfg.SCREENSIZE, 'up')
		elif key_pressed[pygame.K_s]:
			bunny.move(cfg.SCREENSIZE, 'down')
		elif key_pressed[pygame.K_a]:
			bunny.move(cfg.SCREENSIZE, 'left')
		elif key_pressed[pygame.K_d]:
			bunny.move(cfg.SCREENSIZE, 'right')

更新弓箭


		for arrow in arrow_sprites_group:
			if arrow.update(cfg.SCREENSIZE):
				arrow_sprites_group.remove(arrow)

更新獾


		if badtimer == 0:
			badguy = BadguySprite(game_images.get('badguy'), position=(640, random.randint(50, 430)))
			badguy_sprites_group.add(badguy)
			badtimer = 100 - (badtimer1 * 2)
			badtimer1 = 20 if badtimer1>=20 else badtimer1+2
		badtimer -= 1
		for badguy in badguy_sprites_group:
			if badguy.update():
				game_sounds['hit'].play()
				healthvalue -= random.randint(4, 8)
				badguy_sprites_group.remove(badguy)

碰撞检测


		for arrow in arrow_sprites_group:
			for badguy in badguy_sprites_group:
				if pygame.sprite.collide_mask(arrow, badguy):
					game_sounds['enemy'].play()
					arrow_sprites_group.remove(arrow)
					badguy_sprites_group.remove(badguy)
					acc_record[0] += 1

画出弓箭


arrow_sprites_group.draw(screen)

画出獾


badguy_sprites_group.draw(screen)

画出兔子


bunny.draw(screen, pygame.mouse.get_pos())

画出城堡健康值, 首先画了一个全红色的生命值条, 然后根据城堡的生命值往生命条里面添加绿色.


screen.blit(game_images.get('healthbar'), (5, 5))
		for i in range(healthvalue):
			screen.blit(game_images.get('health'), (i+8, 8))

判断游戏是否结束


		if pygame.time.get_ticks() >= 90000:
			running, exitcode = False, True
		if healthvalue <= 0:
			running, exitcode = False, False

更新屏幕


pygame.display.flip()
		clock.tick(cfg.FPS)

计算一下游戏的准确性


accuracy = acc_record[0] / acc_record[1] * 100 if acc_record[1] > 0 else 0
	accuracy = '%.2f' % accuracy
	showEndGameInterface(screen, exitcode, accuracy, game_images)

运行 


if __name__ == '__main__':
	main()

上面我将代码分散了,大家可以看一下整合一下就可以运行了 

到此这篇关于Python Pygame实现兔子猎人守护城堡游戏的文章就介绍到这了,更多相关Python Pygame游戏内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PythonPygame实现兔子猎人守护城堡游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录