视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python小游戏源代码
2025-09-25 21:26:27 责编:小OO
文档
python小游戏源代码

吃金币小游戏源码分享:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115import os

import cfg

import sys

import pygame

import random

from modules import *

  

  

'''游戏初始化'''

def initGame():

    # 初始化pygame, 设置展示窗口

    pygame.init()

    screen = pygame.display.set_mode(cfg.SCREENSIZE)

    pygame.display.set_caption('catch coins —— 九歌')

    # 加载必要的游戏素材

    game_images = {}

    for key, value in cfg.IMAGE_PATHS.items():

        if isinstance(value, list):

            images = []

            for item in value: images.append(pygame.image.load(item))

            game_images[key] = images

        else:

            game_images[key] = pygame.image.load(value)

    game_sounds = {}

    for key, value in cfg.AUDIO_PATHS.items():

        if key == 'bgm': continue

        game_sounds[key] = pygame.mixer.Sound(value)

    # 返回初始化数据

    return screen, game_images, game_sounds

  

  

'''主函数'''

def main():

    # 初始化

    screen, game_images, game_sounds = initGame()

    # 播放背景音乐

    pygame.mixer.music.load(cfg.AUDIO_PATHS['bgm'])

    pygame.mixer.music.play(-1, 0.0)

    # 字体加载

    font = pygame.font.Font(cfg.FONT_PATH, 40)

    # 定义hero

    hero = Hero(game_images['hero'], position=(375, 520))

    # 定义食物组

    food_sprites_group = pygame.sprite.Group()

    generate_food_freq = random.randint(10, 20)

    generate_food_count = 0

    # 当前分数/历史最高分

    score = 0

    highest_score = 0 if not os.path.exists(cfg.HIGHEST_SCORE_RECORD_FILEPATH) else int(open(cfg.HIGHEST_SCORE_RECORD_FILEPATH).read())

    # 游戏主循环

    clock = pygame.time.Clock()

    while True:

        # --填充背景

        screen.fill(0)

        screen.blit(game_images['background'], (0, 0))

        # --倒计时信息

        countdown_text = 'Count down: ' + str((90000 - pygame.time.get_ticks()) // 60000) + ":" + str((90000 - pygame.time.get_ticks()) // 1000 % 60).zfill(2)

        countdown_text = font.render(countdown_text, True, (0, 0, 0))

        countdown_rect = countdown_text.get_rect()

        countdown_rect.topright = [cfg.SCREENSIZE[0]-30, 5]

        screen.blit(countdown_text, countdown_rect)

        # --按键检测

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                pygame.quit()

                sys.exit()

        key_pressed = pygame.key.get_pressed()

        if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:

            hero.move(cfg.SCREENSIZE, 'left')

        if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:

            hero.move(cfg.SCREENSIZE, 'right')

        # --随机生成食物

        generate_food_count += 1

        if generate_food_count > generate_food_freq:

            generate_food_freq = random.randint(10, 20)

            generate_food_count = 0

            food = Food(game_images, random.choice(['gold',] * 10 + ['apple']), cfg.SCREENSIZE)

            food_sprites_group.add(food)

        # --更新食物

        for food in food_sprites_group:

            if food.update(): food_sprites_group.remove(food)

        # --碰撞检测

        for food in food_sprites_group:

            if pygame.sprite.collide_mask(food, hero):

                game_sounds['get'].play()

                food_sprites_group.remove(food)

                score += food.score

                if score > highest_score: highest_score = score

        # --画hero

        hero.draw(screen)

        # --画食物

        food_sprites_group.draw(screen)

        # --显示得分

        score_text = f'Score: {score}, Highest: {highest_score}'

        score_text = font.render(score_text, True, (0, 0, 0))

        score_rect = score_text.get_rect()

        score_rect.topleft = [5, 5]

        screen.blit(score_text, score_rect)

        # --判断游戏是否结束

        if pygame.time.get_ticks() >= 90000:

            break

        # --更新屏幕

        pygame.display.flip()

        clock.tick(cfg.FPS)

    # 游戏结束, 记录最高分并显示游戏结束画面

    fp = open(cfg.HIGHEST_SCORE_RECORD_FILEPATH, 'w')

    fp.write(str(highest_score))

    fp.close()

    return showEndGameInterface(screen, cfg, score, highest_score)

  

  

'''run'''

if __name__ == '__main__':

    while main():

        pass

下载本文
显示全文
专题