首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

纸牌游戏,出现死循环,该怎么解决

2012-03-08 
纸牌游戏,出现死循环#includeCH11Card.h#includeCH11CDealer.h#includeCH11CPlayer.h#includeiostr

纸牌游戏,出现死循环
#include"CH11Card.h"
#include"CH11CDealer.h"
#include"CH11CPlayer.h"
#include<iostream.h>
#include<stdlib.h>
int main()
{ CDealer Bob;
  CPlayer pan,Li;
  Bob.Shuffle();
Card card[52];
int i,j,a=0,choice,ch,x,card_ctr=0,number1=0,number2=0,k=3;
cout<<"\t\t****************************************************"<<endl;
cout<<"\t\t\t\t* 纸牌游戏 *"<<endl;
cout<<"\t\t****************************************************"<<endl;
cout<<" \t\t\t\t1.显示牌 "<<endl;
cout<<" \n\t\t\t\t2.显示洗过后的牌 "<<endl;
cout<<" \n\t\t\t\t3.发牌 "<<endl;
cout<<" \n\t\t\t\t4.洗牌"<<endl;
cout<<" \n\t\t\t\t5.游戏结果"<<endl;
cout<<" \n\t\t\t\t6.游戏规则 "<<endl;
cout<<" \n\t\t\t\t请选择操作(1~6)按其他键退出 "<<endl;
loop:cin>>choice;
switch(choice)
{
case 1:
for(i=0;i<4;++i)
{
for(j=2;j<15;++j)
{
card[card_ctr].SetSuit((Suit)i);
card[card_ctr].SetRand((Rand)j);
++card_ctr;
}
}
card_ctr=0;
for(i=0;i<52;++i)
{
card[i].ShowCard();
card_ctr++;
if(card_ctr==13)
{
cout<<endl;
card_ctr=0;

}
}

cout<<" \n\t\t\t\t请选择操作(1~6) "<<endl;goto loop;break;
case 2:
Bob.Shuffle();
Bob.ShowOrigCard();

cout<<" \n\t\t\t\t请选择操作(1~6) "<<endl;goto loop;break;

case 3:
cout<<"\npan的牌是"<<endl;
Bob.ShowShuffledCard1();
number1=Bob.number(0);
number1=number1+Bob.number(1);
cout<<"\npan目前得分为"<<number1<<endl;
cout<<"\nLi的牌是"<<endl;
Bob.ShowShuffledCard2();
number2=Bob.number(2);
number2=number2+Bob.number(3);
cout<<"\nLi目前得分为"<<number2<<endl;

looe:cout<<"pan需要更多的牌吗?(1)yes (2)no (3)out)!"<<endl;//这个地方如果我输入字母的话会出现死循环,怎么改才不会出现死循环,谢谢cin>>ch;
switch(ch)
{

  case 1:Bob.Showout();k=k+1;
number1=number1+Bob.number(k);
cout<<"pan目前得分为"<<number1;
if(number1>21){cout<<"pan你的牌已经撑死了"<<"你的对手获胜"<<endl;
cout<<" \n\t\t\t\t请选择操作(1~6) "<<endl;goto loop;break;}
goto looe; 
break;
case 2:cout<<"下位"<<endl;{
looc:cout<<"Li需要更多的牌吗?(1)yes (2)no (3)out)!"<<endl;
cin>>ch;
switch(ch)
{
case 1:Bob.Showout();k=k+1;
number2=number2+Bob.number(k);
cout<<"Li目前得分为"<<number2;
if(number2>21){cout<<"Li你的牌已经撑死了"<<"你的对手获胜"<<endl;
cout<<" \n\t\t\t\t请选择操作(1~6) "<<endl;goto loop;break;}
default:cout<<"谢谢你的参与"<<endl;break;
}
}

default:cout<<" \n\t\t\t\t请选择操作(1~6) "<<endl;goto loop;break;
}

case 4:
Bob.Shuffle();
cout<<" \n\t\t\t\t请选择操作(1~6) "<<endl;goto loop;break;
;
case 5:
if(number1==0||number2==0){cout<<"请先开始游戏"<<endl;goto loop;break;}
if(number1>21){cout<<"Li获胜"<<endl;break;}
if(number2>21){cout<<"pan获胜"<<endl;break;}
if(number1>number2){cout<<"pan获胜"<<endl;break;}
if(number1<number2){cout<<"Li获胜"<<endl;break;}
if(number1==number2){cout<<"双方平手"<<endl;break;}
cout<<" \n\t\t\t\t请选择操作(1~6) "<<endl;goto loop;break;


case 6:
cout<<"这个游戏是21点游戏,J,Q,K可以作为10点,其他各牌按数字点数,A可以作为11点,当牌多余5张的时候就是0点,请每次开始的时候重新洗牌";
cout<<" \n\t\t\t\t请选择操作(1~6) "<<endl;goto loop;break;
default:
cout<<"谢谢你的参与"<<endl;break;}
return 0;
}



[解决办法]
你用cin>>ch输入,当输入字母时,等于没有输入,ch的值不变,所以出错。你可以在cin>>ch前面给ch赋一个无效的值,例如ch=0或者ch=-1。

热点排行