一些有趣的小游戏实现

文章包含三个C语言程序示例:1)一个设置电脑在一分钟后关机的小程序,用户输入特定字符串可取消关机;2)实现二分查找算法在有序数组中搜索目标数字;3)设计了一个猜数字游戏,电脑随机生成1-100的数字,玩家反复猜测直至猜中。
摘要由CSDN通过智能技术生成

1.关机小程序

int main()
{

	char input[10] = { 0 };
	system("shutdown -s -t 60");
	again:
	printf("你的电脑将在1分钟内关机,请输入我是猪将取消关机\n");

	scanf("%s", &input);
	if (strcmp(input, "我是猪") == 0)
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}

	return 0;
}

字符串不能直接比较,可以用strcmp比较库函数,如果为0,两个值相等,具体可以看MSDN。

system是命令操作符,shutdown -s -t 60,s是关机,t是时间,60是秒。

goto相当于一个”传送“,传送到上面again的语句中,也可以写成while循坏。

2.二分查找

在一个有序数组中查找具体的某个数字n。  有序!!!


二分查找在一个有序数组中1,2,3,4,5,6,7,8,9,10.假如找7,我们可以先取出中间的数5,然后跟7进行比较,5比7小所以在5右边找,然后从6,7,8,9,10中再取出中间的数8进行比较,8比7大,所以在左边范围又缩小了,这样速度更快。

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;

	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0])-1;    /*数组下标为*//*4*/

	//二分法,对半找
	while (left<=right)
	{
		int mid = left + (right - left) / 2;   
		if (k > arr[mid])     /*arr[mid]数组下标*/
		{
			left = mid + 1;     /*假如找7,mid是5,新left等于mid+1的数往后接着找*/
		}
		else if (k < arr[mid])
		{
			right = mid - 1;     /*假如找2,mid是5,新right等于mid-1的数往后接着找*/
		}
		else
		{
			printf("找到了下标是%d", mid);
			break;
		}
    }
	if (left > right)
	{
		printf("查找错误,请重新查找\n");
	}
	return 0;
}

3.猜数字小游戏

1. 电脑随机生成一个数字(1-100)
2.玩家猜数字
玩家猜小了,就告知猜小了
玩家猜大了,就告知猜大了
直到猜对为止
3.游戏可以一直玩

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

void menu()
{
	printf("********************\n");
	printf("******1. play ******\n");
	printf("******0. exit ******\n");
	printf("********************\n");

}

void game()
{
	//1.生成随机数1-100
	int guess = 0;
	int ret = rand() % 100 + 1;    

	/*生成随机数,用时间戳。*/ /*放入循坏里面,不然按快了会重复*/
	//2.猜数字
	while (1)
	{
		printf("请输入数字>:");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了\n");

		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜对了\n");
			break;
		}
     }

}
int main()
{
	int input = 0;
	do 
	{
		menu();
		srand((unsigned int)time(NULL));
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("请重新输入\n");
			break;
		}

	} while (input);
	return 0;
}

生成随机数用时间戳的概念
rand()%100生成的数字是0-99的数字,rand()%100+1就可以生成1-100之间的数字了

而且rand()101生成的是0-100之间的数字。

只用rand这样生成的值是固定的不够随机,要用srand,并且把它放入main函数里面,不然很快的话,值也会重复


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值