猜拳游戏c代码

题目:

实现一个剪刀、石头、布的猜拳游戏。

解题思路:

1、猜拳游戏的三个关键点在于:给定计算机的出拳结果,对自己出拳结果的记录,自己出拳结果和计算机出拳结果的比较。

2、计算机的出拳结果可以利用随机函数给定,通过随机出不同的值可以代表计算机不同的出拳结果。这里如果只简单利用rand进行随机,那么实现的结果是一种伪随机,它在多次运行时的结果都是一样的,就要使用到srand根据时间来进行随机。

3、对于自己出拳结果的记录时,自己的输入为中文的剪刀、石头、布比较合理,那么就需要定义一个字符型的数组来接收这个输入的结果。

4、人机出拳结果的比较是这个代码比较关键的一部分,因为输入的中文也是字符串型的数据,那么可以借助字符串的比较函数(strcmp)来进行比较,这里简单介绍一下,当被比较的两个字符串完全相同时,该函数的返回值是0。

5、为了贴近实际的游戏玩法利用了goto语句实现重玩的操作,在这一部分比较重要的语句是  while (getchar() != '\n');,因为当我输入y决定重玩时,在缓冲区可能存在垃圾字符影响程序的进行。事实上也是这样的,当这个语句去掉时,程序将直接进行判断,玩家无法输入重玩后的猜拳结果。

程序代码:

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{ 
p:  
    printf("********欢迎来到猜拳游戏*********\n");
    printf("请输入你的出拳结果(石头、剪刀、布):\n");
    char a[20];
    gets(a);//将输入结果存储到字符数组中
    int self;
    srand(time(NULL));//随机函数
    int i = rand()%3;//以下根据随机出的数给计算机的出拳结果赋值
    if(i == 0){
    printf("计算机出石头\n");
    }
    else if(i == 1){
    printf("计算机出剪刀\n");
    }
    else{
    printf("计算机出布\n");
    }
    if(strcmp(a,"石头") == 0){//将计算机的出拳结果和玩家的出拳结果进行比较
    self = 0;
    }
    else if(strcmp(a,"剪刀") == 0){
    self = 1;
    }
    else{
    self = 2;
    }
    if((self == 0 && i == 1) || (self == 1 && i == 2) || (self == 2 && i == 0)){
    printf("结果是你赢了\n");
    }
    else if (self == i){
    printf("结果是平局\n");
    }
    else{//先写平局和赢的条件,输的时候条件可以不用写了
    printf("结果是你输了\n");
    }
    printf("在来一次?[y/n]");
    char j;
    scanf("%c",&j);
    if(j == 'y'){
    while (getchar() != '\n'); //清空缓冲区的字符,避免对下一次为数组赋值造成干扰
    goto p;//利用goto语句跳转到程序的开始
    }
    else{//当决定不玩时程序可以提前结束
    return 0;
    }
    return 0;
} 

运行结果:

********欢迎来到猜拳游戏*********
请输入你的出拳结果(石头、剪刀、布):
布
计算机出布
结果是平局
在来一次?[y/n]y
********欢迎来到猜拳游戏*********
请输入你的出拳结果(石头、剪刀、布):
剪刀
计算机出石头
结果是你输了
在来一次?[y/n]y
********欢迎来到猜拳游戏*********
请输入你的出拳结果(石头、剪刀、布):
石头
计算机出石头
结果是平局
在来一次?[y/n]n

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值