用Python写一个天天酷跑

举报
Python小二 发表于 2022/03/23 22:42:29 2022/03/23
【摘要】 写出来的效果图就是这样了: 下面就更新一下全部的代码吧 还是老样子先定义 import pygame,sysimport random 写一下游戏配置 width = 1200        &nb...

写出来的效果图就是这样了:

3ec4e13154ff866aefac575fa77d8b82.png

下面就更新一下全部的代码吧

还是老样子先定义


   
  1. import pygame,sys
  2. import random

写一下游戏配置


   
  1. width = 1200            #窗口宽度
  2. height = 508            #窗口高度
  3. size = width, height   
  4. score=None              #分数
  5. myFont=myFont1=None     #字体
  6. surObject=None          #障碍物图片         
  7. surGameOver=None        #游戏结束图片
  8. bg=None                 #背景对象
  9. role=None               #人物对象
  10. object=None             #障碍物对象        
  11. objectList=[]           #障碍物对象数组
  12. clock=None              #时钟
  13. gameState=None          #游戏状态(01)表示(游戏中,游戏结束)

写人物


   
  1. class Role: #人物
  2.     def __init__(self,surface=None,y=None):
  3.         self.surface=surface
  4.         self.y=y
  5.         self.w=(surface.get_width())/12
  6.         self.h=surface.get_height()/2
  7.         self.currentFrame=-1
  8.         self.state=0        #0代表跑步状态,1代表跳跃状态,2代表连续跳跃
  9.         self.g=1            #重力加速度
  10.         self.vy=0           #y轴速度       
  11.         self.vy_start=-20   #起跳开始速度
  12.     def getRect(self):
  13.         return (0,self.y+12,self.w,self.h)

写障碍物


   
  1. class Object:  #障碍物
  2.     def __init__(self,surface,x=0,y=0):
  3.         self.surface=surface
  4.         self.x=x
  5.         self.y=y
  6.         self.w=surface.get_width()
  7.         self.h=surface.get_height()
  8.         self.currentFrame=random.randint(0,6)
  9.         self.w = 100
  10.         self.h = 100
  11.     def getRect(self):
  12.         return (self.x,self.y,self.w,self.h)
  13.     def collision(self,rect1,rect2):
  14.         #碰撞检测
  15.         if (rect2[0]>=rect1[2]-20) or (rect1[0]+40>=rect2[2])or (rect1[1]+rect1[3]<rect2[1]+20) or (rect2[1]+rect2[3]<rect1[1]+20):
  16.             return False
  17.         return True

写背景


   
  1. class Bg:   #背景
  2.     def __init__(self,surface):
  3.         self.surface=surface
  4.         self.dx=-10
  5.         self.w=surface.get_width()
  6.         self.rect=surface.get_rect()

   
  1. def initGame():
  2.         
  3.     global bg,role,clock,gameState,surObject,surGameOver,score,myFont,myFont1,objectList
  4.     #分数初始化
  5.     score=0
  6.     #初始化
  7.     objectList=[]
  8.     #加载字体
  9.     myFont=pygame.font.Font("./freesansbold.ttf",32)
  10.     myFont1=pygame.font.Font("./freesansbold.ttf",64)   
  11.     # 创建时钟对象 (可以控制游戏循环频率)
  12.     clock = pygame.time.Clock()
  13.     #初始化游戏状态
  14.     gameState=0
  15.     #游戏背景
  16.     surBg=pygame.image.load("image/bg.bmp").convert_alpha()
  17.     bg=Bg(surBg)
  18.     #结束画面
  19.     surGameOver=pygame.image.load("image/gameover.bmp").convert_alpha()
  20.     #人物图片
  21.     surRole=pygame.image.load("image/role.png").convert_alpha()  
  22.     role=Role(surRole,508-85)
  23.     #障碍物图片
  24.     surObject=pygame.image.load("image/object.png").convert_alpha()  
  25. def addObject():
  26.     global surObject,object,objectList,object
  27.     rate=4
  28.     #是否生成障碍物
  29.     if not random.randint(0,300)<rate:
  30.         return
  31.     y=random.choice([height-100,height-200,height-300,height-400])
  32.     object=Object(surObject,width+40,y)
  33.     objectList.append(object)
  34. def updateLogic():
  35.     global gameState,score
  36.     #键盘事件处理
  37.     for event in pygame.event.get():
  38.         if event.type == pygame.QUIT:
  39.              sys.exit()
  40.         elif event.type==pygame.KEYDOWN:
  41.             #空格键跳跃
  42.             if gameState==0:
  43.                 if event.key==pygame.K_SPACE:
  44.                     if role.state==0:
  45.                         role.state=1
  46.                         role.vy=role.vy_start
  47.                     elif role.state==1:
  48.                         role.state=2
  49.                         role.vy=role.vy_start
  50.             elif gameState==1:
  51.                 if event.key==pygame.K_SPACE:
  52.                     #重新开始游戏
  53.                     initGame()
  54.                     
  55.     if gameState==0:
  56.         #背景的移动   
  57.         bg.dx+=10
  58.         if bg.dx==1200:
  59.             bg.dx=0 
  60.             
  61.         #人物的移动  
  62.         if role.state==0:    
  63.             role.currentFrame+=1
  64.             if role.currentFrame==12:
  65.                 role.currentFrame=0  
  66.         else:
  67.             role.y+=role.vy
  68.             role.vy+=role.g 
  69.             if role.y>=508-85:
  70.                 role.y=508-85
  71.                 role.state=0
  72.         #障碍物的移动
  73.         addObject()
  74.         
  75.         for object in objectList:
  76.             object.x-=10     #障碍物移动
  77.             # 障碍物超出屏幕,移除障碍物
  78.             if object.x+object.w<=0:
  79.                 objectList.remove(object)
  80.                 score+=10    #避开障碍物,加10
  81.                 print("移除了一个目标")   
  82.             #碰撞检测
  83.             if object.collision(role.getRect(),object.getRect()):
  84.                 if(object.currentFrame==6):
  85.                     objectList.remove(object)
  86.                     score+=100  #吃金币加100
  87.                     print(score)
  88.                     print("吃了一个金币")
  89.                 else
  90.                     gameState=1   #游戏失败
  91.                     print("发生了碰撞!")

ok啦,这就是这个天天酷跑的全部代码啦,有问题可以留言,我看到都会回的。

如果本文对你有帮助的话,欢迎点赞&在看&分享,这对我继续分享&创作优质文章非常重要。感谢🙏🏻

文章来源: ityard.blog.csdn.net,作者:Python小二,版权归原作者所有,如需转载,请联系作者。

原文链接:ityard.blog.csdn.net/article/details/123675693

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。