小恐龙快跑,不要被逮到拉~ python制作小恐龙游戏

打印 上一主题 下一主题

主题 556|帖子 556|积分 1668

前言

嗨喽~大家好呀,这里是魔王呐 !
 
 
这个小恐龙熟悉叭,相信你在摸鱼得时候玩过它~
这是谷歌流量器中很有名的彩蛋:当你网络出现问题时,就会出现一个“小恐龙游戏”。
当然你如果想要直接进行游戏,可以在地址栏输入:chrome://dino
那么今天我们得目的就是:用python来制作一个仿制的“小恐龙游戏”!
开发工具:

Python版本:3.6.4
相关模块:

pygame模块;以及一些python自带的模块。
如果安装python第三方模块:

  • win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install pygame) 回车
  • 在pycharm中点击Terminal(终端) 输入安装命令
准备素材

图片

 
 
音乐

 
 
代码

 
 
运行代码文件:Game7.py

导入模块
  1. import cfg
  2. import sys
  3. import random
  4. import pygame
  5. from modules.sprites.scene import *
  6. from modules.sprites.obstacle import *
  7. from modules.sprites.dinosaur import *
  8. from modules.interfaces.gameend import GameEndInterface
  9. from modules.interfaces.gamestart import GameStartInterface
  10. 需要源码、素材可加261823976
复制代码
 
  1.  
复制代码
游戏初始化
  1. '''main'''
  2. def main(highest_score):
  3.     pygame.init()
  4.     screen = pygame.display.set_mode(cfg.SCREENSIZE)
  5.     pygame.display.set_caption('T-Rex Rush —— 青灯教育 小恐龙')
复制代码
 
导入所有声音文件
  1.     sounds = {}
  2.     for key, value in cfg.AUDIO_PATHS.items():
  3.         sounds[key] = pygame.mixer.Sound(value)
复制代码
 
游戏开始界面
  1.     GameStartInterface(screen, sounds, cfg)
复制代码
 
定义一些游戏中必要的元素和变量
  1.     score = 0
  2.     score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR)
  3.     highest_score = highest_score
  4.     highest_score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True)
  5.     dino = Dinosaur(cfg.IMAGE_PATHS['dino'])
  6.     ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1]))
  7.     cloud_sprites_group = pygame.sprite.Group()
  8.     cactus_sprites_group = pygame.sprite.Group()
  9.     ptera_sprites_group = pygame.sprite.Group()
  10.     add_obstacle_timer = 0
  11.     score_timer = 0
复制代码
  
游戏主循环
  1.     clock = pygame.time.Clock()
  2.     while True:
  3.         for event in pygame.event.get():
  4.             if event.type == pygame.QUIT:
  5.                 pygame.quit()
  6.                 sys.exit()
  7.             elif event.type == pygame.KEYDOWN:
  8.                 if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
  9.                     dino.jump(sounds)
  10.                 elif event.key == pygame.K_DOWN:
  11.                     dino.duck()
  12.             elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:
  13.                 dino.unduck()
  14.         screen.fill(cfg.BACKGROUND_COLOR)
  15. 需要源码、素材可加261823976
复制代码
 
--随机添加云
  1.         if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:
  2.             cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))
复制代码
 
--随机添加仙人掌/飞龙
  1.         add_obstacle_timer += 1
  2.         if add_obstacle_timer > random.randrange(50, 150):
  3.             add_obstacle_timer = 0
  4.             random_value = random.randrange(0, 10)
  5.             if random_value >= 5 and random_value <= 7:
  6.                 cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))
  7.             else:
  8.                 position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20]
  9.                 ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))
复制代码
 
--碰撞检测
  1.         dino.update()
  2.         ground.update()
  3.         cloud_sprites_group.update()
  4.         cactus_sprites_group.update()
  5.         ptera_sprites_group.update()
  6.         score_timer += 1
  7.         if score_timer > (cfg.FPS//12):
  8.             score_timer = 0
  9.             score += 1
  10.             score = min(score, 99999)
  11.             if score > highest_score:
  12.                 highest_score = score
  13.             if score % 100 == 0:
  14.                 sounds['point'].play()
  15.             if score % 1000 == 0:
  16.                 ground.speed -= 1
  17.                 for item in cloud_sprites_group:
  18.                     item.speed -= 1
  19.                 for item in cactus_sprites_group:
  20.                     item.speed -= 1
  21.                 for item in ptera_sprites_group:
  22.                     item.speed -= 1
复制代码
 
--将游戏元素画到屏幕上
  1.         for item in cactus_sprites_group:
  2.             if pygame.sprite.collide_mask(dino, item):
  3.                 dino.die(sounds)
  4.         for item in ptera_sprites_group:
  5.             if pygame.sprite.collide_mask(dino, item):
  6.                 dino.die(sounds)
复制代码
 
--更新屏幕
  1.         dino.draw(screen)
  2.         ground.draw(screen)
  3.         cloud_sprites_group.draw(screen)
  4.         cactus_sprites_group.draw(screen)
  5.         ptera_sprites_group.draw(screen)
  6.         score_board.set(score)
  7.         highest_score_board.set(highest_score)
  8.         score_board.draw(screen)
  9.         highest_score_board.draw(screen)
  10. 需要源码、素材可加261823976
复制代码
 
--游戏是否结束
  1.         pygame.display.update()
  2.         clock.tick(cfg.FPS)
复制代码
 
游戏结束界面
  1.         if dino.is_dead:
  2.             break
复制代码
 
配置代码文件:cfg.py

导入模块
  1.     return GameEndInterface(screen, cfg), highest_score
  2. '''run'''
  3. if __name__ == '__main__':
  4.     highest_score = 0
  5.     while True:
  6.         flag, highest_score = main(highest_score)
  7.         if not flag: break
复制代码
 
屏幕大小
  1. import os
复制代码
 
FPS
  1. SCREENSIZE = (600, 150)
复制代码
 
音频素材路径
  1. FPS = 60
复制代码
 
图片素材路径
  1. AUDIO_PATHS = {
  2.     'die': os.path.join(os.getcwd(), 'resources/audios/die.wav'),
  3.     'jump': os.path.join(os.getcwd(), 'resources/audios/jump.wav'),
  4.     'point': os.path.join(os.getcwd(), 'resources/audios/point.wav')
  5. }
复制代码
  
背景颜色
  1. IMAGE_PATHS = {
  2.     'cacti': [os.path.join(os.getcwd(), 'resources/images/cacti-big.png'),
  3.               os.path.join(os.getcwd(), 'resources/images/cacti-small.png')],
  4.     'cloud': os.path.join(os.getcwd(), 'resources/images/cloud.png'),
  5.     'dino': [os.path.join(os.getcwd(), 'resources/images/dino.png'),
  6.              os.path.join(os.getcwd(), 'resources/images/dino_ducking.png')],
  7.     'gameover': os.path.join(os.getcwd(), 'resources/images/gameover.png'),
  8.     'ground': os.path.join(os.getcwd(), 'resources/images/ground.png'),
  9.     'numbers': os.path.join(os.getcwd(), 'resources/images/numbers.png'),
  10.     'ptera': os.path.join(os.getcwd(), 'resources/images/ptera.png'),
  11.     'replay': os.path.join(os.getcwd(), 'resources/images/replay.png')
  12. }
复制代码
 
效果

 
 
尾语

人的一生就像在攀登高峰,勤奋是你踏实稳健的双脚,
信念是你指引前行的向导,勇敢是你孜孜追寻的恒心。
开心日到了,愿你站稳双脚,确定方向,向着你的理想巅峰勇敢前行,
不用怕,未来就在你的脚下。
—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表