基于Python實(shí)現(xiàn)天天酷跑功能
感覺上次寫的植物大戰(zhàn)僵尸與俄羅斯方塊的反應(yīng)還不錯(cuò),這次這個(gè)文章就更有動(dòng)力了
這次就寫一個(gè)天天酷跑吧
寫出來(lái)的效果圖就是這樣了
下面就更新一下全部的代碼吧
還是老樣子先定義
import pygame,sys import random
寫一下游戲配置
width = 1200 #窗口寬度 height = 508 #窗口高度 size = width, height score=None #分?jǐn)?shù) myFont=myFont1=None #字體 surObject=None #障礙物圖片 surGameOver=None #游戲結(jié)束圖片 bg=None #背景對(duì)象 role=None #人物對(duì)象 object=None #障礙物對(duì)象 objectList=[] #障礙物對(duì)象數(shù)組 clock=None #時(shí)鐘 gameState=None #游戲狀態(tài)(0,1)表示(游戲中,游戲結(jié)束)
寫人物
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代表跑步狀態(tài),1代表跳躍狀態(tài),2代表連續(xù)跳躍 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): #碰撞檢測(cè) 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 #分?jǐn)?shù)初始化 score=0 #初始化 objectList=[] #加載字體 myFont=pygame.font.Font("./freesansbold.ttf",32) myFont1=pygame.font.Font("./freesansbold.ttf",64) # 創(chuàng)建時(shí)鐘對(duì)象 (可以控制游戲循環(huán)頻率) clock = pygame.time.Clock() #初始化游戲狀態(tài) gameState=0 #游戲背景 surBg=pygame.image.load("image/bg.bmp").convert_alpha() bg=Bg(surBg) #結(jié)束畫面 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: #背景的移動(dòng) bg.dx+=10 if bg.dx==1200: bg.dx=0 #人物的移動(dòng) 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 #障礙物的移動(dòng) addObject() for object in objectList: object.x-=10 #障礙物移動(dòng) # 障礙物超出屏幕,移除障礙物 if object.x+object.w<=0: objectList.remove(object) score+=10 #避開障礙物,加10分 print("移除了一個(gè)目標(biāo)") #碰撞檢測(cè) if object.collision(role.getRect(),object.getRect()): if(object.currentFrame==6): objectList.remove(object) score+=100 #吃金幣加100分 print(score) print("吃了一個(gè)金幣") else: gameState=1 #游戲失敗 print("發(fā)生了碰撞!")
ok啦,這就是這個(gè)天天酷跑的全部代碼啦,有問題可以留言,我看到都會(huì)回的。
到此這篇關(guān)于基于Python實(shí)現(xiàn)天天酷跑功能的文章就介紹到這了,更多相關(guān)Python寫天天酷跑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python DataFrame 設(shè)置輸出不顯示index(索引)值的方法
今天小編就為大家分享一篇Python DataFrame 設(shè)置輸出不顯示index(索引)值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-06-06cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解
getStructuringElement()函數(shù)可用于構(gòu)造一個(gè)特定大小和形狀的結(jié)構(gòu)元素,用于圖像形態(tài)學(xué)處理,這篇文章主要介紹了cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解的相關(guān)資料,需要的朋友可以參考下2022-12-12利用pytorch實(shí)現(xiàn)對(duì)CIFAR-10數(shù)據(jù)集的分類
今天小編就為大家分享一篇利用pytorch實(shí)現(xiàn)對(duì)CIFAR-10數(shù)據(jù)集的分類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-01-01Python執(zhí)行時(shí)間的計(jì)算方法小結(jié)
這篇文章主要介紹了Python執(zhí)行時(shí)間的計(jì)算方法小結(jié)的相關(guān)資料,需要的朋友可以參考下2017-03-03python用類實(shí)現(xiàn)文章敏感詞的過濾方法示例
這篇文章主要介紹了python用類實(shí)現(xiàn)文章敏感詞的過濾方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10python中json.dumps()和json.loads()的用法
json.dumps()和json.loads()?json.dumps()用于將字典形式轉(zhuǎn)換為字符串,下面這篇文章主要給大家介紹了關(guān)于python中json.dumps()和json.loads()用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09基于Python實(shí)現(xiàn)西西成語(yǔ)接龍小助手
成語(yǔ)接龍是中華民族傳統(tǒng)的文字游戲。本文將用Python制作一個(gè)簡(jiǎn)單的成語(yǔ)接龍小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08