日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2019级C语言大作业 - 三国杀

發(fā)布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2019级C语言大作业 - 三国杀 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

三國殺19年 C語言演示視頻

?

分享19級同學大一上學期用C語言實現(xiàn)的三國殺游戲。分步驟代碼、圖片音樂素材、可執(zhí)行程序可以從百度網(wǎng)盤下載:

https://pan.baidu.com/s/1K3ANkUtPUABbaAd2CmxFLw

一、 設(shè)計思路

《三國殺》是中國傳媒大學動畫學院2004級游戲?qū)I(yè)學生設(shè)計,由北京游卡桌游文化發(fā)展有限公司出版發(fā)行的一款熱門的桌上游戲,并在2009年6月底由杭州邊鋒網(wǎng)絡(luò)技術(shù)有限公司開發(fā)出網(wǎng)絡(luò)游戲。該游戲融合了西方類似游戲的特點,并結(jié)合中國三國時期背景,以身份、勢力或陣營等為線索,以卡牌為形式,合縱連橫,經(jīng)過一輪一輪的謀略和動作獲得最終的勝利。三國殺集合歷史、文學、美術(shù)等元素于一身,在中國廣受歡迎。

由其本身特性可知,《三國殺》游戲,完全可以由C語言完成,并且實現(xiàn)過程具有一定難度,再加上于我組組員都深深熱愛此項卡牌運動,于是,在我組一致商議決定下,確定在此次C語言項目設(shè)計,我組將借由所學知識親手創(chuàng)造一款相似的軟件游戲。

二、 功能描述

我組此次完成的《三國殺》游戲支持實現(xiàn)真實三國殺的大部分設(shè)定,包括殺、閃、桃等的基本牌,萬箭齊發(fā)、南蠻入侵、無中生有等的錦囊牌以及諸葛連弩,青龍偃月刀等的裝備牌。玩家將以教程闖關(guān)形式面對并設(shè)法戰(zhàn)勝越發(fā)智能的簡單AI,并在闖關(guān)途中解鎖新的卡牌,最終獲得游戲的勝利。

《(簡易)三國殺》基本規(guī)則:

1、起始手牌

將游戲牌洗混,隨機分給每個玩家4張,此為起始手牌。

手牌:拿在手里的牌。

將剩余游戲牌放在桌子中央,作為牌堆(玩家在游戲中棄置的牌放在一旁,組成棄牌堆)。

2、回合流程

進行游戲時,由玩家開始,按逆時針方向以回合的方式進行。即:每名玩家有一個自己的回合,一名玩家回合結(jié)束后,右邊玩家的回合開始,依次輪流進行。

每個玩家的回合可以分為六個階段:

2.1 準備階段

通常可以跳過,有些武將可以使用此階段的技能。

2.2 判定階段

若面前橫置著延時類錦囊,必須依次對這些延時類錦囊進行判定。

若面前橫置有兩種或更多的延時類錦囊,從最后一個施加的錦囊開始判定(最早放置的最后判定)。

2.3 摸牌階段

從牌堆頂摸兩張牌。

在游戲里,若沒有特殊說明,“摸X張牌”指的就是從牌堆最上方摸牌。

當需要摸牌或?qū)⒁獙ε贫旬a(chǎn)生影響時,牌堆沒牌,則立即將棄牌堆洗混后形成新的摸牌堆。

2.4出牌階段

可以使用0到任意張牌,加強自己或攻擊他人,但必須遵守以下兩條規(guī)則:

2.4.1、每個出牌階段僅限使用一次【殺】。

2.4.2、任何一個玩家面前的判定區(qū)或裝備區(qū)里不能放有兩張同名的牌。

2.4.3、每使用一張牌,即執(zhí)行該牌之效果。如無特殊說明,游戲牌在使用后均需棄置(放入棄牌堆)。

2.5、 棄牌階段

在出牌階段中,不想出或沒法出牌時,就進入棄牌階段,此時檢查手牌數(shù)是否超出當前的體力值(手牌上限等于當前的體力值),每超出一張,需要棄一張手牌。

2.6、 結(jié)束階段

通??梢蕴^,有些武將可以使用此階段的技能。

3、補充說明

3.1、在游戲里,若無特殊說明,摸牌即是說從游戲牌堆頂摸牌。

3.2、玩家在游戲中使用、打出或棄置的游戲牌放在一旁,組成棄牌堆。

3.3、當牌堆沒牌時,則立即將棄牌堆洗混后形成新的牌堆。

3.4、“體力上限”與“當前體力值”不一樣。

4、武將死亡

當一個武將的體力降到0或更低時,即進入瀕死狀態(tài),除非自己或他人在此時用“桃”來挽救該武將,否則該武將出局。武將出局后,棄置該武將所有牌。

5、游戲結(jié)束

5.1、AI死亡,玩家獲勝,進入下一關(guān)或獲得游戲勝利

5.2、玩家死亡,玩家落敗

6、卡牌效果

6.1、殺

你的出牌階段,對除你外,你攻擊范圍內(nèi)的一名角色使用,效果是對該角色造成1點傷害。

◆游戲開始時你的攻擊范圍是1 。

◆每個出牌階段你只能使用一張【殺】。

6.2、閃

當你受到【殺】的攻擊時,你可以使用一張【閃】來抵消【殺】的效果。

◆閃通常情況下只能在回合外使用或打出。

6.3、桃

桃能在兩種情況下使用:

1、在你的出牌階段,你可以使用它來回復你的1點體力。

2、當有角色處于瀕死狀態(tài)時,你可以對該角色使用【桃】,防止該角色的死亡。

◆出牌階段,若你沒有損失體力,你不可以對自己使用【桃】。

6.4、過河拆橋

出牌階段,對除你以外的任意一名區(qū)域內(nèi)有牌的角色使用。你選擇并棄置該角色區(qū)域里的一張牌。

◆區(qū)域包括手牌、裝備區(qū)和判定區(qū)。

6.5、順手牽羊

出牌階段,對除你以外的與你距離1以內(nèi)且區(qū)域內(nèi)有牌的一名角色使用。你選擇并獲得該角色區(qū)域內(nèi)的一張牌。

◆使用順手牽羊時,注意你裝備區(qū)里的馬和目標角色裝備區(qū)里的馬。

◆區(qū)域包括手牌、裝備區(qū)和判定區(qū)。

6.6、決斗

出牌階段,對除你以外的任意一名角色使用。由目標角色先開始,你和其輪流打出一張【殺】。【決斗】對首先不出【殺】的一方造成1點傷害,而另一方視為此傷害的來源。

◆使用【決斗】有可能讓自己受傷

◆受到因【決斗】導致的傷害時,來源為決斗的獲勝方。

6.7、借刀殺人

出牌階段,對除你以外的裝備區(qū)里有武器牌的一名角色使用。該角色需對其攻擊范圍內(nèi),由你指定的另一名角色使用一張【殺】,否則你獲得該角色裝備區(qū)里的武器牌。

◆角色使用【殺】時,角色技能和武器技能可以照常發(fā)動。

6.8、萬箭齊發(fā)

出牌階段,對除你以外的所有角色使用。按行動順序結(jié)算,除非目標角色打出一張【閃】,否則該角色受到【萬箭齊發(fā)】對其造成的1點傷害。

◆你必須指定除你外的所有角色為目標,然后他們(從你的下家開始)依次選擇是否打出【閃】。

6.9、南蠻入侵

出牌階段,對除你以外的所有角色使用。按行動順序結(jié)算,除非目標角色打出一張【殺】,否則該角色受到〔南蠻入侵〕對其造成的1點傷害.

◆你必須指定除你外的所有角色為目標,然后他們依次(從你的下家開始)選擇是否打出【殺】。

6.10、無中生有

出牌階段,對你自己使用。摸兩張牌。

6.11、五谷豐登

出牌階段,對所有角色使用。你從牌堆亮出等同于現(xiàn)存角色數(shù)量的牌,然后按行動順序結(jié)算,目標角色選擇并獲得其中的一張。

◆這張牌會讓包括你在內(nèi)的角色每人各從一定數(shù)量的牌里挑選一張加入手牌。

6.12、桃園結(jié)義

出牌階段,對所有角色使用。按行動順序結(jié)算,目標角色回復1點體力。

◆這張牌會讓包括你在內(nèi)的角色各回復1點體力。即使所有人都滿血也可使用,只是沒有效果。

6.13、無懈可擊

在目標錦囊生效前,抵消其對一名角色產(chǎn)生的效果。

◆【無懈可擊】是一張可以在其他錦囊開始結(jié)算時使用的錦囊,它只能抵消目標錦囊對一名指定角色產(chǎn)生的效果。

◆【無懈可擊】本身也是錦囊,所以也可以被抵消。

三、 開發(fā)步驟實現(xiàn)方法

在本組組內(nèi),我主要負責各與卡牌效果的實現(xiàn)相關(guān)的算法編譯,而要實現(xiàn)最終版所具有的功能,我在編碼過程中主要經(jīng)歷了四大步:

1、 回合制基本框架

這是《三國殺》游戲的最基本之處,也是第一個讓我組組員頭疼的地方。在先前制作的一系列游戲中,主函數(shù)一般包括:

while (1) {show(); //顯示界面updateWithoutInput(); //無需用戶輸入的更新updateWithInput(); //需用戶輸入的更新}

如何實現(xiàn)操作的轉(zhuǎn)換,即在玩家執(zhí)行完摸牌、出牌、棄牌后控制AI進行操作,成了一大難題。最后,在我組組員的共同努力與創(chuàng)新下,借由進一層次的循環(huán)控制完成了此項操作,最終完成的主函數(shù)如下

while (1) {show(); //顯示huihe_player(); //玩家回合huihe_npc(); //電腦回合 }

其中,在玩家回合huihe_player函數(shù)中置入了另一重循環(huán),在執(zhí)行完棄牌操作后退出循環(huán),完成回合制設(shè)定。

2、 基本牌實現(xiàn)

比較其他部分來說,這一部分是相對輕松的,需要注意的只有對于任一角色,每一個回合所能出的【殺】次數(shù)是有限并受距離限制,因此需要另外定義相關(guān)變量。

int player_sha_num=0;//玩家出殺次數(shù) int npc_sha_num=0;;//電腦出殺次數(shù) int npc_player=1,player_npc=1;//距離

3、 錦囊牌實現(xiàn)

這一部分的難點是對于任一錦囊牌,【無懈可擊】可以被打出以使其失效(包括【無懈可擊】本身),這就要求對于玩家每一次使用錦囊,AI判斷手牌中是否包含【無懈可擊】、是否應該打出,為簡化代碼,遂將這一步驟以函數(shù)形式封裝

int npc_wuxie(int success)//判斷手牌是否包含【無懈可擊】 {for(i=0;i<npc_shoupai_num;i++){if(npc[i]==11){npc[i]=0;success=0;break;}}//打出【無懈可擊】,使相應錦囊的success變量轉(zhuǎn)化為0return success; }

4、 裝備牌實現(xiàn)

這一部分的難點是裝備牌一方面占有額外的儲存位置,一方面又與另外幾種牌種都有交互,這就要求我們定義新的變量存儲各角色裝備情況并根據(jù)裝備情況對該角色使用牌的規(guī)則進行調(diào)整。例如,當某一角色裝備【諸葛連弩】時,其每回合使用殺的限制將解除。又如,當某一角色裝備【青龍偃月刀】時,其所使用的【殺】被【閃】抵消時可以繼續(xù)出殺

void player_1() {int input;int success_1=1;if(player_sha_num==1&&player_weapon!=21){printf("您本回合已使用過殺,無法繼續(xù)出殺");Sleep(20);}//一般情況對出【殺】次數(shù)有限制,裝備【諸葛連弩】時解除else{if(player_npc<=1){player[player_out]=0;player_shoupai_num--;if(npc_armor==27)printf("殺無效");//判斷對方是否裝備【明光鎧】else{success_1=npc_2(success_1);if(success_1==1){npc_life--;show ();printf("npc收到一點傷害");npc_bingsi ();gameover ();}else if(player_weapon==22){player_zhengli ();show ();printf("是否發(fā)動青龍偃月刀繼續(xù)出殺");scanf ("%d”, &input);input--;if(player[input]==1)player_1();}//當【殺】被【閃】抵消時,判定是否裝備【青龍偃月刀】,若是,可繼續(xù)出【殺】}player_sha_num++;}elseprintf("距離不足");} }

?

總結(jié)

以上是生活随笔為你收集整理的2019级C语言大作业 - 三国杀的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。