📄 maze3d.c
字号:
counter_1=r_n[1];
counter_2=r_n[2];
counter_3=r_n[3];
counter_4=r_n[4];
counter_5=r_n[5];
counter_6=r_n[6];
counter_7=r_n[7];
hash(&counter_0,&counter_1,&counter_2,&counter_3,&counter_4,&counter_5,
&counter_6,&counter_7);
delta_x[0][0]=-1;
delta_y[0][0]=0;
delta_x[1][0]=0;
delta_y[1][0]=1;
delta_x[2][0]=1;
delta_y[2][0]=0;
delta_x[3][0]=0;
delta_y[3][0]=-1;
delta_index_2=0;
for (delta_index_1a=0; delta_index_1a < 4; ++delta_index_1a)
for (delta_index_1b=0; delta_index_1b < 4; ++delta_index_1b)
if (delta_index_1a != delta_index_1b)
for (delta_index_1c=0; delta_index_1c < 4; ++delta_index_1c)
if ((delta_index_1a != delta_index_1c)
&& (delta_index_1b != delta_index_1c))
for (delta_index_1d=0; delta_index_1d < 4; ++delta_index_1d)
if ((delta_index_1a != delta_index_1d)
&& (delta_index_1b != delta_index_1d)
&& (delta_index_1c != delta_index_1d))
{
delta_x[delta_index_1a][delta_index_2]=delta_x[0][0];
delta_y[delta_index_1a][delta_index_2]=delta_y[0][0];
delta_x[delta_index_1b][delta_index_2]=delta_x[1][0];
delta_y[delta_index_1b][delta_index_2]=delta_y[1][0];
delta_x[delta_index_1c][delta_index_2]=delta_x[2][0];
delta_y[delta_index_1c][delta_index_2]=delta_y[2][0];
delta_x[delta_index_1d][delta_index_2]=delta_x[3][0];
delta_y[delta_index_1d][delta_index_2]=delta_y[3][0];
delta_index_2++;
};
get_cursor(&cursor_row,&cursor_column,&cursor_start,&cursor_stop);
set_cursor_size((unsigned char) 32,(unsigned char) 32);
titillator_index=0;
age=3;
trial_num_mod_10=0;
do
{
titillate();
for (x=0; x <= max_x; ++x)
for (y=0; y <= max_y; ++y)
page[x][y]='W';
r_n[0]=counter_0+1;
r_n[1]=counter_1+1;
r_n[2]=counter_2+1;
r_n[3]=counter_3+1;
r_n[4]=counter_4+1;
r_n[5]=counter_5+1;
r_n[6]=counter_6+1;
r_n[7]=counter_7+1;
sum=0;
for (digit_num=1; digit_num <= 3; ++digit_num)
{
digit=r_n[0];
r_n_index_1=0;
for (r_n_index_2=1; r_n_index_2 < 8; ++r_n_index_2)
{
tem_int=r_n[r_n_index_2];
r_n[r_n_index_1]=tem_int;
digit+=tem_int;
if (digit >= 29)
digit-=29;
r_n_index_1=r_n_index_2;
}
r_n[7]=digit;
sum=29*sum+digit;
}
x=2*(sum % num_columns)+1;
sum=0;
for (digit_num=1; digit_num <= 3; ++digit_num)
{
digit=r_n[0];
r_n_index_1=0;
for (r_n_index_2=1; r_n_index_2 < 8; ++r_n_index_2)
{
tem_int=r_n[r_n_index_2];
r_n[r_n_index_1]=tem_int;
digit+=tem_int;
if (digit >= 29)
digit-=29;
r_n_index_1=r_n_index_2;
}
r_n[7]=digit;
sum=29*sum+digit;
}
y=2*(sum % num_rows)+1;
page[x][y]=' ';
stack_head=-1;
do
{
delta_index_1a=0;
do
{
delta_index_2=r_n[0];
r_n_index_1=0;
r_n_index_2=1;
while (r_n_index_2 < 8)
{
tem_int=r_n[r_n_index_2];
r_n[r_n_index_1]=tem_int;
delta_index_2+=tem_int;
if (delta_index_2 >= 29)
delta_index_2-=29;
r_n_index_1=r_n_index_2;
r_n_index_2++;
}
r_n[7]=delta_index_2;
}
while (delta_index_2 >= 24);
passage_found=FALSE;
search_complete=FALSE;
while (! search_complete)
{
while ((delta_index_1a < 4) && (! passage_found))
{
x_next=x+2*delta_x[delta_index_1a][delta_index_2];
if (x_next <= 0)
delta_index_1a++;
else
if (x_next > max_x)
delta_index_1a++;
else
{
y_next=y+2*delta_y[delta_index_1a][delta_index_2];
if (y_next <= 0)
delta_index_1a++;
else
if (y_next > max_y)
delta_index_1a++;
else
if (page[x_next][y_next] == 'W')
passage_found=TRUE;
else
delta_index_1a++;
}
}
if (! passage_found)
{
if (stack_head >= 0)
{
delta_index_1a=(int) (stack[stack_head].index_1);
delta_index_2=stack[stack_head].index_2;
x-=2*delta_x[delta_index_1a][delta_index_2];
y-=2*delta_y[delta_index_1a][delta_index_2];
stack_head--;
delta_index_1a++;
}
}
search_complete=((passage_found)
|| ((stack_head == -1) && (delta_index_1a >= 4)));
}
if (passage_found)
{
stack_head++;
stack[stack_head].index_1=(char) delta_index_1a;
stack[stack_head].index_2=delta_index_2;
page[x_next][y_next]=' ';
page[(x+x_next)/2][(y+y_next)/2]=' ';
x=x_next;
y=y_next;
}
}
while (stack_head != -1);
page[1][0]='S';
page[max_x-1][max_y]=' ';
solve_maze(max_x,max_y,&num_rooms_in_solution,&adjacency,page,stack);
increment(&counter_0,&counter_1,&counter_2,&counter_3,&counter_4,
&counter_5,&counter_6,&counter_7);
trial_num_mod_10++;
if (trial_num_mod_10 >= 10)
{
trial_num_mod_10=0;
age++;
}
}
while ((3*num_rooms_in_solution < num_rooms_in_maze)
|| (2*adjacency > age*num_rooms_in_solution));
set_cursor_size(cursor_start,cursor_stop);
return;
}
static void output_wall(
int num_columns,
int x_out_left,
int x_out_right,
int y_pixel_floor_back,
int y_pixel_floor_front,
int y_pixel_top_back,
int y_pixel_top_front,
int x_pixel_floor_back_left_edge,
int x_pixel_floor_back_right_edge,
int x_pixel_top_back_left_edge,
int x_pixel_top_back_right_edge,
int x_pixel_floor_front_left_edge,
int x_pixel_floor_front_right_edge,
int x_pixel_top_front_left_edge,
int x_pixel_top_front_right_edge)
{
static corner_rec quadrilateral [4];
static int x_pixel_floor_back_left;
static int x_pixel_floor_back_right;
static int x_pixel_floor_front_left;
static int x_pixel_floor_front_right;
static int x_pixel_top_back_left;
static int x_pixel_top_back_right;
static int x_pixel_top_front_left;
static int x_pixel_top_front_right;
x_pixel_floor_back_left
=((int) (((long) x_out_left)
*((long) (x_pixel_floor_back_right_edge
-x_pixel_floor_back_left_edge))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1))))
+x_pixel_floor_back_left_edge;
x_pixel_floor_back_right
=((int) (((long) x_out_right)
*((long) (x_pixel_floor_back_right_edge
-x_pixel_floor_back_left_edge))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1))))
+x_pixel_floor_back_left_edge;
x_pixel_floor_front_left
=((int) (((long) x_out_left)
*((long) (x_pixel_floor_front_right_edge
-x_pixel_floor_front_left_edge))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1))))
+x_pixel_floor_front_left_edge;
x_pixel_floor_front_right
=((int) (((long) x_out_right)
*((long) (x_pixel_floor_front_right_edge
-x_pixel_floor_front_left_edge))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1))))
+x_pixel_floor_front_left_edge;
x_pixel_top_back_left
=((int) (((long) x_out_left)
*((long) (x_pixel_top_back_right_edge
-x_pixel_top_back_left_edge))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1))))
+x_pixel_top_back_left_edge;
x_pixel_top_back_right
=((int) (((long) x_out_right)
*((long) (x_pixel_top_back_right_edge
-x_pixel_top_back_left_edge))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1))))
+x_pixel_top_back_left_edge;
x_pixel_top_front_left
=((int) (((long) x_out_left)
*((long) (x_pixel_top_front_right_edge
-x_pixel_top_front_left_edge))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1))))
+x_pixel_top_front_left_edge;
x_pixel_top_front_right
=((int) (((long) x_out_right)
*((long) (x_pixel_top_front_right_edge
-x_pixel_top_front_left_edge))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1))))
+x_pixel_top_front_left_edge;
if (2*(x_pixel_floor_back_left-x_pixel_floor_back_left_edge)
> (x_pixel_floor_back_right_edge-x_pixel_floor_back_left_edge))
{
setcolor(LEFT_WALL_COLOR);
setfillstyle(SOLID_FILL,LEFT_WALL_COLOR);
quadrilateral[0].x=x_pixel_floor_back_left;
quadrilateral[0].y=y_pixel_floor_back;
quadrilateral[1].x=x_pixel_top_back_left;
quadrilateral[1].y=y_pixel_top_back;
quadrilateral[2].x=x_pixel_top_front_left;
quadrilateral[2].y=y_pixel_top_front;
quadrilateral[3].x=x_pixel_floor_front_left;
quadrilateral[3].y=y_pixel_floor_front;
fillpoly(4,&(quadrilateral[0].x));
}
if (2*(x_pixel_floor_back_right-x_pixel_floor_back_left_edge)
< (x_pixel_floor_back_right_edge-x_pixel_floor_back_left_edge))
{
setcolor(RIGHT_WALL_COLOR);
setfillstyle(SOLID_FILL,RIGHT_WALL_COLOR);
quadrilateral[0].x=x_pixel_floor_back_right;
quadrilateral[0].y=y_pixel_floor_back;
quadrilateral[1].x=x_pixel_top_back_right;
quadrilateral[1].y=y_pixel_top_back;
quadrilateral[2].x=x_pixel_top_front_right;
quadrilateral[2].y=y_pixel_top_front;
quadrilateral[3].x=x_pixel_floor_front_right;
quadrilateral[3].y=y_pixel_floor_front;
fillpoly(4,&(quadrilateral[0].x));
}
setcolor(FRONT_WALL_COLOR);
setfillstyle(SOLID_FILL,FRONT_WALL_COLOR);
quadrilateral[0].x=x_pixel_floor_front_left;
quadrilateral[0].y=y_pixel_floor_front;
quadrilateral[1].x=x_pixel_floor_front_right;
quadrilateral[1].y=y_pixel_floor_front;
quadrilateral[2].x=x_pixel_top_front_right;
quadrilateral[2].y=y_pixel_top_front;
quadrilateral[3].x=x_pixel_top_front_left;
quadrilateral[3].y=y_pixel_top_front;
fillpoly(4,&(quadrilateral[0].x));
setcolor(TOP_WALL_COLOR);
setfillstyle(SOLID_FILL,TOP_WALL_COLOR);
quadrilateral[0].x=x_pixel_top_front_left;
quadrilateral[0].y=y_pixel_top_front;
quadrilateral[1].x=x_pixel_top_front_right;
quadrilateral[1].y=y_pixel_top_front;
quadrilateral[2].x=x_pixel_top_back_right;
quadrilateral[2].y=y_pixel_top_back;
quadrilateral[3].x=x_pixel_top_back_left;
quadrilateral[3].y=y_pixel_top_back;
fillpoly(4,&(quadrilateral[0].x));
return;
}
static void display_maze(
int num_columns,
int num_rows,
int max_x,
int max_y,
char **page)
{
static char current_char;
static char previous_char;
static corner_rec quadrilateral [4];
static int x;
static int x_even;
static int x_out_left;
static int x_out_left_most;
static int x_out_right;
static int x_out_right_most;
static int x_pixel_floor_back_left_edge;
static int x_pixel_floor_back_right_edge;
static int x_pixel_floor_front_left_edge;
static int x_pixel_floor_front_right_edge;
static int x_pixel_top_back_left_edge;
static int x_pixel_top_back_right_edge;
static int x_pixel_top_front_left_edge;
static int x_pixel_top_front_right_edge;
static int y;
static int y_even;
static int y_out_back;
static int y_out_front;
static int y_pixel_floor_back;
static int y_pixel_floor_front;
static int y_pixel_top_back;
static int y_pixel_top_front;
setlinestyle(SOLID_LINE,0xffff,NORM_WIDTH);
setcolor(FLOOR_COLOR);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -