zoukankan      html  css  js  c++  java
  • 简易版挖矿小游戏

    此文转载自:https://blog.csdn.net/Zhaosw2009/article/details/110294504

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

    先写初始设置的代码:

    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()

    完成!

    完整代码:

    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测试和开发

    Python测试和开发

  • 相关阅读:
    MySQL数据库封装和分页查询
    程序员的价值在哪里?
    奇葩的程序员
    京东咚咚架构演进
    程序员必看的《黑客帝国》,你看懂了吗?
    微信后台技术“干货们”带来的启发
    drf框架 2 drf框架的请求生命周期(as_view和dispatch方法), 请求、解析、渲染、响应、异常, 序列化组件 ,ORM配置回顾(media文件配置),应用在settings.py中INSTALLED_APPS注册意义 ,数据库配置
    drf框架, 接口(api) Django FBV => CBV drf框架的基础试图类 drf核心组件 群查与单查 python换源
    前端Vue框架 05 第三方插件(vuex: 组件间交互的(移动端), axios
    前端Vue框架 04 路由:逻辑跳转、路由传参 项目组件的数据局部化处理data(){ return{} } 组件的生命周期钩子 组件间通信 全局配置css, js
  • 原文地址:https://www.cnblogs.com/phyger/p/14073360.html
Copyright © 2011-2022 走看看