C++实现骗子酒馆
·
C++实现骗子酒馆
目前实现的功能:
功能:
1.每牌库中一共有4种卡牌
2.每一回合随机发牌,每人五张
3.按照人数轮流出牌
4.每一次出牌,下家可以质疑,如果质疑成功本家惩罚,否则,下家惩罚。
5.直到剩下最后一个人的时候游戏结束
我还没有写每一局随机指定的卡牌。
代码如下:
#include<bits/stdc++.h>
#include <windows.h>
using namespace std;
bool IsTrue, GameOver = false;
int WitchCard = 3;
typedef struct P{
int LasterNumber = 3;
int Card[6];
int LastCard;
}Player;
int Play(vector<Player> &P, int x)
{
IsTrue = true;
system("cls");
printf("玩家%d\n", x + 1);
int n = 0;
for( int i = 1; i <= 5; i++ )
{
cout << i << ". " << P[x].Card[i] << endl;
}
printf("输出要打出的手牌序号(0结束):\n");
int t;
//getchar();
while(true)
{
cin >> t;
if(!t) break;
if(P[x].Card[t])
{
n += 1;
if(P[x].Card[t] != WitchCard) IsTrue = false;
P[x].Card[t] = 0;
P[x].LastCard -= 1;
}
}
return n;
}
bool Punishment(vector<Player> &P, int x)
{
int t = rand() % P[x].LasterNumber;
if(!t)
{
printf("玩家%d死了", (x + 1));
getchar();
return true;
}else
{
printf("玩家%d没有死", (x + 1));
getchar();
P[x].LasterNumber -= 1;
}
return false;
}
int main()
{
while(true)
{
vector<Player> Players;
int IsFirst = true;
bool set[10];
memset(set, false, sizeof(set));
system("cls");
printf("酒馆游戏\n");
printf("请选择是否开始游戏:\n");
printf("1.开始\n");
printf("2.退出\n");
int tem;
scanf("%d", &tem);
if(tem == 2) break;
system("cls");
GameOver = false;
printf("酒馆游戏\n");
printf("请输入游戏人数(2--4):\n");
int number;
cin >> number;
system("cls");
printf("酒馆游戏--%d人场\n", number);
printf("本局牌号为%d", WitchCard);
getchar();
getchar();
for( int i = 0; i < number; i ++ )
{
Player player;
player. LastCard = 5;
for( int j = 1; j <= 5; j ++ )
{
srand(static_cast<unsigned int>(time(0)));
player. Card[j] = rand() % 6 + 1;
}
Players.push_back(player);
}
int last, last_number;
while(true)
{
for( int i = 0; i < Players.size(); i ++ )
{
system("cls");
if(!set[i])
{
printf("玩家%d\n", i + 1);
if(!IsFirst)
{
printf("%d号玩家打出%d张\n", last, last_number);
printf("是否质疑\n");
printf("1.质疑\n");
printf("2.不质疑\n");
int z;
cin >> z;
if(z == 2)
{
if(Players[last - 1].LastCard == 0)
{
printf("%d玩家胜利\n", last);
GameOver = true;
getchar();
getchar();
break;
}
last_number = Play(Players, i);
last = i + 1;
continue;
}else
{
if(!IsTrue) {
printf("质疑成功!!\n");
getchar();
set[last - 1] = Punishment(Players, last - 1);
if(set[last - 1]) number -= 1;
}
else {
printf("质疑失败!!\n");
getchar();
set[i] = Punishment(Players, i);
if(set[i]) number -= 1;
}
if(number == 1) break;
if(!set[i])
{
last_number = Play(Players, i);
last = i + 1;
}else
{
IsFirst = true;
}
}
}else
{
last_number = Play(Players, i);
last = i + 1;
IsFirst = false;
}
}
}
if(number == 1)
{
for( int i = 0; i < Players.size(); i ++ )
{
if(!set[i])
{
printf("玩家%d胜利\n", i + 1);
getchar();
GameOver = true;
}
}
}
if(GameOver) break;
}
}
return 0;
}
仅供参考~~
更多推荐



所有评论(0)