#include<bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
using namespace std;
int str[1000];
int player[100];
int pbv[100]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
std::vector<int> generate_unique_randoms(int max_num) {
std::vector<int> result;
std::unordered_set<int> uniqueSet;
std::random_device rd;
std::mt19937 gen(rd()); // 使用Mersenne Twister引擎
std::uniform_int_distribution<> dis(1, max_num); // 随机数范围在1到max_num之间
while (uniqueSet.size() < max_num) {
int random_number = dis(gen);
if (uniqueSet.find(random_number) == uniqueSet.end()) {
uniqueSet.insert(random_number);
result.push_back(random_number);
}
}
return result;
}
int main() {
int im=1;
int wolf=1;
cout<<"游戏人数至少3人哦"<<endl;
cout<<"请输入游戏人数:";
int num;
int p;
cin>>num;
p=num;
while(num<3){
cout<<"游戏人数至少3人哦"<<endl;//TODO
cout<<"请输入游戏人数:";
cin>>num;
}
std::vector<int> random_numbers = generate_unique_randoms(num);
// 打印生成的不同随机数
for (const auto &number : random_numbers) {
player[im]=number;
im++;
//std::cout << number << " ";
}
int qwedcmjivndg;
for(int i=1;i<im;i++){
//cout<<player[i]<<endl;
cout<<"输入一个数查看"<<i<<"号玩家的身份";//TODO
cin>>qwedcmjivndg;
if(player[i]==1){
cout<<"你的身份是:狼人"<<endl;
}
else if(player[i]==2){
cout<<"你的身份是:猎人"<<endl;
}
else if(player[i]==3){
cout<<"你的身份是:预言家"<<endl;
}
else if(player[i]==4)
{
cout<<"你的身份是:女巫"<<endl;
}
else if(player[i]==5)
{
cout<<"你的身份是:平民"<<endl;
}
cout<<"输入一个数隐藏";
cin>>qwedcmjivndg;
system("cls");
}
//分配角色
/*
int ncl;
cout<<"狼人请睁眼:请打出你要杀的玩家的编号:";
cin>>ncl;
while(ncl>num){
cout<<"不存在此玩家,请重新输入:";
cin>>ncl;
}
for(int i=0;i<=50;i++){
cout<<endl;//TODO
}
pbv[ncl]=0;
cout<<"猎人请睁眼:请打出你要射杀的玩家的编号:";
cin>>ncl;
for(int i=0;i<=50;i++){
cout<<endl;//TODO
}
while(ncl>num){
cout<<"不存在此玩家,请重新输入:";
cin>>ncl;
}
for(int i=0;i<=50;i++){
cout<<endl;//TODO
}
pbv[ncl]=0;
cout<<"预言家请睁眼:请打出你要预言身份的玩家的编号:";
cin>>ncl;
while(ncl>num){
cout<<"不存在此玩家,请重新输入:";
cin>>ncl;
}
if(player[ncl]==1){
cout<<"bad";
}
else
{
cout<<"good";
}
cout<<"输入一个数隐藏";
cin>>qwedcmjivndg;
for(int i=0;i<=50;i++){
cout<<endl;//TODO
}
//释放技能环节
cout<<"天亮了"<<endl;
cout<<"今晚";
for(int i=1;i<=num;i++){
if(pbv[i]==0)
{
cout<<i<<",";
*/
/*
if(i==1){
cout<<"狼人";
}
else if(i==2){
cout<<"猎人";
}
else if(i==3){
cout<<"预言家";
}
else if(i==4)
{
cout<<"女巫";
}
else if(i==5)
{
cout<<"平民";
}
*/
/*
}
}
*/
/*
cout<<"号玩家被淘汰了"<<endl;
cout<<"他们的身份是:";
for(int i=1;i<=num;i++){
if(pbv[i]==0)
{
if(i==1){
cout<<"狼人";
}
else if(i==2){
cout<<"猎人";
}
else if(i==3){
cout<<"预言家";
}
else if(i==4)
{
cout<<"女巫";
}
else if(i==5)
{
cout<<"平民";
}
cout<<",";
}
}
//宣告结果环节
cout<<endl;
int sl[1000]={};
for(int i=1;i<=num;i++){
cout<<"请"<<i<<"号玩家投票(投玩家序号)";
cin>>str[i];
while(str[i]>num){
cout<<"不存在此玩家";
cin>>str[i];
}
sl[str[i]]++;
}
int Min;
switch (num) {
case 3:
Min=max(max(sl[1],sl[2]),sl[3]);
//TODO
break;
case 4:
Min=max(max(sl[1],sl[2]),max(sl[3],sl[4]));
//TODO
break;
case 5:
Min=max(max(sl[1],sl[2]),max(max(sl[3],sl[4]),sl[5]));
//TODO
break;
default:
//TODO
break;
}
int t;
for(int i=1;i<=num;i++){
if(sl[i]==Min){
t=i;
break;
}
}
cout<<t<<"号玩家淘汰"<<endl;
cout<<"他的身份是:";
if(Min==1){
cout<<"狼人";
wolf=0;
p--;
}
else if(Min==2){
cout<<"猎人";
p--;
}
else if(Min==3){
cout<<"预言家";
p--;
}
else if(Min==4)
{
cout<<"女巫";
p--;
}
else if(Min==5)
{
cout<<"平民";
p--;
}
cout<<endl<<"剩余玩家人数"<<num<<endl;
for(int i=1;i<=100;i++){
sl[i]=0;
}
Min=0;
*/
//
while (p>2||wolf!=0)
{
system("cls");
int ncl;
cout<<"狼人请睁眼:请打出你要杀的玩家的编号:";
cin>>ncl;
while(ncl>p){
cout<<"不存在此玩家,请重新输入:";
cin>>ncl;
}
system("cls");
pbv[ncl]=0;
cout<<"猎人请睁眼:请打出你要射杀的玩家的编号:";
cin>>ncl;
system("cls");
while(ncl>p){
cout<<"不存在此玩家,请重新输入:";
cin>>ncl;
}
system("cls");
pbv[ncl]=0;
cout<<"预言家请睁眼:请打出你要预言身份的玩家的编号:";
cin>>ncl;
while(ncl>p){
cout<<"不存在此玩家,请重新输入:";
cin>>ncl;
}
if(player[ncl]==1){
cout<<"bad";
}
else
{
cout<<"good";
}
cout<<"输入一个数隐藏";
cin>>qwedcmjivndg;
system("cls");
//释放技能环节
cout<<"天亮了"<<endl;
cout<<"今晚";
for(int i=1;i<=p;i++){
if(pbv[i]==0)
{
cout<<";"<<i<<",";
if(i==1){
cout<<"狼人";
}
else if(i==2){
cout<<"猎人";
}
else if(i==3){
cout<<"预言家";
}
else if(i==4)
{
cout<<"女巫";
}
else if(i==5)
{
cout<<"平民";
}
}
}
cout<<"号玩家被淘汰了"<<endl;
/*
cout<<"他们的身份是:";
for(int i=1;i<=num;i++){
if(pbv[i]==0)
{
if(i==1){
cout<<"狼人";
}
else if(i==2){
cout<<"猎人";
}
else if(i==3){
cout<<"预言家";
}
else if(i==4)
{
cout<<"女巫";
}
else if(i==5)
{
cout<<"平民";
}
cout<<",";
}
}
*/
//宣告结果环节
cout<<endl;
int sl[1000]={};
for(int i=1;i<=p;i++){
cout<<"请"<<i<<"号玩家投票(投玩家序号)";
cin>>str[i];
while(str[i]>p){
cout<<"不存在此玩家";
cin>>str[i];
}
sl[str[i]]++;
}
int Min;
switch (p) {
case 3:
Min=max(max(sl[1],sl[2]),sl[3]);
//TODO
break;
case 4:
Min=max(max(sl[1],sl[2]),max(sl[3],sl[4]));
//TODO
break;
case 5:
Min=max(max(sl[1],sl[2]),max(max(sl[3],sl[4]),sl[5]));
//TODO
break;
default:
//TODO
break;
}
int t;
for(int i=1;i<=p;i++){
if(sl[i]==Min){
t=i;
break;
}
}
int t_t;
for(int i=1;i<=p;i++){
if(player[i]==t){
t_t=i;
}
}
cout<<t_t<<"号玩家淘汰"<<endl;
cout<<"他的身份是:";
if(Min==1){
cout<<"狼人";
wolf=0;
p--;
}
else if(Min==2){
cout<<"猎人";
p--;
}
else if(Min==3){
cout<<"预言家";
p--;
}
else if(Min==4)
{
cout<<"女巫";
p--;
}
else if(Min==5)
{
cout<<"平民";
p--;
}
cout<<endl<<"剩余玩家人数"<<num<<endl;
}
if(wolf==0)
{
cout<<"平民胜利!";
}
else if(p<=2)
{
cout<<"狼胜利!";
}
return 0;
}
02-29
8万+
06-01
09-11
05-20
07-24
1263
10-07
8万+
06-12
06-21
09-08
210