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

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

3. PyGame项目

3.1 项目介绍

看图分析

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

PyGame项目组成:

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

三个模块怎么配合工作?

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

游戏设计思路

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

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

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

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

1条回答 默认 最新

  • caozhy
    已采纳
    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

    点赞 评论

相关推荐