【Python】那些年我們一起玩過的遊戲(一)-太空侵略者

更新於 發佈於 閱讀時間約 11 分鐘
raw-image

可能是初老症發作的的原因,最近玩到這類懷舊遊戲就很容易陷入某種懷舊時光的情緒中,一不小心就會玩到忘了時間,所以就興起了何不自己動手把童年那些有印象的街機遊戲全部實作一遍的念頭呢?不囉嗦以下就是這系列的第一款,我會先從提案企劃→執行企劃→製作日誌一一作紀錄,希望對想學作遊戲的同好有所幫助, 另外,我也不確定能堅持幾款,只希望不要一款就沒後續就好,以下開始正文。

在開始之前我們先來看看完成後的遊玩影片:


A、提案企劃書

一句話形容這個遊戲

  • 勾起老遊戲人復古情懷的小品遊戲

遊戲類型

  • 射擊類

遊戲特色

  • 懷舊復古風
  • 點陣圖

發想概念

  • 致敬1978年由Taito在日本製造和銷售的太空侵略者(Space Invaders)
  • 藉以重製太空侵略者(Space Invaders)遊戲學習Python語言

遊戲玩法

  • 玩家控制飛機左右移動,發射子彈射擊上方的飛機,示意圖如下:
示意圖

示意圖

目標族群

  • 想用Python學做遊戲的人
  • 勾起老玩家回憶,發現往事不堪回首的人

發行平台

  • Windows
  • MAC
  • Linux

預計製作期

  • 10天

美術風格

  • 2D點陣圖風格

技術特色

  • 實現將圖像編碼成字串並內崁在程式碼內,以取代讀外部圖檔的功能

遊戲周邊

  • 手機吊飾
  • LINE貼圖

製作人員需求

  • 企劃 x 1
  • 美術 x 1
  • 程式 x 1

收費方式

  • 佛系遊戲緣分到了自動有收入

製作預算

  • 不要問你會怕

參考資料


B、執行企劃書

前言

  • 本遊戲玩法大致上與Taito在1978年發行的太空侵略者(Space Invaders)相同,只是在玩法上作了一些簡化,其調整內容後續會在陸續說明。

遊戲流程

遊戲流程圖

遊戲流程圖

遊戲玩法說明

  • 遊戲畫面示意圖
raw-image

玩家相關說明

  • 玩家操作飛機左右移動,一邊閃躲敵人發射下來子彈一邊發射子彈射擊敵人
  • 玩家飛機一次只能發射一發子彈,要等子彈擊中敵機或超出畫面消失後才能再發射下一發子彈
  • 玩家飛機死亡條件
  1. 被敵人子彈打中
  2. 被任一隻敵人碰到
  • 遊戲一開始玩家一共有三條命,全部死亡後即遊戲結束

敵人相關說明

  • 敵人會有五列,每列11隻敵人,排列方式如下:
  1. 敵人1 x 11
  2. 敵人2 x 11
  3. 敵人2 x 11
  4. 敵人3 x 11
  5. 敵人3 x 11
  • 敵人移動方式
  1. 畫面上的敵人會從最後一排整列往右移動8像素,移動完後換最後第二排往右移動8像素,接下來陸續最後第三排、第四排、第五排,然後在回到最後一排如此重複移動,直到畫面上的所有敵人移動到離右邊界100像素後,全部敵人往下移動20像素,然後在依上面規則開始往左移動,直到移動到離左邊界100像素後,全部敵人往下移動20像素,然後就重複以上規則在開始右移,如此反覆移動
  2. 每下降一次速度就變快一點
  • 飛碟每隔10秒會從左邊慢慢往右邊移動
  • 擊中敵人加分表如下:
  1. 敵人1 加30分
  2. 敵人2 加20分
  3. 敵人3 加10分
  4. 飛碟 加60分
  • 分數每增加2000分會增加一台玩家飛機生命,上限為5台
  • 敵人發射子彈機率
  1. 每隔1秒從场景中挑出一位敵人發射子彈
  2. 全部敵人每下降一次發射時間就縮短一點

過關條件

  • 將畫面上所有敵機摧毀後就會進入下一關
  • 下一關只是復原原本生出的敵機並繼續讓玩家射擊,如此循環直到玩家飛機全部死亡為止

遊戲結束條件

  • 玩家飛機隻數全部死亡
  • 敵機下降到底線

遊戲操作

滑鼠
  • 遊戲中
  1. 左右移動操作 玩家飛機
  2. 點擊滑鼠左鍵發射子彈
  • GameOver畫面
  1. 點擊滑鼠左鍵重新開始遊戲
鍵盤
  • F鍵:開關遊戲FPS顯示
  • Esc 鍵:離開遊戲

遊戲系統

點陣動畫系統
  • 本專案使用的圖形都是一些較簡單的單色點陣圖,所以希望能研發一工具可將圖檔傳換成字串,然後將此圖檔以字串方式內崁入到程式碼內,也就是說不以讀外部圖檔的方式來讀圖檔
  • 圖檔編碼方式說明如下:
  • 以下為將格子填上數字的圖檔,我們先挑出填滿黑色格子內的數字:
raw-image
  • 依照規則第一張圖挑出填滿黑色格子內的數字號碼為:
  • (3,4,10,11,12,13,17,18,19,20,21,22,24,25,27,28,30,31,32,33,34,35,36,37,38 ,39,42,45,49,51,52,54,56,58,61,63)
  • 依照規則第二張圖挑出填滿黑色格子內的數字號碼為:
  • (3,4,10,11,12,13,17,18,19,20,21,22,24,25,27,28,30,31,32,33,34,35,36,37,38 ,39,41,43,44,46,48,55,57,62)
  • 程式讀入以上數字編碼字串後,在依照數字編碼位置畫出黑色Box就可以重現圖案內容的圖像了
  • 程式提供播放動畫功能
  • 程式提供移動功能
  • 程式提供改變顏色功能
  • 程式提供判斷碰撞功能
計分系統
  • 玩家操作飛機擊中敵人後會累積分數
  • 擊中敵人分數計算方式如下:
  1. 敵人1–30分
  2. 敵人2–20分
  3. 敵人3–10分
  4. 飛碟 — 60分
  • 最高分數紀錄
  • GameOver後系統會將這局玩的分數與最高分數作比較,如果大於最高分數,就會更新為本局分數,並顯示在畫面上。

遊戲介面

raw-image

美術風格

raw-image

美術元件列表

敵人1
  • 像素:8 x 8
  • 格數:2 frame
raw-image
敵人2
  • 像素:11 x 8
  • 格數:2 frame
raw-image
敵人3
  • 像素:12 x 8
  • 格數:2 frame
raw-image
敵人子彈
  • 像素:3 x 7
  • 格數:2 frame
raw-image
飛碟
  • 像素:16 x 7
  • 格數:1 frame
raw-image
主角飛機
  • 像素:15 x 8
  • 格數:1 frame
raw-image
主角飛彈
  • 像素:1 x 4
  • 格數:1 frame
raw-image
爆炸效果
  • 像素:11 x 9
  • 格數:1 frame
raw-image

C、製作日誌

開發工具

  • Python 3.7.0
  • PyGame
第1~3天
  • “點陣動畫系統”是我在這個專案第一完成的系統,在看完執行企劃後,就決定用pygame的基礎繪圖功能來製作重繪點陣區塊,實作後的效果其實還不錯,已將程式碼放置GitHub Gist上,點選以下連結查看:

【drewEngine.py程式碼】

程式碼內已寫上詳細說明

第4~10天
  • 接下來要開始實作遊戲Gameplay的部分,要實作的功能不少,已將程式碼放置GitHub Gist上,點選以下連結查看:

【play.py程式碼】

程式碼內已寫上詳細說明,以下在針對需要特別說明的部分加強解說

  • 15 ~ 33:遊戲參數設定,調整這邊的數值可以改變遊戲平衡
  • 35 ~ 63:這邊針對執行企劃文件內”點陣動畫系統”部分,所敘述的將圖形編碼成字串方式針對每張圖作編碼並存放在陣列內,一維以上的陣列會循環撥放,以達到動畫效果
  • 75:時脈陣列,紀錄遊戲裡面所有需要計算時間的時脈紀錄,舉例一下,請看以下程式碼:
# 移動敵人.

if((pygame.time.get_ticks() — last_time[0]) >= enemy_speed):
  • 這邊會將現在時間減掉last_time[0]時脈後如果大於設定的enemy_speed就會進入判斷式內執行,執行完記的要將現在時間寫回去,如下:
last_time[0] = pygame.time.get_ticks()
  • 209 ~ 254:產生所有遊戲所有需要用到的圖形物件
  • 263 ~ 512:遊戲主迴圈
  • 270 ~ 280:判斷鍵盤輸入
  • 283 ~ 302:判斷滑鼠輸入,可由game_mode變數判斷遊戲狀態,在game_mode = 20時表示遊戲進入Game Over狀態,在這狀態下玩家按下Mouse左鍵就可以重新開始遊戲
  • 309 ~ 318:處理讓玩家飛機跟隨滑鼠游標
  • 321 ~ 326:處理玩家飛彈移動
  • 327 ~ 362:處理敵人移動與每下降一次速度變快、子彈速度變短,跟敵人碰到主角飛機還有敵人超出下邊界時將狀態設定成Game Over模式(game_mode = 20)
  • 365 ~ 366:處理每隔N秒出現飛碟
  • 388 ~ 412:處理更新所有敵人,並判斷玩家發射的子彈有無碰撞到敵人,跟打死敵人加分,分數是2000分倍數就加一隻,還有敵人全滅處理遊戲初始設定並繼續進入下一關
  • 409 ~ 410:存入活著的敵人編號
  • 415 ~ 446:處理敵人發射子彈,移動子彈,判斷發射的子彈是否碰到玩家
  • 448 ~ 455:顯示開啟的爆炸圖像,N秒後會自動關閉
  • 457 ~ 468:處理玩家飛機重新,扣生命,如果已經沒生命數了就進入Game Over模式(game_mode = 20)
  • 470 ~ 484:判斷玩家發射的子彈是否打中飛碟,打中後處理顯示爆炸圖像與加分數,跟加隻判斷
  • 485 ~ 491:顯示Game Over畫面,並判斷此局分數是否有大於最高分,如果大於最高分的話就將本局分數更新為最高分數
  • 497 ~ 514:顯示畫面UI,如分數、剩餘數量、最高分等。。。

執行遊戲

  • 請在命令列下輸入python play.py 以執行遊戲

GitHub下載原始碼


後記

第一款完成,第二款也正在構思中,希望能有時間盡快付諸行動,以上,下次見。。。

版本更新

2020/03/29
  • Q:如何將畫面切換成全螢幕?
  • A:在play.py找到如下程式碼:
  • canvas = pygame.display.set_mode((canvas_width, canvas_height))
  • 並修改成以下方式:
  • canvas = pygame.display.set_mode((canvas_width, canvas_height), pygame.DOUBLEBUF and pygame.FULLSCREEN )
2018/10/20
  • 新增灰階版本(play_gray_scale.py)以更新至GitHub
raw-image


留言
avatar-img
留言分享你的想法!
avatar-img
無限升級的沙龍
5會員
16內容數
分享個人創客作品
無限升級的沙龍的其他內容
2024/04/30
這篇文章介紹瞭如何使用Raspberry Pi PICO等材料製作自己的GAME&WATCH大金剛掌機,以及接線圖、程式碼下載和安裝遊戲的教學,並且分享了製作過程中的一些心得和回憶。如果您對童年的遊戲回憶感興趣,這篇文章值得一讀。
Thumbnail
2024/04/30
這篇文章介紹瞭如何使用Raspberry Pi PICO等材料製作自己的GAME&WATCH大金剛掌機,以及接線圖、程式碼下載和安裝遊戲的教學,並且分享了製作過程中的一些心得和回憶。如果您對童年的遊戲回憶感興趣,這篇文章值得一讀。
Thumbnail
2023/06/23
開通ChatGPT PLUS 話說ChatGPT+SGDK能不能蹦出MD(SEGA Mega Drive)新遊戲呢?這幾天開通了ChatGPT PLUS想說來試試使用ChatGPT作款能在MD主機上玩的小遊戲,順便記錄一下製作這款遊戲的過程。。。
Thumbnail
2023/06/23
開通ChatGPT PLUS 話說ChatGPT+SGDK能不能蹦出MD(SEGA Mega Drive)新遊戲呢?這幾天開通了ChatGPT PLUS想說來試試使用ChatGPT作款能在MD主機上玩的小遊戲,順便記錄一下製作這款遊戲的過程。。。
Thumbnail
2023/06/03
Hello!大家好我是茄諾,今天要來幫自主研發的掌機TBoy寫款可以連線對戰的遊戲,不知道TBoy的朋友可以連至以下網址看看: 因為要連線對戰,所以需要準備兩台TBoy掌機,請參考以上文章製作;接下來要挑選適合連線對戰的遊戲,個人偏愛Pong,這款由Atari開發的投幣式大型電玩對戰遊戲非常適合與家
Thumbnail
2023/06/03
Hello!大家好我是茄諾,今天要來幫自主研發的掌機TBoy寫款可以連線對戰的遊戲,不知道TBoy的朋友可以連至以下網址看看: 因為要連線對戰,所以需要準備兩台TBoy掌機,請參考以上文章製作;接下來要挑選適合連線對戰的遊戲,個人偏愛Pong,這款由Atari開發的投幣式大型電玩對戰遊戲非常適合與家
Thumbnail
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
在劇本還在慢慢醞釀時期,遊戲類型還在思考... 想著開發如心動回憶類型... 但若只是單純的選項,過過劇情,似乎有點單調無趣 所以就思索著,要不也乾脆導入橫向走路的玩法,後續搞個紙娃娃 所以先畫了三視圖、也把Spine 重新拿出來耍一耍練練手... 這樣似乎會有趣點,再想想光角色走來走去過劇情,解個
Thumbnail
在劇本還在慢慢醞釀時期,遊戲類型還在思考... 想著開發如心動回憶類型... 但若只是單純的選項,過過劇情,似乎有點單調無趣 所以就思索著,要不也乾脆導入橫向走路的玩法,後續搞個紙娃娃 所以先畫了三視圖、也把Spine 重新拿出來耍一耍練練手... 這樣似乎會有趣點,再想想光角色走來走去過劇情,解個
Thumbnail
由迷走工作坊將該歷史事件改編成桌上遊戲《台北大空襲》,由於特殊的臺灣歷史背景為基礎,桌遊受到大眾的歡迎。而2021年,迷走工作坊釋出了《台北大空襲》遊戲化的消息,並於Steam新品節推出了Demo版。 這次分析的為《台北大空襲》,為遊戲的Demo版本。並非屆時最終正式版的評價。
Thumbnail
由迷走工作坊將該歷史事件改編成桌上遊戲《台北大空襲》,由於特殊的臺灣歷史背景為基礎,桌遊受到大眾的歡迎。而2021年,迷走工作坊釋出了《台北大空襲》遊戲化的消息,並於Steam新品節推出了Demo版。 這次分析的為《台北大空襲》,為遊戲的Demo版本。並非屆時最終正式版的評價。
Thumbnail
接觸契機: 我與機器人大戰的相遇回想起來還真是個偶然。 大概是小學的時候,我難得到三峽的表哥家去玩,當然我表哥也非常開心就搬出他的超任主機來跟我一起玩遊戲, 我們玩了"超越顛峰2"、"快打刑事2複製都市"、"快打旋風2 TUBRO版"等等遊戲。 正當我累的時候....... 但是小賣店老闆說:
Thumbnail
接觸契機: 我與機器人大戰的相遇回想起來還真是個偶然。 大概是小學的時候,我難得到三峽的表哥家去玩,當然我表哥也非常開心就搬出他的超任主機來跟我一起玩遊戲, 我們玩了"超越顛峰2"、"快打刑事2複製都市"、"快打旋風2 TUBRO版"等等遊戲。 正當我累的時候....... 但是小賣店老闆說:
Thumbnail
在那Nokia手機風靡全球的年代,因該有不少人玩過手機內建的貪吃蛇遊戲,記得當時年紀小在還是學生的那個年代就經常利用上電腦課的時候偷偷用我那隻好不容易打工購買的Nokia手機玩這款遊戲,玩到最後還利用電腦課的時間用BASIC寫出了一款簡易版的貪吃蛇遊戲。。。
Thumbnail
在那Nokia手機風靡全球的年代,因該有不少人玩過手機內建的貪吃蛇遊戲,記得當時年紀小在還是學生的那個年代就經常利用上電腦課的時候偷偷用我那隻好不容易打工購買的Nokia手機玩這款遊戲,玩到最後還利用電腦課的時間用BASIC寫出了一款簡易版的貪吃蛇遊戲。。。
Thumbnail
Blockade(封鎖線)這款你可能不知道的貪吃蛇類史祖,問世於1976年街機平台上,其可兩人同時對戰的設計與簡約卻又不簡單的遊戲模式,在當時還真讓不少人為之瘋狂。。。
Thumbnail
Blockade(封鎖線)這款你可能不知道的貪吃蛇類史祖,問世於1976年街機平台上,其可兩人同時對戰的設計與簡約卻又不簡單的遊戲模式,在當時還真讓不少人為之瘋狂。。。
Thumbnail
有些風景需要親自經歷後才能了解箇中滋味,這初衷,也可能讓您在20幾年後的今天,被現實打擊到身心疲憊時為了鼓舞自己大聲吶喊莫忘初衷後可以立即回憶起的經歷。 以上故事純屬虛構,如有雷同實屬巧合,以下開始本次教學。 依照慣例我們一樣先來看看完成後的的遊玩影片: A、提案企劃 一句話形容這個遊戲 遊戲類型
Thumbnail
有些風景需要親自經歷後才能了解箇中滋味,這初衷,也可能讓您在20幾年後的今天,被現實打擊到身心疲憊時為了鼓舞自己大聲吶喊莫忘初衷後可以立即回憶起的經歷。 以上故事純屬虛構,如有雷同實屬巧合,以下開始本次教學。 依照慣例我們一樣先來看看完成後的的遊玩影片: A、提案企劃 一句話形容這個遊戲 遊戲類型
Thumbnail
Blockade(封鎖線)是一款在1976年街機上發行的對戰遊戲,其簡單易懂的玩法,在當時可讓不少人為之瘋狂,這也是我們本次教學的主角,借由重製這款經典遊戲來學習如何使用Family BASIC開發遊戲,讓經典再現。
Thumbnail
Blockade(封鎖線)是一款在1976年街機上發行的對戰遊戲,其簡單易懂的玩法,在當時可讓不少人為之瘋狂,這也是我們本次教學的主角,借由重製這款經典遊戲來學習如何使用Family BASIC開發遊戲,讓經典再現。
Thumbnail
大家好 我是不男孩  居家上班久了,不免會有一點點邪惡的薪水小偷心態🤫原諒我,一直坐在電腦前,又沒有同事,真的會悶爆。 這時候就會想要來一點,小遊戲
Thumbnail
大家好 我是不男孩  居家上班久了,不免會有一點點邪惡的薪水小偷心態🤫原諒我,一直坐在電腦前,又沒有同事,真的會悶爆。 這時候就會想要來一點,小遊戲
Thumbnail
《無人深空》透過遊戲預告影片、製作人Sean Murray的訪談,被「膨風」到極度誇張的程度,以致於在遊戲正式於2016年8月上市後,受到了極大的惡評——說好的多人連線與合作模式並沒有在遊戲中出現、單調缺乏變化的星球樣貌、毫無邏輯拼湊而成的生物樣態、缺乏故事性的遊戲內容,以及差強人意的遊戲效能……
Thumbnail
《無人深空》透過遊戲預告影片、製作人Sean Murray的訪談,被「膨風」到極度誇張的程度,以致於在遊戲正式於2016年8月上市後,受到了極大的惡評——說好的多人連線與合作模式並沒有在遊戲中出現、單調缺乏變化的星球樣貌、毫無邏輯拼湊而成的生物樣態、缺乏故事性的遊戲內容,以及差強人意的遊戲效能……
Thumbnail
相信這個時代的人應該都對桌遊不陌生 【桌上遊戲 - Tabletop game】顧名思義就是由多位玩家圍在桌邊進行的遊戲。遊戲進行中可能會有多種互動,諸如聊天、比手畫腳、交換物品等等...也稱作不插電的遊戲。
Thumbnail
相信這個時代的人應該都對桌遊不陌生 【桌上遊戲 - Tabletop game】顧名思義就是由多位玩家圍在桌邊進行的遊戲。遊戲進行中可能會有多種互動,諸如聊天、比手畫腳、交換物品等等...也稱作不插電的遊戲。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News