用Python一個天天酷跑(源碼附上)

来源:https://www.cnblogs.com/123456feng/archive/2022/03/24/16051295.html
-Advertisement-
Play Games

我還記得我讀高中的時候,班裡邊很多同學都在玩天天酷跑,那時候對天天酷跑特別沉迷。早上六點早讀,我可以晚上玩酷跑到半夜,現在不得不感嘆年輕真好。為了懷念過去的青春,今天來一篇酷跑教程。 寫出來的效果圖就是這樣了: 下麵就更新一下全部的代碼吧還是老樣子先定義 import pygame,sys impo ...


我還記得我讀高中的時候,班裡邊很多同學都在玩天天酷跑,那時候對天天酷跑特別沉迷。早上六點早讀,我可以晚上玩酷跑到半夜,現在不得不感嘆年輕真好。為了懷念過去的青春,今天來一篇酷跑教程。

 

 

寫出來的效果圖就是這樣了:

下麵就更新一下全部的代碼吧
還是老樣子先定義

import pygame,sys
import 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)表示(游戲中,游戲結束)

 

 

 

 

|#####Python學習交流Q群:906715085####

寫人物
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 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啦,這就是這個天天酷跑的全部代碼啦!!

所有的代碼到這裡就結束了,感覺自己腦海裡好像閃過了青春的樣子,這一篇到這裡就結束了,有問題可以告訴我。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文整理自 div 俠於 凹凸 2022 年技術分享,簡單介紹了 WebGL 畫一個基礎圖形的流程,希望你瞭解之後,在使用 3d 渲染庫的時候可以少點迷糊。 四種常用的頁面繪圖工具 關於h5頁面的圖形繪製,我們大多談及的是這四種工具:html+css,svg、canvas2d、webgl。 html ...
  • html的基礎 html(超文本標記語言),運行在瀏覽器端的靜態解釋型語言, JavaWeb基本概述 html的基本標簽 html html是解釋語言,瀏覽器容錯的,可以有錯誤,編譯器會自己解釋 網頁上看到的內容都是寫在裡面的 基本標簽 <!-- 1. html頁面中由一對標簽組成:<html></ ...
  • 一 、如何引路入less文件 1)使用官方插件 less.min.js 步驟一:插件下載地址:https://github.com/less/less.js 步驟二:下好插件後找到js文件路徑,如下圖: 步驟三:將less.min.js/less.js複製到項目js文件路徑下 步驟四:創建一個les ...
  • 從業軟體項目這麼多年,在企業應用開發項目中,項目能否成功,是否能按照項目計劃有效的推進,是有很強的一套項目管理理論。最早的時候,接觸的項目管理的方法論就是微軟的MSF(Microsoft Solutions Framework)。它是一個可以更快地成功交付技術解決方案的方法論,強調實施此項目方法需要 ...
  • 1 可靠性Reliability 容忍硬體故障、軟體失效、人為錯誤即使發生了錯誤,系統仍可用。針對可消除影響的故障類型。 硬體故障:硬體增加冗餘;軟體容錯容忍多機失效; 軟體失效: 特點:長期引而不發,特定條件觸發。 方案:全面考慮,充分測試,反覆評估,及時響應。 人為錯誤:簡化人為操作;分離易錯場 ...
  • 使用 sort() 或內建函數 sorted() 對列表進行排序。它們之間的區別有兩點: sort() 方法是對原列表進行操作,而 sorted() 方法會返回一個新列表,不是在原來的基礎上進行操作。 sort() 是應用在列表上的方法,而 sorted() 可以對所有可迭代的對象進行排序操作。 # ...
  • (JVM | 第2部分:虛擬機執行子系統) 前言 參考資料: 《深入理解 Java 虛擬機 - JVM 高級特性與最佳實踐》 第1部分主題為自動記憶體管理,以此延伸出 Java 記憶體區域與記憶體溢出、垃圾收集器與記憶體分配策略、參數配置與性能調優等相關內容; 第2部分主題為虛擬機執行子系統,以此延伸出 c ...
  • 需求:請輸出一個4行5列的星星(*)圖案。 結果: ***** ***** ***** ***** public class XunHuanQianTao { public static void main(String[] args) { //外層控制行數 內層控制列數 for(int x=0;x ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...