GPT答: |
7i24.cn
|
以下是一个使用Python编写的贪吃蛇游戏源代码:
```python
import pygame
import time
import random
# 初始化pygame模块
pygame.init()
# 定义颜色变量(RGB格式)
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50 ,80)
green = (0 ,255 ,0)
blue = (50 ,153,213)
# 设置屏幕宽高和每个方格的大小
dis_width = 800
dis_height=600
snake_block=10
# 创建一个窗口显示游戏界面,设置窗口标题和大小
dis=pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption('贪吃蛇')
clock=pygame.time.Clock()
font_style=pygame.font.SysFont(None ,50) # 设置字体样式和大小
def our_snake(snake_block_size ,snake_list):
for x in snake_list:
pygame.draw.rect(dis ,black ,[x[0] ,x[1] ,(snake_block_size -2) ,(snake_block_size -2)])
def message(msg,color):
mesg=font_style.render(msg,True,color) # 渲染文本消息为图像对象,以便在屏幕上绘制文本消息。
dis.blit(mesg ,[dis_width/6 ,(dis_height/3)]) # 在指定位置绘制图像对象
def gameLoop():
game_over=False # 游戏结束标志位
x1_change=0 # 蛇头在X轴上的位置变化
y1_change=0 # 蛇头在Y轴上的位置变化
x1=dis_width/2 # 初始化蛇头X轴位置
y1=dis_height/2 # 初始化蛇头Y轴位置
snake_List=[] # 用于存储贪吃蛇身体坐标的列表
Length_of_snake=1 # 初始贪吃蛇长度
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 # 随机生成食物X轴坐标
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 # 随机生成食物Y轴坐标
# 游戏主循环
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: ## 如果按下左箭头键,则将X方向上的移动速度设置为负值,即向左移动。
x1_change=-snake_block
y1_change=0
elif event.key==pygame.K_RIGHT: ## 如果按下右箭头键,则将X方向上的移动速度设置为正值,即向右移动。
x1_change=snake_block
y1_change=0
elif event.key==pygame.K_UP: ## 如果按下上箭头键,则将Y方向上的移动速度设置为负值,即向上移动。
y1_change=-snake_block
x1_change=0
elif event.key==pygame.K_DOWN: ## 如果按下下箭头键,则将Y方向上的移动速度设置为正值,即向下移动。
y1_change=snake_block
x1_change=0
if x1>=dis_width or x1<0 or y1>=dis_height or y1<0:
game_over=True
# 更新蛇头位置
x1+=x1_change
y1+=y2_chang
dis.fill(blue) # 绘制背景色
# 绘制食物和贪吃蛇身体
pygame.draw.rect(dis ,green ,[foodx ,foody ,snake_block, snake_block]) # 绘制食物
# 将当前蛇头坐标添加到贪吃蛇身体列表中,并删除多余部分以保持长度不变。
head=[]
head.append(x)
head.append(y)
snakelist.append(head)
if len(snakelist)>Length_of_snake:
del snakelist[0]
for segment in snakelist[:-2]:
if segment == head:
game_over = True
our_snake(snake_block, snakelist) # 调用函数绘制贪吃蛇
pygame.display.update() # 刷新屏幕显示内容
if x == foodx and y == foody: # 如果蛇头坐标与食物坐标相同,则贪吃蛇长度加1,并重新生成食物。
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
Length_of_snake += 1
clock.tick(30)
pygame.quit()
quit()
gameLoop() # 调用游戏主循环函数开始游戏
```
请注意,此代码仅包含基本的贪吃蛇逻辑和绘图功能。您可以根据需要添加更多功能,例如计分、难度级别等。
|