2016-02-19 86 views
2

我想在TIBasic中制作一个像Galaga这样的简单街机射击游戏。我成功地创建了一些代码,可以让你在屏幕上水平移动你的角色(一个“X”),同时拍摄一个清理沿着它所需的垂直路径的所有东西的子弹。但是,我对于应该从屏幕上掉下来的“岩石”有问题,并在击中时消失。当我拍摄岩石时,它会被子弹清除,然后继续沿着屏幕向下,直到它碰到屏幕的底部。下面是岩石的代码:Tibasic检查字符是否在屏幕上的位置

//outside the game loop: 
1->R 

//inside game loop: 
If not(R=8) 
Then 
R+1->R 
If R>1 
Then 
Output(E-1, 1, " " //removes last rock 
End 
Output(R, 1, "R" //replaces last rock with one below it (traveling towards the ground) 
End 

此代码显然不能持续下去的画面时,它被清除(顺便说一下停止“R”,我只是无论子弹是用Output(...," ")清除子弹击中的任何东西)。那么,如何在游戏循环的最后一次迭代中检查岩石是否被清除?有没有办法检查屏幕上某处(“R”)是否在屏幕上的某个位置,以检查它是否在最后一次迭代中被子弹清除了?或者,还有更好的方法?谢谢您的帮助!

+1

我不认为TI-BASIC允许您检查屏幕上显示的内容。但是,您始终可以学习如何在z80 ASM中编写程序并以这种方式访问​​屏幕缓冲区。一旦你编写了一个程序来完成它,你可以在你的主程序中调用它。但是,这将必须特定于它的精确计算器和操作系统版本。 – fuzzything44

+0

好的,谢谢你的帮助 –

+0

你最简单的做法就是保持它在变量中的位置(列表对于保存比你通常得到的28更多的变量是很好的)并检查它。 – fuzzything44

回答

2

在Ti-Basic中制作游戏时,有2个选项可供“屏幕”使用:计算器的文本屏幕使用Disp和Output等功能,图形屏幕使用Text作为以及绘图功能,存储的图片以及pxl和pt功能。我不知道如何检查文本出来放画面在屏幕上的物体的存在,而图形函数的PXL-Test功能:

:Pxl-Test(y,x) 

别人可能知道如何检查对于文本屏幕上的某些内容,但我建议切换到图形屏幕以利用此功能。

如果你要切换到使用这里的图形输出有一些事情要注意:

  • 的文本功能是

    :Text(row,col,output) 
    
  • ROW和COL从输出功能切换

  • 行和列以屏幕上的像素为单位进行测量,而不是输入字母所需的空间

  • 大多数字母3个像素宽,空间是1个像素宽,因此将需要多个空格,以清除不希望的字符

  • 您可能需要禁用图表轴(FORMAT菜单)中,y - 函数(VARS菜单,然后右键到Y-VARS)以及程序请求中的stat-plots(STAT PLOT菜单),然后在最后恢复它们。

最后一个不使用Pxl-Test功能的是它测试一组像素,而一个字母。现在让我们假装你只在你的程序中使用R和X(我不知道你是否这样做),所以你应该测试该角色相对于该角色相对独特的一个位置。

祝你好运!

+0

如果没有组装,则无法访问主屏幕上的像素。 (我不认为图书馆存在这样做。) – lirtosiast

3

看起来你的代码没有测试子弹是否与岩石在同一个地方。要发生这种碰撞,你需要比较岩石的“R”y值和你显示的子弹的y值,并将岩石的x值(不管你存储的)与x子弹的价值。如果两者相等,则它们已经发生碰撞,并且可以通过将其设置为任何表示它不再存在的值来“删除”该岩石。假设R是岩石的y值,S是岩石的x值,Y是子弹的y值,X是子弹的x值。在移动岩石的代码中,我把这个地方:

:If R=Y and S=X 
:DelVar R 
//You could also delete the bullet here because it's "stopped" by the rock 

这段代码测试,如果两者发生碰撞并集R为0(这意味着它不存在)。如果你想要的话,你还可以添加一个文本版本的爆炸来给它更多的天赋。祝你的项目好运,我希望这有助于!