linux 剪刀石头布c语言,利用C语言编写“剪刀石头布”小游戏

前言

大家好~

我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布。

希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序)

我也会虚心接受大家的建议~

一、游戏原理

“剪刀石头布”这个游戏,想必大家都很熟悉了。

两个人在玩游戏时,事先都不知道对方将要出什么,这中间存在着一种随机性。

而这种随机性相当于C语言里stdlib.h库中rand()函数,rand()函数用来产生随机数,因为rand是根据提供给srand()的种子值返回一个随机数,所以要使每次随机的结果不一样,需要在srand()函数里引用time()函数,因为每一次运行程序的时间是不同的,所以seed会不同,运行出来的结果也会不同。

补充:

rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。

rand函数需要有srand()函数用来设置rand()产生随机数时的随机数种子。

参数seed是整数,通常可以利用time(0)或geypid(0)的返回值作为seed。

首先将游戏者(gamer)的选项输入,并用switch分三种情况,将输入的A、B、C(或a、b、c)转换为整数(Gamer),然后用rand函数在1-3中随机产生一个整数来代表计算机(computer)的选项,再将两个整数相加,最后用switch来分类讨论,输出结果。

(因水平有限,我目前只能想到用这种方法来判断胜负,所以要避免两种不同情况相加出的结果相同)

二、C语言

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下如何使用Linux中的IPC机制来完成石头剪刀布游戏的编写。 首先,我们可以选择使用共享内存来实现进程间的通信。具体地,我们可以创建一个共享内存区域,用于存储两个进程的选择结果和游戏的结果。然后,我们可以创建两个进程,一个进程用于接收用户输入,另一个进程用于产生电脑的随机选择,并且计算游戏的结果。 下面是一个简单的示例代码,实现了这个游戏的基本功能。请注意,这只是一个示例代码,可能还需要进行进一步的完善和优化。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <time.h> #define SHM_SIZE 1024 typedef enum { ROCK, PAPER, SCISSORS } choice_t; typedef struct { choice_t user_choice; choice_t computer_choice; int result; } game_t; int main() { int shmid; game_t *game; key_t key = ftok(".", 'g'); // 创建共享内存区域 shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666); if (shmid < 0) { perror("shmget error"); exit(1); } // 映射共享内存区域 game = (game_t *) shmat(shmid, NULL, 0); if (game == (game_t *) -1) { perror("shmat error"); exit(1); } // 游戏开始 while (1) { // 接收用户输入 printf("Please choose (rock, paper, scissors): "); char input[10]; fgets(input, sizeof(input), stdin); input[strlen(input)-1] = '\0'; // 转换用户输入 if (strcmp(input, "rock") == 0) { game->user_choice = ROCK; } else if (strcmp(input, "paper") == 0) { game->user_choice = PAPER; } else if (strcmp(input, "scissors") == 0) { game->user_choice = SCISSORS; } else { printf("Invalid input, please try again.\n"); continue; } // 产生电脑的随机选择 srand(time(NULL)); game->computer_choice = rand() % 3; // 计算游戏结果 if (game->user_choice == game->computer_choice) { game->result = 0; printf("Tie!\n"); } else if ((game->user_choice == ROCK && game->computer_choice == SCISSORS) || (game->user_choice == PAPER && game->computer_choice == ROCK) || (game->user_choice == SCISSORS && game->computer_choice == PAPER)) { game->result = 1; printf("You win!\n"); } else { game->result = -1; printf("You lose!\n"); } } // 解除映射 shmdt(game); // 删除共享内存区域 shmctl(shmid, IPC_RMID, NULL); return 0; } ``` 在这个示例代码中,我们使用了共享内存来存储游戏的结果,并且使用了随机数来产生电脑的随机选择。在实际使用中,我们可能还需要加入一些额外的功能,比如处理进程间的同步和互斥等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值