首页 > 其他分享 >贪吃蛇

贪吃蛇

时间:2023-04-11 17:33:47浏览次数:38  
标签:head direction CELL 贪吃蛇 pygame SIZE snake

 

import pygame
import random

# 初始化
pygame.init()

# 游戏界面宽高和方块大小
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 1080
CELL_SIZE = 20

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# 创建游戏界面
pygame.display.set_caption("大东牌-贪吃蛇")
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

# 创建时钟对象,控制游戏帧率
clock = pygame.time.Clock()

# 蛇的初始位置
snake_head_x = WINDOW_WIDTH / 2 // CELL_SIZE * CELL_SIZE
snake_head_y = WINDOW_HEIGHT / 2 // CELL_SIZE * CELL_SIZE

# 食物的初始位置
food_x = random.randint(0, WINDOW_WIDTH // CELL_SIZE - 1) * CELL_SIZE
food_y = random.randint(0, WINDOW_HEIGHT // CELL_SIZE - 1) * CELL_SIZE

# 蛇的初始长度、方向和速度
snake_length = 3
snake_direction = "right"
snake_speed = CELL_SIZE

# 存储蛇身体的各个方块坐标的列表
snake_body = [(snake_head_x - i * CELL_SIZE, snake_head_y) for i in range(snake_length)]

# 游戏主循环
while True:
    # 检测事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and snake_direction != "down":
                snake_direction = "up"
            elif event.key == pygame.K_DOWN and snake_direction != "up":
                snake_direction = "down"
            elif event.key == pygame.K_LEFT and snake_direction != "right":
                snake_direction = "left"
            elif event.key == pygame.K_RIGHT and snake_direction != "left":
                snake_direction = "right"

    # 更新蛇头位置
    if snake_direction == "up":
        snake_head_y -= snake_speed
    elif snake_direction == "down":
        snake_head_y += snake_speed
    elif snake_direction == "left":
        snake_head_x -= snake_speed
    elif snake_direction == "right":
        snake_head_x += snake_speed

    # 判断是否吃到食物
    if snake_head_x == food_x and snake_head_y == food_y:
        # 食物坐标重置
        food_x = random.randint(0, WINDOW_WIDTH // CELL_SIZE - 1) * CELL_SIZE
        food_y = random.randint(0, WINDOW_HEIGHT // CELL_SIZE - 1) * CELL_SIZE
        # 蛇长度增加1
        snake_length += 1
        # 将新的蛇身体块加入列表
        snake_body.append((snake_body[-1][0], snake_body[-1][1]))

    # 判断蛇头是否撞到边界或撞到自己
    if (
        snake_head_x < 0
        or snake_head_x >= WINDOW_WIDTH
        or snake_head_y < 0
        or snake_head_y >= WINDOW_HEIGHT
    ):
        # 游戏结束
        pygame.quit()
        quit()
    if (snake_head_x, snake_head_y) in snake_body[:-1]:
        # 游戏结束
        pygame.quit()
        quit()

    # 更新蛇身体坐标
    for i in range(snake_length - 1, 0, -1):
        snake_body[i] = (snake_body[i - 1][0], snake_body[i - 1][1])
    snake_body[0] = (snake_head_x, snake_head_y)

    # 在屏幕上绘制蛇和食物
    screen.fill(BLACK)
    for x, y in snake_body:
        pygame.draw.rect(screen, GREEN, (x, y, CELL_SIZE, CELL_SIZE))
    pygame.draw.rect(screen, RED, (food_x, food_y, CELL_SIZE, CELL_SIZE))
    pygame.display.update()

    # 控制游戏帧率
    clock.tick(10)

 

标签:head,direction,CELL,贪吃蛇,pygame,SIZE,snake
From: https://www.cnblogs.com/suyj/p/17307031.html

相关文章

  • 一个简单的rust项目贪吃蛇
    一个贪吃蛇游戏的rust实现,使用了piston_window和randcrate。游戏使用上下左右方向键进行操控,使用R重置游戏,使用P进行暂停/启动。项目结构·├──Cargo.lock├──Cargo.toml├──src/│  ├──main.rs│  ├──snake_game/│  │ ├─......
  • 使用Java开发贪吃蛇游戏一之静态界面
    一、设置窗口,包括但不限于窗口标题、可见、窗口可关闭,固定大小、设置大小 packagelearn_snake;/**@authorMK*@date2023年3月15日*/importjavax.swing.JFra......
  • 表格制作 贪吃蛇案例
    使用表格制作解释都在注释里 html文件:<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>she</title><linkrel="stylesh......
  • ChatGPT: delphi写一个贪吃蛇
    unitUnit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl......
  • 看我是如何用C#编写一个小于8KB的贪吃蛇游戏的
    译者注:这是MichalStrehovský大佬的一篇文章,他目前在微软.NETRuntime团队工作,主要是负责.NETNativeAOT功能的开发。我在前几天看到这篇文章,非常喜欢,虽然它的内容稍微......
  • 贪吃蛇游戏源码
      //定义食物类foodclassFood{//定义一个属性表示食物对应的元素element:HTMLElement;constructor(){//获取页面中的food元素并赋值给......
  • 基于EasyX和Raylib的贪吃蛇
    基于EasyX//根据《C和C++游戏趣味编程》第七章贪吃蛇写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>//全......
  • ts17贪吃蛇项目_1
    使用ts写一个贪吃蛇的项目第一步:配置webpack和tsconfig,这里可以使用之前配置过的第二步:在之前配置好的webpack中加入css打包时的配置模块运行npmi-Dlessless-load......
  • 8KB的C#贪吃蛇游戏热点答疑和.NET7版本
    在之前的一篇文章《看我是如何用C#编写一个小于8KB的贪吃蛇游戏》中,介绍了在.NETCore3.0的环境下如何将贪吃蛇游戏降低到8KB。不过也有很多小伙伴提出了一些疑问和看法,主......
  • 贪吃蛇
    像下图这样的蛇如何拐弯?绿点是新蛇头,红点是旧蛇尾。搜了下,有用JavaScript写的,有用Python写的,好像都是把蛇身用一系列的点来表示。这样比我原先想的用若干根线段表示简单......