2020级C语言大作业 - 三国杀
三國殺 C語言大作業(yè)
分享20級同學(xué)大一上學(xué)期用C語言(及少量C++)實現(xiàn)的簡化版三國殺游戲。由于同學(xué)們剛學(xué)了三個月的編程,實現(xiàn)還不夠完善,工程代碼、圖片音樂素材可以從百度網(wǎng)盤下載:
鏈接:https://pan.baidu.com/s/1CP72EbOgt_t8V2Jw5xGmeQ
提取碼:ba5h
1 設(shè)計思路
本游戲參考了網(wǎng)絡(luò)上的同名游戲,并通過EasyX插件用C語言編寫實現(xiàn),玩家通過鼠標(biāo)選擇卡牌并使用,達(dá)成擊殺效果即獲得游戲勝利。在還原的同時保證界面相對更美觀簡潔,且保證人機的操作更加貼近真人游戲思路。加入更多卡牌的同時也提高的游戲的體驗與趣味性。
2 功能描述
游戲主體基本功能就是接受玩家的鼠標(biāo)輸入,并做出相應(yīng)的反應(yīng),實現(xiàn)界面選擇和游戲功能。其分部分介紹如下:
2.1 初始化
初始化函數(shù)分為三塊,一塊為startuppicture()函數(shù),功能為給相應(yīng)的牌賦予圖像;一塊為startupdenglu()函數(shù),功能為放置進(jìn)入游戲界面,點擊進(jìn)入游戲即可加載游戲;一塊為startup()函數(shù),其基本功能如下:
1.初始化畫布(initgraph()函數(shù)),并放置基本圖像,輸出哪方回合、回合數(shù)等,使游戲具有回合制的感覺;
2.給牌組賦予相應(yīng)序號,并進(jìn)行洗牌(xipai()函數(shù)),利于后面引用并使手牌具有隨機性;
3.初始化玩家和人機手牌,玩家先出牌,并輸出人機手牌數(shù),開啟背景音樂;
2.2 牌基本信息
【南蠻入侵】2張,【無懈可擊】4張,【萬箭齊發(fā)】2張,【閃】15張,【桃】8張,【酒】4張,【殺】20張,【順手牽羊】4張,【過河拆橋】4張,【決斗】3張,【八卦陣】2張,【麒麟弓】【貫石斧】【青釭劍】【赤兔】【爪黃飛電】各一張。
雙方武將均為張飛(技能,出殺的數(shù)量無限制);
2.3 鼠標(biāo)點擊
游戲運用update()函數(shù),儲存輸入的鼠標(biāo)信息;
2.4 玩家出牌和牌的移動
游戲運用playerfenxi()函數(shù),對輸入的鼠標(biāo)信息分析并進(jìn)行牌的移動(playershow()函數(shù)):
1.點擊該牌微上移,再次點擊該牌或點擊取消回歸原來位置;
2.對微上移的牌點擊確定打出該牌;
3.點擊結(jié)束進(jìn)行下一回合;
2.5 人機出牌
游戲運用npcshow()函數(shù),使人機能出的牌盡可能的出完;
2.6 棄牌
游戲運用discard()函數(shù),對牌數(shù)多于人物生命值的人物棄掉多的牌數(shù),其中玩家為點擊棄牌,人機為隨機棄牌;
2.7 回合交替
游戲運用nextHuihe(int card2[])函數(shù),回合結(jié)束和棄牌結(jié)束后,增加對方兩張牌;
2.8 牌效果
玩家效果在playerpaieffect()函數(shù)里,人機效果在npcshow()函數(shù)里;
1.一方出殺或萬箭齊發(fā)另一方出閃(playerchushan()函數(shù)和npcshow()函數(shù) );
2.一方出南蠻入侵另一方出殺(nanman()函數(shù));
3.一方出決斗由對方開始,雙方輪流出殺(juedou()函數(shù));
4.貫石斧效果,若打出的殺被對面閃抵消,可棄兩張牌強制扣血(guanshi()函數(shù),玩家和人機均為隨機棄牌);
5.麒麟弓效果,若對方遭到殺扣血,則可棄掉對方一張馬(qiling()函數(shù),玩家和人機均棄對方第一張馬);
5.八卦陣效果,判斷為0生效,為1則不生效(玩家Playerbagua()函數(shù),人機Npcbagua()函數(shù));
6.無懈可擊效果,一方打出順手牽羊或過河拆橋或決斗或萬箭齊發(fā),可使用無懈可擊抵消(wuxie()函數(shù));
7.青釭劍效果,無視對方八卦陣;
8.一方出順手牽羊或過河拆橋,獲取對方一張牌或棄掉對方一張牌;
9.出桃加一滴血,出酒增加殺1滴傷害;(以上三條代碼行數(shù)較少,未設(shè)置函數(shù))
10.為增加游戲完整性,增加馬,但對游戲無影響;
2.9 清牌
清除在屏幕中央的牌(clearpai()函數(shù)),其中放置了基本圖像和文字,玩家手牌(placeshoupai()函數(shù)),裝備牌(placeequipment()函數(shù));
2.10 調(diào)整手牌序號
運用adjustpai()函數(shù),使每次打出牌后為-1的序號移到后面;
2.11 判定音效及裝備牌
judgemusic(int i)函數(shù)和judgeequipment(int i)函數(shù)用于判定打出牌的音效及裝備牌;
2.12 判定游戲是否結(jié)束
judgelife()函數(shù)用于判斷玩家和人機生命值是否為0,一方為0,則結(jié)束,對方勝利;
2.13 輸出文字
游戲里以out開頭輸出各類文字的函數(shù),在各對應(yīng)界面輸出對應(yīng)文字;
3 實現(xiàn)過程中的重點和難點
3.1 修復(fù)卡牌實現(xiàn)效果時產(chǎn)生的bug(難點)
在測試相關(guān)卡牌打出效果時,由于需要一些限制條件以及可能會有其他卡牌可以打出效果時(如無懈可擊),在測試初期,我們嘗試將無懈可擊的效果加入錦囊牌的發(fā)動條件內(nèi),但會導(dǎo)致錦囊牌會無視無懈可擊效果依舊能觸發(fā)的問題;以及在使用酒之后傷害的計算可能會殘留到下一回合的現(xiàn)象,導(dǎo)致在血量計算以及出牌效果上產(chǎn)生影響。
解決方法為:
1.將無懈可擊的效果單獨用wuxie()函數(shù)實現(xiàn),并在每次打出錦囊牌后加入wuxie()函數(shù)。
2.在使用酒后出殺結(jié)算完畢以及出牌階段結(jié)束之后重置酒的數(shù)量以及殺的傷害。
3.2實現(xiàn)各個種類卡牌效果(重點)
“三國殺”這一卡牌游戲的主體玩法依賴于各種類卡牌打出后所實現(xiàn)的不同效果,因此對不同卡牌所要達(dá)成的出牌效果實現(xiàn)需要許多邏輯的思考,以及在實現(xiàn)卡牌效果時,實現(xiàn)卡牌效果后均需要全面考慮其他眾多牌的響應(yīng)效果及人機所采取的對應(yīng)措施。在實現(xiàn)卡牌效果的時候,我們進(jìn)行了多次測試,并進(jìn)行了一些極限場景的模擬及修改,增添細(xì)節(jié)實現(xiàn)了最終版本。
4 體會與總結(jié)
在此次長達(dá)一個多月的游戲制作中,我發(fā)現(xiàn)對部分知識的運用其實并不難,學(xué)過的知識就那些,就算加入了一些新知識,多思考思考也就弄懂了。真正難的是在出現(xiàn)bug時,如何發(fā)現(xiàn)并解決它。例如我在寫【青鋼劍】無視【八卦陣】的效果時,僅僅加入了幾行代碼,但測試時卻用了一個多小時,因為【青鋼劍】和【八卦陣】的數(shù)量較少,滿足條件比較困難。當(dāng)然,此次大作業(yè)更離不開團(tuán)隊合作,有些東西你會發(fā)現(xiàn)你自己做不出來,你的隊友卻可以做出來,相反也是如此。還有在對一些細(xì)節(jié)的處理方面,可能某些細(xì)節(jié)不到位,就會出現(xiàn)不必要的bug。
通過此次合作,我了解到了知識的儲備固然重要,但合作更為重要。其中,通過合作我收獲了自主學(xué)習(xí)能力、自主糾錯能力。細(xì)節(jié)修改方面在寫程序時也是十分重要的,通過細(xì)節(jié)修改,能修復(fù)許多bug,使整個程序更加完整,流暢。另外,在此次游戲中,思維也是十分重要,沒有思維許多方面就找不到解決方法,就無法把程序?qū)懴氯ァ4送?#xff0c;邏輯的合理及語言的規(guī)范也很重要。
總而言之,此次大作業(yè)讓我認(rèn)識到了自己的不足,也同樣讓我受益匪淺。
?
總結(jié)
以上是生活随笔為你收集整理的2020级C语言大作业 - 三国杀的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 数学期望_python机器
- 下一篇: duilib写个三国杀?