两个堆叠在组装中

时间:2013-05-12 14:27:01

标签: assembly graphics x86 stack

我想要在装配中做一个游戏(简单的事情,而不是复杂的蛇),我需要两个堆栈。如果你能告诉我如何创建和使用两个堆栈,我将很高兴。 只是为了知识,我需要堆栈来检查蛇是否切割自己,还要画蛇的身体。

1 个答案:

答案 0 :(得分: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]实际上应该指向snake[x*2]地址;

      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]并在地图上标记这些位置: enter image description here

看看他是否吃水果你应该用地图[head.x,head.y] == 2检查头部位置,或者用你检查的fench检查-1

看他是否切。你应该循环扔掉整个身体,看看是否与身体发生碰撞

即将筹码

  • 它是具有Filo行为的数组。
  • 你需要商店索引。
  • 在推送;mem[index]=value;++index;
  • 时为该mem [index]添加值并增加索引
  • 当弹出减少索引并返回mem [index] ;--index;return mem[index]