栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python项目

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python项目

兔子与獾
  • 第一章 作品概述
  • 第二章 作品设计
    • 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 程序框架

2.2作品使用的第三方库

本作品使用的第三方库包括pygame、math、random。

第三章 作品的实现 3.1作品框架 3.1.1 流程图

本作品实现的制作过程有10步如图3.1所示。

3.1.2 主要算法

用数组记录移动情况,if else进行判断。定义了一个定时器,使得游戏里经过一段时候就新建一个獾,循环更新獾的x坐标,检查獾是否超出屏幕范围,如果超出范围,将獾删掉。如果獾的坐标离左边小于64,就删除坏蛋并减少游戏里的健康值,减少的大小为5至20利的一个随机数。当然獾冲过来并且在碰到城堡的时候会消失。循环所有的坏蛋和所有的箭头来检查是否有碰撞,如果碰撞上,删除獾,删除箭头,并且精确度的变量加1。使用了PyGame内建功能来检查两个矩形是否交叉。
3.2作品实现要点

3.2.1 技术

采用了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)
可以点击下面链接下载:

**

兔子与獾下载链接

**

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929371.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号