函数走步功能的实现 即随机步法的初步实现

很多类似的走步功能,这里给出来了一个比较简单的方法实现走步功能,部分代码可以自己进行修改,初发博客,代码格式或多或少有些不规范,而且写的比较潦草,没有去进行代码优化,忘大家见谅,VS2013开发,lninux下兼容:

/****************************************************************************************************************************
函数功能:实现A-Z的随机走步功能
作者:徐权
日期:2015-7-21
*****************************************************************************************************************************/




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


#define N 10 //定义数组宽度,测试的时候可以自行调节宽度,不同宽度需要的内存不一样而已




int main(void)
{


int i, j, count, xq = 1, scount = 0;
int acount_first,acount_second,acount_third;//用于记录3个不同数据,由于后续没有优化,最先做的就是这个了,读者可以自行优化
int asum;
int k = 0,p = 0;
char sum; //记录变化的str[i][j]的值,用于数值交换
char str[N][N];
memset(str, '.', sizeof(str));
/*  打印初始函数   */
printf("初始函数 \n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%c ", str[i][j]);
}
printf("\n");
}
srand((int)time(NULL)); //随机数随时间变化改变


//随机定义初始化‘A’的位置,使得每次运行结果都不一样,初始化i和j的值
i = rand() % N;
j = rand() % N;


str[i][j] = 'A';  //初始化起始点


while (str[i][j] < 'Z')
{
count = rand() % 4;  //生成0,1,2,3 的随机数
xq = 1; // 初始化内存循坏跳出条件
scount = 0;  //初始化外层循坏跳出循坏
//初始化随机0,1,2,3的条件,限制避免scount数值无故增大
while (xq == 1)
{
if (((count == 0) && ((j + 1) < N)) && (str[i][j + 1] == '.'))
{
sum = str[i][j] + 1;
j++;
str[i][j] = sum;
xq++;
}
else if (((count == 1) && ((i + 1) < N)) && (str[i + 1][j] == '.'))
{
sum = str[i][j] + 1;
i++;
str[i][j] = sum;
xq++;
}
else if (((count == 2) && ((j - 1) >= 0)) && (str[i][j - 1] == '.'))
{
sum = str[i][j] + 1;
j--;
str[i][j] = sum;
xq++;
}
else if (((count == 3) && ((i - 1) >= 0)) && (str[i - 1][j] == '.'))
{
sum = str[i][j] + 1;
i--;
str[i][j] = sum;
xq++;
}
else
{
if (k == 0)//这里是一个第一个数随机,其余不随机的做法,没有优化,最笨的方法写出来的
{
acount_first = rand() % 4;
while (acount_first == count)
{
acount_first = rand() % 4;
}
acount_second = count;
k++;
}
else if (k == 2)
{
for (p = 0; p < 4; p++)
{
asum = (count + 1) % 4;
if ((asum != acount_first) && (asum != acount_second))
{
count = asum;
acount_third = count;
break;
}
count++;
}
}
else
{
for (p = 0; p < 4; p++)
{
asum = (count + 1) % 4;
if ((asum != acount_first) && (asum != acount_second) && (asum != acount_third))
{
count = asum;
break;
}
count++;
}
}


scount++;
if (scount == 4)
{
xq++;
}
}
}


k = 0;
if (scount == 4)
{
break;
}
}


/*  打印函数   */


puts("运行后的函数如下");


for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%c ", str[i][j]);
}
printf("\n");
}




system("pause");
return 0;
}


代码的花括号都没有删掉,所以有100多行,大家可以自己优化代码,有个代码是几十行就解决了的,我的是草案,望大家采纳和提出修改意见,如果有优化方案,可以回复我,我会非常感谢大家了,希望各位博友共同进步,谢谢!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值