最近跟别人聊天,听说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。