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

📄 maze3d.c

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