2013-05-12 8 views
2

조립할 때 게임을하기가 쉽지 않습니다. (복잡한 종류가 아닌 단순한 종류의 게임입니다.) 두 스택이 필요합니다. 두 개의 스택을 만들고 사용하는 방법을 보여 주시면 기쁘게 생각합니다. 지식 만 있으면, 뱀이 자르면 뱀의 시체를 칠할지를 검사 할 스택이 필요합니다.조립품에 두 개의 스택이 있습니다.

+0

하나의 호출 스택이있을 수 MEM [인덱스]에 가치를 추가하고 인덱스를 증가 밟아. 나머지는 사용자 스택 (즉, 수동으로 관리)이어야합니다. 알고리즘은 그리 어렵지 않습니다. –

+1

왜 스네이크가 교차 하는지를 확인하기 위해 스택이 필요한 이유를 설명해 주시겠습니까? 2D 배열로 플레이 필드를 나타내면 뱀의 세그먼트가 이미 다른 세그먼트가있는 동일한 셀에서 끝나는 지 확인하여 쉽게 찾을 수 있습니다. – Michael

+0

@TJR 내 대답을 확인하십시오. 그것이 도움이 될 수 있는지보십시오 – qwr

답변

3

. 뱀 배열을 만듭니다. 그들을 옮기십시오. 머리를 snake[0] (x;y ofhead) 추가하고 snake[snake_size]을 지우십시오. 이지도 할 경우 해당 맵 [X, Y] 영역에 플래그 뱀의 몸 전체지도는지도를 사용하여 던져 반복 그릴 수있는 것은 의사 코드 값 : 여기에 뱀을 이동

map[x,y]=1 //snake body 
map[x,y]=0 //nothing 
map[x,y]=2 //fruit 
map[x,y]=-1 //fench 

하는 것은 간단한 코드입니다 : () 오른쪽으로 뱀 배열을 이동 :

. (주의 : 우리의 뱀 배열 요소 워드 (2 바이트)를 이렇게 실제로 snake[x*2] 주소를 표시해야한다 snake[x]를 작성,

 mov cx, snake_size 
     ; di=snake_size*2 
     mov di, snake_size  
     add di,di ;// di=di*2 
    move_array: 
     ; snake[x]=snake[x-1]; 
     mov ax, snake[di-2] ; 
     mov snake[di], ax 
     ; --x (x=x-1) 
     sub di, 2 
     loop move_array 

//c style loop code will be 
for(int i=snake_size;i>0;i--){ 
    snake[i]=snake[i-1]; 
} 

을이 운동 후에하는 새로운 위치를 추가 너무 머리 snake[0] 명확 tail=snake[snake_size] 및 플래그지도 사람들의 : 그는 당신이지도 [head.x, head.y] == 2 또는는 fench 위해 머리 위치를 확인해야 열매를 먹으면보고에 대한 enter image description here

당신 그가 자르는지 여부를 확인하려면 -1

으로 확인하십시오. 당신은 루프 전체 몸을 던져 몸

오는 머리 충돌이을 쌓아 있는지 확인해야합니다

  • 는 필로의 동작을 가지는 배열입니다.
  • 상점 색인이 필요합니다. ;mem[index]=value;++index;
  • 을 밀어 때 [인덱스]를 감소 지수 터지는 및 MEM을 반환 할 때
  • 는 멀티 아니라면 ;--index;return mem[index]
+0

뱀에게 배열을하는 것을 의미한다면 - 어떻게 크기를 바꿀 것인가. 그렇지 않다면 꼬리가 무엇인지 어떻게 알 수 있습니까 (꼬리를 삭제 한 후지도에서 새 위치를 찾아야합니다). 그런데지도는 배열입니까? – TJR

+0

뱀에 대한 @TJR 뱀의 최대 길이를 가진 snake_array가 있습니다.이 길이는 결코 (mapx * mapy)/2를 초과하지 않습니다. 현재 스네이크 크기를 보유하고있는 s_size가 있습니다. 우리가 s_size를 증가 시키면 스네이크 크기가 변경 될 것입니다. 우리는 꼬리 인 뱀 [s_size]를 깨끗하게합니다. .map은 2 차원 배열입니다. 우리는 cheking 및 목적을 표시하기 위해 map을 사용합니다. 또한 내 대답을 확인하십시오. 나는 형식을 개선하고 더 명확하게 만들었습니다. – qwr

관련 문제