讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?

[复制链接]
发表于 2026-2-19 16:29:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

同时向讯飞星火、文心一言和通义千问三个国产AI模子提个类似的标题:
“python 写一个贪吃蛇的游戏代码”

看哪一家AI写的步调直接能用,谁就胜出!
讯飞星火 

讯飞星火给出的代码:
  1. import pygame
  2. import sys
  3. import random
  4. # 初始化pygame
  5. pygame.init()
  6. # 设置屏幕大小
  7. screen_size = (640, 480)
  8. screen = pygame.display.set_mode(screen_size)
  9. # 设置游戏标题
  10. pygame.display.set_caption("贪吃蛇")
  11. # 定义颜色
  12. WHITE = (255, 255, 255)
  13. GREEN = (0, 255, 0)
  14. RED = (255, 0, 0)
  15. # 蛇的初始位置
  16. snake_pos = [[100, 100], [80, 100], [60, 100]]
  17. # 食物的初始位置
  18. food_pos = [300, 300]
  19. # 蛇的初始速度
  20. snake_speed = [20, 0]
  21. # 主循环
  22. while True:
  23.     # 处理游戏事件
  24.     for event in pygame.event.get():
  25.         if event.type == pygame.QUIT:
  26.             pygame.quit()
  27.             sys.exit()
  28.         elif event.type == pygame.KEYDOWN:
  29.             if event.key == pygame.K_UP:
  30.                 snake_speed = [0, -20]
  31.             elif event.key == pygame.K_DOWN:
  32.                 snake_speed = [0, 20]
  33.             elif event.key == pygame.K_LEFT:
  34.                 snake_speed = [-20, 0]
  35.             elif event.key == pygame.K_RIGHT:
  36.                 snake_speed = [20, 0]
  37.     # 更新蛇的位置
  38.     snake_pos.insert(0, [snake_pos[0][0] + snake_speed[0], snake_pos[0][1] + snake_speed[1]])
  39.     # 检查蛇头是否碰到食物
  40.     if snake_pos[0] == food_pos:
  41.         food_pos = [random.randrange(1, screen_size[0] // 20) * 20, random.randrange(1, screen_size[1] // 20) * 20]
  42.     else:
  43.         snake_pos.pop()
  44.     # 检查蛇头是否碰到墙壁或者蛇身
  45.     if snake_pos[0][0] < 0 or snake_pos[0][0] >= screen_size[0] or snake_pos[0][1] < 0 or snake_pos[0][1] >= screen_size[1] or snake_pos[0] in snake_pos[1:]:
  46.         pygame.quit()
  47.         sys.exit()
  48.     # 绘制游戏界面
  49.     screen.fill(WHITE)
  50.     for pos in snake_pos:
  51.         pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 20, 20))
  52.     pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], 20, 20))
  53.     pygame.display.flip()
  54.     # 控制游戏速度
  55.     pygame.time.Clock().tick(10)
复制代码
按F5实验,运行效果如下:

文心一言

文心一言给出的代码:
```
import pygame  
import random  
  
# 初始化pygame  
pygame.init()  
  
# 界说颜色  
WHITE = (255, 255, 255)  
  
# 界说屏幕巨细  
SCREEN_WIDTH = 400  
SCREEN_HEIGHT = 400  
  
# 创建屏幕  
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))  
  
# 设置标题  
pygame.display.set_caption("Snake Game")  
  
# 创建时钟对象,用于控制游戏速率  
clock = pygame.time.Clock()  
  
# 创建蛇和食品的初始位置和巨细  
snake_parts = [[100, 50], [90, 50], [80, 50]]  
snake_head = [70, 50]  
food_x = random.randint(1, 19) * 20  
food_y = random.randint(1, 19) * 20  
snake_size = 20  
food_size = 20  
  
# 界说蛇和食品的活动方向和速率  
snake_dir = [2, 0]  
snake_speed = 10  
food_speed = 5  
  
# 界说游戏状态:举行中或竣事  
game_active = True  
  
# 游戏循环  
while game_active:  
    # 处理处罚变乱  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            game_active = False  
        elif event.type == pygame.KEYDOWN:  
            if event.key == pygame.K_UP and snake_dir != [2, 0]: snake_dir = [0, -1]  
            elif event.key == pygame.K_DOWN and snake_dir != [2, 0]: snake_dir = [0, 1]  
            elif event.key == pygame.K_LEFT and snake_dir != [1, 0]: snake_dir = [-1, 0]  
            elif event.key == pygame.K_RIGHT and snake_dir != [3, 0]: snake_dir = [1, 0]  
  
    # 移动蛇头,如果遇到食品,则加长蛇身,并重新天生食品位置  
    snake_head[0] += snake_dir[0] * snake_speed  
    snake_head[1] += snake_dir[1] * snake_speed  
    if snake_head[0] == food_x and snake_head[1] == food_y:  
        food_x = random.randint(1, 19) * 20  
        food_y = random.randint(1, 19) * 20  
        snake_parts.insert(0, list(snake_head))  
    else:  
        snake_parts.pop()  
    # 如果蛇头超出屏幕界限,则游戏竣事  
    if snake_head[0] < 0 or snake_head[0] >= SCREEN_WIDTH or snake_head[1] < 0 or snake_head[1] >= SCREEN_HEIGHT:  
        game_active = False  
    # 如果蛇头撞到自己的身材,则游戏竣事  
    for part in snake_parts:  
        if part == list(snake_head): continue  
        if part[0] == snake_head[0] and part[1] == snake_head[1]:  
            game_active = False  
            break  
    # 将蛇身和食品绘制到屏幕上,革新屏幕表现效果  
    screen.fill(WHITE)  
    for part in snake_parts:  
        pygame.draw.rect(screen, WHITE, pygame.Rect(part[0], part[1], snake_size, snake_size))  
    pygame.draw.rect(screen, WHITE, pygame.Rect(food_x, food_y, food_size, food_size))  
    pygame.display.flip()  
    # 控制游戏速率,制止步调运行过快导致游戏体验不佳,同时包管游戏运行流通度,制止卡顿征象发生。  
    clock.tick(60)  # 每秒60帧,即每秒游戏画面更新60次。
```
按F5实验,报以下错误:
pygame 2.5.0 (SDL 2.28.0, Python 3.11.0)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "E:\.py\snake.py", line 59, in <module>
    snake_parts.pop()
IndexError: pop from empty list
通义千问

通义千问给出的代码:
```python
import pygame
import sys
import random
# 初始化 Pygame
pygame.init()
# 设置屏幕巨细和标题
screen = pygame.display.set_mode((400, 400))
pygame.display.set_caption('Snaky')
# 设置游戏速率
clock = pygame.time.Clock()
# 蛇体、食品的巨细
cell_size = 10
# 蛇的初始位置、方向和长度
snake_x = 200
snake_y = 200
snake_direction = 'right'
snake_length = 3
# 食品的初始位置
food_x = random.randint(0, 380 - cell_size)
food_y = random.randint(0, 380 - cell_size)
# 蛇移动的方向向量
right = (1, 0)
left = (-1, 0)
up = (0, -1)
down = (0, 1)
# 游戏是否竣事
game_over = False
# 游戏主循环
while not game_over:
    # 处理处罚变乱
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        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 == 'right':
        snake_x += cell_size
    elif snake_direction == 'left':
        snake_x -= cell_size
    elif snake_direction == 'up':
        snake_y -= cell_size
    elif snake_direction == 'down':
        snake_y += cell_size
    
    # 查抄蛇是否遇到墙壁或自己的身材
    if snake_x < 0 or snake_x >= 400 - cell_size or snake_y < 0 or snake_y >= 400 - cell_size:
        game_over = True
    for i in range(snake_length - 1, -1, -1):
        if snake_x == snake_body[0] and snake_y == snake_body[1]:
            game_over = True
    # 查抄蛇是否吃到食品
    if snake_x == food_x and snake_y == food_y:
        food_x = random.randint(0, 380 - cell_size)
        food_y = random.randint(0, 380 - cell_size)
        snake_length += 1
        snake_body.append((snake_x, snake_y))
    # 绘制蛇和食品
    screen.fill((0, 0, 0))
    for i in range(snake_length):
        pygame.draw.rect(screen, (255, 255, 255), (snake_body[0], snake_body[1], cell_size, cell_size))
    pygame.draw.rect(screen, (0, 255, 0), (food_x, food_y, cell_size, cell_size))
    # 更新屏幕
    pygame.display.flip()
    clock.tick(10)
# 退出 Pygame
pygame.quit()
sys.exit()
```
按F5实验,报以下错误:
pygame 2.5.0 (SDL 2.28.0, Python 3.11.0)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "E:\.py\snake.py", line 67, in <module>
    if snake_x == snake_body[0] and snake_y == snake_body[1]:
NameError: name 'snake_body' is not defined. Did you mean: 'snake_y'?
讯飞星火胜出!

只有讯飞星火未做任何修改,代码直接拿来就能运行,胜出!
但只阐明仅此一个标题的胜出,并非就说讯飞团体就比别的两家强哦!

代码改进


简朴做了2个小的优化改进:
1. 代码细分为多个函数 init() repaint() quit_game() ......
2. 游戏界面增长了方格线,利用pygame.draw.lines(),快速布点是关键:
    # 界说线段端点坐标时,根据规律分别写x,y坐标的数据列表
    x,y = (-1,640,640,-1)*16, []
    for i in range(36):
        for _ in range(2):
            y.append(19+i*20)
    # zip()整合x,y为坐标Pair
    points = list(zip(x,y))
完成代码
  1. import pygame
  2. import sys
  3. import random
  4. # 定义颜色
  5. WHITE = (255, 255, 255)
  6. GREEN = (0, 255, 0)
  7. RED  = (255, 0, 0)
  8. GREY = (211, 211, 211)  # 淡灰色
  9. def init():
  10.     global screen, screen_size
  11.     global snake_pos, food_pos, snake_speed
  12.     # 初始化pygame
  13.     pygame.init()
  14.     # 设置屏幕大小
  15.     screen_size = (640, 480)
  16.     screen = pygame.display.set_mode(screen_size)
  17.     # 设置游戏标题
  18.     pygame.display.set_caption("贪吃蛇")
  19.     # 蛇的初始位置
  20.     snake_pos = [[100, 100], [80, 100], [60, 100]]
  21.     # 食物的初始位置
  22.     food_pos = [300, 300]
  23.     # 蛇的初始速度
  24.     snake_speed = [20, 0]
  25. def repaint():
  26.     # 绘制游戏界面
  27.     screen.fill(WHITE)
  28.     # 定义线段的端点坐标
  29.     x,y = (-1,640,640,-1)*16, []
  30.     for i in range(36):
  31.         for _ in range(2):
  32.             y.append(19+i*20)
  33.     # 使用pygame.draw.lines()函数绘制线段
  34.     points = list(zip(x,y))
  35.     pygame.draw.lines(screen, GREY, False, points, 1) # 线宽为1
  36.     points = list(zip(y,x))
  37.     pygame.draw.lines(screen, GREY, False, points, 1)   
  38.     # 重画蛇和食物
  39.     for pos in snake_pos:
  40.         pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 20, 20))
  41.     pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], 20, 20))
  42.     pygame.display.flip()
  43. def game_quit():
  44.     pygame.quit()
  45.     sys.exit()
  46. def main():
  47.     global screen, screen_size
  48.     global snake_pos, food_pos, snake_speed
  49.    
  50.     # 主循环
  51.     while True:
  52.         # 处理游戏事件
  53.         for event in pygame.event.get():
  54.             if event.type == pygame.QUIT:
  55.                 game_quit()
  56.             elif event.type == pygame.KEYDOWN:
  57.                 if event.key == pygame.K_UP:
  58.                     snake_speed = [0, -20]
  59.                 elif event.key == pygame.K_DOWN:
  60.                     snake_speed = [0, 20]
  61.                 elif event.key == pygame.K_LEFT:
  62.                     snake_speed = [-20, 0]
  63.                 elif event.key == pygame.K_RIGHT:
  64.                     snake_speed = [20, 0]
  65.         # 更新蛇的位置
  66.         snake_pos.insert(0, [snake_pos[0][0] + snake_speed[0], snake_pos[0][1] + snake_speed[1]])
  67.         # 检查蛇头是否碰到食物
  68.         if snake_pos[0] == food_pos:
  69.             food_pos = [random.randrange(1, screen_size[0] // 20) * 20, random.randrange(1, screen_size[1] // 20) * 20]
  70.         else:
  71.             snake_pos.pop()
  72.         # 检查蛇头是否碰到墙壁或者蛇身
  73.         if snake_pos[0][0] < 0 or snake_pos[0][0] >= screen_size[0] or snake_pos[0][1] < 0 or snake_pos[0][1] >= screen_size[1] or snake_pos[0] in snake_pos[1:]:
  74.             game_quit()
  75.             '''
  76.             此处可增加与用户的交互,如:
  77.             if askyesno('title','again?'):
  78.                 init() # Yes to Play again
  79.             else:
  80.                 game_quit() # No to Exit
  81.             '''
  82.         # 重画界面及蛇和食物
  83.         repaint()
  84.         # 控制游戏速度
  85.         pygame.time.Clock().tick(10)
  86. if __name__ == "__main__":
  87.     init()
  88.     main()
复制代码
更多改进思绪:
增长游戏的生命值,好比初始有3条蛇,死完后提示用户“重来”照旧“退出游戏”;
增长游戏的得分,好比每吃到一个食品,得分增长10分;竣事时写入排行榜;
增长游戏配景音乐和声效,进步游戏可玩性……

善于pygame编程的你,请继承
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表