代码拉取完成,页面将自动刷新
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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。