C语言 编写“剪刀石头布”小游戏[通俗易懂]

C语言 编写“剪刀石头布”小游戏[通俗易懂]目录前言一、游戏原理二、C语言代码1.引入函数2.初始页面显示3.游戏过程及结果总结前言大家好~我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布。希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序)我也会虚心接受大家的建议~一、游戏原理“剪刀石头布”这个游戏,想必大家都很熟悉了。两个人在玩游戏时,事先都不知道对方将要出什么,这中间存在着一种随机性。而这种随机性相当于C语言里stdlib.h库中rand()函数,rand()函数用来产生随机数,因为r..

大家好,又见面了,我是你们的朋友全栈君。


前言

大家好~
我是一名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语言代码

1.引入函数

代码如下:

#include "stdio.h"
#include "stdlib.h"
#include "time.h"

2.初始页面显示

代码如下:

int main()
{ 
   
    char Gamer=0;
    int computer,gamer;
    int result;
    while (1) 
    { 
   
        printf("这个小游戏是——剪刀石头布,\n你要出:\n");
        printf("A:剪刀\nB:石头\nC:布\n");
        scanf_s("%c", &Gamer);
        switch (Gamer) 
        { 
   
        case 65 | 97: //A a
            gamer = 4; 
            break;
        case 66 | 98: //B b
            gamer = 7; 
            break;
        case 67 | 99: //C c
            gamer = 10; 
            break;
      
        default:
            printf("你的选择为%c\n选择错误,退出...\n", Gamer);
            system("pause");
            return 0;
            break;
        }

3.游戏过程及结果

        srand((unsigned)time(0));//每一次的seed都不同
        computer = rand() % 3+1;
        result = gamer + computer;
        printf("电脑出了:");
        switch (computer)
        { 
   
        case 3:printf("剪刀\n"); break;
        case 1:printf("石头\n"); break;
        case 2:printf("布\n"); break;
        }
        printf("你出了:");
        switch (gamer)
        { 
   
        case 4:printf("剪刀\n"); break;
        case 7:printf("石头\n"); break;
        case 10:printf("布\n"); break;
        }
        if (result == 6 || result == 10 || result == 11)
            printf("你赢了!");
        else if (result == 5 || result == 9 || result == 13) 
            printf("电脑赢了!");
        else 
            printf("平手");
        system("pause>nul&&cls"); //清屏
    }
    return 0;
}

总结

以上就是有关于游戏的思路和代码,编写程序前,我查阅了一些资料,并且询问了他人,在这个过程中,我有学到许多新知识.
但是因为水平有限,程序代码还是很繁琐,方法也不是最好的,希望能通过进一步的学习,开拓自己的思路,用更快捷的方法编写程序。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163847.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux启动nginx命令行_Linux环境下启动、停止、重启nginx[通俗易懂]

    linux启动nginx命令行_Linux环境下启动、停止、重启nginx[通俗易懂]启动启动代码格式:nginx安装目录地址-cnginx配置文件地址例如:[root@LinuxServersbin]#/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf停止nginx的停止有三种方式:从容停止1、查看进程号[root@LinuxServer~]#ps-ef|grepnginx2、杀死进程[r…

  • jediscluster工具类_cannot get jedis connection

    jediscluster工具类_cannot get jedis connectionRedis集群是没法执行批量操作命令的,如mget,pipeline等。这是因为redis将集群划分为16383个哈希槽,不同的key会划分到不同的槽中。原生JedisCluster对批量操作的限制是mgetmset必须在一个槽;四种批量优化的方法1、串行mget在for循环中执行一条条的get; 需要n次网络时间;2、串行IO在客户端对所有key做CR…

  • mysql截取前几个字符串_mysql 截取字符串 函数[通俗易懂]

    mysql截取前几个字符串_mysql 截取字符串 函数[通俗易懂]文章摘取自http://www.cnblogs.com/zdz8207/p/3765073.html练习截取字符串函数(五个)mysql索引从1开始一、mysql截取字符串函数1、left(str,index)从左边第index开始截取2、right(str,index)从右边第index开始截取3、substring(str,index)当index>0从左边开始截取直到结束当ind…

  • WebGame开发总结

    WebGame开发总结项目基本情况:  服务器端采用c++和c#混合开发,网络层采用c++开发,业务逻辑用c#开发。客户端采用silverlight。数据库采用mysql。GM工具用Asp.net,GM工具盒服务器通讯用wcf,基本把微软的东西都用遍了。  服务器端在开始的时候,使用了某位同事之前开发的一款服务器端引擎,改引擎曾经开源但现在基本不再更新。引擎地址:http://mmorpg.codeplex.com/  这款引擎在使用上只满足了部分需求,再加上原作者又跳槽,引擎基本是我在维护和改进,不过基本上都往里面

  • HashMap多线程下发生死循环的原因

    HashMap多线程下发生死循环的原因

  • 通常每个套接字地址只允许使用一次_max无法写入配置文件

    通常每个套接字地址只允许使用一次_max无法写入配置文件写入配置文件 CString IP, Port; UpdateData(TRUE); // 将应用程序控件上面的IP和端口 更新至对应的成员变量 IP = m_IpAddress.GetString(); // 读取成员变量控件上面的IP地址将赋给strIP变量 Port.Format(L”%d”, m_iPort); // 读取成员变量控件上面的端口将赋给m_iPort变量 Wri…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号