Android_开发_Day5_数字游戏
Android_开发Day5数字游戏
目的:
通过游戏开发来激起对枯燥的c语言的兴趣,同时也是c语言的综合应用能力的锻炼,小小的一个游戏将包含几乎所有知识点,无论是数组还是条件亦或是循环,只有将他们有机的结合才能创造出有趣的东西。
技术:
<1>随机数的产生:首先明白,计算机是无法产生真正的随机数的,计算机产生的随机数都是通也就是过一定的算法运用数学运算来产生的,也就是说如果知道产生随机数的算法那就可以知道每个随机数的值。要产生随机数我们需要两个函数srand()括号中放的就是随机种子,最方便快捷的随机种子便是时间,而时间要用time函数,因此如果要使用时间作为随机种子别忘了加上头文件time.h。另一个函数便是rand()函数,该函数的返回值是一个int型的整数随机数,该函数没有参数。因此我们可以得到一下产生随机数的代码:
#include "stdafx.h"
#include "time.h"
//记住导入头文件
int _tmain(int argc, _TCHAR* argv[])
{
int number;
srand((unsigned int)time(NULL));
number = rand() % 10;
//对取余是为了将随机数的范围控制在0~9的范围内
}
<2>排序算法:常用的排序算法分为三种:1.选择排序法:先从整个要排序的数中选出一个最小的放到第一位,然后再从剩下数中选出最小的放到第二位,接下来便依次进行就可以了。2.冒泡排序法:将数与数之间两两比较并交换数的值后会将最大的一个数交换到最末尾,然后抛开最大的那个数在剩下的数中又如此进行最后就可以得到数的顺序了。3.插入排序法:先将数两两比较有点类似冒泡排序法但是比较完后符合次序不动,不和次序要交换,交换完后还要和前面的比较交换,直到遇到一个符合次序的为止。三种排序法的具体代码如下:
#include "stdafx.h"
#include "iostream"
int _tmain(int argc, _TCHAR* argv[])
{
int num[] = { 3, 0, 1, 8, 7, 2, 5, 4, 6, 9 };
//冒泡排序 通过一次排序 最大的沉底
for (int i = 0; i < 10; i++)
{//比较的次数
for (int j = 0; j < 10 - i - 1; j++)
{
if (num[j] > num[j + 1])
{
//交换j和j+1的值
int temp = num[j + 1];
num[j + 1] = num[j];
num[j] = temp;
}
}
}
return 0;
}
冒泡排序法
#include "stdafx.h"
#include "iostream"
int _tmain(int argc, _TCHAR* argv[])
{
int num[] = { 3, 0, 1, 8, 7, 2, 5, 4, 6, 9 };
//选择排序 一次取出一个值 默认他是最小的
//如果发现比这个数小 就交换
//遍历整个数组 找到一个最小的
//3,0,1,2,5,4,6
for (int i = 0; i < 10-1; i++)
{
//默认这是最小的
//int min = num[i];//3
for (int j = i + 1; j < 10; j++)
{
//控制用min和后面的每一个进行比较
if (num[i] > num[j])
{
//j对应的数字比min还小 交换
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
//一次遍历之后找到最小的值min
//num[i] = min;
}
return 0;
}
选择排序法
#include "stdafx.h"
#include "iostream"
int _tmain(int argc, _TCHAR* argv[])
{
int num[] = { 3, 0, 1, 8, 7, 2, 5, 4, 6, 9 };
//插入排序
for (int i = 0; i < 10; i++)
{
//让i和i+1比较大小
if (num[i] > num[i + 1])
{
//交换值
int temp = num[i];
num[i] = num[i + 1];
num[i + 1] = temp;
//让num[i]和前面的所有进行比较
for (int j = i; j > 0; j--)
{
if (num[j] < num[j - 1])
{
temp = num[j];
num[j] = num[j - 1];
num[j - 1] = temp;
}
}
}
}
return 0;
}
插入排序法
技术如何使用:
用随机数和排序法我们可以做一个小的数字游戏,游戏规则如下:
随机产生4个不重复的 0-9 之间的整数从小到大排序
输入猜测的数字 1 2 3 4
A表示数字正确 位置正确的个数 2A
B表示数字正确 位置不正确 2B
具体实现的代码就可以用上面的随机数,和排序法,既然知道要排序,因此我们可以做一个排序函数,做到一边产生随机数一边排序,代码如下:
void line(int num[]){
for (int i = 0; i < 3; i++)
{
if (num[i] >= num[i + 1])
{
int a;
a = num[i];
num[i] = num[i + 1];
num[i + 1] = a;
}
}
}
排序函数,由于这里的特殊性只需要比较一轮即可。
接下来便是在主函数中产生随机数,代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
int num[4] = {0};
int number;
int array[4];
srand((unsigned int)time(NULL));
for (int i = 0; i < 4; )
{
number = rand() % 10;
if (number != num[0] && number != num[1] && number != num[2]
&& number != num[3] || i == 0)
{
num[0] = number;
i++;
}
//排序
line(num);
}
//print(num);
do
{
printf("请输入猜测的数字:");
for (int i = 0; i < 4; i++)
{
scanf("%d", &array[i]);
}
//print(array);
} while (judge(num, array));
system("pause");
return 0;
}
主函数的上把半部分便是用今天的知识产生的随机数。下半部分便是游戏的内容了,为此可以写一个函数来判断有多少个A多少个B,代码如下:
int judge(int num[], int array[]){
int countA=0;
int countB = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (num[i] == array[j])
{
if (i==j)
{
countA++;
}
else
{
countB++;
}
}
}
}
printf("%dA%dB\n", countA, countB);
if (countA==4)
{
printf("Congratulations!\n");
return 0;
}
else
{
return 1;
}
}
这里的返回值是1则表示游戏没有结束要继续猜测,返回值是0表示玩家已经猜中了游戏内容,游戏结束。
实际使用效果:
![](https://img.haomeiwen.com/i18962565/205057ce4f7345a0.png)
总结:
我们在学习c语言的过程中除了书本上或是老师课堂上讲的那些知识外还需要到处去涉猎一些没讲过的知识,比如说这里的随机数,我可以告诉你的是大多c语言基础的书本上并不提到,我不管你有没有遇到反正我是没有。