简单的Python贪吃蛇游戏示例代码(复制直接使用)

简单的Python贪吃蛇游戏示例代码

以下是一个简单的Python贪吃蛇游戏示例代码,使用了pygame库来实现图形界面和交互,在运行代码前请确保已经安装了pygame库(可以通过pip install pygame命令进行安装)

import pygame
import random

# 初始化pygame
pygame.init()

# 游戏窗口大小
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("贪吃蛇游戏")

# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)

# 蛇的相关参数
snake_block_size = 10
snake_speed = 15
snake_list = []
snake_length = 1
# 初始蛇头位置
x1, y1 = width / 2, height / 2
x1_change, y1_change = 0, 0

# 食物的位置
while True:
    foodx = round(random.randrange(0, width - snake_block_size) / 10.0) * 10.0
    foody = round(random.randrange(0, height - snake_block_size) / 10.0) * 10.0
    if [foodx, foody] not in snake_list:
        break

# 游戏结束标志
game_over = False

# 积分
score = 0

# 游戏主循环
clock = pygame.time.Clock()
while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        # 控制蛇的移动方向
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x1_change = -snake_block_size
                y1_change = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = snake_block_size
                y1_change = 0
            elif event.key == pygame.K_UP:
                y1_change = -snake_block_size
                x1_change = 0
            elif event.key == pygame.K_DOWN:
                y1_change = snake_block_size
                x1_change = 0

    # 先检查是否撞墙或者撞到自己
    if x1 + x1_change >= width or x1 + x1_change < 0 or y1 + y1_change >= height or y1 + y1_change < 0 or [x1 + x1_change, y1 + y1_change] in snake_list[1:]:
        game_over = True
    else:
        # 更新蛇头位置
        x1 += x1_change
        y1 += y1_change
        snake_head = []
        snake_head.append(x1)
        snake_head.append(y1)
        snake_list.append(snake_head)
        if len(snake_list) > snake_length:
            del snake_list[0]

    # 判断蛇是否吃到食物
    if x1 == foodx and y1 == foody:
        score += 1
        while True:
            foodx = round(random.randrange(0, width - snake_block_size) / 10.0) * 10.0
            foody = round(random.randrange(0, height - snake_block_size) / 10.0) * 10.0
            if [foodx, foody] not in snake_list:
                break
        snake_length += 1

    # 绘制背景
    screen.fill(black)
    # 绘制食物
    pygame.draw.rect(screen, green, [foodx, foody, snake_block_size, snake_block_size])
    # 绘制蛇
    for segment in snake_list:
        pygame.draw.rect(screen, white, [segment[0], segment[1], snake_block_size, snake_block_size])

    # 在窗口左上角显示积分
    font_style = pygame.font.SysFont(None, 30)
    score_text = font_style.render("积分: " + str(score), True, white)
    screen.blit(score_text, (10, 10))

    pygame.display.update()

    # 设置游戏帧率
    clock.tick(snake_speed)

# 游戏结束,显示最终得分
font_style = pygame.font.SysFont(None, 50)
score_text = font_style.render("最终得分: " + str(score), True, white)
screen.blit(score_text, [width / 2 - 100, height / 2])
pygame.display.update()
pygame.time.delay(2000)

# 退出游戏
pygame.quit()
quit()

这个代码实现了一个基本的贪吃蛇游戏逻辑,具体功能如下:

游戏基本功能

  1. 界面展示:通过pygame创建了一个固定大小的游戏窗口,设置了窗口标题,定义了黑、白、红、绿几种颜色,用于后续绘制游戏中的不同元素,如蛇身、食物、背景等
  2. 蛇的控制:蛇初始在屏幕中间位置,玩家可以通过键盘上的方向键(上、下、左、右)来控制蛇的移动方向,蛇每次移动一个固定的方块大小(由snake_block_size定义)
  3. 食物生成:食物会随机出现在游戏窗口内的某个坐标位置(坐标是snake_block_size的整数倍,保证位置规整),以绿色方块表示
  4. 游戏规则判定
    • 吃到食物:当蛇头碰到食物时,蛇的长度会增加一节,同时食物会重新在新的随机位置生成
    • 游戏结束:如果蛇头撞到游戏窗口的边界(墙壁)或者蛇头碰到了蛇身自身,游戏就会结束

代码结构

  1. 初始化部分
    • 首先调用pygame.init()pygame库进行初始化
    • 然后定义了游戏窗口的大小、设置了窗口标题,并定义了后续要用到的几种颜色。接着初始化了蛇的一些参数,如蛇身方块大小、初始移动速度、初始位置、初始长度等,以及食物的初始位置,同时将游戏结束标志设置为False
  2. 主循环部分
    • 通过while not game_over循环不断处理游戏中的各种事件和逻辑更新,比如获取用户的键盘输入事件来控制蛇的移动方向,不断更新蛇头的位置,判断蛇是否吃到食物、是否撞墙或者撞到自己等情况,并根据不同情况做出相应处理(如更新蛇身长度、结束游戏等)
    • 在每次循环中,还会进行界面的绘制,包括填充背景颜色、绘制食物和蛇身等元素,最后通过pygame.display.update()来更新显示画面,并且使用clock.tick(snake_speed)来控制游戏的帧率,保证游戏以合适的速度运行
  3. 结束部分:当游戏结束循环结束后,调用pygame.quit()来关闭pygame库的相关资源,并使用quit()退出程序

这只是一个简单的示例,你可以进一步扩展和优化它,比如添加计分功能、游戏难度调节、音效等,使其更加完善和有趣

以下是一个简单贪吃蛇代码示例使用 Python 语言编写: ```python import pygame import random # 初始化 Pygame pygame.init() # 设置游戏界面尺寸、背景颜色、标题 screen = pygame.display.set_mode((600, 600)) pygame.display.set_caption('贪吃蛇') # 定义颜色 BLACK = pygame.Color(0, 0, 0) WHITE = pygame.Color(255, 255, 255) RED = pygame.Color(255, 0, 0) GREEN = pygame.Color(0, 255, 0) # 定义游戏结束函数 def game_over(): font = pygame.font.SysFont(None, 48) text = font.render('游戏结束', True, RED) text_rect = text.get_rect() text_rect.centerx = screen.get_rect().centerx text_rect.centery = screen.get_rect().centery - 24 screen.blit(text, text_rect) pygame.display.flip() pygame.time.delay(3000) pygame.quit() sys.exit() # 定义主函数 def main(): # 初始化贪吃蛇和食物 snake_positions = [(200, 200), (210, 200), (220, 200)] snake_direction = 'right' food_position = (random.randint(0, 590), random.randint(0, 590)) food_exist = True # 设置游戏帧率 clock = pygame.time.Clock() # 开始游戏循环 while True: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if 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' elif 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' # 移动贪吃蛇 if snake_direction == 'right': new_head = (snake_positions[0][0] + 10, snake_positions[0][1]) elif snake_direction == 'left': new_head = (snake_positions[0][0] - 10, snake_positions[0][1]) elif snake_direction == 'up': new_head = (snake_positions[0][0], snake_positions[0][1] - 10) elif snake_direction == 'down': new_head = (snake_positions[0][0], snake_positions[0][1] + 10) snake_positions.insert(0, new_head) # 判断贪吃蛇是否吃到食物 if snake_positions[0] == food_position: food_exist = False else: snake_positions.pop() # 重新生成食物 if not food_exist: food_position = (random.randint(0, 590), random.randint(0, 590)) food_exist = True # 绘制游戏界面 screen.fill(BLACK) for position in snake_positions: pygame.draw.rect(screen, GREEN, pygame.Rect(position[0], position[1], 10, 10)) pygame.draw.rect(screen, WHITE, pygame.Rect(food_position[0], food_position[1], 10, 10)) # 判断贪吃蛇是否死亡 if snake_positions[0][0] < 0 or snake_positions[0][0] > 590 or snake_positions[0][1] < 0 or snake_positions[0][1] > 590: game_over() for position in snake_positions[1:]: if snake_positions[0] == position: game_over() # 更新游戏界面 pygame.display.update() # 控制游戏帧率 clock.tick(10) # 启动游戏 if __name__ == '__main__': main() ``` 这是一个基本的贪吃蛇代码示例,可以实现贪吃蛇的基本功能。当然,你可以根据自己的需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值