Python小恐龍快跑小游戲源代碼及素材


該游戲是仿谷歌瀏覽器小恐龍游戲,程序運行入口Game7.py,配置文件:cfg.py,完整程序包及資源包請在本文文末下載,先上程序運行截圖:

 

 

 

 

 

Game7.py
'''
Function:
  仿谷歌瀏覽器小恐龍游戲
微信公眾號:
  學創英才
'''
import cfg
import sys
import random
import pygame
from modules.sprites.scene import *
from modules.sprites.obstacle import *
from modules.sprites.dinosaur import *
from modules.interfaces.gameend import GameEndInterface
from modules.interfaces.gamestart import GameStartInterface


'''main'''
def main(highest_score):
  # 游戲初始化
  pygame.init()
  screen = pygame.display.set_mode(cfg.SCREENSIZE)
  pygame.display.set_caption('小恐龍快跑-學創英才')
  # 導入所有聲音文件
  sounds = {}
  for key, value in cfg.AUDIO_PATHS.items():
    sounds[key] = pygame.mixer.Sound(value)
  # 游戲開始界面
  GameStartInterface(screen, sounds, cfg)
  # 定義一些游戲中必要的元素和變量
  score = 0
  score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR)
  highest_score = highest_score
  highest_score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True)
  dino = Dinosaur(cfg.IMAGE_PATHS['dino'])
  ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1]))
  cloud_sprites_group = pygame.sprite.Group()
  cactus_sprites_group = pygame.sprite.Group()
  ptera_sprites_group = pygame.sprite.Group()
  add_obstacle_timer = 0
  score_timer = 0
  # 游戲主循環
  clock = pygame.time.Clock()
  while True:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
      elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
          dino.jump(sounds)
        elif event.key == pygame.K_DOWN:
          dino.duck()
      elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:
        dino.unduck()
    screen.fill(cfg.BACKGROUND_COLOR)
    # --隨機添加雲
    if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:
      cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))
    # --隨機添加仙人掌/飛龍
    add_obstacle_timer += 1
    if add_obstacle_timer > random.randrange(50, 150):
      add_obstacle_timer = 0
      random_value = random.randrange(0, 10)
      if random_value >= 5 and random_value <= 7:
        cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))
      else:
        position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20]
        ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))
    # --更新游戲元素
    dino.update()
    ground.update()
    cloud_sprites_group.update()
    cactus_sprites_group.update()
    ptera_sprites_group.update()
    score_timer += 1
    if score_timer > (cfg.FPS//12):
      score_timer = 0
      score += 1
      score = min(score, 99999)
      if score > highest_score:
        highest_score = score
      if score % 100 == 0:
        sounds['point'].play()
      if score % 1000 == 0:
        ground.speed -= 1
        for item in cloud_sprites_group:
          item.speed -= 1
        for item in cactus_sprites_group:
          item.speed -= 1
        for item in ptera_sprites_group:
          item.speed -= 1
    # --碰撞檢測
    for item in cactus_sprites_group:
      if pygame.sprite.collide_mask(dino, item):
        dino.die(sounds)
    for item in ptera_sprites_group:
      if pygame.sprite.collide_mask(dino, item):
        dino.die(sounds)
    # --將游戲元素畫到屏幕上
    dino.draw(screen)
    ground.draw(screen)
    cloud_sprites_group.draw(screen)
    cactus_sprites_group.draw(screen)
    ptera_sprites_group.draw(screen)
    score_board.set(score)
    highest_score_board.set(highest_score)
    score_board.draw(screen)
    highest_score_board.draw(screen)
    # --更新屏幕
    pygame.display.update()
    clock.tick(cfg.FPS)
    # --游戲是否結束
    if dino.is_dead:
      break
  # 游戲結束界面
  return GameEndInterface(screen, cfg), highest_score


'''run'''
if __name__ == '__main__':
  highest_score = 0
  while True:
    flag, highest_score = main(highest_score)
    if not flag: break
cfg.py
'''配置文件'''
import os


'''屏幕大小'''
SCREENSIZE = (600, 150)
'''FPS'''
FPS = 60
'''音頻素材路徑'''
AUDIO_PATHS = {
  'die': os.path.join(os.getcwd(), 'resources/audios/die.wav'),
  'jump': os.path.join(os.getcwd(), 'resources/audios/jump.wav'),
  'point': os.path.join(os.getcwd(), 'resources/audios/point.wav')
}
'''圖片素材路徑'''
IMAGE_PATHS = {
  'cacti': [os.path.join(os.getcwd(), 'resources/images/cacti-big.png'),
        os.path.join(os.getcwd(), 'resources/images/cacti-small.png')],
  'cloud': os.path.join(os.getcwd(), 'resources/images/cloud.png'),
  'dino': [os.path.join(os.getcwd(), 'resources/images/dino.png'),
       os.path.join(os.getcwd(), 'resources/images/dino_ducking.png')],
  'gameover': os.path.join(os.getcwd(), 'resources/images/gameover.png'),
  'ground': os.path.join(os.getcwd(), 'resources/images/ground.png'),
  'numbers': os.path.join(os.getcwd(), 'resources/images/numbers.png'),
  'ptera': os.path.join(os.getcwd(), 'resources/images/ptera.png'),
  'replay': os.path.join(os.getcwd(), 'resources/images/replay.png')
}
'''背景顏色'''
BACKGROUND_COLOR = (235, 235, 235)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

歡迎關注公眾號:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM