随机走动——醉酒蟑螂

来源:互联网 发布:python运行空间 编辑:程序博客网 时间:2024/04/28 21:44
//一只喝醉了的蟑螂在N*M的方格中爬,它可以沿八个方向任意的爬,沿八个方向的概率相等。
//蟑螂不会爬出方格,打印蟑螂爬满所有格子的行迹

#include<stdio.h>
#include<conio.h>//getch()
#include<string.h>//memset函数
#include<windows.h> //SetConsoleCursorPosition()函数
#include<stdlib.h>//srand()函数和rand()函数
#include<time.h>//time()函数

//界面数组的大小
#define N 10
#define M 10

void init();
void display();
void move();
void goto_xy(int x, int y);

int array[N][M];//界面数组
struct roach//蟑螂的坐标结构体
{
int x;
int y;
}roach;

int d[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};//八个方向数组,从右边开始,顺时钟方向转
int dir;//方向,取值0~7
int cell = N*M;

int main()
{
init();
while(cell != 0)
{
move();
sleep(50);//每走一格延时200ms
}
getch();
return 0;
}

void init()
{
srand((unsigned)time(NULL));;//初始化随机发生器
memset(array,0,sizeof(array));//将数组中全部置0
roach.x = rand()%N;//开始时随机生成蟑螂的横坐标
roach.y = rand()%M;//开始时随机生成蟑螂的纵坐标
display();//显示界面
array[roach.x][roach.y] = 1;
goto_xy(roach.y<<1,roach.x);
printf("%2c",2);//将当前格置为蟑螂,用值为2的ASCII码图形表示
cell--;//蟑螂每走过一个空格就将cell减去1
}

void move()
{
do
{
dir = rand()&7;//随机生成0~7的随机值
}while(roach.x+d[dir][0]<0||roach.x+d[dir][0]==N||roach.y+d[dir][1]<0||roach.y+d[dir][1]==M);
if(array[roach.x+d[dir][0]][roach.y+d[dir][1]] == 0)//只有蟑螂走进空格才能使cell减一
{
cell--;
}
array[roach.x][roach.y] = 1;
goto_xy(roach.y<<1,roach.x);
printf("■");//蟑螂走过的路显示的图案
roach.x += d[dir][0];
roach.y += d[dir][1];
array[roach.x][roach.y] = 1;
goto_xy(roach.y<<1,roach.x);
printf("%2c",2);//将当前格置为蟑螂
}

void display()
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
printf("□");//开始时显示的画面
}
printf("\n");
}
}

void goto_xy(int x, int y)
{
HANDLE hOut;
COORD coord;
coord.X = x;coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}