⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maze.c

📁 Many C samples. It is a good sample for students to learn C language.
💻 C
📖 第 1 页 / 共 3 页
字号:
                        {
                          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 + -