基於Processing的躲避球遊戲

這系列文章主要是記錄博主在交互媒體課程中的收穫和體會

這篇文章記載的是博主交互媒體課程作業的過程與體會,如有不妥之處還望看官們批評指正。

背景介紹

首先推薦一下《代碼本色》這本書,非常詳盡的Processing教程,雖然說是需要一定編程基礎,但是其實書裏面本身就從很基礎的部分講起了,講述了很多使用方法的使用,簡單的比如本次作業使用的向量、力模擬、粒子系統等等,複雜的也講到了人工智能、遺傳算法模型等等,非常適合初學和進階學習,而且資源很好找

本來是想延續以前掌握的unity來做的,後來覺得一來畢竟processing纔是課程主題;二來這種比較小巧可愛的遊戲也的確比較適合用processing來完成。版本使用的是windows下的processing3.4,小巧方便且功能完備,缺點就是不會自動退格,很多時候加循環判斷之後整個版面就變得亂七八糟,看的很難受。

遊戲設計

故事背景
在遙遠的某處有一個彩色的國度,生下來就是黑色的你與周圍格格不入;
每一個人都想把你染成他們的彩色,但是你就是你;
拿起你的武器,一邊躲避一邊戰鬥吧,至死方休。

操控說明
鼠標左鍵控制開始遊戲;鼠標右鍵控制暫停。、繼續;鼠標中鍵截圖
鍵盤z/x釋放相應技能

關於玩家
鼠標控制玩家移動,注意不是直接跟隨,會有一定延遲,
接觸敵人遊戲結束。

關於敵人
一、逐漸向鼠標靠近的包圍型敵人,特點是出生點離玩家越遠加速度越大,
逼近玩家時會模擬阻力逐漸降低速度,作用是限制玩家走位;
二、會直衝向鼠標位置的攻擊型敵人,特點是出生時直衝向當時的玩家位置,
到達位置後會減速然後再次尋找玩家位置進行攻擊,作用是狙擊玩家。

關於技能
屏幕上最多同時保持三個,不吃會自動消失,吃下可以分別在zx鍵中儲存一個:
CLEAN:使用會清除屏幕上全部敵人
BOMB:使用會在周圍生成炸彈領域
CANON:使用會在原地放下一座大炮,朝玩家發射炮彈保護玩家
SHIED:使用會生成一個防護罩抵擋一次攻擊
SOLDIER:使用會生成一名士兵朝敵人最多的地方前進消除敵人

玩法描述如上,故事背景有點中二,不過確實有這種想法,具體體現在包括死亡的時候致死的敵人會爆開,表示同歸於盡;死亡提示的顏色也會根據致死敵人的顏色做改變,見截圖。

遊戲開始
遊戲開始界面如上,中間是遊戲說明,左上右上分別是實時的得分和技能。
遊戲結束界面分爲最高分和非最高分兩類
最高分

非最高分

創意——技能設計

普通的躲避球基本體系如上,我自己很喜歡也能夠體現創意的是技能系統。原本預想的技能有五個,實現了三個,還有兩個會說一下思路
因爲遊戲過程比較長,gif不好截,所以用了簡單的截圖說明。

CLEAN

在這裏插入圖片描述圖中的三槓吃掉就會儲存一個clean技能,作用是抹殺在場所有敵人,類似一般飛行遊戲中的大招。

BOMB

在這裏插入圖片描述
圖中的圓環吃掉就會獲得一個bomb技能,有一種誰來誰死的效果。

CANON

在這裏插入圖片描述
吃掉方塊可以儲存一個炮臺,圖中是炮臺放下的效果。持續時間長殺傷力大,但是很容易干擾視線。

SHIELD顯而易見就是一個防護盾,這裏只要多加一層碰撞的判定和shield的持有與否判定就可以完成;

SOLDIER有點像是一個尋路AI的設計,有些難度,不過我想可以通過遍歷從soldier自己發出的三百六十度的射線來判斷哪條射線接觸到的彩色更多就說明球更多,就往那個方向前進。

創意——平衡設計

普通的躲避球大家都玩過,很多時候就是無腦穿梭就可以苟住,因此我設計了兩種敵人隨機出現,他們的行動模式和特點可以巧妙互補,逼迫玩家無法用固定模式進行生存:

包圍型的特點是出生點越遠速度越快,因此玩家如果想要防止包圍型的過快速攻擊就要儘量待在中間。但是包圍型與普通遊戲衝向玩家的敵人不同,他們在靠近玩家的同時會降低速度,像是小心謹慎的敵人在做捕獵前的包圍,可以極大的限制玩家小範圍的走位,讓玩家不能在小範圍靠左右橫跳矇混過關;

狙擊型的特點是速度快且直衝向玩家,如果玩家不移動,包圍型可能需要一段時間纔會真正碰到玩家,但是狙擊會直接衝過來結束遊戲;因此玩家需要不斷移動來躲避狙擊;移動速度很快的話也很容易拜託包圍型敵人,但是東奔西撞的狙擊型在玩家快速移動的時候很容易截胡玩家。

因此兩種結合可以真正的難到玩家。

但是,單純的躲避一定不是大部分人喜歡的,因此我還安排了攻擊手段,而且攻擊殺敵獲得的分數原大於單純苟活會獲得的分數,相當於鼓勵玩家獲取和使用技能。注意,提供技能可不一定是降低遊戲難度,我自己就常常死在吃技能的途中,技能是強力獲取分數的途徑,同時也是一個很大的誘惑;

考慮到有的玩家會希望儲存技能來保命,比如clean和bomb都是很好的保命技能,因此我設計了固定技能槽,最多隻能存兩個,存滿不用吃新的也沒用;如果玩家吃了兩個保命的技能想存下來,此時出現了純殺傷性的技能canon,玩家想要利用canon得分就一定要用出手頭上的技能,從而強迫玩家進行技能的更新和使用。

技術實現

遊戲的基礎核心有四個,玩家控制,敵人生成,遊戲過程和死亡過程。技能比較核心的是canon的射擊。

玩家控制

主要做了一個變色拖尾的效果,然後爲了簡單的模擬了阻力以讓鼠標不與玩家位置實時同步,增加操作難度和視覺趣味性。
在這裏插入圖片描述敵人生成

敵人相當於一個粒子系統,刷新和顯示相關的類和方法寫在獨立標籤中,和canon類似。

比較有特點的是爲了避免敵人突兀出現導致一開始難以躲避,我設置了遞減的shake來讓敵人由小變大的出現,給玩家足夠的初始反應時間(叫shake是因爲本來想讓它閃一閃,後來效果太差就改成變大了)。同時設定了每個球的生命時長,過時間自動變小消亡。

在這裏插入圖片描述
行動模式分成兩類,橫衝直撞和逐漸減速包圍。
在這裏插入圖片描述
遊戲過程
主要負責具體的刷新和繪製

在這裏插入圖片描述
包括碰撞判定和觸碰skill的判定
在這裏插入圖片描述
以及觸發死亡判定

在這裏插入圖片描述
死亡過程

主要用於顯示死亡界面,創意點在利用角向量隨機生成的彩色顏料潑灑效果。
在這裏插入圖片描述
技能

CLEAN就是遍歷remove,BOMB和CANON就是在固定時間內碰撞remove。

心得體會

通過學習和應用粒子系統類 Arraylist 和向量庫 PVector 的各種功能,加上力和角向量的簡單模擬,算是掌握了基礎的processing內容。同時在嘗試學習的過程中也接觸了一些這次沒用到但是很有意思的內容例如音樂庫minim和碰撞引擎Box2d等等。
可以說最大的收穫就是我對processing的認識得到了改觀,也更加深入了。我原來是覺得processing的圖像繪製上有一些繁瑣冗雜,深入使用了之後覺得確實在很多效果的繪製上processing是有自己很大的優勢的期待以後能進一步用processing做出更有趣的交互作品。

參考資料

  1. 《代碼本色:用編程模擬自然系統》(The Nature of Code: Simulating Natural Systems with Processing) 作者:Daniel Shiffman
  2. processing中的向量運算方法.
  3. Processing 粒子系統.
  4. Processing 列表(List)類型的使用.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章