- 第一章 作品概述
- 第二章 作品设计
- 2.1作品的构思
- 2.1.1 起源
- 2.1.2 总体架构
- 2.2作品使用的第三方库
- 第三章 作品的实现
- 3.1作品框架
- 3.1.1 流程图
- 3.1.2 主要算法
- 3.2.1 技术
- 3.2.2 核心代码
- 可以点击下面链接下载:
- 兔子与獾下载链接
摘要:本作品主要实现了角色移动、射击,物体碰撞,时间血量的显示。采用了pygame模块技术,系统能使角色自由移动射击,击败獾怪,保护堡垒。
第一章 作品概述 1
第二章 作品设计 2
2.1作品的构思 2
2.1.1 起源 2
2.1.2 总体架构 2
2.2作品使用的第三方库 2
第三章 作品的实现 3
3.1作品框架 3
3.1.1 流程图 3
3.1.2 主要算法 3
3.2作品实现要点 3
3.2.1 技术 3
3.2.2 核心代码 4
本作品-兔子与獾,兔子移动射击,击败獾怪,保护堡垒,坚持90秒获得胜利。
第二章 作品设计 2.1作品的构思 2.1.1 起源本作品灵感来自于小时候常玩的游戏-魂动罗,在其基础添加了保护堡垒的环节,兔子移动射击,击败獾怪,保护堡垒,坚持90秒获得胜利。
2.1.2 总体架构本作品-兔子与獾总体框架如图2.1所示。
图2.1 程序框架
本作品使用的第三方库包括pygame、math、random。
第三章 作品的实现 3.1作品框架 3.1.1 流程图本作品实现的制作过程有10步如图3.1所示。
用数组记录移动情况,if else进行判断。定义了一个定时器,使得游戏里经过一段时候就新建一个獾,循环更新獾的x坐标,检查獾是否超出屏幕范围,如果超出范围,将獾删掉。如果獾的坐标离左边小于64,就删除坏蛋并减少游戏里的健康值,减少的大小为5至20利的一个随机数。当然獾冲过来并且在碰到城堡的时候会消失。循环所有的坏蛋和所有的箭头来检查是否有碰撞,如果碰撞上,删除獾,删除箭头,并且精确度的变量加1。使用了PyGame内建功能来检查两个矩形是否交叉。
3.2作品实现要点
采用了pygame模块技术,加载场景资源。采用了math库,获取鼠标和玩家的位置,然后获取通过atan2函数得出的角度和弧度。采用了random库,随机删除5~20点血量。
3.2.2 核心代码兔子移动
#keys用来记录按键情况:WASD(依次对应) keys = [False, False, False, False] #playerpos表示玩家位置 playerpos=[100,100] #根据按下来的键来更新按键记录数组
if event.type == pygame.KEYDOWN:
if event.key==K_w:
keys[0]=True
elif event.key==K_a:
keys[1]=True
elif event.key==K_s:
keys[2]=True
elif event.key==K_d:
keys[3]=True
if event.type == pygame.KEYUP:
if event.key==pygame.K_w:
keys[0]=False
elif event.key==pygame.K_a:
keys[1]=False
elif event.key==pygame.K_s:
keys[2]=False
elif event.key==pygame.K_d:
keys[3]=False
#移动玩家
if keys[0]:
playerpos[1]-=5
elif keys[2]:
playerpos[1]+=5
if keys[1]:
playerpos[0]-=5
elif keys[3]:
playerpos[0]+=5
獾,拿上武器
#定义了一个定时器,使得游戏里经过一段时候就新建一个獾
badtimer=100 badtimer1=0 badguys=[[640,100]] healthvalue=1000
#更新并显示这些坏蛋 #检查badtimer是否为0,如果为0,创建一个獾然后重新设置badtimer。 #第一循环更新獾的x坐标,检查獾是否超出屏幕范围,如果超出范围,将獾删掉。 #第二个循环是来画出所有的獾。
if badtimer==0:
badguys.append([640, random.randint(50,430)])
badtimer=100-(badtimer1*2)
if badtimer1>=35:
badtimer1=35
else:
badtimer1+=5
index=0
for badguy in badguys:
if badguy[0]<-64:
badguys.pop(index)
badguy[0]-=7
#獾可以炸掉城堡 #如果獾的坐标离左边小于64, #就删除坏蛋并减少游戏里的健康值,减少的大小为5至20利的一个随机数。 #当然獾冲过来并且在碰到城堡的时候会消失
badrect=pygame.Rect(badguyimg.get_rect())
badrect.top=badguy[1]
badrect.left=badguy[0]
if badrect.left<64:
hit.play()
healthvalue -= random.randint(5,20)
badguys.pop(index)
碰撞事件
#循环所有的坏蛋和所有的箭头来检查是否有碰撞。
#如果碰撞上,删除獾,删除箭头,并且精确度的变量加1
#使用了PyGame内建功能来检查两个矩形是否交叉。
index1=0
for bullet in arrows:
bullrect=pygame.Rect(arrow.get_rect())
bullrect.left=bullet[1]
bullrect.top=bullet[2]
if badrect.colliderect(bullrect):
enemy.play()
acc[0]+=1
badguys.pop(index)
arrows.pop(index1)
index1+=1
判断输赢
#下面是一些胜利与失败的基本条件:
#如果到了90秒,那么停止运行游戏,设置游戏的输出。
#如果城堡被毁,那么停止运行游戏,设置游戏的输出。
#精确度是一直都需要计算的。
#第一个if表达式是检查是否时间到了。
#第二个是检查城堡是否被摧毁了。
#第三个计算你的精确度。
#最后那个是检查你是赢了还是输了,然后显示出相对应的图片。
if pygame.time.get_ticks()>=90000:
running=0
exitcode=1
if healthvalue<=0:
running=0
exitcode=0
if acc[1]!=0:
accuracy=acc[0]*1.0/acc[1]*100
else:
accuracy=0
if exitcode==0:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(accuracy)+"%", True, (255,0,0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(gameover, (0,0))
screen.blit(text, textRect)
else:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(accuracy)+"%", True, (0,255,0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(youwin, (0,0))
screen.blit(text, textRect)
可以点击下面链接下载:
**
兔子与獾下载链接**



