栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爷青回|用Python制作【谷歌恐龙游戏】当你离线没网的时候,这将成为一种乐趣~

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爷青回|用Python制作【谷歌恐龙游戏】当你离线没网的时候,这将成为一种乐趣~

“恐龙游戏練”是对在谷歌浏览器中播放的名为“T-Rex Dino Run”的断开连接游戏的克隆改编。

是用Python编程语言开发的一个桌面应用程序,我会在末尾提供源码进行下载。

它和“T-Rex Dino Run”一样会有一个闯关记录。

这个缩小版游戏的主要目标是在不受任何障碍影响的情况下获得越来越多的焦点。所有的游戏策略都是等价的。客户端需要使用两个键盘键来玩这个基本游戏。

空格键弹跳和向下键往下滑。玩法基本一致。

文章目录
  • 这是创建步骤
  • 第 1 步:创建项目名称
  • 第 2 步:创建一个 python 文件
  • 第 3 步:命名你的 Python 文件
  • 第 4 步:实际代码
    • 导入 Pygame 模块
    • 导入随机模块
    • 游戏音效
    • 开始游戏
    • 游戏结束
    • 恐龙类
    • 仙人掌类
    • 鸟类
    • 加载地图
    • 云☁️
    • 计分板
    • 游戏功能区
  • 源码下载
  • 》》》CSDN直播课&解答群《《《
      • **》》》Python必备开发工具《《《**
      • **》》》精品Python学习书籍《《《**
      • **》》》Python学习视频合集《《《**
      • **》》》一百道Python练习题《《《**
    • 可添加微信,领取以上资料和直播、答疑辅导!

在开始之前,请确保你的电脑中安装了PyCharm IDE。

顺便说一下,如果你是Python编程的新手,你不知道什么是可以使用的Python IDE,我这里有一个适合你的零基础入门到精通的教程。可以添加CSDN官方微信免费获取:

这是创建步骤 第 1 步:创建项目名称

首先当你安装完Pycharm之后,我们需要创建一个项目

第 2 步:创建一个 python 文件

其次,创建完项目之后,选择你的项目,然后点击新建Python文件

第 3 步:命名你的 Python 文件

创建python文件后,在点击“输入”之后命名你的python文件

第 4 步:实际代码

这是关于如何在 Python 中创建Dino Game的实际编码 ,你可以自由复制此代码并下载下面给出的完整源代码。

导入 Pygame 模块

在下面的代码中,pygame 库是 Python 编程语言的开源模块,专门用于帮助你制作游戏和其他多媒体应用程序。Pygame 可以跨多种平台和操作系统运行。

import pygame
from pygame import *
导入随机模块

在下面的代码中。这是用于 random () 函数,它生成 0 和 1 之间的随机数。

import random
游戏音效

游戏中的音效和背景我们都在这行代码中实现

jump_sound = pygame.mixer.Sound('resources/jump.wav')
die_sound = pygame.mixer.Sound('resources/die.wav')
checkPoint_sound = pygame.mixer.Sound('resources/checkPoint.wav')
开始游戏

这是加载图像和颜色的功能

def load_image(
name,
sx=-1,
sy=-1,
colorkey=None,
):

fullname = os.path.join('resources', name)
img = pygame.image.load(fullname)
img = img.convert()
if colorkey is not None:
if colorkey == -1:
colorkey = img.get_at((0, 0))
img.set_colorkey(colorkey, RLEACCEL)

if sx != -1 or sy != -1:
img = pygame.transform.scale(img, (sx, sy))

return (img, img.get_rect())
游戏结束

这是游戏结束在屏幕窗口中显示消息的功能

def gameover_display_message(rbtn_image, gmo_image):
rbtn_rect = rbtn_image.get_rect()
rbtn_rect.centerx = width_screen / 2
rbtn_rect.top = height_screen * 0.52

gmo_rect = gmo_image.get_rect()
gmo_rect.centerx = width_screen / 2
gmo_rect.centery = height_screen * 0.35

screen_layout_display.blit(rbtn_image, rbtn_rect)
screen_layout_display.blit(gmo_image, gmo_rect)
恐龙类

恐龙是游戏中使用的角色,恐龙可以跳跃、眨眼和躲避,还可以移动。

class Dino():
def __init__(self, sx=-1, sy=-1):
self.imgs, self.rect = load_sprite_sheet('dino.png', 5, 1, sx, sy, -1)
self.imgs1, self.rect1 = load_sprite_sheet('dino_ducking.png', 2, 1, 59, sy, -1)
self.rect.bottom = int(0.98 * height_screen)
self.rect.left = width_screen / 15
self.image = self.imgs[0]
self.index = 0
self.counter = 0
self.score = 0
self.jumping = False
self.dead = False
self.ducking = False
self.blinking = False
self.movement = [0,0]
self.jumpSpeed = 11.5

self.stand_position_width = self.rect.width
self.duck_position_width = self.rect1.width

def draw(self):
screen_layout_display.blit(self.image, self.rect)

def checkbounds(self):
if self.rect.bottom > int(0.98 * height_screen):
self.rect.bottom = int(0.98 * height_screen)
self.jumping = False

def update(self):
if self.jumping:
self.movement[1] = self.movement[1] + gravity

if self.jumping:
self.index = 0
elif self.blinking:
if self.index == 0:
if self.counter % 400 == 399:
self.index = (self.index + 1)%2
else:
if self.counter % 20 == 19:
self.index = (self.index + 1)%2

elif self.ducking:
if self.counter % 5 == 0:
self.index = (self.index + 1)%2
else:
if self.counter % 5 == 0:
self.index = (self.index + 1)%2 + 2

if self.dead:
self.index = 4

if not self.ducking:
self.image = self.imgs[self.index]
self.rect.width = self.stand_position_width
else:
self.image = self.imgs1[(self.index) % 2]
self.rect.width = self.duck_position_width

self.rect = self.rect.move(self.movement)
self.checkbounds()

if not self.dead and self.counter % 7 == 6 and self.blinking == False:
self.score += 1
if self.score % 100 == 0 and self.score != 0:
if pygame.mixer.get_init() != None:
checkPoint_sound.play()

self.counter = (self.counter + 1)
仙人掌类

class Cactus(pygame.sprite.Sprite):
def __init__(self, speed=5, sx=-1, sy=-1):
pygame.sprite.Sprite.__init__(self,self.containers)
self.imgs, self.rect = load_sprite_sheet('cactus-small.png', 3, 1, sx, sy, -1)
self.rect.bottom = int(0.98 * height_screen)
self.rect.left = width_screen + self.rect.width
self.image = self.imgs[random.randrange(0, 3)]
self.movement = [-1*speed,0]

def draw(self):
screen_layout_display.blit(self.image, self.rect)

def update(self):
self.rect = self.rect.move(self.movement)

if self.rect.right < 0:
self.kill()
鸟类

class birds(pygame.sprite.Sprite):
def __init__(self, speed=5, sx=-1, sy=-1):
pygame.sprite.Sprite.__init__(self,self.containers)
self.imgs, self.rect = load_sprite_sheet('birds.png', 2, 1, sx, sy, -1)
self.birds_height = [height_screen * 0.82, height_screen * 0.75, height_screen * 0.60]
self.rect.centery = self.birds_height[random.randrange(0, 3)]
self.rect.left = width_screen + self.rect.width
self.image = self.imgs[0]
self.movement = [-1*speed,0]
self.index = 0
self.counter = 0

def draw(self):
screen_layout_display.blit(self.image, self.rect)

def update(self):
if self.counter % 10 == 0:
self.index = (self.index+1)%2
self.image = self.imgs[self.index]
self.rect = self.rect.move(self.movement)
self.counter = (self.counter + 1)
if self.rect.right < 0:
self.kill()
加载地图

class Ground(): def __init__(self,speed=-5): self.image,self.rect = load_image('ground.png',-1,-1,-1)       self.image1,self.rect1 = load_image('ground.png',-1,-1,-1)       self.rect.bottom = height_screen        self.rect1.bottom = height_screen       self.rect1.left = self.rect.right       self.speed = speed    def draw(self):        screen_layout_display.blit(self.image, self.rect)       screen_layout_display.blit(self.image1, self.rect1)   def update(self):      self.rect.left += self.speed       self.rect1.left += self.speed       if self.rect.right < 0:           self.rect.left = self.rect1.right      if self.rect1.right < 0:            self.rect1.left = self.rect.right
云☁️

class Cloud(pygame.sprite.Sprite):
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self,self.containers)
self.image,self.rect = load_image('cloud.png',int(90*30/42),30,-1)
self.speed = 1
self.rect.left = x
self.rect.top = y
self.movement = [-1*self.speed,0]

def draw(self):
screen_layout_display.blit(self.image, self.rect)

def update(self):
self.rect = self.rect.move(self.movement)
if self.rect.right < 0:
self.kill()
计分板

class Scoreboard():
def __init__(self,x=-1,y=-1):
self.score = 0
self.scre_img, self.screrect = load_sprite_sheet('numbers.png', 12, 1, 11, int(11 * 6 / 5), -1)
self.image = pygame.Surface((55,int(11*6/5)))
self.rect = self.image.get_rect()
if x == -1:
self.rect.left = width_screen * 0.89
else:
self.rect.left = x
if y == -1:
self.rect.top = height_screen * 0.1
else:
self.rect.top = y

def draw(self):
screen_layout_display.blit(self.image, self.rect)

def update(self,score):
score_digits = extractDigits(score)
self.image.fill(bg_color)
for s in score_digits:
self.image.blit(self.scre_img[s], self.screrect)
self.screrect.left += self.screrect.width
self.screrect.left = 0
游戏功能区
def gameplay():
global highest_scores
gp = 4
s_Menu = False
g_Over = False
g_exit = False
gamer_Dino = Dino(44,47)
new_grnd = Ground(-1*gp)
score_boards = Scoreboard()
highScore = Scoreboard(width_screen * 0.78)
counter = 0

cactusan = pygame.sprite.Group()
smallBird = pygame.sprite.Group()
skyClouds = pygame.sprite.Group()
last_end_obs = pygame.sprite.Group()

Cactus.containers = cactusan
birds.containers = smallBird
Cloud.containers = skyClouds

rbtn_image,rbtn_rect = load_image('replay_button.png',35,31,-1)
gmo_image,gmo_rect = load_image('game_over.png',190,11,-1)

t_images,t_rect = load_sprite_sheet('numbers.png',12,1,11,int(11*6/5),-1)
ado_image = pygame.Surface((22,int(11*6/5)))
ado_rect = ado_image.get_rect()
ado_image.fill(bg_color)
ado_image.blit(t_images[10],t_rect)
t_rect.left += t_rect.width
ado_image.blit(t_images[11],t_rect)
ado_rect.top = height_screen * 0.1
ado_rect.left = width_screen * 0.73

while not g_exit:
while s_Menu:
pass
while not g_Over:
if pygame.display.get_surface() == None:
print("Couldn't load display surface")
g_exit = True
g_Over = True
else:
for event in pygame.event.get():
if event.type == pygame.QUIT:
g_exit = True
g_Over = True

if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
if gamer_Dino.rect.bottom == int(0.98 * height_screen):
gamer_Dino.jumping = True
if pygame.mixer.get_init() != None:
jump_sound.play()
gamer_Dino.movement[1] = -1*gamer_Dino.jumpSpeed

if event.key == pygame.K_DOWN:
if not (gamer_Dino.jumping and gamer_Dino.dead):
gamer_Dino.ducking = True

if event.type == pygame.KEYUP:
if event.key == pygame.K_DOWN:
gamer_Dino.ducking = False
for c in cactusan:
c.movement[0] = -1*gp
if pygame.sprite.collide_mask(gamer_Dino,c):
gamer_Dino.dead = True
if pygame.mixer.get_init() != None:
die_sound.play()

for p in smallBird:
p.movement[0] = -1*gp
if pygame.sprite.collide_mask(gamer_Dino,p):
gamer_Dino.dead = True
if pygame.mixer.get_init() != None:
die_sound.play()

if len(cactusan) < 2:
if len(cactusan) == 0:
last_end_obs.empty()
last_end_obs.add(Cactus(gp,40,40))
else:
for l in last_end_obs:
if l.rect.right < width_screen*0.7 and random.randrange(0, 50) == 10:
last_end_obs.empty()
last_end_obs.add(Cactus(gp, 40, 40))

if len(smallBird) == 0 and random.randrange(0,200) == 10 and counter > 500:
for l in last_end_obs:
if l.rect.right < width_screen*0.8:
last_end_obs.empty()
last_end_obs.add(birds(gp, 46, 40))

if len(skyClouds) < 5 and random.randrange(0,300) == 10:
Cloud(width_screen, random.randrange(height_screen / 5, height_screen / 2))

gamer_Dino.update()
cactusan.update()
smallBird.update()
skyClouds.update()
new_grnd.update()
score_boards.update(gamer_Dino.score)
highScore.update(highest_scores)

if pygame.display.get_surface() != None:
screen_layout_display.fill(bg_color)
new_grnd.draw()
skyClouds.draw(screen_layout_display)
score_boards.draw()
if highest_scores != 0:
highScore.draw()
screen_layout_display.blit(ado_image, ado_rect)
cactusan.draw(screen_layout_display)
smallBird.draw(screen_layout_display)
gamer_Dino.draw()

pygame.display.update()
time_clock.tick(FPS)

if gamer_Dino.dead:
g_Over = True
if gamer_Dino.score > highest_scores:
highest_scores = gamer_Dino.score

if counter%700 == 699:
new_grnd.speed -= 1
gp += 1

counter = (counter + 1)

if g_exit:
break

while g_Over:
if pygame.display.get_surface() == None:
print("Couldn't load display surface")
g_exit = True
g_Over = False
else:
for event in pygame.event.get():
if event.type == pygame.QUIT:
g_exit = True
g_Over = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
g_exit = True
g_Over = False

if event.key == pygame.K_RETURN or event.key == pygame.K_SPACE:
g_Over = False
gameplay()
highScore.update(highest_scores)
if pygame.display.get_surface() != None:
gameover_display_message(rbtn_image, gmo_image)
if highest_scores != 0:
highScore.draw()
screen_layout_display.blit(ado_image, ado_rect)
pygame.display.update()
time_clock.tick(FPS)

pygame.quit()
quit()
源码下载

源码下载链接

》》》CSDN直播课&解答群《《《
**》》》Python学习路线汇总《《《**

》》》Python必备开发工具《《《

》》》精品Python学习书籍《《《

》》》Python学习视频合集《《《

》》》一百道Python练习题《《《

可添加微信,领取以上资料和直播、答疑辅导!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/657485.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号