DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录.
  • DmozDir.org
DMOZ目录快速登录入口-免费收录各类优秀网站的中文网站目录.由人工编辑,并提供网站分类目录检索及地区分类目录检索,是站长免费推广网站的有力平台!

python实现简陋的贪吃蛇小游戏

  • python实现简陋的贪吃蛇小游戏

  • 已被浏览: 47 次2020年10月06日    来源:  https://blog.csdn.net/qq_45728434/article/details/108904188
  • 简陋的贪吃蛇小游戏 # -*- coding:utf-8 -*-# 导入库import sysimport timeimport randomimport pygamefrom pygame.locals import *# 参数设置W

    简陋的贪吃蛇小游戏

    # -*- coding:utf-8 -*-
    # 导入库
    import sys
    import time
    import random
    import pygame
    from pygame.locals import *
    
    # 参数设置
    WIDTH = 640
    HEIGHT = 480
    BLOCK = 20
    WHITE = (255, 255, 255)
    GREEN = (0, 255, 0)
    RED = (255, 0, 0)
    
    
    # 退出程序
    def terminal():
        pygame.quit()
        sys.exit()
    
    
    # 绘制食物
    def draw_food(window, point):
        rect = pygame.Rect(point[0], point[1], BLOCK, BLOCK)
        pygame.draw.rect(window, RED, rect)
    
    
    # 绘制贪吃蛇
    def draw_snake(window, snake_body):
        for point in snake_body:
            rect = pygame.Rect(point[0], point[1], BLOCK, BLOCK)
            pygame.draw.rect(window, GREEN, rect)
    
    
    # 贪吃蛇移动
    def move_snake(snake_body, direction, food_position):
        if direction == 'up':
            snake_body.insert(0, [snake_body[0][0], snake_body[0][1] - BLOCK])
        if direction == 'down':
            snake_body.insert(0, [snake_body[0][0], snake_body[0][1] + BLOCK])
        if direction == 'left':
            snake_body.insert(0, [snake_body[0][0] - BLOCK, snake_body[0][1]])
        if direction == 'right':
            snake_body.insert(0, [snake_body[0][0] + BLOCK, snake_body[0][1]])
        # 吃到食物
        if snake_body[0] == food_position:
            food_position = [random.randrange(0, WIDTH, BLOCK), random.randrange(0, HEIGHT, BLOCK)]
        else:
            snake_body.pop()
        # 是否撞墙、撞身体
        alive = True
        if snake_body[0][0] < 0 or snake_body[0][0] + BLOCK > WIDTH:
            alive = False
        elif snake_body[0][1] < 0 or snake_body[0][1] + BLOCK > HEIGHT:
            alive = False
        elif snake_body[0] in snake_body[1:]:
            alive = False
        return snake_body, food_position, alive
    
    
    # 游戏结束并退出程序
    def game_over(window):
        msg = pygame.font.SysFont('arial', 20)
        msg = msg.render('Game over', 1, RED)
        window.blit(msg, (10, 10))
        pygame.display.flip()
        time.sleep(2)  # 等待2秒后退出
        terminal()
    
    
    # 监控鼠标、键盘
    def monitor_action(direction):
        for event in pygame.event.get():
            if event.type == QUIT:  # 右上角关闭按钮
                terminal()
            if event.type == KEYDOWN:
                if event.key == K_UP and direction != 'down':
                    direction = 'up'
                elif event.key == K_DOWN and direction != 'up':
                    direction = 'down'
                elif event.key == K_LEFT and direction != 'right':
                    direction = 'left'
                elif event.key == K_RIGHT and direction != 'left':
                    direction = 'right'
                elif event.key == K_ESCAPE:  # ‘ESC’键退出程序
                    terminal()
        return direction
    
    
    # 运行游戏
    def run_game():
        pygame.init()  # 模块初始化
        window = pygame.display.set_mode((WIDTH, HEIGHT))   # 新建窗口
        pygame.display.set_caption('贪吃蛇游戏')  # 窗口标题
        clock = pygame.time.Clock()  # 计时器
    
        # 贪吃蛇、食物初始状态
        food_position = [300, 300]
        snake_body = [[100, 100], [80, 100]]
        direction = 'right'
    
        while True:
            window.fill(WHITE)  # 绘制背景
            draw_food(window, food_position)
            draw_snake(window, snake_body)
            pygame.display.flip()  # 刷新屏幕
            direction = monitor_action(direction)  # 控制方向
            snake_body, food_position, alive = move_snake(snake_body, direction, food_position)  # 计算下一次绘制物体
            if not alive:
                game_over(window)
            clock.tick(10)  # 刷新频率,1秒刷新5次
        terminal()
        return 0
    
    # 调用函数
    run_game()
    

    运行效果:


    以上信息来源于网络,如有侵权,请联系站长删除。

    TAG:小游戏 简陋 贪吃蛇

  • 上一篇:Spring Cloud系列(四):Eureka源码解析之客户端
  • 与“python实现简陋的贪吃蛇小游戏”相关的资讯
  • 用Unity3d仿制前几日爆红的“合成大西瓜”小游戏源码
  • 万万没想到!爆款抖音小游戏的秘诀竟然是......
  • 23款小游戏
  • 玩转Python之声控小游戏
  • 温习数据算法—贪吃蛇