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

📄 maze3d.c

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