c语言剪刀石头布小游戏

2024-12-22 00:00:51
推荐回答(5个)
回答1:

#include
#include
#include

int main()
{
char m; //表示选择的是哪个人
int a,b; //分别表示人和电脑
printf("(J)iandao, (S)hitou, hu(B)u :\n");
scanf("%c",&m);
if(m!='J' && m!='S' && m!='B')
printf("Input error!\n");
else //分别用0,1,2代表石头,剪刀,布
{
srand(time(NULL));
a = rand()%3;
switch(a)
{
case 0:
printf("人出的是石头\n");
break;
case 1:
printf("人出的是剪刀\n");
break;
case 2:
printf("人出的是布\n");
break;
default:
break;
}
b = rand()%3;
switch(b)
{
case 0:
printf("电脑出的是石头\n");
break;
case 1:
printf("电脑出的是剪刀\n");
break;
case 2:
printf("电脑出的是布\n");
break;
default:
break;
}
if(a > b)
printf("人赢了!\n");
else if(a == b)
printf("平局!\n");
else
printf("电脑赢了!\n");
}
return 0;
}

回答2:

#include
#include
#include

char sjb(); /* 电脑出拳 */
int iswin(char rc,char jc); /* 判断输赢:1|0|-1=人赢|平局|电脑赢 */
int main(){
char rc,jc,jx='Y';
int jg;
while(1){
jc=sjb();
printf("(J)iandao, (S)hitou, huo(B)u :");
scanf("%c",&rc);
if(rc>='a' && rc<='z')
rc-=32;
if( rc=='J' || rc=='S' || rc=='B' ){
jg=iswin(rc,jc);
printf("你出了%c,电脑出了%c。",rc,jc);
switch(jg){
case -1:
printf("遗憾,你输了!\n"); break;
case 0:
printf("平局!\n"); break;
case 1:
printf("恭喜,你赢了!\n");
}
}else
printf("选择错误!\n");
printf("再来一局?(y/n)");
getchar();
scanf("%c",&jx);
getchar();
if(jx!='Y' && jx!='y')
break;
}
return 0;
}

char sjb(){
char c;
int i;
srand(time(0));
i=rand()%3;
switch(i){
case 0:
c='J'; break;
case 1: c='S'; break;
case 2: c='B';
}
return c;
} /* sjb() */

int iswin(char rc,char jc){
int jg;
if(rc=='J' && jc=='B' || rc=='S' && jc=='J' || rc=='B' && jc=='S' )
jg=1; /* 人赢 */
else if(rc==jc)
jg=0; /* 平局 */
else
jg=-1; /* 人输 */
return jg;
} /* iswin */

回答3:

#include
#include
#include
#include

#define RAND(N) (int)((double)rand() / ((double)RAND_MAX + 1) * N)
#define PRINT(msg) fputs(msg, stdout)

#define MAN_WIN 1
#define COM_WIN 2
#define NUL_WIN 3 /* 平手 */

void flushinp(void)
{
int ch;

while((ch = getchar()) != '\n' && ch != EOF);
}

char getman(void) {
char man;

do {
PRINT("请您出拳 >>> ");
scanf("%c", &man);
flushinp(); /* 清空输入缓冲区残余字符 */
man = tolower(man);
} while (man != 'j' && man != 's'
&& man != 'b' && man != 'q');
return man;
}

char getcom(void) {
char com;

com = RAND(3);
if (0 == com) { com = 's'; }
else if (1 == com) { com = 'j'; }
else if (2 == com) { com = 'b'; }
return com;
}

int judgewin(char man, char com)
{
if (man == com) {
return NUL_WIN;
}
else if (
'j' == man && 'b' == com
|| 's' == man && 'j' == com
|| 'b' == man && 's' == com) {
return MAN_WIN;
}
else {
return COM_WIN;
}
}

void disphand(int hand)
{
switch(hand)
{
case 's': PRINT("石头"); break;
case 'j': PRINT("剪子"); break;
case 'b': PRINT("布"); break;
default: break;
}
}

int main(void)
{
char man, com;
int ret;

system("color 3e");
PRINT("-----------猜 拳--------------\n"
"玩法: 玩家输入S/s(石头)、J/j(剪刀)、B/b(布),Q/q(退出)。\n");
srand( (unsigned) time(NULL) );

while (1) {
/* 人出拳 */
man = getman();
if ('q' == man) { /* 退出游戏 */
break;
}
else {
com = getcom(); /* 电脑出拳 */

PRINT("您出了: ");
disphand(man);
PRINT(", 我出了: ");
disphand(com);

ret = judgewin(man, com);
if (MAN_WIN == ret) { PRINT("。 您赢了! 不要骄傲啊。\n"); }
else if (COM_WIN == ret) { PRINT("。 我赢了! 承让承让。\n"); }
else { PRINT("。 这次打成平手了!\n"); }
}
}

PRINT("谢谢惠顾, 祝您天天开心!\n");
getchar();
return 0;
}

回答4:

#include
#include
#include
void main()
{
char a;
puts("input:(J)iandao, (S)hitou, hu(B)u :");
scanf("%c",&a);
if(a!='J'&&a!='S'&&a!='B') {puts("选择错误");exit(0);}
char c;
srand(time(0));
int d=rand()%3+1;
if(d==1) c='J';
else if(d==2) c='S';
else if(d==3)c='B';
printf("输入的为%c\n电脑为%c\n",a,c);
switch (c-a)
{
case -8:puts("you win!");break;
case -9:puts("you win!");break;
case 17:puts("you win!");break;
case -17:puts("computer win!");break;
case 8:puts("computer win!");break;
case 9:puts("computer win!");break;
default:puts("平!");break;
}
}

回答5:

为什么有两个rand 那玩家输入的去数据就起到了一个判断能否执行游戏的作用嘛