Be in hell 2020-07-16 19:24 采纳率: 43.8%
浏览 146
已采纳

python问题,急,急,急,按要求写出运行模块或结束模块即可,急,SOS

3. PyGame项目

3.1 项目介绍

看图分析

  • 窗体标题
  • 游戏得分
  • 绘制窗体网格
  • 提示游戏信息
  • 贪吃蛇运动
  • 贪吃蛇吃苹果

PyGame项目组成:

  • 游戏开始模块
  • 游戏运行模块
  • 游戏结束模块

三个模块怎么配合工作?

  • 第一步显示游戏开始模块
  • 然后程序循环中完成游戏运行模块和游戏结束模块

游戏设计思路

  • 绘制一个特定大小640*480窗体(其中需要定义方格---窗体的宽度和高必须可以整除方格边长)

  • 绘制游戏开始界面,等待按键事件输入

  • 程序主循环包含两个模块:

    • 游戏运行模块
    • 随机的生成一个点作为贪吃蛇的起点
    • 以这个点为起点,建立一个长度为3的贪吃蛇
    • 初始化一个运动方向
    • 随机一个苹果位置
    • 在游戏循环中事件处理
      • 根据按键改变贪吃蛇的运动方向
      • 检查贪吃蛇是否结束(撞到了边界、撞到了自己)
      • 检查贪吃蛇是否吃到了苹果
      • 绘制背景、贪吃蛇、苹果、分数等游戏元素
    • 游戏结束模块
    • 绘制GameOver
    • 绘制‘按任意键开始游戏’,等待用户按键来重新的开始游戏
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-07-17 16:15
    关注
    import pygame
    import sys
    import time
    import random
    from pygame.locals import *
    
    # 初始化pygame
    pygame.init()
    # 这是游戏框
    fps_clock = pygame.time.Clock()
    play_sur_face = pygame.display.set_mode((640, 480))
    # 设置标题
    pygame.display.set_caption("小蛇冲冲冲!!!")
    # 加载图标
    image = pygame.image.load("game.jpg")
    pygame.display.set_icon(image)
    
    # 需要自定义设置一些颜色
    
    RED_COLOR = pygame.Color(255, 0, 0)
    BLACK_COLOR = pygame.Color(0, 0, 0)
    WITHER_COLOR = pygame.Color(255, 255, 255)
    GRE_COLOR = pygame.Color(150, 150, 150)
    LIGHT_GRE = pygame.Color(220, 220, 220)
    
    
    # 游戏结束
    def game_over(play_sur_face, score):
        # 显示GAME OVER 并定义字体以及大小
        # game_over_font = pygame.font.Font('arial.tff', 72)
        game_over_font = pygame.font.Font('E:\\untitled\\arial.ttf', 72)
        game_over_surf = game_over_font.render("GAME OVER", True, GRE_COLOR)
        game_over_rect = game_over_surf.get_rect()
        game_over_rect.midtop = (320, 125)
        play_sur_face.blit(game_over_surf, game_over_rect)
        # 显示分数并定义字体大小
        score_font = pygame.font.Font('E:\\untitled\\arial.ttf', 48)
        score_surf = score_font.render('score ' + str(score), True, GRE_COLOR)
        score_rect = score_surf.get_rect()
        score_rect.midtop = (320, 255)
        play_sur_face.blit(score_surf, score_rect)
        # 刷新页面
        pygame.display.flip()
        time.sleep(5)
        pygame.quit()
        sys.exit()
    
    
    
    snake_position = [100, 100]  # 蛇头位置
    snake_h = [[100, 100], [80, 100], [60, 100]]  # 初始长度,三个单位
    tree_position = [300, 300]
    # 初始化树莓的数量
    tree = 1
    direction = 'right'  # 初始化方向
    change_direction = direction
    score = 0
    # 检测例如按键等pygame事件
    while True:
        for event in pygame.event.get():
            # print(event.type)
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == KEYDOWN:
                # 判断键盘事件
                if event.key == K_RIGHT or event.key == ord('d'):
                    change_direction = 'right'
                if event.key == K_LEFT or event.key == ord('a'):
                    change_direction = 'left'
                if event.key == K_UP or event.key == ord('w'):
                    change_direction = "up"
                if event.key == K_DOWN or event.key == ord('s'):
                    change_direction = 'down'
                if event.key == K_ESCAPE:  # 按esc键
                    pygame.event.post(pygame.event.Event(QUIT))  # 退出游戏
    
        if change_direction == "right" and not direction == 'left':
            direction = change_direction
        if change_direction == "left" and not direction == 'right':
            direction = change_direction
        if change_direction == "up" and not direction == 'down':
            direction = change_direction
        if change_direction == "down" and not direction == 'up':
            direction = change_direction
    
        # 根据放下移动蛇头坐标
        if direction == 'right':
            snake_position[0] += 20
        if direction == 'left':
            snake_position[0] -= 20
        if direction == 'up':
            snake_position[1] -= 20
        if direction == 'down':
            snake_position[1] += 20
        snake_h.insert(0, list(snake_position))
    
        # 判断是否吃到树莓
        if snake_position[0] == tree_position[0] and snake_position[1] == tree_position[1]:
            tree = 0
        else:
            snake_h.pop()  # 每次将最后一单位蛇身剔除列表
    
        # 重新生成树莓
        if tree == 0:
            x = random.randrange(1, 32)
            y = random.randrange(1, 24)
            tree_position = [int(20 * x), int(20 * y)]
            tree = 1
            score += 1
    
        # 刷新显示层
        # def sx_face():
        #     # 绘制pygame显示层
        play_sur_face.fill(BLACK_COLOR)
        for position in snake_h[1:]:  # 蛇身为白色
            pygame.draw.rect(play_sur_face, WITHER_COLOR, Rect(position[0], position[1], 20, 20))
        pygame.draw.rect(play_sur_face, LIGHT_GRE, Rect(snake_position[0], snake_position[1], 20, 20))  # 蛇头为灰色
        pygame.draw.rect(play_sur_face, RED_COLOR, Rect(tree_position[0], tree_position[1], 20, 20))
        # 刷新显示层
        pygame.display.flip()
    
        # def check_is_alive():
        #     """
        #     判断蛇是否死亡
        #     :return:
        #     """
        if snake_position[0] > 620 or snake_position[0] < 0:  # 超出左右边界
            game_over(play_sur_face, score)
        if snake_position[1] > 460 or snake_position[1] < 0:  # 超出上下边界
            game_over(play_sur_face, score)
        for snack_body in snake_h[1:]:
            if snake_position[0] == snack_body[0] == snack_body[1] == snake_position[1]:
                game_over(play_sur_face, score)
        if len(snake_h) < 40:
            speed = 6 + len(snake_h) // 4
        else:
            speed = 16
        fps_clock.tick(speed)
    

    https://www.cnblogs.com/tianzhh/p/11847107.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误