📄 test.cpp
字号:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#define wall 1
#define road 0
#define step 16
#define width 60
#define height 60
//#define MADE_MAN
#define ok 1
#define error 0
#define add 100
// for stacktype.id
#define RIGHT 0
#define DOWN 1
#define LEFT 2
#define UP 3
#define NO_ROAD 4
char mazemap[height][width];
typedef struct
{
int dx;
int dy;
}postype;
typedef struct
{
postype seat;
int id;
}stacktype;
typedef struct
{
stacktype *base;
stacktype *top;
int stacksize;
}stack;
int initstack(stack *zzchu)
{
zzchu->base = (stacktype*)malloc(100 * sizeof(stacktype));
if(zzchu->base == NULL)
printf("the memory allocate is failing");
zzchu->top = zzchu->base;
zzchu->stacksize = 100;
return ok;
}
int push(stack *zzchu, stacktype e)
{
if(zzchu->stacksize <= (zzchu->top-zzchu->base))
{
zzchu->stacksize += add;
zzchu->base = (stacktype*)realloc(zzchu->base, zzchu->stacksize * sizeof(stacktype));
if(zzchu->base==NULL)
return error;
zzchu->top = zzchu->base+zzchu->stacksize-add;
}
*zzchu->top = e;
zzchu->top += 1;
return ok;
}
int pop(stack *zzchu, stacktype *e)
{
if(zzchu->base == zzchu->top)
return error;
*e = *(--zzchu->top);
return ok;
}
int main()
{
postype cur_pos;
postype exit_for_mazemap;
stacktype cur_stack;
exit_for_mazemap.dx = height - 2;
exit_for_mazemap.dy = width - 2;
// init the mazemap ;
{
int i, j;
for(i=0; i<height; i++)
for(j=0; j<width; j++)
{
if((i==0)||(i==(height-1))||(j==0)||(j==(width-1)))
{
mazemap[i][j] = wall;
}
else
{
mazemap[i][j] = road;
}
}
#ifdef MADE_MAN
mazemap[1][4] = wall;
mazemap[1][8] = wall;
mazemap[2][1] = wall;
mazemap[2][2] = wall;
mazemap[2][6] = wall;
mazemap[2][8] = wall;
mazemap[2][11] = wall;
mazemap[2][13] = wall;
mazemap[2][13] = wall;
mazemap[3][4] = wall;
mazemap[3][8] = wall;
mazemap[3][15] = wall;
mazemap[4][2] = wall;
mazemap[4][8] = wall;
mazemap[4][10] = wall;
mazemap[4][12] = wall;
mazemap[4][14] = wall;
mazemap[5][4] = wall;
mazemap[5][5] = wall;
mazemap[5][6] = wall;
mazemap[5][7] = wall;
mazemap[5][8] = wall;
mazemap[5][11] = wall;
mazemap[5][15] = wall;
mazemap[6][1] = wall;
mazemap[6][3] = wall;
mazemap[6][9] = wall;
mazemap[6][11] = wall;
mazemap[6][13] = wall;
mazemap[7][6] = wall;
mazemap[7][11] = wall;
mazemap[8][2] = wall;
mazemap[8][4] = wall;
mazemap[8][7] = wall;
mazemap[8][9] = wall;
mazemap[8][11] = wall;
mazemap[8][13] = wall;
mazemap[9][4] = wall;
mazemap[9][5] = wall;
mazemap[9][9] = wall;
mazemap[9][11] = wall;
mazemap[9][13] = wall;
mazemap[10][1] = wall;
mazemap[10][2] = wall;
mazemap[10][4] = wall;
mazemap[10][7] = wall;
mazemap[10][8] = wall;
mazemap[10][9] = wall;
mazemap[10][10] = wall;
mazemap[10][11] = wall;
mazemap[10][13] = wall;
mazemap[11][4] = wall;
mazemap[11][6] = wall;
mazemap[12][3] = wall;
mazemap[12][4] = wall;
mazemap[12][8] = wall;
mazemap[12][9] = wall;
mazemap[12][10] = wall;
mazemap[12][11] = wall;
mazemap[12][12] = wall;
mazemap[12][13] = wall;
mazemap[12][14] = wall;
mazemap[12][15] = wall;
mazemap[13][1] = wall;
mazemap[13][5] = wall;
mazemap[13][6] = wall;
mazemap[13][7] = wall;
mazemap[13][11] = wall;
mazemap[13][15] = wall;
mazemap[14][3] = wall;
mazemap[14][9] = wall;
mazemap[14][11] = wall;
mazemap[14][13] = wall;
mazemap[15][5] = wall;
mazemap[15][7] = wall;
mazemap[15][13] = wall;
mazemap[16][15] = wall;
#else
{
int k;
srand(time(NULL));
for(k=0; k<(height-2)*(width-2)/3; k++)
{
i = 1 + rand()%(height-2);
j = 1 + rand()%(width-2);
mazemap[i][j] = wall;
}
mazemap[1][1] = road;
mazemap[height-2][width-2] = road;
}
#endif
}
// print the mazemap;
{
int i,j;
printf("the maze map is: ");
for(i=0; i<height; i++)
{
printf("\n");
for(j=0; j<width; j++)
printf(" %c", mazemap[i][j]);
}
}
getch();
// initialize the stack
stack zzchu_stack;
stack *zzchu;
zzchu = &zzchu_stack;
initstack(zzchu);
// start position
cur_pos.dx = 1;
cur_pos.dy = 1;
cur_stack.seat = cur_pos;
cur_stack.id = RIGHT;
push(zzchu, cur_stack);
mazemap[cur_pos.dy][cur_pos.dx] = wall;
while(zzchu->base != zzchu->top)
{
switch (cur_stack.id)
{
case RIGHT: cur_pos.dx += 1; break;
case DOWN: cur_pos.dy += 1; break;
case LEFT: cur_pos.dx += -1; break;
case UP: cur_pos.dy += -1; break;
case NO_ROAD:
if(cur_pos.dx== 1 && cur_pos.dy == 1)
{
printf("\nthe maze map hav't road for exiting; \n");
return ok;
}
pop(zzchu, &cur_stack);
pop(zzchu, &cur_stack);
cur_stack.id += 1;
cur_pos = cur_stack.seat;
push(zzchu, cur_stack);
continue;
default: printf("the direction is false!!!!"); break;
}
if(mazemap[cur_pos.dy][cur_pos.dx] == wall)
{
pop(zzchu, &cur_stack);
cur_pos = cur_stack.seat;
cur_stack.id += 1;
push(zzchu, cur_stack);
}
else
{
cur_stack.id = RIGHT;
cur_stack.seat = cur_pos;
push(zzchu, cur_stack);
if((cur_pos.dx == exit_for_mazemap.dx) && (cur_pos.dy == exit_for_mazemap.dy))
break;
mazemap[cur_pos.dy][cur_pos.dx] = wall;
}
}
// initialize the maze map;
{
int i, j;
for(i=0; i<height; i++)
for(j=0; j<width; j++)
{
if((i==0)||(i==(height-1))||(j==0)||(j==(width-1)))
{
mazemap[i][j] = wall;
}
else
{
mazemap[i][j] = road;
}
}
#ifdef MADE_MAN
mazemap[1][4] = wall;
mazemap[1][8] = wall;
mazemap[2][1] = wall;
mazemap[2][2] = wall;
mazemap[2][6] = wall;
mazemap[2][8] = wall;
mazemap[2][11] = wall;
mazemap[2][13] = wall;
mazemap[2][13] = wall;
mazemap[3][4] = wall;
mazemap[3][8] = wall;
mazemap[3][15] = wall;
mazemap[4][2] = wall;
mazemap[4][8] = wall;
mazemap[4][10] = wall;
mazemap[4][12] = wall;
mazemap[4][14] = wall;
mazemap[5][4] = wall;
mazemap[5][5] = wall;
mazemap[5][6] = wall;
mazemap[5][7] = wall;
mazemap[5][8] = wall;
mazemap[5][11] = wall;
mazemap[5][15] = wall;
mazemap[6][1] = wall;
mazemap[6][3] = wall;
mazemap[6][9] = wall;
mazemap[6][11] = wall;
mazemap[6][13] = wall;
mazemap[7][6] = wall;
mazemap[7][11] = wall;
mazemap[8][2] = wall;
mazemap[8][4] = wall;
mazemap[8][7] = wall;
mazemap[8][9] = wall;
mazemap[8][11] = wall;
mazemap[8][13] = wall;
mazemap[9][4] = wall;
mazemap[9][5] = wall;
mazemap[9][9] = wall;
mazemap[9][11] = wall;
mazemap[9][13] = wall;
mazemap[10][1] = wall;
mazemap[10][2] = wall;
mazemap[10][4] = wall;
mazemap[10][7] = wall;
mazemap[10][8] = wall;
mazemap[10][9] = wall;
mazemap[10][10] = wall;
mazemap[10][11] = wall;
mazemap[10][13] = wall;
mazemap[11][4] = wall;
mazemap[11][6] = wall;
mazemap[12][3] = wall;
mazemap[12][4] = wall;
mazemap[12][8] = wall;
mazemap[12][9] = wall;
mazemap[12][10] = wall;
mazemap[12][11] = wall;
mazemap[12][12] = wall;
mazemap[12][13] = wall;
mazemap[12][14] = wall;
mazemap[12][15] = wall;
mazemap[13][1] = wall;
mazemap[13][5] = wall;
mazemap[13][6] = wall;
mazemap[13][7] = wall;
mazemap[13][11] = wall;
mazemap[13][15] = wall;
mazemap[14][3] = wall;
mazemap[14][9] = wall;
mazemap[14][11] = wall;
mazemap[14][13] = wall;
mazemap[15][5] = wall;
mazemap[15][7] = wall;
mazemap[15][13] = wall;
mazemap[16][15] = wall;
#else
{
int k;
srand(time(NULL));
for(k=0; k<(height-2)*(width-2)/3; k++)
{
i = 1 + rand()%(height-2);
j = 1 + rand()%(width-2);
mazemap[i][j] = wall;
}
mazemap[1][1] = road;
mazemap[height-2][width-2] = road;
}
#endif
}
{
printf("\n\nthe road of the map is: \n");
while(zzchu->base != zzchu->top)
{
stacktype output;
pop(zzchu, &output);
printf("(%d, %d), direction=%d \n",output.seat.dy,output.seat.dx,output.id);
mazemap[output.seat.dy][output.seat.dx] = step;
}
}
{
int i, j;
printf("\nthe maze newmap is: ");
for(i=0; i<height; i++)
{
printf("\n");
for(j=0; j<width; j++)
printf(" %c", mazemap[i][j]);
}
}
getch();
return ok;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -