日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

恐龙跳一跳游戏python_python实现“跳跃的恐龙”这款游戏

發布時間:2024/9/19 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 恐龙跳一跳游戏python_python实现“跳跃的恐龙”这款游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看到python頭疼、學不進去。今天來一款輕松的游戲解解壓!

實現跳躍的恐龍,想到那些模塊呢?要做些什么呢?

1、畫個大致流程圖,構思怎么去實現這個項目

2實現代碼

# -*- coding:utf-8 -*-

import pygame # 將pygame庫導入到python程序中

from pygame.locals import * # 導入pygame中的常量

SCREENWIDTH = 822 # 窗口寬度

SCREENHEIGHT = 260 # 窗口高度

FPS = 30 # 更新畫面的時間

# 定義一個滾動地圖類

class MyMap():

def __init__(self, x, y):

# 加載背景圖片

self.bg = pygame.image.load("image/bg.png").convert_alpha()

self.x = x

self.y = y

def map_rolling(self):

if self.x < -790: # 小于-790說明地圖已經完全移動完畢

self.x = 800 # 給地圖一個新的坐標點

else:

self.x -= 5 # 5個像素向左移動

def map_update(self):

SCREEN.blit(self.bg, (self.x, self.y))

from itertools import cycle # 導入迭代工具

# 恐龍類

class Dinosaur():

def __init__(self):

# 初始化小恐龍矩形

self.rect = pygame.Rect(0, 0, 0, 0)

self.jumpState = False # 跳躍的狀態

self.jumpHeight = 130 # 跳躍的高度

self.lowest_y = 140 # 最低坐標

self.jumpValue = 0 # 跳躍增變量

# 小恐龍動圖索引

self.dinosaurIndex = 0

self.dinosaurIndexGen = cycle([0, 1, 2])

# 加載小恐龍圖片

self.dinosaur_img = (

pygame.image.load("image/dinosaur1.png").convert_alpha(),

pygame.image.load("image/dinosaur2.png").convert_alpha(),

pygame.image.load("image/dinosaur3.png").convert_alpha(),

)

self.jump_audio = pygame.mixer.Sound(‘audio/jump.wav‘) # 跳

self.rect.size = self.dinosaur_img[0].get_size()

self.x = 50; # 繪制恐龍的X坐標

self.y = self.lowest_y; # 繪制恐龍的Y坐標

self.rect.topleft = (self.x, self.y)

# 跳狀態

def jump(self):

self.jumpState = True

# 小恐龍移動

def move(self):

if self.jumpState: # 當起跳的時候

if self.rect.y >= self.lowest_y: # 如果站在地上

self.jumpValue = -5 # 以5個像素值向上移動

if self.rect.y <= self.lowest_y - self.jumpHeight: # 恐龍到達頂部回落

self.jumpValue = 5 # 以5個像素值向下移動

self.rect.y += self.jumpValue # 通過循環改變恐龍的Y坐標

if self.rect.y >= self.lowest_y: # 如果恐龍回到地面

self.jumpState = False # 關閉跳躍狀態

# 繪制恐龍

def draw_dinosaur(self):

# 匹配恐龍動圖

dinosaurIndex = next(self.dinosaurIndexGen)

# 繪制小恐龍

SCREEN.blit(self.dinosaur_img[dinosaurIndex],

(self.x, self.rect.y))

import random # 隨機數

# 障礙物類

class Obstacle():

score = 1 # 分數

def __init__(self):

# 初始化障礙物矩形

self.rect = pygame.Rect(0, 0, 0, 0)

# 加載障礙物圖片

self.stone = pygame.image.load("image/stone.png").convert_alpha()

self.cacti = pygame.image.load("image/cacti.png").convert_alpha()

# 加載分數圖片

self.numbers = (pygame.image.load(‘image/0.png‘).convert_alpha(),

pygame.image.load(‘image/1.png‘).convert_alpha(),

pygame.image.load(‘image/2.png‘).convert_alpha(),

pygame.image.load(‘image/3.png‘).convert_alpha(),

pygame.image.load(‘image/4.png‘).convert_alpha(),

pygame.image.load(‘image/5.png‘).convert_alpha(),

pygame.image.load(‘image/6.png‘).convert_alpha(),

pygame.image.load(‘image/7.png‘).convert_alpha(),

pygame.image.load(‘image/8.png‘).convert_alpha(),

pygame.image.load(‘image/9.png‘).convert_alpha())

# 加載加分音效

self.score_audio = pygame.mixer.Sound(‘audio/score.wav‘) # 加分

# 0和1隨機數

r = random.randint(0, 1)

if r == 0: # 如果隨機數為0顯示石頭障礙物相反顯示仙人掌

self.image = self.stone

else:

self.image = self.cacti

# 根據障礙物位圖的寬高來設置矩形

self.rect.size = self.image.get_size()

# 獲取位圖寬高

self.width, self.height = self.rect.size

# 障礙物繪制坐標

self.x = 800;

self.y = 200 - (self.height / 2)

self.rect.center = (self.x, self.y)

# 障礙物移動

def obstacle_move(self):

self.rect.x -= 5

# 繪制障礙物

def draw_obstacle(self):

SCREEN.blit(self.image, (self.rect.x, self.rect.y))

# 獲取分數

def getScore(self):

self.score

tmp = self.score;

if tmp == 1:

self.score_audio.play() # 播放加分音樂

self.score = 0;

return tmp;

# 顯示分數

def showScore(self, score):

"""在窗體頂部中間的位置顯示分數"""

self.scoreDigits = [int(x) for x in list(str(score))]

totalWidth = 0 # 要顯示的所有數字的總寬度

for digit in self.scoreDigits:

# 獲取積分圖片的寬度

totalWidth += self.numbers[digit].get_width()

# 分數橫向位置

Xoffset = (SCREENWIDTH - totalWidth) / 2

for digit in self.scoreDigits:

# 繪制分數

SCREEN.blit(self.numbers[digit], (Xoffset, SCREENHEIGHT * 0.1))

# 隨著數字增加改變位置

Xoffset += self.numbers[digit].get_width()

# 游戲結束的方法

def game_over():

bump_audio = pygame.mixer.Sound(‘audio/bump.wav‘) # 撞擊

bump_audio.play() # 播放撞擊音效

# 獲取窗體寬、高

screen_w = pygame.display.Info().current_w

screen_h = pygame.display.Info().current_h

# 加載游戲結束的圖片

over_img = pygame.image.load(‘image/gameover.png‘).convert_alpha()

# 將游戲結束的圖片繪制在窗體的中間位置

SCREEN.blit(over_img, ((screen_w - over_img.get_width()) / 2,

(screen_h - over_img.get_height()) / 2))

def mainGame():

score = 0 # 得分

over = False

global SCREEN, FPSCLOCK

pygame.init() # 經過初始化以后我們就可以盡情地使用pygame了。

# 使用Pygame時鐘之前,必須先創建Clock對象的一個實例,

# 控制每個循環多長時間運行一次。

FPSCLOCK = pygame.time.Clock()

SCREEN = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT)) # 通常來說我們需要先創建一個窗口,方便我們與程序的交互。

pygame.display.set_caption(‘小恐龍‘) # 設置窗口標題

# 創建地圖對象

bg1 = MyMap(0, 0)

bg2 = MyMap(800, 0)

# 創建恐龍對象

dinosaur = Dinosaur()

addObstacleTimer = 0 # 添加障礙物的時間

list = [] # 障礙物對象列表

while True:

# 判斷是否單擊了關閉窗口

for event in pygame.event.get():

# 如果單擊了關閉窗口就將窗口關閉

if event.type == QUIT:

exit() # 關閉窗口

# 單擊鍵盤空格鍵,開啟跳的狀態

if event.type == KEYDOWN and event.key == K_SPACE:

if dinosaur.rect.y >= dinosaur.lowest_y: # 如果恐龍在地面上

dinosaur.jump() # 開啟恐龍跳的狀態

dinosaur.jump_audio.play() # 播放小恐龍跳躍音效

if over == True: # 判斷游戲結束的開關是否開啟

mainGame() # 如果開啟將調用mainGame方法重新啟動游戲

if over == False:

# 繪制地圖起到更新地圖的作用

bg1.map_update()

# 地圖移動

bg1.map_rolling()

bg2.map_update()

bg2.map_rolling()

# 恐龍移動

dinosaur.move()

# 繪制恐龍

dinosaur.draw_dinosaur()

# 計算障礙物間隔時間

if addObstacleTimer >= 1300:

r = random.randint(0, 100)

if r > 40:

# 創建障礙物對象

obstacle = Obstacle()

# 將障礙物對象添加到列表中

list.append(obstacle)

# 重置添加障礙物時間

addObstacleTimer = 0

# 循環遍歷障礙物

for i in range(len(list)):

# 障礙物移動

list[i].obstacle_move()

# 繪制障礙物

list[i].draw_obstacle()

# 判斷恐龍與障礙物是否碰撞

if pygame.sprite.collide_rect(dinosaur, list[i]):

over = True # 碰撞后開啟結束開關

game_over() # 調用游戲結束的方法

else:

# 判斷小恐龍是否躍過了障礙物

if (list[i].rect.x + list[i].rect.width) < dinosaur.rect.x:

# 加分

score += list[i].getScore()

# 顯示分數

list[i].showScore(score)

addObstacleTimer += 20 # 增加障礙物時間

pygame.display.update() # 更新整個窗口

FPSCLOCK.tick(FPS) # 循環應該多長時間運行一次

if __name__ == ‘__main__‘:

mainGame()

總結

以上是生活随笔為你收集整理的恐龙跳一跳游戏python_python实现“跳跃的恐龙”这款游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。