2019級C語言大作業 冷凍雙俠

2021-10-18 20:49:26 字數 2482 閱讀 2551

冷凍雙俠 c語言作業

程式為c語言實現的簡單的冷凍雙俠遊戲,遊戲**等素材均**於4399冷凍雙俠遊戲,主要內容為玩家控制角色使遊戲中所有可冰凍物體冰凍,玩家可以通過跳躍,爬梯,甚至冰凍怪物等手段完成目標。

1、和**素材獲取

雖然遊戲素材並非從一開始就大量使用,但充足的遊戲素材可以免於開發時面臨缺少素材的尷尬境地,所以素材的提取和使用尤為重要,本程式所用素材均來自於原遊戲,使用錄音和截圖的手段獲取,並進行對之處理。

由於部分中遊戲元素的顏色和背景顏色相似,對處理要求大,只能慢慢地對單畫素處理,但素材較多,所以處理較慢,專案開始時間遲。

2、遊戲介面繪製

由於本程式為原遊戲在一定程度上的復刻,所以要求遊戲介面貼近原遊戲。主要問題在於背景中向左下移動的雪花的處理,檔案讀取通關記錄後素材的放置和滑鼠選擇關卡的判斷。

由於滑鼠操作涉及**音效的開關,所以只是寫好了判斷的語句,省略了需要執行的語句。

3、處理玩家操作

即使玩家操作簡單,只有四個鍵位,但操作的判斷卻是難點,爬梯子是否到達終點,跳躍後落地判斷,以及冰凍的操作等等。

3.1、移動

玩家移動最快需要一定的時間,同時停下來也需要一段時間,於是加入速度變數,使玩家改變的是速度,而不是直接的位置。

3.2、爬梯

爬梯實現難點在於判斷狀態改變,包括玩家使用上鍵時梯子和玩家位置的判斷和玩家是否離開梯子的判斷。為了防止玩家中途離開梯子,出於便於判斷的目的,儲存了當前梯子的橫向座標,為了防止對玩家停止爬梯的誤判,結合停止時當前位置和下面位置不會同時有梯子,加入防誤判判定。

3.3、跳躍和落地

由於跳躍是具有速度影響的,於是跳躍便使用了二次函式作為軌跡描述,同時由於二次函式變化越來越快,判斷落地時便用了模糊處理,即判斷上乙個位置和下乙個位置與平面的上下關係,但由於使用較晚,導致寫好的函式還要再次更改。

3.4、冰凍物體和得分處理

遊戲核心玩法為冰凍可冰凍物體,所以冰凍的判斷必不可少,而冰凍大多與落地相同判斷,於是在左右移動中加入了對磚塊和梯子遍歷,進行冰凍操作並計算冰凍佔比。而得分處理較簡單,只是對位置的判斷和計分。

4、處理怪物操作

相對於玩家來說,怪物位置移動不必加入速度,但是邊緣的判斷卻更加困難,由於最終選擇遍歷判斷當前位置下方是否有遊戲元素,怪物移動頻頻出錯,左面恰好而右面多乙個,最後平均分配多的一格才解決了問題。

第二種怪物相對較難,加入爬梯的操作,雖然跟玩家判斷相差不大,但是最後由於未知原因怪物不能進行上下樓梯的狀態轉換而擱置。在最終版中,第一種怪物和第二種怪物的區別僅為移速的區別。

5、處理玩家和怪物的互動

玩家和怪物的互動包括血量減少和無敵時間,冰凍怪物和解凍時間。血量減少和冰凍怪物兩者區別僅是玩家和怪物所處位置的差別,涉及跳躍使用的二次函式的判斷。

5.1、血量減少和無敵時間

血量減少的判斷和無敵時間的實現相對簡單,僅為位置判斷和血量數的變換。

5.2、冰凍怪物和解凍時間

與上面相同,也為位置判斷和怪物狀態代表數判斷。而出現的新的問題為形成的大冰塊可作為墊腳物。

6、**素材的使用

開發的最後,使用**素材使遊戲生動,由於各個介面都有關閉和開啟**音效的開關,最後加入的**判斷有些繁瑣,但是使用封裝**函式,最後變化行數卻不多。

使用多次按照需求開關畫布使得遊戲介面和開始介面顯示正常,降低了原遊戲使用視角變化的實現難度。

針對不同的遊戲元素設定不同的二維陣列,在一定程度上加快了遍歷速度和針對性。

利用switch-case語句進行顯示介面的選擇,取消了介面巢狀帶來的介面退出和遊戲中退出重新選擇關卡的問題。

利用continue語句防止不必要的遍歷。

利用檔案讀取和寫入進行了關卡內容的讀取和通關記錄的儲存。

封裝背景雪花和**開始、停止函式,減少了多餘**的數量,簡潔**。

在這次專案設計中還可以對程式進行進一步的優化,利用結構體儲存遊戲元素的位置座標和狀態,速度等等,利用列舉型別進行視覺化的變數變換,在對所有介面處理時利用switch-case語句等等。

第二種怪物的實現難題讓我意識到專案設計的重點應該放在核心內容的實現上,縱使美觀的介面可以吸引人,但充實的遊戲內容才是留住玩家,增加玩家遊戲體驗的根本。

遊戲最後未能達到原本的專案展望讓我意識到乙個遊戲的實現難度不應該只看遊戲操作的難易,應該看到它的實現難度。

由於結構體和列舉型別未用到,**可讀性低,維護難度大,繼續開發難度高。

單人專案最難的問題在於惰性,因為自己的專案要自己乙個人做,任務量大而重,不但有各種相同作用的**需要自己乙個人判斷和重複,而且枯燥的處理更是讓人厭煩,但是只要有**的熱情,這些小阻撓便不足為懼。如果這裡就放棄了,那在後面還有各種讓人抓狂的bug豈不是更加勸退麼。只有投入時間而不是拖延才能更快的完成專案,實現更多的功能。

發現錯誤時要有破釜沉舟的決心,防止有些微小卻涉及眾多的錯誤在開發過程中進一步放大,例如介面顯示的巢狀問題。雖然也可以實現目的,但之後的關卡退出讓我認識到它的不足。

c語言大作業 c語言課程設計,大作業

c語言課程設計,大作業 本人是一名211大學軟體工程專業的大三學生,6 7月份幫助了很多學弟學妹完成了課程設計,大作業。本人 質量高,講誠信,承接c語言,c 課程設計,大作業以及資料結構的內容。下面是c語言通訊錄的部分源 include include includetypedef struct a...

C語言模擬通訊錄(大一C語言期末大作業)

大一第乙個學期,我們初學c語言,臨近寒假,老師給我們布置了期末大作業,分為a類和b類,a類是最高分為100分,b類是最高分為70分,我選擇了b類題裡的模擬簡易通訊錄。下面是詳細,技術不精,還請各位大佬指點。題目要求建立乙個通訊錄,通訊錄的結構記錄包括 姓名 生日 年月日 號碼,程式需要實現下列功能 ...

C語言I 2019秋作業01

1您對軟體工程專業或電腦科學與技術專業了解是什麼?工程專業將成為乙個新的熱門專業。軟體工程專業以電腦科學與技術學科為基礎,突出軟體開發的工程性,使學生在掌握電腦科學與技術方面知識和技能的基礎上熟練掌握從事軟體需求分析,軟體設計,軟體測試,軟體維護和軟體專案管理等工作所必需的基礎知識,基本方法和基本技...