加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
main.gd 2.40 KB
一键复制 编辑 原始数据 按行查看 历史
xzcdcln 提交于 2024-09-13 21:28 . 1.0
extends Control
const 格子场景= preload("res://格子.tscn")
@onready var tile_map_layer = $TileMapLayer
@onready var move_timer = $move_timer
var 贪吃蛇:Array[Vector2i]
var 当前方向:Vector2i=Vector2i.RIGHT
var 食物坐标=null
var 最大坐标:Vector2i=Vector2i(40,22)
func 初始化(data:Dictionary):
初始化贪吃蛇()
随机生成食物()
显示贪吃蛇()
func 退出():
贪吃蛇.clear()
食物坐标=null
当前方向=Vector2i.RIGHT
func 显示贪吃蛇():
for 格子 in tile_map_layer.get_children():
tile_map_layer.remove_child(格子)
for i in range(贪吃蛇.size()):
var 格子=格子场景.instantiate()
tile_map_layer.add_child(格子)
格子.position=tile_map_layer.map_to_local(贪吃蛇[i])-Vector2(24,24)
格子.color_rect.color=(Color(0,pow(0.9,i),0,1))
var 格子=格子场景.instantiate()
tile_map_layer.add_child(格子)
格子.position=tile_map_layer.map_to_local(食物坐标)-Vector2(24,24)
格子.设置为食物()
func _on_move_timer_timeout():
贪吃蛇移动()
显示贪吃蛇()
func 初始化贪吃蛇():
贪吃蛇.append(获取随机坐标())
func 贪吃蛇移动():
var 尾部=贪吃蛇[贪吃蛇.size()-1]
for i in range(贪吃蛇.size()-1,0,-1):
贪吃蛇[i]=贪吃蛇[i-1]
贪吃蛇[0]=贪吃蛇[0]+当前方向
if 贪吃蛇[0]==食物坐标:
贪吃蛇.append(尾部)
move_timer.wait_time=move_timer.wait_time*0.975
print(move_timer.wait_time)
随机生成食物()
if 判断失败():
move_timer.stop()
GameViewManager.打开弹窗("game_over")
func _input(event):
if event.is_action_pressed("ui_down"):
if 当前方向!=Vector2i.UP:
当前方向=Vector2i.DOWN
elif event.is_action_pressed("ui_up"):
if 当前方向!=Vector2i.DOWN:
当前方向=Vector2i.UP
elif event.is_action_pressed("ui_right"):
if 当前方向!=Vector2i.LEFT:
当前方向=Vector2i.RIGHT
elif event.is_action_pressed("ui_left"):
if 当前方向!=Vector2i.RIGHT:
当前方向=Vector2i.LEFT
func 随机生成食物():
食物坐标=获取随机坐标()
func 获取随机坐标():
while true:
var 坐标:Vector2i
坐标.x=randi_range(5,34)
坐标.y=randi_range(5,16)
if not 贪吃蛇.has(坐标):
return 坐标
func 判断失败():
for i in range(1,贪吃蛇.size()-1):
if 贪吃蛇[0]==贪吃蛇[i]:
return true
if 贪吃蛇[0].x>=40 or 贪吃蛇[0].x<0 or 贪吃蛇[0].y>=22 or 贪吃蛇[0].y<0:
return true
return false
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化