史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   關於”迷宮”的程式碼 (http://forum.slime.com.tw/thread221223.html)

ber751 2007-11-29 10:12 PM

關於”迷宮”的程式碼
 
請問以下這些程式碼...有更精簡的方式嗎???

還有...可以告訴我每行程式碼的意思嗎??

感激不盡!!
語法:

#include <stdio.h>
#define EAST  MAZE[x][y+1] 
#define WEST  MAZE[x][y-1] 
#define SOUTH MAZE[x+1][y]       
#define NORTH MAZE[x-1][y]       
#define ExitX 8                               
#define ExitY 10

struct list
{
  int x,y;
  struct list* next;
};
typedef struct list node;
typedef node* link;
int MAZE[10][12] = {1,1,1,1,1,1,1,1,1,1,1,1,
                            1,0,0,0,1,1,1,1,1,1,1,1,
                            1,1,1,0,1,1,0,0,0,0,1,1,
                            1,1,1,0,1,1,0,1,1,0,1,1,
                            1,1,1,0,0,0,0,1,1,0,1,1,
                            1,1,1,0,1,1,0,1,1,0,1,1,
                            1,1,1,0,1,1,0,1,1,0,1,1,
                            1,1,1,1,1,1,0,1,1,0,1,1,
                            1,1,0,0,0,0,0,0,1,0,0,1,
                            1,1,1,1,1,1,1,1,1,1,1,1};
link push(link stack,int x,int y);
link pop(link stack,int* x,int* y);
int chkExit();

void main()
{
int i,j,x,y;
link path = NULL;

  x=1;
  y=1;
  printf("[迷宮的路徑(0的部分)]\n");
  for(i=0;i<10;i++)
  {
    for(j=0;j<12;j++)
      printf("%2d",MAZE[i][j]);
    printf("\n");
  }

  while(x<=ExitX&&y<=ExitY)
  {
    MAZE[x][y]=2;
    if(NORTH==0) {
      x -= 1;
      path=push(path,x,y);
    }
    else if(SOUTH==0) {
      x+=1;
      path=push(path,x,y);
    }
    else if(WEST==0) {
      y-=1;
      path=push(path,x,y);
    }
    else if(EAST==0) {
      y+=1;
      path=push(path,x,y);
    }
    else if(chkExit(x,y,ExitX,ExitY)==1) break;
    else {
      MAZE[x][y]=2;
      path=pop(path,&x,&y);
    }
  }

  printf("[老鼠走過的路徑(2的部分)]\n");
  for(i=0;i<10;i++)
  {
    for(j=0;j<12;j++)
      printf("%2d",MAZE[i][j]);
    printf("\n");
  }
 
  system("PAUSE");
}

link push(link stack,int x,int y)
{
  link newnode;
  newnode = (link)malloc(sizeof(node));
  if(!newnode)
  {
    printf("Error!\n");
    return NULL;
  }
  newnode->x=x;
  newnode->y=y;
  newnode->next=stack;
  stack=newnode;

  return stack;
}

link pop(link stack,int* x,int* y)
{
  link top;
  if(stack!=NULL)
  {
    top=stack;
    stack=stack->next;
    *x=top->x;
    *y=top->y;
    free(top);
    return stack;
  }
  else
    *x=-1;

  return stack;
}

int chkExit(int x,int y,int ex,int ey)
{
  if(x==ex&&y==ey)
  {
    if(NORTH==1||SOUTH==1||WEST==1||EAST==2)
      return 1;
    if(NORTH==1||SOUTH==1||WEST==2||EAST==1)
      return 1;
    if(NORTH==1||SOUTH==2||WEST==1||EAST==1)
      return 1;
    if(NORTH==2||SOUTH==1||WEST==1||EAST==1)
      return 1;
  }

  return 0;
  system("PAUSE");
}



所有時間均為台北時間。現在的時間是 08:59 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1