📄 maze3d.c
字号:
setfillstyle(SOLID_FILL,FLOOR_COLOR);
quadrilateral[0].x=x_corner[0][0][0];
quadrilateral[0].y=y_corner[0][0][0];
quadrilateral[1].x=x_corner[0][1][0];
quadrilateral[1].y=y_corner[0][1][0];
quadrilateral[2].x=x_corner[1][1][0];
quadrilateral[2].y=y_corner[1][1][0];
quadrilateral[3].x=x_corner[1][0][0];
quadrilateral[3].y=y_corner[1][0][0];
fillpoly(4,&(quadrilateral[0].x));
y_even=TRUE;
y_out_back=0;
y_out_front=1;
for (y=0; y <= max_y; y++)
{
y_pixel_floor_back
=((int) ((long) y_out_back)
*((long) (y_corner[1][1][0]-y_corner[1][0][0]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+y_corner[1][0][0];
y_pixel_floor_front
=((int) ((long) y_out_front)
*((long) (y_corner[1][1][0]-y_corner[1][0][0]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+y_corner[1][0][0];
y_pixel_top_back
=((int) ((long) y_out_back)
*((long) (y_corner[1][1][1]-y_corner[1][0][1]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+y_corner[1][0][1];
y_pixel_top_front
=((int) ((long) y_out_front)
*((long) (y_corner[1][1][1]-y_corner[1][0][1]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+y_corner[1][0][1];
x_pixel_floor_back_left_edge
=((int) ((long) y_out_back)
*((long) (x_corner[0][1][0]-x_corner[0][0][0]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+x_corner[0][0][0];
x_pixel_floor_back_right_edge
=((int) ((long) y_out_back)
*((long) (x_corner[1][1][0]-x_corner[1][0][0]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+x_corner[1][0][0];
x_pixel_top_back_left_edge
=((int) ((long) y_out_back)
*((long) (x_corner[0][1][1]-x_corner[0][0][1]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+x_corner[0][0][1];
x_pixel_top_back_right_edge
=((int) ((long) y_out_back)
*((long) (x_corner[1][1][1]-x_corner[1][0][1]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+x_corner[1][0][1];
x_pixel_floor_front_left_edge
=((int) ((long) y_out_front)
*((long) (x_corner[0][1][0]-x_corner[0][0][0]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+x_corner[0][0][0];
x_pixel_floor_front_right_edge
=((int) ((long) y_out_front)
*((long) (x_corner[1][1][0]-x_corner[1][0][0]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+x_corner[1][0][0];
x_pixel_top_front_left_edge
=((int) ((long) y_out_front)
*((long) (x_corner[0][1][1]-x_corner[0][0][1]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+x_corner[0][0][1];
x_pixel_top_front_right_edge
=((int) ((long) y_out_front)
*((long) (x_corner[1][1][1]-x_corner[1][0][1]))
/((long) ((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1)))
+x_corner[1][0][1];
x_even=TRUE;
x_out_left=0;
x_out_right=1;
previous_char=' ';
for (x=0; x <= max_x; x++)
{
current_char=page[x][y];
if (current_char == 'W')
{
if (previous_char != 'W')
x_out_left_most=x_out_left;
}
else
{
if (previous_char == 'W')
{
x_out_right_most=x_out_left;
output_wall(num_columns,x_out_left_most,x_out_right_most,
y_pixel_floor_back,y_pixel_floor_front,
y_pixel_top_back,y_pixel_top_front,
x_pixel_floor_back_left_edge,
x_pixel_floor_back_right_edge,
x_pixel_top_back_left_edge,
x_pixel_top_back_right_edge,
x_pixel_floor_front_left_edge,
x_pixel_floor_front_right_edge,
x_pixel_top_front_left_edge,
x_pixel_top_front_right_edge);
}
}
previous_char=current_char;
x_out_left=x_out_right;
x_out_right++;
if (x_even)
x_out_right+=ROOM_WIDTH_TO_WALL_WIDTH_RATIO;
x_even=! x_even;
}
x_out_right_most=x_out_left;
output_wall(num_columns,x_out_left_most,x_out_right_most,
y_pixel_floor_back,y_pixel_floor_front,
y_pixel_top_back,y_pixel_top_front,
x_pixel_floor_back_left_edge,
x_pixel_floor_back_right_edge,
x_pixel_top_back_left_edge,
x_pixel_top_back_right_edge,
x_pixel_floor_front_left_edge,
x_pixel_floor_front_right_edge,
x_pixel_top_front_left_edge,
x_pixel_top_front_right_edge);
y_out_back=y_out_front;
y_out_front++;
if (y_even)
y_out_front+=ROOM_WIDTH_TO_WALL_WIDTH_RATIO;
y_even=! y_even;
}
return;
}
static void draw_line(
int num_rows,
int num_columns,
int x1,
int y1,
int x2,
int y2)
{
static int x1_out;
static int x1_pixel;
static int x1_pixel_left_edge;
static int x1_pixel_right_edge;
static int x2_out;
static int x2_pixel;
static int x2_pixel_left_edge;
static int x2_pixel_right_edge;
static int y1_out;
static int y1_pixel;
static int y2_out;
static int y2_pixel;
x1_out=(ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*x1+1;
y1_out=(ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*y1+1;
x2_out=(ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*x2+1;
y2_out=(ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*y2+1;
x1_pixel_left_edge
=((int) ((long) y1_out)
*((long) (x_corner[0][1][1]-x_corner[0][0][1]))
/((long) (2*((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1))))
+x_corner[0][0][1];
x1_pixel_right_edge
=((int) ((long) y1_out)
*((long) (x_corner[1][1][1]-x_corner[1][0][1]))
/((long) (2*((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1))))
+x_corner[1][0][1];
x1_pixel
=((int) (((long) x1_out)
*((long) (x1_pixel_right_edge
-x1_pixel_left_edge))
/((long) (2*((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1)))))
+x1_pixel_left_edge;
y1_pixel
=((int) ((long) y1_out)
*((long) (y_corner[1][1][1]-y_corner[1][0][1]))
/((long) (2*((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1))))
+y_corner[1][0][1];
x2_pixel_left_edge
=((int) ((long) y2_out)
*((long) (x_corner[0][1][1]-x_corner[0][0][1]))
/((long) (2*((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1))))
+x_corner[0][0][1];
x2_pixel_right_edge
=((int) ((long) y2_out)
*((long) (x_corner[1][1][1]-x_corner[1][0][1]))
/((long) (2*((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1))))
+x_corner[1][0][1];
x2_pixel
=((int) (((long) x2_out)
*((long) (x2_pixel_right_edge
-x2_pixel_left_edge))
/((long) (2*((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_columns+1)))))
+x2_pixel_left_edge;
y2_pixel
=((int) ((long) y2_out)
*((long) (y_corner[1][1][1]-y_corner[1][0][1]))
/((long) (2*((ROOM_WIDTH_TO_WALL_WIDTH_RATIO+2)*num_rows+1))))
+y_corner[1][0][1];
moveto(x1_pixel,y1_pixel);
lineto(x2_pixel,y2_pixel);
return;
}
static void display_solution(
int num_columns,
int num_rows,
int max_x,
int max_y,
char **page)
{
static int delta_index;
static int path_found;
static int x;
static int x_next;
static int x_previous;
static int y;
static int y_next;
static int y_previous;
setlinestyle(SOLID_LINE,0xffff,THICK_WIDTH);
setcolor(SOLUTION_COLOR);
x_previous=1;
y_previous=-1;
x=1;
y=0;
do
{
path_found=FALSE;
for (delta_index=0; (! path_found); delta_index++)
{
x_next=x+delta_x[delta_index][0];
y_next=y+delta_y[delta_index][0];
if ((x_next != x_previous) || (y_next != y_previous))
path_found=(page[x_next][y_next] == 'S');
}
draw_line(num_rows,num_columns,x,y,x_next,y_next);
x_previous=x;
y_previous=y;
x=x_next;
y=y_next;
}
while ((x != max_x-1) || (y != max_y));
return;
}
static void let_user_try_to_solve(
int *key_pressed,
int num_rows,
int num_columns,
int max_x,
int max_y,
char **computer_page,
char **user_page)
{
static int delta_index_1;
static int frequency;
static int passage_found;
static int x;
static int x_next;
static int y;
static int y_next;
setlinestyle(SOLID_LINE,0xffff,NORM_WIDTH);
for (x=0; x <= max_x; x++)
for (y=0; y <= max_y; y++)
if (computer_page[x][y] == 'W')
user_page[x][y]='W';
else
user_page[x][y]=' ';
x=1;
y=1;
user_page[x][y]='S';
setcolor(ADVANCE_COLOR);
draw_line(num_rows,num_columns,1,0,x,y);
do
{
do
{
passage_found=TRUE;
*key_pressed=getch();
if ((*key_pressed != (int) 'Q')
&& (*key_pressed != (int) 'q')
&& (*key_pressed != (int) 'S')
&& (*key_pressed != (int) 's'))
{
if (*key_pressed == 0)
{
*key_pressed=getch();
switch (*key_pressed)
{
case 72:
delta_index_1=3;
break;
case 77:
delta_index_1=2;
break;
case 80:
delta_index_1=1;
break;
case 75:
delta_index_1=0;
break;
default:
{
passage_found=FALSE;
sound(120);
delay(278);
nosound();
*key_pressed=(int) ' ';
break;
}
}
}
else
{
switch (*key_pressed)
{
case 56:
delta_index_1=3;
break;
case 54:
delta_index_1=2;
break;
case 50:
delta_index_1=1;
break;
case 52:
delta_index_1=0;
break;
case 8:
delta_index_1=0;
break;
default:
passage_found=FALSE;
break;
}
}
if (passage_found)
{
x_next=x+delta_x[delta_index_1][0];
if (x_next <= 0)
passage_found=FALSE;
else
if (x_next >= max_x)
passage_found=FALSE;
else
{
y_next=y+delta_y[delta_index_1][0];
if (y_next <= 0)
passage_found=FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -