您当前的位置:首页 > 计算机 > 编程开发 > 数据结构与算法

石头剪刀布(c语言)

时间:01-14来源:作者:点击数:

解题:

电脑获得一个随机出拳,根据不同情况分为九种出拳情况和三种结果

G:rock

P:rock(平局);P:scissors(输);P:paper(赢)

G:scissors

P:rock(赢);P:scissors(平局);P:paper(输)

G:paper

P:rock(输);P:scissors(赢);P:paper(平局)

算法部分:

第一步:让电脑获得一个随机拳

在C语言里没有list列表所以只能采用rand随机数函数来获得一个数字,再根据这个数字用switch语句和字符串的复制让电脑获得随机拳(字符数组)

第二步:用户输入并保存在字符数组里

第三步:计算字符数组长度来判断

用字符串的比较和计算字符串的长度两个函数

字符串比较是比较长度是否相同,相同则平局

计算字符串长度是用来判断赢输

完整代码:

#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
int main()
{
	srand((unsigned)time(NULL));
	char str1[] = "rock", str2[] = "scissors", str3[] = "paper";
	char player[10] = { 0 }, GAMBLER[10] = { 0 };
	int a = rand() % 3 + 1;
	switch (a)
	{
	case 1:
		strcpy(GAMBLER, str1); break;
	case 2:
		strcpy(GAMBLER, str2); break;
	case 3:
		strcpy(GAMBLER, str3); break;
	}
	printf("欢迎进入“石头剪刀布会所”\n我是GAMBLER\n准备好了么?勇士\n是获取荣华富贵还是流落街头呢?\n将你的一切交给命运吧!哈哈哈\n");
	printf("请出拳:\n");
	printf("提示:石头rock,剪刀scissors,布paper\n");
	scanf("%s", &player);
	int P = strlen(player), G = strlen(GAMBLER);
	printf("你出拳:%s\nGMABLER出拳:%s\n", player, GAMBLER);
	if (strcmp(GAMBLER, player) != 0)
	{ 
		if (P - G > 0)
		{
			if (P - G == 4)
				printf("你输了\n哈哈哈,小老弟,你输了,哈哈哈,看在你诚实的面子上,这枚幸运硬币就给你了\n获得D级物品:幸运硬币\n使用对象:命运女神眷顾的人\n使用方法:抛出硬币\n把选择交给命运女神吧!\n");
			else
				printf("你赢了\n不可能,居然被你打败了!!!你出老千!弟兄萌把他抓起来\n您已被俘");	
		}
		else
		{
			if(P-G==-4)
				printf("你赢了\n不可能,居然被你打败了!!!你出老千!弟兄萌把他抓起来\n您已被俘");
			else
				printf("你输了\n哈哈哈,小老弟,你输了,哈哈哈,看在你诚实的面子上,这枚幸运硬币就给你了\n获得D级物品:幸运硬币\n使用对象:命运女神眷顾的人\n使用方法:抛出硬币\n把选择交给命运女神吧!\n");
		}
	}
	else
		printf("居然是平局,你这家伙运气不错");
	return 0;
}

数据结构部分:

str1,str2,str3:三个字符数组分别代表石头剪刀布

player,GAMBLER:分别代表用户出拳和电脑出拳

p,G:分别是用户字符串的长度(例.rock石头的长度是4)电脑字符串的长度

a:随机数,来随机赋予电脑出的拳头

程序中使用的函数:

switch函数和随机数函数就不写了,在之前的博客里写了

字符串函数:

头文件:#include<string.h>

strcpy函数:字符串的复制

使用:strcpy(a,b)

将字符串b复制给字符串a(会覆盖字符串a)

strlen函数:字符串字节(长度)计算

使用:int a=strlen(b)

用整型a接收字符串b的长度

详解看(17条消息) C(string.h)字符串操作函数总结

思考:

在写石头剪刀布程序时我也在csdn里搜了许多这个简单的小程序,但是没有我想要的那种程序,看了半天要不就是看不懂,要不就是太取巧,之前博客里也暗示了要写一个石头剪刀布的程序,我想如果是这样的应该就可以连上魔塔这个大的程序吧。中国人思考总是喜欢从整体到部分而西方人总是喜欢从部分到整体思考,这是我从网上看到的一句话,之前以为看懂了,现在却有些懵逼了,我的惯性思考到底是从整体到部分还是从部分到整体还是两者都有呢?从整体到部分无非是将变形金刚部件一一拆开,由头到脚一一分析;从部分到整体是怎么样的呢?我有些明白又有些不明白,怎么能将变形金刚的头装到人身上,又或者将一些毫不相干的东西拼接,人的头加上长颈鹿的脖子袋鼠手大象腿,很奇怪吧!我现在写的这个程序就是魔塔的一部分,是部分到整体吗?原本很明显的事情细细思考又搞不清楚了,是在钻牛角尖么。好似回到高中物理了,分析物体的力,什么什么从整体到部分,从部分到整体,真是人都傻了。哈,牢骚发完。

算法是考验一个人的逻辑吗?感觉还是逻辑思维多一点。

一开始写程序写的很复杂感觉就是把所有情况列出来了(好多个if语句)后来想到了用字符串长度来判断输赢,这样写就方便很多了而且一目了然

还有还有,电热毯真的是人类的天敌,和床一样是大魔王。懒了好几天了...

不足:

如果用户输入时不按剪刀石头布的正确书写方式输入,程序没有错误判断(default)

会出现用户输入ssss就被判断为石头的类似情况

有待改进...

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门