gpt4 book ai didi

ada - 如何在不暂停蛇游戏的情况下读取输入?

转载 作者:行者123 更新时间:2023-12-04 03:05:30 25 4
gpt4 key购买 nike

这是一项学校作业。创建一个贪吃蛇游戏。所以我创建了两个包,一个用于图形,一个用于蛇。蛇移动顺利,一切正常。但是我需要用键盘控制蛇。这是主要程序:

with Graphics; use Graphics;
with Graphics.Snake; use Graphics.Snake;

procedure Run_Snake is
B : Buffer (1 .. 24, 1 .. 80);
S : Snake_Type (1 .. 5) := ((10, 10),
(10, 11),
(10, 12),
(11, 12),
(12, 12));
D : Duration := 0.07;
begin

loop
Empty (B);
Draw_Rect (B, (1, 1), Width => 80,
Height => 24);
Draw (B, S);
Update (B);



Move (S, 0, -1);
delay D;

end loop;

end Run_Snake;

在这行代码中,我控制了蛇的头部旋转:

Move (S, x, y);  

其中 x 是 x 值,左边可以是 -1,右边可以是 1。
其中 y 是 y 值,向下可以是 -1,向上可以是 1;

无论如何,我怎样才能在不让蛇停止移动的情况下读取输入?谢谢

最佳答案

您可能想使用多任务系统来解决您的问题。

procedure Snake_Game is

task Run_Snake is
entry Input_Received (S : Snake_Type; x : Integer; y : Integer);
end Run_Snake;

task body Run_Snake is
D : constant Duration := 0.07;
B : Buffer (1 .. 24, 1 .. 80);
begin
loop
select
accept Input_Received (S : Snake_Type; x : Integer; y : Integer) do
Move (S, x, y);
end;
or
delay D;
Empty (B);
Draw_Rect (B, (1, 1), Width => 80, Height => 24);
Draw (B, S);
Update (B);
end select;
end loop;
end Run_Snake;

S : Snake_Type (1 .. 5) := ((10, 10),
(10, 11),
(10, 12),
(11, 12),
(12, 12));

begin
loop
Do_Whatever_You_Want_To_Get (x, y)
Run_Snake.Input_Received(S, x, y);
end loop;
end Snake_Game;

在这样的系统中,您的绘图过程在一个单独的任务中。在“选择”行,任务等待调用 Input_Received()。如果在持续时间 D 后没有调用此条目,则任务执行所有绘图函数,并重新开始循环。

希望对您有所帮助。干杯。

关于ada - 如何在不暂停蛇游戏的情况下读取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com