使用C++编写模拟游戏的程序
答案:1 悬赏:20 手机版
解决时间 2021-01-24 03:32
- 提问者网友:欲望失宠
- 2021-01-23 23:34
单人纸牌游戏按如下规则进行:把拿掉了大王和小王的52张扑克牌分成13堆,从左往右摆开,每堆4张;翻开第1堆最上面的一张牌,如果它是i(1≤i≤13,其中1表示A,11表示J,12表示Q,13表示K),就把它放到第i堆的下面,此时,若第i堆中的牌已全部翻开,则游戏结束,否则接着翻开第i堆最上面的一张牌,游戏继续进行;当游戏结束时,统计已翻开牌的数目,若已翻开牌的数目超过48张,则认为本次游戏成功,否则就是不成功。 编写模拟这个游戏的程序。
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-01-24 00:56
#include <iostream>
#include <queue>
#include <time.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <conio.h>
using namespace std;
//黑桃(Spade)(S)0-12 梅花(Club)(C)100-112 红桃(Heart)(H)200-212 方块(Diamond)(D)300-312
vector<int>cards[13];//13堆牌
char Color[]="SCHD";
void ptCards(){
int maxsz=0;
for(int i=0;i<13;i++){
int sz=cards[i].size();
maxsz=max(maxsz,sz);
printf(" [%2d] ",i+1);
}
puts("");
for(int i=0;i<maxsz;i++){
for(int j=0;j<13;j++){
if(i>=cards[j].size()){
printf(" ");
continue;
}
int cur=cards[j][i];
printf(" (%c)",Color[cur/100]);
cur=cur%100+1;
if(cur==1)
printf("A ");
else if(cur==10)
printf("10");
else if(cur==11)
printf("J ");
else if(cur==12)
printf("Q ");
else if(cur==13)
printf("K ");
else
printf("%d ",cur);
}
puts("");
}
}
void getCards(){
int AllCards[52];//52张牌
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
AllCards[i*13+j]=i*100+j;
for(int i=0;i<52;i++){ //打乱顺序
int t=rand()%(52-i)+i;
swap(AllCards[i],AllCards[t]);
}
for(int i=0;i<13;i++)
while(!cards[i].empty())
cards[i].clear();
for(int i=0;i<52;i++) //分发到13堆里
cards[i%13].push_back(AllCards[i]);
}
int playOneStep(int k){
if(cards[k].size()==0){
printf("第%d堆没有卡片,游戏结束!\n",k+1);
return -1;
}
int nxt=cards[k][0];
cards[k].erase(cards[k].begin());
return nxt%100;
}
void playGames(){
int cur=0;
int steps=0;
while(cur!=-1 && steps<48){
cur=playOneStep(cur);
if(cur==-1) continue;
printf("Step:%d 现在应该翻第%d堆的牌\n",++steps,cur+1);
ptCards();
}
if(steps==48)
printf("已超过48轮,本次游戏成功!!");
}
int main(){
srand(time(0));
getCards();
printf("分牌完毕:\n");
ptCards();
playGames();
getch();
} 再来一发有颜色的,这个仅限windows下运行
#include <iostream>
#include <queue>
#include <time.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <conio.h>
#include <windows.h>
#define RED 4
#define BLUE 1
#define GREEN 2
#define LIGHT 8
using namespace std;
//黑桃(Spade)(S)0-12 梅花(Club)(C)100-112 红桃(Heart)(H)200-212 方块(Diamond)(D)300-312
vector<int>cards[13];//13堆牌
char Color[]="SCHD";
void setText(int n){
HANDLE hConsoleWnd;
hConsoleWnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsoleWnd,n);
}
void setBack(int n){
n|=LIGHT;
n<<=4;
n|=RED|BLUE|GREEN|LIGHT;
setText(n);
}
void whiteText(){
HANDLE hConsoleWnd;
hConsoleWnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsoleWnd,15);
}
void ptCards(){
int maxsz=0;
for(int i=0;i<13;i++){
int sz=cards[i].size();
maxsz=max(maxsz,sz);
printf(" [%2d] ",i+1);
}
puts("");
for(int i=0;i<maxsz;i++){
for(int j=0;j<13;j++){
if(i>=cards[j].size()){
setText(15);
printf(" ");
continue;
}
int cur=cards[j][i];
printf(" ");
if(cur/100>1) setBack(RED);
else setBack(BLUE);
printf("(%c)",Color[cur/100]);
cur=cur%100+1;
if(cur==1)
printf("A");
else if(cur==10)
printf("10");
else if(cur==11)
printf("J");
else if(cur==12)
printf("Q");
else if(cur==13)
printf("K");
else
printf("%d",cur);
setText(15);
if(cur!=10)printf(" ");
}
puts("");
}
setText(15);
}
void getCards(){
int AllCards[52];//52张牌
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
AllCards[i*13+j]=i*100+j;
for(int i=0;i<52;i++){ //打乱顺序
int t=rand()%(52-i)+i;
swap(AllCards[i],AllCards[t]);
}
for(int i=0;i<13;i++)
while(!cards[i].empty())
cards[i].clear();
for(int i=0;i<52;i++) //分发到13堆里
cards[i%13].push_back(AllCards[i]);
}
int playOneStep(int k){
if(cards[k].size()==0){
printf("第%d堆没有卡片,游戏结束!\n",k+1);
return -1;
}
int nxt=cards[k][0];
cards[k].erase(cards[k].begin());
return nxt%100;
}
void playGames(){
int cur=0;
int steps=0;
while(cur!=-1 && steps<48){
cur=playOneStep(cur);
if(cur==-1) continue;
printf("Step:%d 现在应该翻第%d堆的牌\n",++steps,cur+1);
ptCards();
}
if(steps==48)
printf("已超过48轮,本次游戏成功!!");
}
int main(){
srand(time(0));
setText(15);
getCards();
printf("分牌完毕:\n");
ptCards();
playGames();
getch();
}
#include <queue>
#include <time.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <conio.h>
using namespace std;
//黑桃(Spade)(S)0-12 梅花(Club)(C)100-112 红桃(Heart)(H)200-212 方块(Diamond)(D)300-312
vector<int>cards[13];//13堆牌
char Color[]="SCHD";
void ptCards(){
int maxsz=0;
for(int i=0;i<13;i++){
int sz=cards[i].size();
maxsz=max(maxsz,sz);
printf(" [%2d] ",i+1);
}
puts("");
for(int i=0;i<maxsz;i++){
for(int j=0;j<13;j++){
if(i>=cards[j].size()){
printf(" ");
continue;
}
int cur=cards[j][i];
printf(" (%c)",Color[cur/100]);
cur=cur%100+1;
if(cur==1)
printf("A ");
else if(cur==10)
printf("10");
else if(cur==11)
printf("J ");
else if(cur==12)
printf("Q ");
else if(cur==13)
printf("K ");
else
printf("%d ",cur);
}
puts("");
}
}
void getCards(){
int AllCards[52];//52张牌
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
AllCards[i*13+j]=i*100+j;
for(int i=0;i<52;i++){ //打乱顺序
int t=rand()%(52-i)+i;
swap(AllCards[i],AllCards[t]);
}
for(int i=0;i<13;i++)
while(!cards[i].empty())
cards[i].clear();
for(int i=0;i<52;i++) //分发到13堆里
cards[i%13].push_back(AllCards[i]);
}
int playOneStep(int k){
if(cards[k].size()==0){
printf("第%d堆没有卡片,游戏结束!\n",k+1);
return -1;
}
int nxt=cards[k][0];
cards[k].erase(cards[k].begin());
return nxt%100;
}
void playGames(){
int cur=0;
int steps=0;
while(cur!=-1 && steps<48){
cur=playOneStep(cur);
if(cur==-1) continue;
printf("Step:%d 现在应该翻第%d堆的牌\n",++steps,cur+1);
ptCards();
}
if(steps==48)
printf("已超过48轮,本次游戏成功!!");
}
int main(){
srand(time(0));
getCards();
printf("分牌完毕:\n");
ptCards();
playGames();
getch();
} 再来一发有颜色的,这个仅限windows下运行
#include <iostream>
#include <queue>
#include <time.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <conio.h>
#include <windows.h>
#define RED 4
#define BLUE 1
#define GREEN 2
#define LIGHT 8
using namespace std;
//黑桃(Spade)(S)0-12 梅花(Club)(C)100-112 红桃(Heart)(H)200-212 方块(Diamond)(D)300-312
vector<int>cards[13];//13堆牌
char Color[]="SCHD";
void setText(int n){
HANDLE hConsoleWnd;
hConsoleWnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsoleWnd,n);
}
void setBack(int n){
n|=LIGHT;
n<<=4;
n|=RED|BLUE|GREEN|LIGHT;
setText(n);
}
void whiteText(){
HANDLE hConsoleWnd;
hConsoleWnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsoleWnd,15);
}
void ptCards(){
int maxsz=0;
for(int i=0;i<13;i++){
int sz=cards[i].size();
maxsz=max(maxsz,sz);
printf(" [%2d] ",i+1);
}
puts("");
for(int i=0;i<maxsz;i++){
for(int j=0;j<13;j++){
if(i>=cards[j].size()){
setText(15);
printf(" ");
continue;
}
int cur=cards[j][i];
printf(" ");
if(cur/100>1) setBack(RED);
else setBack(BLUE);
printf("(%c)",Color[cur/100]);
cur=cur%100+1;
if(cur==1)
printf("A");
else if(cur==10)
printf("10");
else if(cur==11)
printf("J");
else if(cur==12)
printf("Q");
else if(cur==13)
printf("K");
else
printf("%d",cur);
setText(15);
if(cur!=10)printf(" ");
}
puts("");
}
setText(15);
}
void getCards(){
int AllCards[52];//52张牌
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
AllCards[i*13+j]=i*100+j;
for(int i=0;i<52;i++){ //打乱顺序
int t=rand()%(52-i)+i;
swap(AllCards[i],AllCards[t]);
}
for(int i=0;i<13;i++)
while(!cards[i].empty())
cards[i].clear();
for(int i=0;i<52;i++) //分发到13堆里
cards[i%13].push_back(AllCards[i]);
}
int playOneStep(int k){
if(cards[k].size()==0){
printf("第%d堆没有卡片,游戏结束!\n",k+1);
return -1;
}
int nxt=cards[k][0];
cards[k].erase(cards[k].begin());
return nxt%100;
}
void playGames(){
int cur=0;
int steps=0;
while(cur!=-1 && steps<48){
cur=playOneStep(cur);
if(cur==-1) continue;
printf("Step:%d 现在应该翻第%d堆的牌\n",++steps,cur+1);
ptCards();
}
if(steps==48)
printf("已超过48轮,本次游戏成功!!");
}
int main(){
srand(time(0));
setText(15);
getCards();
printf("分牌完毕:\n");
ptCards();
playGames();
getch();
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯