使用Trae写一个贪吃蛇游戏

最近跟别人聊天,听说ai软件特别好用,特别是写代码的时候。然后我就想试试trea这个软件。听说是字节出的对标cursor。并且完全免费,对于一个学生党来说,这个太香了!!!!

让我们尝试使用一下!

任务目标:做一个贪吃蛇游戏,并且上架微信程序!!!

github地址:

这个任务我打算分为两个阶段完成:游戏本体、上架微信小程序(在此之前从未接触过相关知识)

一、游戏本体

在这里我贴出完整的对话流程:

对话一:
生成一个贪吃蛇游戏

对话二:
我希望我的贪吃蛇没有边界碰撞,并且从左边界出去了之后能从右边出来。其他的边界处理类似

对话三:
然后希望他的头可以用不同的颜色指示。然后初始长度为3

对话四:(我开始尝试分配给他多个任务做,但好像效果不太行,所有给提示还是一步一步给比较好)
1.做个启动的开关,还有退出游戏的开关。

2.启动游戏之后可以选择难度,分三档,容易普通困难,对应的蛇移动的速度也不一样。

3.蛇在吃到东西的时候,有一个吃东西的音效

对话五~十:我直接把terminal的错误给trea了,完全没自己修改过代码。最终也是解决了问题所在(主要还是变量名使用不正确导致,因为之前使用r1的时候我嫌太慢了,就改了v3。这点需要在后续实际使用的过程中注意一下)。

对话十一:游戏是做出来了,但是再window上显示的是乱码。

然后游戏的开始界面都是乱码,能不能改一下?我用的是windows界面

我的贪吃蛇游戏:

开始界面:

实际游戏:

游戏本体源码:

import pygame
import random
import sys

# 初始化参数
WIDTH = 800
HEIGHT = 600
CELL_SIZE = 20
FPS = 10

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)

class SnakeGame:
    def __init__(self):
        # 游戏状态常量
        self.MENU = "MENU"
        self.PLAYING = "PLAYING"
        self.GAME_OVER = "GAME_OVER"
        pygame.init()
        pygame.mixer.init()
        self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
        pygame.display.set_caption('贪吃蛇')
        self.clock = pygame.time.Clock()
        
        # 游戏状态和难度
        self.state = self.MENU
        self.difficulty = FPS
        try:
            self.eat_sound = pygame.mixer.Sound("eat_sound.wav")
        except:
            # 创建静音音效作为备用
            self.eat_sound = pygame.mixer.Sound(buffer=bytes([0]*44))
        
        # 初始化蛇身
        self.snake = [
            (WIDTH//2, HEIGHT//2),
            (WIDTH//2 - CELL_SIZE, HEIGHT//2),
            (WIDTH//2 - CELL_SIZE*2, HEIGHT//2)
        ]
        self.direction = (0, 0)
        
        # 生成食物
        self.food = self.generate_food()
        
        # 难度常量
        self.EASY = 5
        self.MEDIUM = 10
        self.HARD = 15

    def generate_food(self):
        while True:
            x = random.randint(0, (WIDTH-CELL_SIZE)//CELL_SIZE) * CELL_SIZE
            y = random.randint(0, (HEIGHT-CELL_SIZE)//CELL_SIZE) * CELL_SIZE
            if (x, y) not in self.snake:
                return (x, y)

    def handle_input(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            
            if event.type == pygame.KEYDOWN:
                if self.state == self.MENU:
                    if event.key == pygame.K_1:
                        self.difficulty = self.EASY
                        self.state = self.PLAYING
                    elif event.key == pygame.K_2:
                        self.difficulty = self.MEDIUM
                        self.state = self.PLAYING
                    elif event.key == pygame.K_3:
                        self.difficulty = self.HARD
                        self.state = self.PLAYING
                    elif event.key == pygame.K_ESCAPE:
                        pygame.quit()
                        sys.exit()
                elif self.state == self.PLAYING:
                    if event.key == pygame.K_UP and self.direction != (0, CELL_SIZE):
                        self.direction = (0, -CELL_SIZE)
                    elif event.key == pygame.K_DOWN and self.direction != (0, -CELL_SIZE):
                        self.direction = (0, CELL_SIZE)
                    elif event.key == pygame.K_LEFT and self.direction != (CELL_SIZE, 0):
                        self.direction = (-CELL_SIZE, 0)
                    elif event.key == pygame.K_RIGHT and self.direction != (-CELL_SIZE, 0):
                        self.direction = (CELL_SIZE, 0)
                    elif event.key == pygame.K_ESCAPE:
                        self.state = self.MENU
                        self.reset_game()
                elif self.state == self.GAME_OVER:
                    if event.key == pygame.K_RETURN:
                        self.state = self.MENU
                        self.reset_game()

    def update(self):
        if self.state != self.PLAYING or self.direction == (0, 0):
            return

        head = (
            (self.snake[0][0] + self.direction[0]) % WIDTH,
            (self.snake[0][1] + self.direction[1]) % HEIGHT
        )
        
        # 自身碰撞检测
        if head in self.snake:
            self.state = self.GAME_OVER
            return

        self.snake.insert(0, head)
        
        # 吃到食物
        if head == self.food:
            self.eat_sound.play()
            self.food = self.generate_food()
        else:
            self.snake.pop()

    def draw(self):
        self.screen.fill(BLACK)
        
        if self.state == self.PLAYING:
            # 绘制蛇身
            for i, segment in enumerate(self.snake):
                color = RED if i == 0 else GREEN
                pygame.draw.rect(self.screen, color, 
                                (segment[0], segment[1], CELL_SIZE, CELL_SIZE))
            
            # 绘制食物
            pygame.draw.rect(self.screen, RED, 
                            (self.food[0], self.food[1], CELL_SIZE, CELL_SIZE))
        elif self.state == self.MENU:
            font = pygame.font.SysFont('SimHei', 48)
            title = font.render('贪吃蛇游戏', True, WHITE)
            self.screen.blit(title, (WIDTH//2 - title.get_width()//2, 100))
            
            font = pygame.font.SysFont('SimHei', 36)
            easy = font.render('1. 简单', True, WHITE)
            medium = font.render('2. 普通', True, WHITE)
            hard = font.render('3. 困难', True, WHITE)
            quit_text = font.render('ESC. 退出游戏', True, WHITE)
            
            self.screen.blit(easy, (WIDTH//2 - easy.get_width()//2, 200))
            self.screen.blit(medium, (WIDTH//2 - medium.get_width()//2, 250))
            self.screen.blit(hard, (WIDTH//2 - hard.get_width()//2, 300))
            self.screen.blit(quit_text, (WIDTH//2 - quit_text.get_width()//2, 400))
        elif self.state == self.GAME_OVER:
            font = pygame.font.SysFont('SimHei', 48)
            game_over = font.render('游戏结束!', True, RED)
            restart = font.render('按回车键返回菜单', True, WHITE)
            
            self.screen.blit(game_over, (WIDTH//2 - game_over.get_width()//2, 200))
            self.screen.blit(restart, (WIDTH//2 - restart.get_width()//2, 300))
        
        pygame.display.flip()

    def reset_game(self):
        # 重置蛇的位置
        self.snake = [
            (WIDTH//2, HEIGHT//2),
            (WIDTH//2 - CELL_SIZE, HEIGHT//2),
            (WIDTH//2 - CELL_SIZE*2, HEIGHT//2)
        ]
        # 重置方向
        self.direction = (0, 0)
        # 重新生成食物
        self.food = self.generate_food()

    def game_over(self):
        pygame.quit()
        sys.exit()

    def run(self):
        while True:
            self.handle_input()
            self.update()
            self.draw()
            self.clock.tick(self.difficulty if self.state == self.PLAYING else FPS)

if __name__ == "__main__":
    game = SnakeGame()
    game.run()

二、上架微信小程序

其实最后跑完之后,发现trea是在js上又实现了一个贪吃蛇小程序,还挺有意思的。

下载微信开发者工具(以前完全没接触过。。。):

参考:微信开发者导入微信小程序项目-优快云博客

好像没注册这个微信开发者工具,尝试注册一下看看。不知道要不要钱钱

启动测试号,试试我们的软件看看。启动失败了!

一系列的笨比操作,终于弄砸了!!

全删了:再来一次!

发现之前自己是通过创建进入的项目,而不是导入操作。导致我老是创建一个新的项目。实际上是要点导入操作。

经过一系列的注册导入操作,终于!!!不过如果要真的放到微信小程序里面好像还需要报备。想想用模拟器玩玩就算了。。。没时间弄,明天还需要上班!!!!

玩一下困难模式:

吃一个目标:变长了!!!hhh。零基础写一个微信小游戏!

其实到这里,还可以继续提示ai,我们就不需要自己写代码。ai真方便啊。有时间再研究研究怎么将这个游戏给同学玩玩看看。

三、总结

现在的ai太厉害了。ai越厉害,越显得基础知识的重要性,不然ai写的bug你都看不懂hhhh。

<think>好的,用户想了解Trae在Python开发中的应用,特别是使用教程和相关库。首先,我需要回忆之前提供的引用内容,看看有哪些信息可以利用。引用2提到Trae的Builder模式可以自动生成贪吃蛇游戏的项目结构,包括main.py和资源文件。引用3则说明Trae对标Cursor,适合中国程序员,可能具有本地化优势。 用户需要教程或相关库的信息,但根据现有引用,Trae本身可能不提供库,而是作为开发工具辅助生成代码。需要明确Trae的作用:项目搭建、代码生成、自动化依赖管理。然后结合引用中的例子,比如生成贪吃蛇游戏的结构,来说明Trae的应用步骤。 另外,用户可能想知道Trae与其他工具(如PyCharm)的区别,或者如何集成到现有工作流中。但现有引用没有这些细节,所以需要基于已有信息回答,避免猜测。同时,用户可能需要具体的操作步骤,比如如何启动Builder模式,输入指令生成项目,这引用2已经提到,可以详细说明。 还要注意生成相关问题,确保问题与Trae的Python开发相关,比如支持的项目类型、依赖管理、与PyGame的协作等。最后,确认回答结构清晰,分步骤解释Trae的应用,并引用提供的资料作为支持。</think>### Trae在Python开发中的应用 Trae是一款针对中国开发者优化的智能开发工具,其核心功能包括**项目自动生成**、**代码智能补全**和**依赖管理**。以下是具体应用说明: #### 1. 项目自动生成(Builder模式) 通过自然语言指令,Trae可自动创建完整的Python项目结构: 1. 打开Trae → 点击「Builder」标签 2. 输入指令:如「创建基于Python的贪吃蛇游戏」 3. 生成结果: ```bash snake_game/ ├── main.py # 游戏主逻辑 ├── requirements.txt # 依赖清单(pygame等) └── assets/ # 资源文件目录[^2] ``` 该功能特别适合快速搭建包含第三方库(如pygame)的项目框架[^1][^2]。 #### 2. 代码智能补全 在编Python代码时: - 输入函数名开头时自动提示完整语法 - 输入注释描述后按`Tab`生成对应代码块 - 支持自动导入第三方库(如`import pygame`) #### 3. 依赖管理 ```python # requirements.txt 示例(自动生成) pygame==2.1.3 numpy==1.23.5 ``` Trae会检测代码中的import语句,自动维护依赖清单并提示版本兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值