2016-02-19 65 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(這意味着它不存在)。如果你想要的話,你還可以添加一個文本版本的爆炸來給它更多的天賦。祝你的項目好運,我希望這有助於!