一、要用到的知识点
1、对于C语言循环while、选择结构switch和条件判断if的理解。
2、对逻辑运算符&&和||、三目运算符的运用。
3、随机函数及制表方法
二、敲代码时个人学习领悟
1、写代码之前应先构思好框架,期望实现什么样的效果,确定研究的对象、需要用到的方法,不然写代码时会感觉无从下手。
比如这个人机石头剪刀布游戏,我们就可以想到用数字赋予石头剪刀布,利用数字的大小来判断输赢;
其次对象是人和机器,人要出的手势用scanf接收,switch根据接收来的数值的不同来实现不同的功能。
至于电脑,和人是完全剥离的,行为没有关联,而且是随机没有目的的,于是我就想到了用随机函数来随机电脑的手势,这样,通过比较人和电脑手势代表的数字大小就可以判断输赢。
2、要多思考思考,有的地方有一定的逻辑性,可以试着从多个方面去实现,虽然有时候只是一厢情愿。
例如:
if (human == computer) {printf("平局!\n"); } else if ((human != 0 && human < computer) || (human == 2 && computer == 0)) {printf("电脑赢了!\n"); } else {printf("你赢了!\n");wincount++; } break;
其中我用0代表布,1代表剪刀,2代表石头,以上是可以判断的。
但我在写的时候有了一个小想法:可不可以通过取余的特性来避免条件的冗长呢?
于是我尝试了一下:把1代表布,2代表剪刀,3代表石头
其中改成else if(human<computer%3)感觉就差不多,
3%3=0和human比较来合并 布<剪刀<石头 并且 布>石这个条件,我以为这样就可以更简单的实现,结果发现当human取1的时候是满足的,但2就不行了,因为computer随机到3时,结果是人赢了,但是人是剪刀,电脑是石头,这么一看,需要加human==1这个条件,反而更复杂了,所以实践是检验真理的唯一标准,不过老师说过,多想想也没坏处。
3、写的时候看好while(1)循环的位置,定义的变量是否在下一次循环就被重置了(比如全局变量计数的定义就不能在while(1)中。
4、为学习而作,希望读者大佬们能够给出宝贵的建议和意见,在下感激不尽,希望可以共同学习进步。
附上代码
#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){ //规则如下 //布<剪刀<石头 并且 布>石头 //撒下随机函数种子 srand((unsigned int)time(NULL)); int wincount = 0; int allcount = 0; while (1){int human = 0; int computer = 0;//制表 printf("----------------------------\n"); printf("\t0.退出游戏\n"); printf("\t1.人机对战\n"); printf("----------------------------\n");int userKey = 0; printf("请输入0~1:\n"); scanf("%d", &userKey);switch (userKey){case 0: printf("%d", wincount); break; case 1: //制表 printf("----------------------------\n"); printf("\t0.布\n"); printf("\t1.剪刀\n"); printf("\t2.石头\n"); printf("----------------------------\n"); scanf("%d", &human); computer = rand() % 3;//范围0~2 //使用三目运算符打印双方出手的结果 printf("玩家出的是:%s\n电脑出的是:%s\n",(human == 0) ? "布" : (human == 1) ? "剪刀" : "石头", (computer == 0) ? "布" : (computer == 1) ? "剪刀" : "石头"); if (human == computer) {printf("平局!\n"); } else if ((human != 0 && human < computer) || (human == 2 && computer == 0)) {printf("电脑赢了!\n"); } else {printf("你赢了!\n");wincount++; } break; }if (userKey == 0){printf("总次数为:%d,你赢的次数为:%d", allcount,count);break;//直接跳出while循环}allcount++;system("pause");system("cls");//清屏}system("pause");return 0;}
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。