跳至內容

DarkBASIC 程式設計/2D 遊戲程式設計第 2 部分

來自華夏公益教科書,開放世界開放書籍

第 19 天

[編輯 | 編輯原始碼]

好的,我們已經制作了 Pong,下一步是製作一個 Breakout 遊戲。僅僅給你遊戲的原始碼證明你並沒有自己編寫 Pong 遊戲。所以我要做的是讓你自己編寫 Breakout 遊戲,我會給出一些指導性示例。在這次快速的 Breakout 遊戲練習之後,我將討論多媒體!

碰撞

如果 精靈碰撞(球拍, 球) = 1 那麼 反彈球 = 1

讓球反彈的可能解決方案:S

- 設定一個名為 ballmovex 的變數,將它的值設定為隨機的 1 或 0。- 如果球撞擊 0,讓它向左移動,如果撞擊 1,讓它向右移動。- 對名為 ballmovey 的變數執行相同的操作,但在這-種情況下是向上或向下移動。

設定方塊的可能解決方案

- 設定一個數組,它包含方塊的 x 位置和 y 位置。然後再設定一個數組來判斷方塊是否被擊中,如果方塊被擊中,它的值將等於 1 或 true,然後使用條件語句 (if 和 then) 來執行破壞方塊的操作。

如果 精靈碰撞(球拍, 撞擊方塊(方塊編號)) = 1 那麼 銷燬方塊 = 1


如果 銷燬方塊 = 1

 brickx(bricknum) = -1
 bricky(bricknum) = -1

結束 if


需要記住的事情

  Remember you need a do loop to accept advanced input such as inkey$(), returnkey(), etc.


我已經給出了許多關於如何完成 Breakout 遊戲的建議,希望這能很輕鬆地完成,不會出現任何問題。如果你遇到 “這是什麼” 的情況,我建議你訪問 DarkBASIC 官方主頁上的程式碼庫:http://www.thegamecreators.com,它包含了所有 DarkBASIC 編碼人員需要的東西。

Multimedia In DarkBASIC - Audio

很少有人會說他們不喜歡音樂,事實上大多數人都喜歡在遊戲中聽到環境音樂,我知道我喜歡!上面,我使用了一些奇怪的命令,播放聲音、播放音樂、載入音樂、播放音樂。好吧,DarkBASIC 有三種音訊支援,MP3、Wave 和 Midi。載入音樂非常簡單,聲音的工作方式也相同。所以我要給你一個程式碼示例,你提供聲音,我提供程式碼!



音訊程式碼示例

Rem Audio Example
`Load audio
load sound "mysound.wav",1
load music "mymusic.mid",1
`Play audio once
play sound 1
`Loop music
loop music 1
`wait key
wait key
stop music 1
loop sound 1


那麼結尾的數字是什麼?還記得影像嗎?好吧,這個數字是給定的一個數字 ID。記住音訊的路徑和副檔名!

Multimedia in DarkBASIC - Animations

這可能是我最後一篇關於多媒體的文章,除非有人寫一篇關於 dll 的文章,我不會寫,因為我使用的是舊版本的 DarkBASIC。

目前,動畫不包括像馬里奧走路之類的動畫,但它們包括像動畫 GIF(圖形交換格式)和 AVI(音訊影片交織)之類的動畫。到目前為止,我相信動畫有兩種格式 .gif 和 .avi,如果有其他格式,請告訴我。動畫可以用於遊戲結束畫面,甚至可能有一些像真人快打一樣的終結技!




程式碼示例

load animation "animation1.avi",1
play animation 1
wait key
stop animation 1
load animation "animation2.gif",2
play animation 2
loop animation 2


- 請幫助完成這本書,以任何可能的方式貢獻!-

________________________________________________________________

這關於 2D 遊戲。這個維基幫助我成為了今天的我。不,我不是 DBTutor,但我將貢獻。我是 IRON PROGRAMMER!如果你有任何問題,請在 DarkBASIC 論壇上與我交談。

我挑戰你建立一個 2D 格鬥遊戲。這些很簡單。這裡有一個示例

''cls rgb(150,150,150)

load image "Sumostein.bmp", 1
sprite 1, sprite1xpos, sprite1ypos, 1

sprite1xpos = 300
sprite1ypos = 300

load image "Sumocula.bmp", 2
sprite 2, sprite2xpos, sprite2ypos, 2

load image "Sumocula Punch.bmp", 3
sprite 3, sprite2xpos, sprite2ypos, 3
hide sprite 3

load image "Sumostein Punch.bmp", 4
sprite 4, sprite1xpos, sprite1ypos, 4
hide sprite 4

sprite2xpos = 300
sprite2ypos = 300

playeronelives = 3
playertwolives = 3

mainloop:
do
  cls rgb(150,150,150)
  sprite 1, sprite1xpos, sprite1ypos, 1
  sprite 2, sprite2xpos, sprite2ypos, 2
  sprite 3, sprite2xpos, sprite2ypos, 3
  sprite 4, sprite1xpos, sprite1ypos, 4
  hide sprite 3 
  if upkey() = 1 then sprite1ypos = sprite1ypos -5
  if downkey() = 1 then sprite1ypos = sprite1ypos +5
  if leftkey() = 1 then sprite1xpos = sprite1xpos -5
  if rightkey() = 1 then sprite1xpos = sprite1xpos +5
  if controlkey() = 1 then gosub sumosteinpunch
  if inkey$() = "w" then sprite2ypos = sprite2ypos -5
  if inkey$() = "s" then sprite2ypos = sprite2ypos +5
  if inkey$() = "a" then sprite2xpos = sprite2xpos -5
  if inkey$() = "d" then sprite2xpos = sprite2xpos +5
  if inkey$() = "x" then gosub sumoculapunch
  if spacekey() = 1 then end
  if sprite1xpos =<0 then sprite1xpos = sprite1xpos +5
  if sprite1xpos =>550 then sprite1xpos = sprite1xpos -5
  if sprite1ypos =<0 then sprite1ypos = sprite1ypos +5
  if sprite1ypos =>350 then sprite1ypos = sprite1ypos -5
  if sprite2xpos =<0 then sprite2xpos = sprite2xpos +5
  if sprite2xpos =>550 then sprite2xpos = sprite2xpos -5
  if sprite2ypos =<0 then sprite2ypos = sprite2ypos +5
  if sprite2ypos =>350 then sprite2ypos = sprite2ypos -5
loop

sumoculapunch:
hide sprite 2
show sprite 3
wait 250
if sprite collision(3, 1) = 1
  playeronelives = playeronelives -1
  if playeronelives = 0
  delete sprite 1
  end
endif
endif
hide sprite 3
show sprite 2
gosub mainloop

sumosteinpunch:
hide sprite 1
show sprite 4
wait 250
if sprite collision(4, 2) = 1
  playertwolives = playertwolives -1
  if playertwolives = 0
  delete sprite 2 
  end
endif
endif
hide sprite 4
show sprite 1
gosub mainloop''

這是一個簡單的 2D 多人格鬥遊戲的格式。請注意,我巧妙地沒有提供媒體!哈哈哈哈!現在開始程式設計吧!

第 20 天

[編輯 | 編輯原始碼]

->>3D 程式設計<<- 噠噠噠! (我不是 DBTutor,也不是 IRONPROGRAMMER,我是 gluon,你可以在 DexOS 論壇上找到我)
第一個示例
一個可控的立方體

SYNC RATE 60

MAKE OBJECT CUBE 1,1
DO
    if leftkey()=1 then YROTATE OBJECT 1,OBJECT ANGLE Y(1)-2
    if rightkey()=1 then YROTATE OBJECT 1,OBJECT ANGLE Y(1)+2
    if upkey()=1 then XROTATE OBJECT 1,OBJECT ANGLE X(1)-2
    if downkey()=1 then XROTATE OBJECT 1,OBJECT ANGLE X(1)+2
    SYNC
LOOP
END

我們可以說 SPHERE 等等,而不是 MAKE OBJECT CUBE。
一個紋理物體

sync on
hide mouse
make object cube 1,20
load image "car.jpg",1
texture object 1,1,1
do
sync
loop

移動物體

Sync on
sync rate 40
hide mouse  
make object cube 1,10  
do
   if rightkey()=1 then y=wrapvalue(y+1)
   if leftkey()=1 then y=wrapvalue(y-1)
   if upkey()=1 then move object 1,1
   if downkey()=1 then move object 1,-1
   yrotate object 1,y
   sync
loop
華夏公益教科書