📄 maze.c
字号:
{
case 72:
delta_index_1=3;
break;
case 77:
delta_index_1=0;
break;
case 80:
delta_index_1=1;
break;
case 75:
delta_index_1=2;
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=0;
break;
case 50:
delta_index_1=1;
break;
case 52:
delta_index_1=2;
break;
default:
{
passage_found=FALSE;
sound(120);
delay(278);
nosound();
break;
}
}
}
if (passage_found)
{
x_next=x+(*(delta_x+(24*delta_index_1)));
y_next=y+(*(delta_y+(24*delta_index_1)));
color=(int) getpixel(x_next,y_next);
if (color == *wall)
if (color == *path)
if (stack_head == NULL)
{
passage_found=FALSE;
sound(120);
delay(278);
nosound();
}
else
{
if
((((int) (stack_head->index_1)) + 2) % 4
!= delta_index_1)
{
passage_found=FALSE;
sound(120);
delay(278);
nosound();
}
}
else
{
passage_found=FALSE;
sound(120);
delay(278);
nosound();
}
else
{
if (y_next == 0)
{
passage_found=FALSE;
sound(120);
delay(278);
nosound();
}
}
}
}
}
while ((! passage_found)
&& (*key_pressed != (int) 'Q')
&& (*key_pressed != (int) 'q')
&& (*key_pressed != (int) 'S')
&& (*key_pressed != (int) 's'));
if ((*key_pressed != (int) 'Q')
&& (*key_pressed != (int) 'q')
&& (*key_pressed != (int) 'S')
&& (*key_pressed != (int) 's'))
{
if (stack_head == NULL)
{
if ((stack_ptr=(struct stack_1_rec *) malloc(
(unsigned) sizeof(struct stack_1_rec))) == NULL)
{
*fatal_error=TRUE;
closegraph();
printf("? out of memory\n");
}
else
{
stack_ptr->next_ptr=stack_head;
stack_head=stack_ptr;
stack_head->index_1=(unsigned char) delta_index_1;
}
}
else
if ((((int) (stack_head->index_1)) +2) % 4
== delta_index_1)
{
stack_ptr=stack_head;
stack_head=stack_head->next_ptr;
free((char *) stack_ptr);
}
else
{
if ((stack_ptr=(struct stack_1_rec *) malloc(
(unsigned) sizeof(struct stack_1_rec))) == NULL)
{
*fatal_error=TRUE;
closegraph();
printf("? out of memory\n");
}
else
{
stack_ptr->next_ptr=stack_head;
stack_head=stack_ptr;
stack_head->index_1
=(unsigned char) delta_index_1;
}
}
if (! *fatal_error)
{
x_next+=(*(delta_x+(24*delta_index_1)));
y_next+=(*(delta_y+(24*delta_index_1)));
if (y_next <= *y_max)
{
if (color == *path)
setcolor((unsigned int) *erase);
else
setcolor((unsigned int) *path);
line(x,y,x_next,y_next);
}
else
{
setcolor((unsigned int) *path);
line(x,y,x_next,*y_max);
}
x=x_next;
y=y_next;
}
}
}
while ((y_next <= *y_max)
&& (*key_pressed != (int) 'Q')
&& (*key_pressed != (int) 'q')
&& (*key_pressed != (int) 'S')
&& (*key_pressed != (int) 's')
&& (! *fatal_error));
if (! *fatal_error)
{
if (y_next > *y_max)
{
frequency=10;
for (delta_index_1=1; delta_index_1 <= 100;
delta_index_1++)
{
sound(frequency);
delay(56);
nosound();
frequency+=10;
};
do
{
*key_pressed=getch();
if ((*key_pressed != (int) 'Q')
&& (*key_pressed != (int) 'q')
&& (*key_pressed != (int) 'S')
&& (*key_pressed != (int) 's'))
{
sound(120);
delay(278);
nosound();
}
if (*key_pressed == 0)
{
*key_pressed=getch();
*key_pressed=(int) ' ';
}
}
while ((*key_pressed != (int) 'Q')
&& (*key_pressed != (int) 'q')
&& (*key_pressed != (int) 'S')
&& (*key_pressed != (int) 's'));
}
if ((*key_pressed == (int) 'S')
|| (*key_pressed == (int) 's'))
{
while ((stack_head != NULL) && (! *fatal_error))
{
remove_rejected_attempts(delta_x,delta_y,erase,
passage,&stack_head,&stack_ptr,&x,&x_next,&y,
&y_next,fatal_error);
if (! *fatal_error)
{
delta_index_1=(int) (stack_head->index_1);
x_next=x-2*(*(delta_x+(24*delta_index_1)));
y_next=y-2*(*(delta_y+(24*delta_index_1)));
setcolor((unsigned int) *passage);
if (y <= *y_max)
line(x,y,x_next,y_next);
else
line(x,*y_max,x_next,y_next);
x=x_next;
y=y_next;
stack_ptr=stack_head;
stack_head=stack_head->next_ptr;
free((char *) stack_ptr);
}
}
if (! *fatal_error)
remove_rejected_attempts(delta_x,delta_y,erase,passage,
&stack_head,&stack_ptr,&x,&x_next,&y,&y_next,
fatal_error);
}
else
while (stack_head != NULL)
{
stack_ptr=stack_head;
stack_head=stack_head->next_ptr;
free((char *) stack_ptr);
}
}
return;
}
static void optionally_have_computer_solve(delta_x,delta_y,key_pressed,
magnitude_delta_x,magnitude_delta_y,passage,path,y_max,fatal_error)
int *delta_x;
int *delta_y;
int *key_pressed;
int *magnitude_delta_x;
int *magnitude_delta_y;
int *passage;
int *path;
int *y_max;
int *fatal_error;
{
int finished;
unsigned char delta_index_1;
int recurse;
stack_1_rec_ptr stack_head;
stack_1_rec_ptr stack_ptr;
int x;
int x_next;
int y;
int y_next;
if ((*key_pressed == 'S')
|| (*key_pressed == 's'))
{
x=*magnitude_delta_x;
y=*magnitude_delta_y;
y_next=y+(*magnitude_delta_y);
setcolor((unsigned int) *path);
line(x,0,x,y);
finished=FALSE;
recurse=TRUE;
stack_head=NULL;
while ((! finished) && (! *fatal_error))
{
if (recurse)
{
delta_index_1=0;
recurse=FALSE;
};
while ((delta_index_1 < 4)
&& (! finished)
&& (! recurse)
&& (! *fatal_error))
{
x_next=x+(*(delta_x+(24*delta_index_1)));
y_next=y+(*(delta_y+(24*delta_index_1)));
if (getpixel(x_next,y_next)
== (unsigned int) *passage)
{
x_next+=(*(delta_x+(24*delta_index_1)));
y_next+=(*(delta_y+(24*delta_index_1)));
if (y_next <= *y_max)
{
setcolor((unsigned int) *path);
line(x,y,x_next,y_next);
x=x_next;
y=y_next;
if ((stack_ptr=(struct stack_1_rec *) malloc(
(unsigned) sizeof(struct stack_1_rec)))
== NULL)
{
*fatal_error=TRUE;
closegraph();
printf("? out of memory\n");
}
else
{
stack_ptr->next_ptr=stack_head;
stack_head=stack_ptr;
stack_head->index_1
=(unsigned char) delta_index_1;
recurse=TRUE;
}
}
else
finished=TRUE;
}
else
delta_index_1++;
};
if ((delta_index_1 >= 4) && (! *fatal_error))
{
setcolor((unsigned int) *passage);
x_next=x;
y_next=y;
delta_index_1=stack_head->index_1;
stack_ptr=stack_head;
stack_head=stack_head->next_ptr;
free((char *) stack_ptr);
x-=(2*(*(delta_x+(24*delta_index_1))));
y-=(2*(*(delta_y+(24*delta_index_1))));
line(x,y,x_next,y_next);
delta_index_1++;
}
};
if (! *fatal_error)
{
line(x,y,x,*y_max);
sound(1000);
delay(333);
nosound();
*key_pressed=getch();
if (*key_pressed == 0)
*key_pressed=getch();
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -