精简程序:投掷双骰子游戏

Vo5 2005-02-01 04:51:18
这是我写的一个程序,自己觉得太长了,各位大虾能帮我看看应该怎么改吗?

1投双骰子游戏
游戏者投掷两个骰子。每个骰子有六面,上面分别标有1.2.3.4.5.6六个圆点。当骰子停止滚动后,把两个骰子朝上的点数相加。在第一次投掷时,如果所得到的和为7或11,那么游戏者就赢了;如果得到的和为2、3或12,游戏者就输了;如果和为4、5、6、8、9、或10,那么这个和就为游戏者的点数。要想要赢的话,必须继续投掷骰子,直到取得自己的点数(即第一次投出的4、5、6、8、9、或10)为止。但是,如果投出了点数7,游戏者就输了。
游戏允许下赌注。游戏者的本金为bankBalance,赌注为wager, 从键盘输入,wager不允许大于bankBalance.如果wager大于bankBalance,提示游戏者从新输入。如果游戏者赢了,把wager加到bankBalance中,并打印出新的bankBalance值;疏勒则从bankBalance中减去wager的值,打印新的bankBalance的值。BankBalance 小于0时结束游戏。
游戏中允许游戏者随时退出游戏。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

#define SIZE 1000

int count(void);

int roll();

int reroll();

void deal(int);

void enter();

static int bankBalance = SIZE;
static int total = 0;
static int temp = 0;
static int wager = 0;

main()
{ int result;
char name[20],decide,decide2;

srand(time(NULL));
printf("Welcome!!\nPlease enter your name:\n");
scanf("%s",name);

printf("Hello,%s!!\nYour bankbalance is 1000 dollars.",name);

do
{
result = roll();
do
{
printf("Aw cmon,take a chance!!(Y/N?)");
scanf("%c",&decide);
getchar();

if(decide=='n'||decide=='N')
{
printf("Good bye,%s~~~~ Welcome back!!!\n",name);
break;
}
else if(decide!='y'&&decide!='Y')
printf("I'm afaid you've a wrong key.\nLet's start.\n");
else
{
switch(result)
{ case 1:
case 2: break;
case 0:
while(result==0)
{ reroll();
printf("If you want to quit,press 0.\n");
scanf("%c",&decide2);
getchar();

if(decide2=='0')
break;
}
}
}
}while(decide!='Y'&&decide!='y'&&decide!='n'&&decide!='N');
if(decide2=='0')
break;
}while(bankBalance>0);

if(bankBalance==0) printf("Sorry.You busted!\n");
else if(bankBalance!=-3*SIZE&&bankBalance<0)
printf("Be careful!!You're in debt!\n");
else if(bankBalance>SIZE)
printf("%s,you're up big!How lucky you are!!\n",name);
else printf("Not bad, isn't it?");
}

void enter()
{
do{
printf("\nPlease enter your wager:");
scanf("%d",&wager);
getchar();
if(wager>bankBalance)
printf("You don't have enough money.\nPlease enter again:");
}while(wager>bankBalance);
printf("Money remains : %d\nLet's begin!!\n",bankBalance-wager);
printf("Player roll for the %drd time:\n",++total);
}

int roll()
{ int result,sum;
enter();
sum = count();
switch(sum)
{
case 7 :
case 11 : result = 1;deal(result);break;
case 2 :
case 3 :
case 12 : result = 2;deal(result);break;
default : result=0;temp=sum;
}
return(result);
}

int reroll(int res)
{ int sum;

do { enter();
sum = count(); /*B*/

if(sum==7)
{
res = 2;
deal(res);
}
if(sum==temp)
{
res = 1;
deal(res);
}

} while(res==0);
}

void deal(int res)
{
if(res==1)
{
printf("Congratulations!!You wins!!\n\n");
bankBalance+=wager;
}
if(res==2)
{
printf("Player loses~~~~\n\n");
bankBalance-=wager;
}
printf("Your bankBalance is %d",bankBalance);
}

int count(void)
{ int dot1,dot2,sum;

dot1 = 1 + rand() % 6;
dot2 = 1 + rand() % 6;
sum = dot1 + dot2;
printf("Player rolled %d+%d=%d\n",dot1,dot2,sum);
return(sum);
}
...全文
749 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rorl 2005-02-02
  • 打赏
  • 举报
回复
没图像,掷骰子没感觉
楼主弄个图像模拟一下,那就过瘾了~
qingyuan18 2005-02-02
  • 打赏
  • 举报
回复
楼主你程序哪儿有错么?


xuelong_zl 2005-02-02
  • 打赏
  • 举报
回复
mark先
yitiaoming2003 2005-02-01
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int rollDice(void);

int bankBalance=1000;

main(void)
{
int gameStatus,sum,myPoint,investment;
char choice;
printf("Please Enter your choice(Y/N)?");
scanf("%c",&choice);

while (choice !='N' && choice !='n')
{

printf("\nPlease enter your investment:");
scanf("%d",&investment);

if (bankBalance < investment)
{
do{
printf("\n%s\n%s",
"Your investment greater than bankBalance!",
"Please enter your investment:");
scanf("%d",&investment);
}while(bankBalance < investment);
}
srand(time(NULL));
sum=rollDice(); //第一次投掷
switch (sum)
{
case 7: case 11: //第一次投掷就赢了
gameStatus=1;
break;
case 2: case 3: case 12: //第一次投掷就输了
gameStatus=2;
break;
default:
gameStatus=0;
myPoint=sum;
printf("Point is %d\n",myPoint);
break;
}

while (gameStatus==0) //继续投掷
{
sum=rollDice();

if (sum==myPoint)
gameStatus=1; //因为掷出了自己的点数,所以赢了
else
if (sum==7) //因为掷出了7,所以输了
gameStatus=2;
}

if (gameStatus==1)
{
printf("Player wins\n");
bankBalance=bankBalance+investment;
}
else
{
printf("Player loses\n");
bankBalance=bankBalance-investment;
}
if (bankBalance <=0 )
{

printf("Your bankBalance is bankBalance=%d\n",bankBalance);
break;
}

printf("bankBalance=%d\n",bankBalance);
printf("Please Enter your choice(Y/N)?");
getchar();
scanf("%c",&choice);
}

return 0;
}

int rollDice(void)
{
int die1,die2,workSum;

die1=1+(rand()%6);
die2=1+(rand()%6);
workSum=die1+die2;
printf("Player rolled %d+%d=%d\n",die1,die2,workSum);

return workSum;
}
可以吗?
mycoldboy 2005-02-01
  • 打赏
  • 举报
回复
up
wallacesan 2005-02-01
  • 打赏
  • 举报
回复
程序当上一次我押注后Money remains :0 而恰巧这局输了的时候,此时第一次满足“BankBalance 小于0时结束游戏。” 而屏幕将显示如下
Aw cmon,take a chance!!(Y/N?)
这样Y 后,仍可以继续游戏!
楼主应改进!
Leaveye 2005-02-01
  • 打赏
  • 举报
回复
呵呵,我倒是挺爱玩 VoS 的。。 cc
junnyfeng 2005-02-01
  • 打赏
  • 举报
回复
娜娜?我女朋友耶。。。。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧