利用C++實(shí)現(xiàn)簡易的狼人殺游戲
狼人殺游戲是一款非常有趣的角色扮演游戲,它需要玩家之間互相猜測(cè)身份并進(jìn)行投票,通過推理來找出真正的狼人。
以下是一個(gè)基本的狼人殺游戲的C++實(shí)現(xiàn),其中包含游戲角色、游戲流程和基本的邏輯。你可以根據(jù)需要添加更多的功能和細(xì)節(jié)。
#include <iostream> #include <algorithm> #include <vector> #include <string> #include <cstdlib> #include <ctime> using namespace std; // 玩家結(jié)構(gòu)體 struct Player { string name; bool is_wolf; bool is_alive; bool is_voted; Player(string n, bool w) { name = n; is_wolf = w; is_alive = true; is_voted = false; } }; // 游戲類 class Game { private: vector<Player> players; int num_wolves; int num_villagers; public: Game(int num_players) { num_wolves = num_players / 3; num_villagers = num_players - num_wolves; // 添加狼人和村民 for (int i = 0; i < num_wolves; i++) { players.push_back(Player("狼人" + to_string(i + 1), true)); } for (int i = 0; i < num_villagers; i++) { players.push_back(Player("村民" + to_string(i + 1), false)); } // 打亂玩家順序 srand(time(NULL)); random_shuffle(players.begin(), players.end()); } void start_game() { while (num_wolves > 0 && num_wolves < num_villagers) { // 顯示存活的玩家 cout << "當(dāng)前存活玩家:" << endl; for (int i = 0; i < players.size(); i++) { if (players[i].is_alive) { cout << players[i].name << endl; } } // 狼人討論并投票 cout << "狼人請(qǐng)開始討論并投票殺人:" << endl; for (int i = 0; i < players.size(); i++) { if (players[i].is_alive && players[i].is_wolf) { int vote = rand() % players.size(); while (players[vote].is_wolf || !players[vote].is_alive) { vote = rand() % players.size(); } players[vote].is_alive = false; cout << "狼人投票殺死了 " << players[vote].name << endl; num_villagers--; } } // 顯示存活的玩家 cout << "當(dāng)前存活玩家:" << endl; for (int i = 0; i < players.size(); i++) { if (players[i].is_alive) { cout << players[i].name << endl; } } // 村民討論并投票 cout << "村民請(qǐng)開始討論并投票殺人:" << endl; for (int i = 0; i < players.size(); i++) { if (players[i].is_alive && !players[i].is_wolf) { int vote; do { cout << players[i].name << " 請(qǐng)投票殺死一個(gè)玩家:"; cin >> vote; vote--; } while (vote < 0 || vote >= players.size() || !players[vote].is_alive || players[vote].is_voted); players[vote].is_voted = true; cout << players[i].name << " 投票殺死了 " << players[vote].name << endl; if (players[vote].is_wolf) { num_wolves--; } else { num_villagers--; } } } // 處理投票結(jié)果 int max_votes = 0; vector<int> vote_counts(players.size(), 0); for (int i = 0; i < players.size(); i++) { if (players[i].is_alive && !players[i].is_wolf) { vote_counts[i]++; } } for (int i = 0; i < players.size(); i++) { if (players[i].is_alive && !players[i].is_wolf) { int vote; do { vote = rand() % players.size(); } while (!players[vote].is_alive || players[vote].is_wolf); vote_counts[vote]++; if (vote_counts[vote] > max_votes) { max_votes = vote_counts[vote]; } } } vector<int> candidates; for (int i = 0; i < players.size(); i++) { if (vote_counts[i] == max_votes) { candidates.push_back(i); } } if (candidates.size() == 1) { cout << players[candidates[0]].name << " 被投票出局。" << endl; players[candidates[0]].is_alive = false; if (players[candidates[0]].is_wolf) { num_wolves--; } else { num_villagers--; } } else { cout << "平票,無人出局。" << endl; } // 重置投票狀態(tài) for (int i = 0; i < players.size(); i++) { if (players[i].is_alive) { players[i].is_voted = false; } } } // 游戲結(jié)束 if (num_wolves == 0) { cout << "村民獲勝!" << endl; } else { cout << "狼人獲勝!" << endl; } } }; int main() { int num_players; cout << "請(qǐng)輸入玩家人數(shù):"; cin >> num_players; Game game(num_players); game.start_game(); return 0; }
這個(gè)示例代碼實(shí)現(xiàn)了一個(gè)基本的狼人殺游戲。它的規(guī)則如下:
- 每局游戲有一定數(shù)量的狼人和村民。
- 游戲開始時(shí),所有玩家隨機(jī)排列。
- 在每個(gè)白天里,狼人和村民輪流討論并投票殺人。
- 在每個(gè)夜晚里,狼人討論并投票殺人。
- 玩家被殺后出局,游戲直到所有狼人或村民都被淘汰才結(jié)束。
綜上所述,這就是一個(gè)簡單的用C++實(shí)現(xiàn)的狼人殺游戲。當(dāng)然,這只是一個(gè)基本框架,還可以進(jìn)一步完善和優(yōu)化,比如增加更多的角色和技能,改進(jìn)交互界面,優(yōu)化游戲體驗(yàn)等等。希望這個(gè)例子能夠幫助你更好地理解面向?qū)ο缶幊毯虲++語言的應(yīng)用。
到此這篇關(guān)于利用C++實(shí)現(xiàn)簡易的狼人殺游戲的文章就介紹到這了,更多相關(guān)C++狼人殺游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux下Select多路復(fù)用實(shí)現(xiàn)簡易聊天室示例
大家好,本篇文章主要講的是Linux下Select多路復(fù)用實(shí)現(xiàn)簡易聊天室示例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12C++重載運(yùn)算符實(shí)現(xiàn)分?jǐn)?shù)加減乘除
這篇文章主要為大家詳細(xì)介紹了C++重載運(yùn)算符實(shí)現(xiàn)分?jǐn)?shù)加減乘除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06QT線程池的使用(QThreadPool類和QRunnable類)
本文主要介紹了QT線程池的使用(QThreadPool類和QRunnable類),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04c++ 數(shù)字類型和字符串類型互轉(zhuǎn)詳解
今天小編就為大家分享一篇講解c++ 數(shù)字類型和字符串類型互轉(zhuǎn)的文章,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-09-09深入解析Radix Sort基數(shù)排序算法思想及C語言實(shí)現(xiàn)示例
基數(shù)排序和桶排序、計(jì)數(shù)排序共同是三種最常用的線性排序算法,這里我們就來深入解析Radix Sort基數(shù)排序算法思想及C語言實(shí)現(xiàn)示例,需要的朋友可以參考下2016-07-07數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組Array實(shí)例詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組Array實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05