林小尖 发表于 2022-1-3 10:38:31

38猜拳小游戏

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

#define HUMANWIN 0
#define COMPUTERWIN 1

int get_computer(void)
{
      int computer;

      srand((unsigned)time(NULL));
      computer = rand() % 3 + 1;

      return computer;
}

int get_human(void)
{
      int human;

      printf("请出拳(1剪刀/2石头/3布/0退出)-> ");
      scanf("%d", &human);

      while (human < 0 || human > 3)
      {
                printf("出拳错误,请重新出拳(只需要输入数字即可)-> ");
                scanf("%d", &human);
      }

      return human * 3;
}

void welcome(void)
{
      printf("\n########################\n");
      printf("# 欢迎来到猜拳小游戏! #\n");

       printf("########################\n\n");
}
}void gameover(int winner)//这里和main中这个的关系是什么,winner是电脑或人胜利者就触发吗,那为什么还有else
{
      if (winner)
      {
                printf("\n#########################################################################\n");
                printf("#                                                                     #\n");
                printf("# ##    ##    ####    ##   ##    ##         ####   ############## #\n");
                printf("#####    ####   ##   ##    ##      ####   ##       ##       #\n");
                printf("#   ####    ##    ####   ##    ##       ##    ####       ##       #\n");
                printf("#    ##   ##    ####   ##    ##       ##    ########   ########\n");
                printf("#    ##   ##    ####   ##    ##       ##    ##       ####       #\n");
                printf("#    ##      ####    ##   ##   ##      ####      ####       #\n");
                printf("#    ##       ####      #####      #######    ####    ######   ######## #\n");
                printf("#                                                                     #\n");
                printf("#########################################################################\n");
      }
      else
      {
                printf("\n##########################################################################\n");
                printf("#                                                                        #\n");
                printf("# ##    ##    ####    ##   ##    ##            ##########   ## #\n");
                printf("#####    ####   ##   ##    ##      ##      ##    ##    ###    ## #\n");
                printf("#   ####    ##    ####   ##    ##   ####   ##    ##    ## #   ## #\n");
                printf("#    ##   ##    ####   ##   ##   ####   ##   ##    ##### #\n");
                printf("#    ##   ##    ####   ##      ## ##    ## ##      ##    ##   # ## #\n");
                printf("#    ##      ####    ##   ##      ###      ###       ##    ##    ### #\n");
                printf("#    ##       ####      #####          #      #      ########   ## #\n");
                printf("#                                                                        #\n");
                printf("##########################################################################\n");

      }
}

int main(void)
{
      int human, computer; // 1、2、3分别代表剪刀石头和布
      int result;
      int human_win = 0;
      int computer_win = 0;

      welcome();

      while (1)
      {
                human = get_human();
                computer = get_computer();

                // 用户输入0表示退出游戏
                if (human == 0)
                {
                        break;
                }

                printf("你出");
                switch (human)
                {
                        case 3: printf("剪刀,"); break;
                        case 6: printf("石头,"); break;
                        case 9: printf("布,"); break;
                }

                printf("我出");
                switch (computer)
                {
                        case 1: printf("剪刀,"); break;
                        case 2: printf("石头,"); break;
                        case 3: printf("布,"); break;
                }

                result = human + computer;

                // 你出剪刀,电脑出布:3 + 3 == 6
                // 你出石头,电脑出剪刀:6 + 1 == 7
                // 你出布,电脑出石头:9 + 2 == 11
                // 以上三种情况算你赢~
                if (result == 6 || result == 7 || result == 11)
                {
                        printf("你赢了!\n\n");
                        human_win++;
                }
                else if (result == 5 || result == 9 || result == 10)
                {
                        printf("我赢了!\n\n");
                        computer_win++;
                }
                else
                {
                        printf("咱打平!\n\n");
                }
      }

      // 打平也算人类
      if (human_win >= computer_win)//这里任意一个都可以出发winner吗
      {
                gameover(HUMANWIN);
      }
      else
      {
                gameover(COMPUTERWIN);
      }
}

大马强 发表于 2022-1-3 11:19:19

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

#define HUMANWIN 0
#define COMPUTERWIN 1

int get_computer(void)
{
      int computer;

      srand((unsigned)time(NULL));
      computer = rand() % 3 + 1;

      return computer;
}

int get_human(void)
{
      int human;

      printf("请出拳(1剪刀/2石头/3布/0退出)-> ");
      scanf("%d", &human);

      while (human < 0 || human > 3)
      {
                printf("出拳错误,请重新出拳(只需要输入数字即可)-> ");
                scanf("%d", &human);
      }

      return human * 3;
}

void welcome(void)
{
      printf("\n########################\n");
      printf("# 欢迎来到猜拳小游戏! #\n");

       printf("########################\n\n");
}
void gameover(int winner)//这里和main中这个的关系是什么,winner是电脑或人胜利者就触发吗,那为什么还有else
{
      if (winner)
      {
                printf("\n#########################################################################\n");
                printf("#                                                                     #\n");
                printf("# ##    ##    ####    ##   ##    ##         ####   ############## #\n");
                printf("#####    ####   ##   ##    ##      ####   ##       ##       #\n");
                printf("#   ####    ##    ####   ##    ##       ##    ####       ##       #\n");
                printf("#    ##   ##    ####   ##    ##       ##    ########   ########\n");
                printf("#    ##   ##    ####   ##    ##       ##    ##       ####       #\n");
                printf("#    ##      ####    ##   ##   ##      ####      ####       #\n");
                printf("#    ##       ####      #####      #######    ####    ######   ######## #\n");
                printf("#                                                                     #\n");
                printf("#########################################################################\n");
      }
      else
      {
                printf("\n##########################################################################\n");
                printf("#                                                                        #\n");
                printf("# ##    ##    ####    ##   ##    ##            ##########   ## #\n");
                printf("#####    ####   ##   ##    ##      ##      ##    ##    ###    ## #\n");
                printf("#   ####    ##    ####   ##    ##   ####   ##    ##    ## #   ## #\n");
                printf("#    ##   ##    ####   ##   ##   ####   ##   ##    ##### #\n");
                printf("#    ##   ##    ####   ##      ## ##    ## ##      ##    ##   # ## #\n");
                printf("#    ##      ####    ##   ##      ###      ###       ##    ##    ### #\n");
                printf("#    ##       ####      #####          #      #      ########   ## #\n");
                printf("#                                                                        #\n");
                printf("##########################################################################\n");

      }
}

int main(void)
{
      int human, computer; // 1、2、3分别代表剪刀石头和布
      int result;
      int human_win = 0;
      int computer_win = 0;

      welcome();

      while (1)
      {
                human = get_human();
                computer = get_computer();

                // 用户输入0表示退出游戏
                if (human == 0)
                {
                        break;
                }

                printf("你出");
                switch (human)
                {
                        case 3: printf("剪刀,"); break;
                        case 6: printf("石头,"); break;
                        case 9: printf("布,"); break;
                }

                printf("我出");
                switch (computer)
                {
                        case 1: printf("剪刀,"); break;
                        case 2: printf("石头,"); break;
                        case 3: printf("布,"); break;
                }

                result = human + computer;

                // 你出剪刀,电脑出布:3 + 3 == 6
                // 你出石头,电脑出剪刀:6 + 1 == 7
                // 你出布,电脑出石头:9 + 2 == 11
                // 以上三种情况算你赢~
                if (result == 6 || result == 7 || result == 11)
                {
                        printf("你赢了!\n\n");
                        human_win++;
                }
                else if (result == 5 || result == 9 || result == 10)
                {
                        printf("我赢了!\n\n");
                        computer_win++;
                }
                else
                {
                        printf("咱打平!\n\n");
                }
      }

      // 打平也算人类
      if (human_win >= computer_win)//这里任意一个都可以出发winner吗
      {
                gameover(HUMANWIN);
      }
      else
      {
                gameover(COMPUTERWIN);
      }
}
多了一个 ]
}void gameover(int winner)//这里和main中这个的关系是什么,winner是电脑或人胜利者就触发吗,那为什么还有else

林小尖 发表于 2022-1-3 11:29:11

大马强 发表于 2022-1-3 11:19
多了一个 ]

人类赢为什么触发的是函数中的else语句呢

大马强 发表于 2022-1-3 12:36:57

开头就有个宏定义
#define HUMANWIN 0
#define COMPUTERWIN 1
假设现在人类的分数高,主函数里执行
gameover(HUMANWIN);
这是函数里参数winner=0
if条件判断条件为假,执行else 输出 you win

如果机器分高,按照上面的步骤,这是函数里参数winner=1
if条件为真,输出 you lose

所以函数的if else 是为了配合它主函数输入的参数而设定的,当然也有其他方法,比如用 1 0 当参数来表示人类输赢。

林小尖 发表于 2022-1-3 14:35:24

大马强 发表于 2022-1-3 12:36
开头就有个宏定义

假设现在人类的分数高,主函数里执行


谢谢

hornwong 发表于 2022-1-3 22:15:38

{:5_95:}

tomok 发表于 2022-1-4 08:47:53

{:5_108:}

大艺术家^ 发表于 2022-1-4 08:59:00

{:10_279:}
页: [1]
查看完整版本: 38猜拳小游戏