帮我写一个py的贪吃蛇
时间: 2023-08-31 18:39:19 浏览: 116
自己写的一个贪吃蛇
### 回答1:
我可以给你一个简单的Python贪吃蛇代码:import pygame
import sys
import random
from pygame.locals import *
# 定义颜色变量
redColour = pygame.Color(255,0,0)
blackColour = pygame.Color(0,0,0)
whiteColour = pygame.Color(255,255,255)
# 定义gameOver函数
def gameOver(playSurface):
gameOverFont = pygame.font.Font('simkai.ttf', 72)
gameOverSurf = gameOverFont.render('Game Over', True, redColour)
gameOverRect = gameOverSurf.get_rect()
gameOverRect.midtop = (320, 10)
playSurface.blit(gameOverSurf, gameOverRect)
pygame.display.flip()
time.sleep(5)
pygame.quit()
sys.exit()
# 定义main函数
def main():
# 初始化pygame
pygame.init()
fpsClock = pygame.time.Clock()
# 创建pygame显示层
playSurface = pygame.display.set_mode((640,480))
pygame.display.set_caption('贪吃蛇')
# 初始化变量
snakePosition = [100,100]
snakeSegments = [[100,100],[80,100],[60,100]]
raspberryPosition = [300,300]
raspberrySpawned = 1
direction = 'right'
changeDirection = direction
while True:
# 检测例如按键等pygame事件
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
# 判断键盘事件
if event.key == K_RIGHT:
changeDirection = 'right'
if event.key == K_LEFT:
changeDirection = 'left'
if event.key == K_UP:
changeDirection = 'up'
if event.key == K_DOWN:
changeDirection = 'down'
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
# 判断是否输入了反方向
if changeDirection == 'right' and not direction == 'left':
direction = changeDirection
if changeDirection == 'left' and not direction == 'right':
direction = changeDirection
if changeDirection == 'up' and not direction == 'down':
direction = changeDirection
if changeDirection == 'down' and not direction == 'up':
direction = changeDirection
# 根据方向移动蛇头的坐标
if direction == 'right':
snakePosition[0] += 20
if direction == 'left':
snakePosition[0] -= 20
if direction == 'up':
snakePosition[1] -= 20
if direction == 'down':
snakePosition[1] += 20
# 增加蛇的长度
snakeSegments.insert(0,list(snakePosition))
# 判断是否吃掉了树莓
if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:
raspberrySpawned = 0
else:
snakeSegments.pop()
# 如果吃掉树莓,则重新生成树莓
if raspberrySpawned == 0:
x = random.randrange(1,32)
y = random.randrange(1,24)
raspberryPosition = [int(x*20),int(y*20)]
raspberrySpawned = 1
# 绘制pygame显示层
playSurface.fill(blackColour)
for position in snakeSegments:
pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))
pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1],20,20))
# 刷新pygame显示层
pygame.display.flip()
# 判断是否死亡
if snakePosition[0] > 620 or snakePosition[0] < 0:
gameOver(playSurface)
if snakePosition[1] > 460 or snakePosition[1] < 0:
gameOver(playSurface)
for snakeBody in snakeSegments[1:]:
if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:
gameOver(playSurface)
# 控制游戏速度
fpsClock.tick(5)
# 判断当前执行是否为主程序运行,如果是,则运行主函数
if __name__ == '__main__':
main()
### 回答2:
当然可以帮你写一个贪吃蛇的Python程序。
首先,我们需要导入所需的Pygame库,因为它提供了用于创建游戏窗口和处理游戏逻辑的功能。接下来,我们定义游戏窗口的大小和标题,并创建一个游戏窗口。
然后,我们需要创建蛇的起始位置和长度,以及蛇头的初始移动方向。我们可以使用一个列表来表示一条蛇,每个元素代表蛇的一个身体部分的位置。初始时,蛇的长度为3,位置为(100, 50)、(90, 50)、(80, 50),移动方向为向右。
接着,我们需要定义游戏主循环,它将不断更新蛇的位置、检查是否吃到了食物、检查是否撞到了边界或自身,并更新游戏窗口的显示。
在游戏循环中,我们需要监听键盘事件,以控制蛇的移动方向。按下键盘左、上、右、下箭头键时,蛇的移动方向相应地改变。
游戏过程中,如果蛇吃到了食物,我们需要在蛇尾增加一个身体部分,并在新的位置生成一个新的食物。
如果蛇撞到了边界或自身,则游戏结束。我们可以调用Pygame的quit()函数来退出游戏窗口。
这只是一个简单的贪吃蛇游戏的核心逻辑,你可以根据自己的需求进行扩展和美化,例如添加音效、计分等功能。完整的代码如下所示:
```python
import pygame
import random
# 初始化Pygame
pygame.init()
# 定义游戏窗口大小和标题
window_width = 400
window_height = 400
window_title = "贪吃蛇"
game_window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption(window_title)
# 定义颜色
black = pygame.Color(0, 0, 0)
white = pygame.Color(255, 255, 255)
# 定义蛇的起始位置和长度,以及蛇头的初始移动方向
snake_position = [(100, 50), (90, 50), (80, 50)]
snake_length = 3
direction = "RIGHT"
# 定义食物的起始位置
food_position = (random.randint(0, window_width // 10 - 1) * 10, random.randint(0, window_height // 10 - 1) * 10)
# 定义蛇的移动速度
snake_speed = pygame.time.Clock()
# 游戏主循环
while True:
# 监听键盘事件
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and direction != "DOWN":
direction = "UP"
elif event.key == pygame.K_DOWN and direction != "UP":
direction = "DOWN"
elif event.key == pygame.K_LEFT and direction != "RIGHT":
direction = "LEFT"
elif event.key == pygame.K_RIGHT and direction != "LEFT":
direction = "RIGHT"
# 更新蛇的位置
if direction == "UP":
snake_position[0] = (snake_position[0][0], snake_position[0][1] - 10)
elif direction == "DOWN":
snake_position[0] = (snake_position[0][0], snake_position[0][1] + 10)
elif direction == "LEFT":
snake_position[0] = (snake_position[0][0] - 10, snake_position[0][1])
elif direction == "RIGHT":
snake_position[0] = (snake_position[0][0] + 10, snake_position[0][1])
# 检查是否吃到食物
if snake_position[0] == food_position:
snake_length += 1
food_position = (random.randint(0, window_width // 10 - 1) * 10, random.randint(0, window_height // 10 - 1) * 10)
# 检查是否撞到边界或自身
if snake_position[0][0] < 0 or snake_position[0][0] >= window_width or snake_position[0][1] < 0 or snake_position[0][1] >= window_height:
pygame.quit()
exit(0)
for i in range(1, snake_length):
if snake_position[i] == snake_position[0]:
pygame.quit()
exit(0)
# 清除游戏窗口
game_window.fill(black)
# 绘制蛇
for position in snake_position:
pygame.draw.rect(game_window, white, pygame.Rect(position[0], position[1], 10, 10))
# 绘制食物
pygame.draw.rect(game_window, white, pygame.Rect(food_position[0], food_position[1], 10, 10))
# 更新游戏窗口显示
pygame.display.flip()
# 控制蛇的速度
snake_speed.tick(20)
```
注意,这只是一个简单的贪吃蛇游戏的核心逻辑,还可以进一步完善,例如添加计分、难度增加等功能。同时,你也可以根据自己的需求进行代码的优化和扩展。祝你写出一个很棒的贪吃蛇游戏!
### 回答3:
贪吃蛇是一款经典的游戏,通过控制一条蛇的移动来吃食物,蛇吃到食物后身体会变得更长,蛇的长度增加则游戏难度增加。下面是一个简单的Python贪吃蛇程序示例:
```python
import pygame
import random
# 初始化游戏
pygame.init()
# 游戏窗口大小
window_width = 800
window_height = 600
# 创建游戏窗口
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("贪吃蛇")
# 设置游戏时钟
clock = pygame.time.Clock()
# 蛇的头部位置和速度
snake_head = [100, 50]
snake_speed = 10
# 蛇的身体列表
snake_body = [[100, 50], [90, 50], [80, 50]]
# 食物位置
food = [random.randrange(1, (window_width // 10)) * 10, random.randrange(1, (window_height // 10)) * 10]
# 初始化游戏结束标志
game_over = False
# 游戏主循环
while not game_over:
# 检测事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
# 检测键盘输入
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
snake_head[0] -= snake_speed
if keys[pygame.K_RIGHT]:
snake_head[0] += snake_speed
if keys[pygame.K_UP]:
snake_head[1] -= snake_speed
if keys[pygame.K_DOWN]:
snake_head[1] += snake_speed
# 更新蛇的位置
snake_body.insert(0, list(snake_head))
if snake_head[0] == food[0] and snake_head[1] == food[1]:
food = [random.randrange(1, (window_width // 10)) * 10, random.randrange(1, (window_height // 10)) * 10]
else:
snake_body.pop()
# 检测蛇与边界的碰撞
if snake_head[0] < 0 or snake_head[0] > window_width or snake_head[1] < 0 or snake_head[1] > window_height:
game_over = True
# 检测蛇与自身的碰撞
for block in snake_body[1:]:
if snake_head[0] == block[0] and snake_head[1] == block[1]:
game_over = True
# 绘制游戏窗口
window.fill((0, 0, 0))
for block in snake_body:
pygame.draw.rect(window, (0, 255, 0), pygame.Rect(block[0], block[1], 10, 10))
pygame.draw.rect(window, (255, 0, 0), pygame.Rect(food[0], food[1], 10, 10))
pygame.display.update()
# 控制游戏帧率
clock.tick(20)
# 退出游戏
pygame.quit()
```
上述代码使用了`pygame`库来创建游戏窗口和处理绘图操作,游戏主循环中通过监听键盘输入和更新蛇的位置来实现贪吃蛇的运动。同时,还实现了蛇与边界和自身的碰撞检测,并在绘制游戏窗口时绘制了蛇和食物。最后,通过控制游戏帧率来控制游戏速度。
阅读全文