Python小游戏(404小恐龙)
【摘要】
玩法:上下控制起跳躲避
源码分享:
import cfgimport sysimport randomimport pygamefrom modules import * '''main'''def main(highest_score): # 游戏初始化 pygame.init() screen = py...
玩法:上下控制起跳躲避
源码分享:
-
-
import cfg
-
import sys
-
import random
-
import pygame
-
from modules import *
-
-
-
'''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
祝大家玩得开心,欢迎点赞、关注、评论,欢迎一健三联。
文章来源: laoshifu.blog.csdn.net,作者:红目香薰,版权归原作者所有,如需转载,请联系作者。
原文链接:laoshifu.blog.csdn.net/article/details/120425258
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)