使用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上又实现了一个贪吃蛇小程序,还挺有意思的。

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

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

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

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

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

全删了:再来一次!

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

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

玩一下困难模式:

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

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

三、总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值