【Family BASIC】遊戲開發(2)-封鎖線

閱讀時間約 14 分鐘
自製遊戲-封鎖線
Blockade(封鎖線)是一款在1976年街機上發行的對戰遊戲,其簡單易懂的玩法,在當時可讓不少人為之瘋狂,這也是我們本次教學的主角,借由重製這款經典遊戲來學習如何使用Family BASIC開發遊戲,讓經典再現。
開始前建議你在複習一下上一篇的教學以熟悉Family BASIC的基本操作。

以下是完成後的遊戲影片

Blockade(封鎖線)企劃

玩法介紹
遊戲一開始雙方各自控制著不斷前進的的方塊(1P 藍色,2P白色),方塊移動過的地方會被填滿,玩家的目標就是盡量想辦法圍住對方讓其可移動區域變小進而碰撞到被填滿的區塊,當然也要一邊小心控制不斷往前移動的方塊,使其不碰到被填滿的區塊;只要雙方任一方先碰到被填滿的區塊這局就算結束,對方獲得1積分。
遊戲流程

操作方式

遊戲操作說明
  • 1P
方向鍵:控制方塊前進方向
START:開始遊戲
SELECT:結束程式
  • 2P
方向鍵:控制方塊前進方向
關於遊戲區陣列
使用陣列來作區塊顯示與碰撞判斷是製作遊戲時滿常使用到的技巧,本次我們也善用了這個技巧,從上圖可以看出,只要是方塊移動到的地方就會在陣列相對位置填入1,以標示此位置已經有方塊了,在判斷碰撞時只要在方塊移動前判斷一下要前進的位置是否為1就會知道是不是已經發生碰撞了。

BG GRAPHIC模式

預計完成背景圖
上圖是我們預計在BG GRAPHIC模式下完成的背景圖。
區塊編號
為了辨識方便先將會使用到的方塊標上編號(白底紅框)。
上圖紅色圈起來的部分請選”CHAR”模式後輸入即可。
遊戲背景與區塊編號
以上畫面的號碼(黑底白框)請參考"區塊編號"所標示的方塊編號(白底紅框),並一一對照將相對方塊圖形填上。
製作自己的版面
強烈建議您發揮創意來製作屬於自己的封鎖線版面,只要不動到上圖紅色半透明區的圖形,其他部分歡迎自由發揮。
還有。。請分享您的創作,讓我也玩到您製作的版面(期待)。

BASIC模式-程式碼

已將完整程式碼放置GitHub Gist上,請點選以下超連結查看:
10  DIM C(17,17)
20 D3=0
30 D7=0
40 IF F=1 THEN D3=D3+1
50 IF F=2 THEN D7=D7+1
60 D0=2
70 D1=2
80 D2=1
90 D4=15
100 D5=15
110 D6=0
120 F=0
130 CLS
140 VIEW
150 LOCATE 9,1
160 PRINT D3
170 LOCATE 18,1
180 PRINT D7
190 L=0
200 FOR X=0 TO 17
210 FOR Y=0 TO 17
220 C(X,Y)=0
230 IF X=0 OR X=17 OR Y=0 OR Y=17 THEN C(X,Y)=1
240 NEXT
250 L=L+5
260 LOCATE 12,10
270 PRINT L
280 NEXT
290 LOCATE 12,10
300 PRINT "     "
310 P1=STICK(0)
320 IF P1=1 THEN D2=3
330 IF P1=2 THEN D2=2
340 IF P1=8 THEN D2=0
350 IF P1=4 THEN D2=1
360 P3=STRIG(0)
370 IF P3=1 AND F>0 THEN GOTO 40
380 IF P3=2 THEN END
390 P2=STICK(1)
400 IF P2=1 THEN D6=3
410 IF P2=2 THEN D6=2
420 IF P2=8 THEN D6=0
430 IF P2=4 THEN D6=1
440 IF F>0 THEN GOTO 310
490 PLAY "C0D1"
500 IF F=0 THEN GOSUB 600
510 IF F=-1 THEN GOSUB 700
520 IF F>0 THEN PLAY"CA1F1AB"
530 IF F<1 THEN F=NOT F
540 GOTO 310
600 IF D2=0 THEN D1=D1-1
610 IF D2=1 THEN D1=D1+1
620 IF D2=2 THEN D0=D0-1
630 IF D2=4 THEN D0=D0+1
640 IF C(D0,D1)=1 THEN F=2
650 IF F=2 THEN LOCATE D4+5,D5+2
660 IF F=2 THEN PRINT CHR$(199)
670 C(D0,D1)=1
680 RETURN
700 IF D6=0 THEN D5=D5-1
710 IF D6=1 THEN D5=D5+1
720 IF D6=2 THEN D4=D4-1
730 IF D6=3 THEN D4=D4+1
740 IF C(D4,D5)=1 THEN F=1
750 IF F=1 THEN LOCATE D0+5,D1+2
760 if F=1 THEN PRINT CHR$(199)
770 C(D4,D5)=1
780 RETURN

程式碼說明:

10 DIM C(17,17)
10行:宣告遊戲區陣列大小
20 D3=0 
30 D7=0
40 IF F=1 THEN D3=D3+1
50 IF F=2 THEN D7=D7+1
20行:初始1P分數(D3)
30行:初始2P分數(D7)
40行:如果F變數為1就將D3變數加1(1P分數)
50行:如果F變數為2就將D7變數加1(2P分數)
60 D0=2 
70 D1=2
80 D2=1
90 D4=15
100 D5=15
110 D6=0
120 F=0
60行:初始1P方塊X位置
70行:初始1P方塊Y位置
80行:初始1P移動方向(0:上 1:下 2:左 3:右)
90行:初始2P方塊X位置
100行:初始2P方塊位置
110行:初始2P移動方向(0:上 1:下 2:左 3:右)
120行:誰移動與誰贏變數(F=0:1P移動 -1:2P移動 1:1P贏 2:2P贏)
130 CLS 
140 VIEW
130行:清除畫面
140行:顯示BG GRAPHIC模式製作的背景圖
150 LOCATE 9,1 
160 PRINT D3
170 LOCATE 18,1
180 PRINT D7
150~160行:在畫面上顯示1P分數(D3)
170~180行:在畫面上顯示2P分數(D7)
190 L=0 
200 FOR X=0 TO 17 
210   FOR Y=0 TO 17 
220     C(X,Y)=0 
230     IF X=0 OR X=17 OR Y=0 OR Y=17 THEN C(X,Y)=1 
240   NEXT 
250   L=L+5 
260   LOCATE 12,10 
270   PRINT L 
280 NEXT 
290 LOCATE 12,10 
300 PRINT "      "
190行:紀錄執行進度變數(L)
200~280行:使用雙迴圈來清除遊戲區陣列
220行:清除遊戲區陣列
230行:填入外圍方塊編號(1),如下圖:
250行:進度累加
260~270行:顯示進度
290~300:清除顯示在畫面上的進度
310 P1=STICK(0) 
320 IF P1=1 THEN D2=3 
330 IF P1=2 THEN D2=2 
340 IF P1=8 THEN D2=0 
350 IF P1=4 THEN D2=1 
360 P3=STRIG(0) 
370 IF P3=1 AND F>0 THEN GOTO 40 
380 IF P3=2 THEN END 
390 P2=STICK(1) 
400 IF P2=1 THEN D6=3 
410 IF P2=2 THEN D6=2 
420 IF P2=8 THEN D6=0 
430 IF P2=4 THEN D6=1 
440 IF F>0 THEN GOTO 310
310行:判斷1P方向鍵輸入,按下後會回傳數值並存入P1變數內(P1=1:按下右方向鍵、P1=2:按下左方向鍵、P1=8:按下上方向鍵、P1=4:按下下方向鍵)
320行:1P按下右方向鍵後將1P的移動方向(D2變數)設定為3(讓方塊往右移動)
330行:1P按下左方向鍵後將1P的移動方向(D2變數)設定為2(讓方塊往左移動)
340行:1P按下上方向鍵後將1P的移動方向(D2變數)設定為1(讓方塊往上移動)
350行:1P按下下方向鍵後將1P的移動方向(D2變數)設定為0(讓方塊往下移動)
360行:判斷1P按鈕輸入,按下後會回傳數值並存入P3變數內(P3=1:按下Start按鈕,P3=2:按下Select按鈕)
370行:判斷1P在遊戲結束時按下Start按鈕後,讓遊戲重新開始
380行:判斷1P按下Select按鈕後,結束遊戲
390行:判斷2P方向鍵輸入,按下後會回傳數值並存入P2變數內(P2=1:按下右方向鍵、P2=2:按下左方向鍵、P2=8:按下上方向鍵、P2=4:按下下方向鍵)
400行:2P按下右方向鍵後將2P的移動方向(D6變數)設定為3(讓方塊往右移動)
410行:2P按下左方向鍵後將2P的移動方向(D6變數)設定為2(讓方塊往左移動)
420行:2P按下上方向鍵後將2P的移動方向(D6變數)設定為1(讓方塊往上移動)
430行:2P按下下方向鍵後將2P的移動方向(D6變數)設定為0(讓方塊往下移動)
440行:如果遊戲結束(F>0)就返回310行繼續判斷玩家輸入
490 PLAY “C0D1” 
500 IF F=0 THEN GOSUB 600 
510 IF F=-1 THEN GOSUB 700 
520 IF F>0 THEN PLAY”CA1F1AB” 
530 IF F<1 THEN F=NOT F 
540 GOTO 310
490行:播放移動音效
500行:如果是1P移動就跳到600行執行副程式(F=0:1P移動 F=-1:2P移動)
510行:如果是2P移動就跳到700行執行副程式(F=0:1P移動 F=-1:2P移動)
520行:如果已經分出勝負(F>0),就播放結束音樂
530行:如果尚未分出勝負就換堆方移動(將F反轉,會以1與-1切換)
540行: 回310行繼續執行
600 IF D2=0 THEN D1=D1–1 
610 IF D2=1 THEN D1=D1+1 
620 IF D2=2 THEN D0=D0–1 
630 IF D2=4 THEN D0=D0+1 
640 IF C(D0,D1)=1 THEN F=2 
650 IF F=2 THEN LOCATE D4+5,D5+2 
660 IF F=2 THEN PRINT CHR$(199) 
670 C(D0,D1)=1 
680 RETURN
600行:判斷變數D2 = 0(1P玩家按方向鍵上),就將1P移動中方塊Y軸(D1)持續減1
610行:判斷變數D2 = 1(1P玩家按方向鍵下),就將1P移動中方塊Y軸(D1)持續加1
620行:判斷變數D2 = 2(1P玩家按方向鍵左),就將1P移動中方塊X軸(D0)持續加1
630行:判斷變數D2 = 4(1P玩家按方向鍵右),就將1P移動中方塊X軸(D0)持續加1
640行:如果1P移動到的位置已經有區塊就設定2P勝利(F=2)
650~660行:在2P的位置顯示小旗子
670行:在1P位置填入區塊編號1(表示此位置已經有區塊)
680行:返回主程式
700 IF D6=0 THEN D5=D5–1 
710 IF D6=1 THEN D5=D5+1 
720 IF D6=2 THEN D4=D4–1 
730 IF D6=3 THEN D4=D4+1 
740 IF C(D4,D5)=1 THEN F=1 
750 IF F=1 THEN LOCATE D0+5,D1+2 
760 if F=1 THEN PRINT CHR$(199) 
770 C(D4,D5)=1 
780 RETURN
700行:判斷變數D6 = 0(2P玩家按方向鍵上),就將2P移動中方塊Y軸(D5)持續減1
710行:判斷變數D6 = 1(2P玩家按方向鍵下),就將2P移動中方塊Y軸(D5)持續加1
720行:判斷變數D6 = 2(2P玩家按方向鍵左),就將2P移動中方塊X軸(D4)持續加1
730行:判斷變數D6 = 4(2P玩家按方向鍵右),就將2P移動中方塊X軸(D4)持續加1
740行:如果2P移動到的位置已經有區塊就設定1P勝利(F=1)
750~760行:在1P的位置顯示小旗子
770行:在2P位置填入區塊編號1(表示此位置已經有區塊)
780行:返回主程式

後記

花了不少時間寫這篇,主要是想盡量說明遊戲的運作原理與程式說明,希望對有興趣使用Family BASIC開發遊戲的同好有所幫助。
另外,來說說這次開發Family BASIC遊戲的小小心得,老實說以Family BASIC 2.0版的SRAM只有2K的容量下要來開發遊戲,很考驗程式跟企劃功力,就拿這次遊戲開發來說,有好幾次都因為程式寫到一半發現SRAM用光了,只好先回頭去最佳化程式跟刪減企劃內容才免免強強把遊戲生出來,不過這不就是懷舊遊戲迷人的地方嗎?!在有限的資源下發揮最大創意,這跟之前在PC或手機上開發遊戲的概念完全不一樣,我個人到是滿享受在這種變態小的容量下開發遊戲的,你說是不是。。。以上是這次的Family BASIC遊戲教學希望你會喜歡,我們下次見囉!!!
為什麼會看到廣告
avatar-img
5會員
16內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
無限升級的沙龍 的其他內容
緣起 場景回到1986年鄉下的一家遊戲專賣店,一群小朋友圍著老闆正聽他口沫橫飛的說著,我跟你們說阿這卡夾還有這個鍵盤組合叫Family BASIC(註1)是用來開發紅白機遊戲用的,是我託廠商從日本弄回來的。。。
緣起 場景回到1986年鄉下的一家遊戲專賣店,一群小朋友圍著老闆正聽他口沫橫飛的說著,我跟你們說阿這卡夾還有這個鍵盤組合叫Family BASIC(註1)是用來開發紅白機遊戲用的,是我託廠商從日本弄回來的。。。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
和大家報告一個令人興奮的好消息!毫無隱藏事工的線上課程《Family-Time 家庭時刻》中文翻譯與教材終於完成翻譯囉!
今年初再次看了電影《白日夢冒險王 The Secret Life of Walter Mitty》,下定決心要活得更衝動、任性(順任本性),但我好像本來就常常衝動行事哈哈。告訴2024的自己:想做什麼都立刻執行、都先有個起頭。 2月第一天騎車直奔臺中的家,清晨五點出門,交通順暢,一半的路程是濱海公
#買桌椅送書包🎈 寶貝開學好夥伴,書包界的翹楚來喇🤩 買桌椅,Tiger Family護脊書包只要1元‼️‼️ 讓寶貝心情美麗閃亮亮迎向學習day😆 另外另外,還有其他多重好禮任你湊🎊 限時2/23~4/30 🔥指定滿額+1 元就送 Tiger Family護脊書包
Thumbnail
《SPY FAMILY CODE: White》是安妮亞第一部推出的劇場版,對於喜歡動畫的觀眾來說,是值得一看的作品。劇情圍繞著家庭的核心,打鬥畫面精彩,是一部適合全家一起觀賞的電影。此外,電影的上映時間、片長和版本等資訊也一併提供。
剛結束久違的家庭旅遊,爸媽與弟剛離開新竹,我已經在沙發上默默地流下了眼淚。 懷孕後對家人間的情感似乎有了更深厚的體會,特別是跟媽媽之間的情感,怕我受驚、不捨我提重物,三不五時也會打電話來問:妳跟小光最近狀況還好嗎? 我也總是第一時間跟媽媽分享每次產檢的內容,知道即使再好的朋友,討論太多小孩的事情
Thumbnail
【SPY×FAMILY間諜家家酒】比較像是單元劇或小劇場。用喜劇包裝隱藏身份的一家三口,漸漸地發展出真正的親情。在冷漠疏離的社會與人際關係下,【SPY×FAMILY間諜家家酒】提供了一個類家人的情感連結,證明家的組成不在於血緣,是來自於對彼此的愛、珍惜與關懷。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
和大家報告一個令人興奮的好消息!毫無隱藏事工的線上課程《Family-Time 家庭時刻》中文翻譯與教材終於完成翻譯囉!
今年初再次看了電影《白日夢冒險王 The Secret Life of Walter Mitty》,下定決心要活得更衝動、任性(順任本性),但我好像本來就常常衝動行事哈哈。告訴2024的自己:想做什麼都立刻執行、都先有個起頭。 2月第一天騎車直奔臺中的家,清晨五點出門,交通順暢,一半的路程是濱海公
#買桌椅送書包🎈 寶貝開學好夥伴,書包界的翹楚來喇🤩 買桌椅,Tiger Family護脊書包只要1元‼️‼️ 讓寶貝心情美麗閃亮亮迎向學習day😆 另外另外,還有其他多重好禮任你湊🎊 限時2/23~4/30 🔥指定滿額+1 元就送 Tiger Family護脊書包
Thumbnail
《SPY FAMILY CODE: White》是安妮亞第一部推出的劇場版,對於喜歡動畫的觀眾來說,是值得一看的作品。劇情圍繞著家庭的核心,打鬥畫面精彩,是一部適合全家一起觀賞的電影。此外,電影的上映時間、片長和版本等資訊也一併提供。
剛結束久違的家庭旅遊,爸媽與弟剛離開新竹,我已經在沙發上默默地流下了眼淚。 懷孕後對家人間的情感似乎有了更深厚的體會,特別是跟媽媽之間的情感,怕我受驚、不捨我提重物,三不五時也會打電話來問:妳跟小光最近狀況還好嗎? 我也總是第一時間跟媽媽分享每次產檢的內容,知道即使再好的朋友,討論太多小孩的事情
Thumbnail
【SPY×FAMILY間諜家家酒】比較像是單元劇或小劇場。用喜劇包裝隱藏身份的一家三口,漸漸地發展出真正的親情。在冷漠疏離的社會與人際關係下,【SPY×FAMILY間諜家家酒】提供了一個類家人的情感連結,證明家的組成不在於血緣,是來自於對彼此的愛、珍惜與關懷。