服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 利用C++实现简易的狼人杀游戏

利用C++实现简易的狼人杀游戏

2023-04-10 17:27逃逸的卡路里 C/C++

狼人杀游戏是一款非常有趣的角色扮演游戏,它需要玩家之间互相猜测身份并进行投票,通过推理来找出真正的狼人。本文将用C++实现这一游戏,感兴趣的可以了解一下

狼人杀游戏是一款非常有趣的角色扮演游戏,它需要玩家之间互相猜测身份并进行投票,通过推理来找出真正的狼人。

以下是一个基本的狼人杀游戏的C++实现,其中包含游戏角色、游戏流程和基本的逻辑。你可以根据需要添加更多的功能和细节。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
// 玩家结构体
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 << "当前存活玩家:" << endl;
            for (int i = 0; i < players.size(); i++) {
                if (players[i].is_alive) {
                    cout << players[i].name << endl;
                }
            }
 
            // 狼人讨论并投票
            cout << "狼人请开始讨论并投票杀人:" << 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 << "当前存活玩家:" << endl;
            for (int i = 0; i < players.size(); i++) {
                if (players[i].is_alive) {
                    cout << players[i].name << endl;
                }
            }
 
            // 村民讨论并投票
            cout << "村民请开始讨论并投票杀人:" << 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 << " 请投票杀死一个玩家:";
                        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--;
                    }
                }
            }
 
            // 处理投票结果
            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;
            }
 
            // 重置投票状态
            for (int i = 0; i < players.size(); i++) {
                if (players[i].is_alive) {
                    players[i].is_voted = false;
                }
            }
        }
 
        // 游戏结束
        if (num_wolves == 0) {
            cout << "村民获胜!" << endl;
        }
        else {
            cout << "狼人获胜!" << endl;
        }
    }
};
 
int main()
{
    int num_players;
    cout << "请输入玩家人数:";
    cin >> num_players;
    Game game(num_players);
    game.start_game();
    return 0;
}

这个示例代码实现了一个基本的狼人杀游戏。它的规则如下:

  • 每局游戏有一定数量的狼人和村民。
  • 游戏开始时,所有玩家随机排列。
  • 在每个白天里,狼人和村民轮流讨论并投票杀人。
  • 在每个夜晚里,狼人讨论并投票杀人。
  • 玩家被杀后出局,游戏直到所有狼人或村民都被淘汰才结束。

综上所述,这就是一个简单的用C++实现的狼人杀游戏。当然,这只是一个基本框架,还可以进一步完善和优化,比如增加更多的角色和技能,改进交互界面,优化游戏体验等等。希望这个例子能够帮助你更好地理解面向对象编程和C++语言的应用。

到此这篇关于利用C++实现简易的狼人杀游戏的文章就介绍到这了,更多相关C++狼人杀游戏内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/u014740628/article/details/129815339

延伸 · 阅读

精彩推荐
  • C/C++基于Matlab实现俄罗斯方块游戏

    基于Matlab实现俄罗斯方块游戏

    俄罗斯方块是一个最初由阿列克谢帕吉特诺夫在苏联设计和编程的益智类视频游戏。本文将利用Matlab实现这一经典的小游戏,需要的可以参考一下...

    slandarer8032022-10-12
  • C/C++C++单例模式的懒汉模式和饿汉模式详解

    C++单例模式的懒汉模式和饿汉模式详解

    这篇文章主要为大家详细介绍了C++懒汉模式和饿汉模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够...

    TABE_4312022-10-19
  • C/C++基于C语言实现的扫雷游戏代码

    基于C语言实现的扫雷游戏代码

    这篇文章主要介绍了基于C语言实现的扫雷游戏代码,对于学习游戏开发的朋友有一定的借鉴价值,需要的朋友可以参考下...

    C语言程序设计10442021-01-25
  • C/C++深入串的模式匹配算法(普通算法和KMP算法)的详解

    深入串的模式匹配算法(普通算法和KMP算法)的详解

    本篇文章是对串的模式匹配算法(普通算法和KMP算法)的应用进行了详细的分析介绍,需要的朋友参考下...

    C语言教程网4432020-12-11
  • C/C++C++基于easyx图形库实现打砖块游戏

    C++基于easyx图形库实现打砖块游戏

    这篇文章主要为大家详细介绍了C++基于easyx图形库实现打砖块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    麦克学肖邦4902022-11-28
  • C/C++visual studio 2022一个不易发现的问题

    visual studio 2022一个不易发现的问题

    本文主要介绍了visual studio 2022一个不易发现的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    人间正道是沧桑809012023-02-17
  • C/C++C语言数组应用实现扫雷游戏

    C语言数组应用实现扫雷游戏

    这篇文章主要为大家详细介绍了C语言数组应用实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    xxzaa10602022-12-20
  • C/C++C语言数组实现扫雷游戏

    C语言数组实现扫雷游戏

    这篇文章主要为大家详细介绍了C语言数组实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    牧瀬 紅莉栖6372022-12-16