• 技术文章 >Python技术 >Python基础教程

    python简易版挖矿小游戏

    小妮浅浅小妮浅浅2020-12-02 18:27:48原创3759

    大家好,今天我们来说一说怎么制作一个简易版的挖矿小游戏。

    先写初始设置的代码:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    import pygame, sys, random, time

    pygame.init()

    screen = pygame.display.set_mode((660, 640))

    pygame.display.set_caption("宝石矿工") #标题

    gemImg = pygame.image.load("gem.png") #宝石

    heroImg = pygame.image.load("hero.png") #挖矿者

    gameoverbg = pygame.image.load("gameover.png") #失败提示

    bgImg = pygame.image.load("bg.png") #背景

    myFont = pygame.font.SysFont("kaiti", 30)

    sound = pygame.mixer.Sound("moveMusic.wav")

    pygame.mixer.music.load("bgMusic.mp3") #背景音乐

    pygame.mixer.music.play(-1)

    heroRect = pygame.Rect(270, 0, 80, 80)


    创建宝石的列表:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    gemRectList = []  # 宝石列表

    number = 0  # 挖到的宝石数量

    start = False # False表示不退出第一层循环,True表示退出

    #创建宝石Rect列表

    for i in range(5):

        x = random.randint(0, 610)

        y = random.randint(30, 590)

        gemRect = pygame.Rect(x, y, 50, 50)

    gemRectList.append(gemRect)


    是否继续上一次游戏的代码:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    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_y:

                    with open("record.txt","r") as file:

                        number = int(file.read())

                    start = True

                elif event.key == pygame.K_n:

                    start = True

        screen.fill((0, 0, 0))

        myWord = "是否继续上次的游戏成绩?y/n"

        text = myFont.render(myWord, True, (255, 0, 0))

        screen.blit(text, (130, 280))

        if start==True:

            break

    pygame.display.update()


    把结尾写一下:

    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

    t1 = time.time()

    while True:

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                pygame.quit()

                sys.exit()

            elif event.type == pygame.KEYDOWN:

                sound.play()

                if event.key == pygame.K_UP and heroRect.y > 0:

                    heroRect.y = heroRect.y - 40

                elif event.key == pygame.K_DOWN and heroRect.y < 560:

                    heroRect.y = heroRect.y + 40

                elif event.key == pygame.K_LEFT and heroRect.x > 0:

                    heroRect.x = heroRect.x - 40

                elif event.key == pygame.K_RIGHT and heroRect.x < 560:

                    heroRect.x = heroRect.x + 40

        t2 = time.time()

        t = t2 - t1  # t表示经过的时间

        # 绘制地图

        screen.blit(bgImg, (0, 0))

        # 绘制宝石

        for n in gemRectList:

            if n.colliderect(heroRect):

                number = number + 1

                n.x = random.randint(0, 610)

                n.y = random.randint(40, 590)

            screen.blit(gemImg, n)

        # 绘制英雄

        screen.blit(heroImg, heroRect)

        # 绘制字体

        myWord = "挖到的宝石数:" + str(number)

        myText = myFont.render(myWord, True, (0, 0, 0))

        screen.blit(myText, (420, 10))

        myWord = "剩余时间:" + str(int(20 - t))

        myText = myFont.render(myWord, True, (0, 0, 0))

        screen.blit(myText, (10, 10))

        #时间结束,游戏结束,保存成绩,显示成绩

        if int(t) >= 20:

            with open("record.txt", "w") as file:

                file.write(str(number))

            screen.blit(gameoverbg, (0, 0))

            myWord = "时间到了,你的成绩为:" + str(number)

            myText = myFont.render(myWord, True, (0, 0, 0))

            screen.blit(myText, (160, 80))

    pygame.display.update()


    完成!

    完整代码:

    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

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    import pygame, sys, random, time

    pygame.init()

    screen = pygame.display.set_mode((660, 640))

    pygame.display.set_caption("宝石矿工") #标题

    gemImg = pygame.image.load("gem.png") #宝石

    heroImg = pygame.image.load("hero.png") #挖矿者

    gameoverbg = pygame.image.load("gameover.png") #失败提示

    bgImg = pygame.image.load("bg.png") #背景

    myFont = pygame.font.SysFont("kaiti", 30)

    sound = pygame.mixer.Sound("moveMusic.wav")

    pygame.mixer.music.load("bgMusic.mp3") #背景音乐

    pygame.mixer.music.play(-1)

    heroRect = pygame.Rect(270, 0, 80, 80)

    gemRectList = []  # 宝石列表

    number = 0  # 挖到的宝石数量

    start = False # False表示不退出第一层循环,True表示退出

    #创建宝石Rect列表

    for i in range(5):

        x = random.randint(0, 610)

        y = random.randint(30, 590)

        gemRect = pygame.Rect(x, y, 50, 50)

        gemRectList.append(gemRect)

      

    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_y:

                    with open("record.txt","r") as file:

                        number = int(file.read())

                    start = True

                elif event.key == pygame.K_n:

                    start = True

        screen.fill((0, 0, 0))

        myWord = "是否继续上次的游戏成绩?y/n"

        text = myFont.render(myWord, True, (255, 0, 0))

        screen.blit(text, (130, 280))

        if start==True:

            break

        pygame.display.update()

      

    t1 = time.time()

    while True:

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                pygame.quit()

                sys.exit()

            elif event.type == pygame.KEYDOWN:

                sound.play()

                if event.key == pygame.K_UP and heroRect.y > 0:

                    heroRect.y = heroRect.y - 40

                elif event.key == pygame.K_DOWN and heroRect.y < 560:

                    heroRect.y = heroRect.y + 40

                elif event.key == pygame.K_LEFT and heroRect.x > 0:

                    heroRect.x = heroRect.x - 40

                elif event.key == pygame.K_RIGHT and heroRect.x < 560:

                    heroRect.x = heroRect.x + 40

        t2 = time.time()

        t = t2 - t1  # t表示经过的时间

        # 绘制地图

        screen.blit(bgImg, (0, 0))

        # 绘制宝石

        for n in gemRectList:

            if n.colliderect(heroRect):

                number = number + 1

                n.x = random.randint(0, 610)

                n.y = random.randint(40, 590)

            screen.blit(gemImg, n)

        # 绘制英雄

        screen.blit(heroImg, heroRect)

        # 绘制字体

        myWord = "挖到的宝石数:" + str(number)

        myText = myFont.render(myWord, True, (0, 0, 0))

        screen.blit(myText, (420, 10))

        myWord = "剩余时间:" + str(int(20 - t))

        myText = myFont.render(myWord, True, (0, 0, 0))

        screen.blit(myText, (10, 10))

        #时间结束,游戏结束,保存成绩,显示成绩

        if int(t) >= 20:

            with open("record.txt", "w") as file:

                file.write(str(number))

            screen.blit(gameoverbg, (0, 0))

            myWord = "时间到了,你的成绩为:" + str(number)

            myText = myFont.render(myWord, True, (0, 0, 0))

            screen.blit(myText, (160, 80))

        pygame.display.update()

    专题推荐:python游戏
    上一篇:python3中构造字典的代码怎么写? 下一篇:python 序列的逆序

    相关文章推荐

    • python游戏编程讲解之凯撒密码• 如何使用python游戏开发模块—pygame?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网