简单的贪吃蛇代码

以下是一个简单的贪吃蛇代码示例,使用Python实现:

import curses
import time
from random import randint

# 初始化游戏界面
screen = curses.initscr()
curses.curs_set(0)
screen_height, screen_width = screen.getmaxyx()

# 初始化蛇的初始位置和长度
snake_x = screen_width // 4
snake_y = screen_height // 2
snake = [[snake_y, snake_x], [snake_y, snake_x-1], [snake_y, snake_x-2]]

# 初始化食物的位置
food = [screen_height//2, screen_width//2]
screen.addch(food[0], food[1], '*')

# 初始化初始运动方向和按键映射
key = curses.KEY_RIGHT
key_dict = {
    curses.KEY_UP: 'UP',
    curses.KEY_DOWN: 'DOWN',
    curses.KEY_LEFT: 'LEFT',
    curses.KEY_RIGHT: 'RIGHT',
}

# 画出蛇的初始状态
for y, x in snake:
    screen.addch(y, x, '#')

# 循环接受用户按键并改变蛇的运动方向
while True:
    next_key = screen.getch()
    key = key_dict.get(next_key, key)

    # 计算蛇头下一步的位置
    if key == 'UP':
        new_head = [snake[0][0] - 1, snake[0][1]]
    elif key == 'DOWN':
        new_head = [snake[0][0] + 1, snake[0][1]]
    elif key == 'LEFT':
        new_head = [snake[0][0], snake[0][1] - 1]
    elif key == 'RIGHT':
        new_head = [snake[0][0], snake[0][1] + 1]

    # 判断是否吃到食物,如果是则在蛇尾增加一个节点
    if new_head == food:
        food = None
        while food is None:
            new_food = [randint(1, screen_height-2), randint(1, screen_width-2)]
            food = new_food if new_food not in snake else None
        screen.addch(food[0], food[1], '*')
    else:
        tail = snake.pop()
        screen.addch(tail[0], tail[1], ' ')

    # 判断游戏结束的条件
    if new_head[0] in [0, screen_height-1] or new_head[1] in [0, screen_width-1] or new_head in snake:
        curses.endwin()
        quit()

    # 将新的蛇头插入列表第一个位置
    snake.insert(0, new_head)
    screen.addch(snake[0][0], snake[0][1], '#')
    screen.refresh()
    time.sleep(0.1)

该代码使用curses库实现了在终端上的贪吃蛇游戏,具体实现方式如下:

  1. 初始化游戏界面,设置蛇和食物的位置、初始化运动方向和按键映射等。
  2. 循环接受用户按键并改变蛇的运动方向,计算蛇头下一步的位置,并判断是否吃到食物。
  3. 如果吃到食物,则在蛇尾增加一个节点,重新生成食物;否则,删除蛇尾节点。
  4. 判断游戏结束的条件,如果蛇头碰壁或者碰到自己,则游戏结束。
  5. 将新的蛇头插入列表第一个位置,画出新的蛇。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单贪吃代码示例: ```python import pygame import random # 初始化pygame pygame.init() # 设置游戏界面大小 screen = pygame.display.set_mode((600, 600)) # 设置游戏标题 pygame.display.set_caption("贪吃") # 定义颜色 BLACK = (0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) RED = (255, 0, 0) # 定义贪吃类 class Snake(pygame.sprite.Sprite): def __init__(self, x, y): super().__init__() self.image = pygame.Surface((20, 20)) self.image.fill(GREEN) self.rect = self.image.get_rect() self.rect.x = x self.rect.y = y self.speed = 20 self.direction = "right" self.body = [(x, y), (x - 20, y), (x - 40, y)] def update(self): if self.direction == "right": self.rect.x += self.speed elif self.direction == "left": self.rect.x -= self.speed elif self.direction == "up": self.rect.y -= self.speed elif self.direction == "down": self.rect.y += self.speed self.body.insert(0, (self.rect.x, self.rect.y)) self.body.pop() def grow(self): self.body.append((self.rect.x, self.rect.y)) def change_direction(self, direction): self.direction = direction # 定义食物类 class Food(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.Surface((20, 20)) self.image.fill(RED) self.rect = self.image.get_rect() self.rect.x = random.randint(0, 29) * 20 self.rect.y = random.randint(0, 29) * 20 # 定义游戏结束函数 def game_over(): font = pygame.font.Font(None, 36) text = font.render("Game Over", True, WHITE) screen.blit(text, (250, 250)) pygame.display.flip() pygame.time.wait(3000) pygame.quit() # 创建贪吃和食物对象 snake = Snake(300, 300) food = Food() # 创建精灵组 all_sprites = pygame.sprite.Group() all_sprites.add(snake, food) # 设置游戏循环 running = True clock = pygame.time.Clock() while running: # 设置帧率 clock.tick(10) # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: snake.change_direction("up") elif event.key == pygame.K_DOWN: snake.change_direction("down") elif event.key == pygame.K_LEFT: snake.change_direction("left") elif event.key == pygame.K_RIGHT: snake.change_direction("right") # 判断是否吃到食物 if snake.rect.colliderect(food.rect): food.kill() food = Food() all_sprites.add(food) snake.grow() # 判断是否撞到自身或边界 if snake.rect.x < 0 or snake.rect.x > 580 or snake.rect.y < 0 or snake.rect.y > 580: game_over() for i in range(1, len(snake.body)): if snake.rect.colliderect(pygame.Rect(snake.body[i], (20, 20))): game_over() # 更新精灵组 all_sprites.update() # 绘制游戏界面 screen.fill(BLACK) all_sprites.draw(screen) pygame.display.flip() # 退出pygame pygame.quit() ``` 这是一个比较简单贪吃游戏代码,它使用了pygame库来创建游戏界面和处理事件,通过定义Snake类和Food类来实现贪吃和食物的功能,同时使用精灵组来管理所有的游戏元素。在游戏循环中,每帧都会检测是否吃到食物、是否撞到自身或边界等情况,并更新精灵组和绘制游戏界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值