如何用Python写一个天天酷跑

如何用Python写一个天天酷跑

大家好,今天给大家分享如何用python写一个天天酷跑。

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

640-277

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

还是老样子先定义

import pygame,sysimport random

写一下游戏配置

width = 1200            #窗口宽度height = 508            #窗口高度size = width, height   score=None              #分数myFont=myFont1=None     #字体surObject=None          #障碍物图片         surGameOver=None        #游戏结束图片bg=None                 #背景对象role=None               #人物对象object=None             #障碍物对象        objectList=[]           #障碍物对象数组clock=None              #时钟gameState=None          #游戏状态(0,1)表示(游戏中,游戏结束)

写人物

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

写障碍物

class Object:  #障碍物    def __init__(self,surface,x=0,y=0):        self.surface=surface        self.x=x        self.y=y        self.w=surface.get_width()        self.h=surface.get_height()        self.currentFrame=random.randint(0,6)        self.w = 100        self.h = 100    def getRect(self):        return (self.x,self.y,self.w,self.h)    def collision(self,rect1,rect2):        #碰撞检测        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):            return False        return True
 

写背景

class Bg:   #背景    def __init__(self,surface):        self.surface=surface        self.dx=-10        self.w=surface.get_width()        self.rect=surface.get_rect()
def initGame():            global bg,role,clock,gameState,surObject,surGameOver,score,myFont,myFont1,objectList    #分数初始化    score=0    #初始化    objectList=[]    #加载字体    myFont=pygame.font.Font("./freesansbold.ttf",32)    myFont1=pygame.font.Font("./freesansbold.ttf",64)       # 创建时钟对象 (可以控制游戏循环频率)    clock = pygame.time.Clock()    #初始化游戏状态    gameState=0    #游戏背景    surBg=pygame.image.load("image/bg.bmp").convert_alpha()    bg=Bg(surBg)    #结束画面    surGameOver=pygame.image.load("image/gameover.bmp").convert_alpha()    #人物图片    surRole=pygame.image.load("image/role.png").convert_alpha()      role=Role(surRole,508-85)    #障碍物图片    surObject=pygame.image.load("image/object.png").convert_alpha()  

def addObject():    global surObject,object,objectList,object    rate=4    #是否生成障碍物    if not random.randint(0,300)<rate:        return    y=random.choice([height-100,height-200,height-300,height-400])    object=Object(surObject,width+40,y)    objectList.append(object)

def updateLogic():    global gameState,score    #键盘事件处理    for event in pygame.event.get():        if event.type == pygame.QUIT:             sys.exit()        elif event.type==pygame.KEYDOWN:            #空格键跳跃            if gameState==0:                if event.key==pygame.K_SPACE:                    if role.state==0:                        role.state=1                        role.vy=role.vy_start                    elif role.state==1:                        role.state=2                        role.vy=role.vy_start            elif gameState==1:                if event.key==pygame.K_SPACE:                    #重新开始游戏                    initGame()                        if gameState==0:        #背景的移动           bg.dx+=10        if bg.dx==1200:            bg.dx=0                     #人物的移动          if role.state==0:                role.currentFrame+=1            if role.currentFrame==12:                role.currentFrame=0          else:            role.y+=role.vy            role.vy+=role.g             if role.y>=508-85:                role.y=508-85                role.state=0        #障碍物的移动        addObject()                for object in objectList:            object.x-=10     #障碍物移动            # 障碍物超出屏幕,移除障碍物            if object.x+object.w<=0:                objectList.remove(object)                score+=10    #避开障碍物,加10分                print("移除了一个目标")               #碰撞检测            if object.collision(role.getRect(),object.getRect()):                if(object.currentFrame==6):                    objectList.remove(object)                    score+=100  #吃金币加100分                    print(score)                    print("吃了一个金币")                else:                     gameState=1   #游戏失败                    print("发生了碰撞!")

ok啦,这就是这个天天酷跑的全部代码啦.