Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 组装中的两个堆栈_Assembly_Graphics_X86_Stack - Fatal编程技术网

Assembly 组装中的两个堆栈

Assembly 组装中的两个堆栈,assembly,graphics,x86,stack,Assembly,Graphics,X86,Stack,我想做一个组装游戏(简单的,而不是复杂的蛇),我需要两个堆栈。如果您能告诉我如何创建和使用两个堆栈,我将非常高兴。 只是为了了解情况,我需要这些堆栈来检查蛇是否割伤了自己,还需要绘制蛇的身体。.create snake array。然后转移它们。并添加头部snake[0](头部的x;y)然后清除snake[snake\u size],这是尾部。 如果是地图,你可以在地图[x,y]区域标记蛇身,并绘制整个地图循环,使用地图值投掷它 伪代码: map[x,y]=1 //snake body map

我想做一个组装游戏(简单的,而不是复杂的蛇),我需要两个堆栈。如果您能告诉我如何创建和使用两个堆栈,我将非常高兴。
只是为了了解情况,我需要这些堆栈来检查蛇是否割伤了自己,还需要绘制蛇的身体。

.create snake array。然后转移它们。并添加头部
snake[0](头部的x;y)
然后清除
snake[snake\u size]
,这是尾部。 如果是地图,你可以在地图[x,y]区域标记蛇身,并绘制整个地图循环,使用地图值投掷它 伪代码:

map[x,y]=1 //snake body 
map[x,y]=0 //nothing 
map[x,y]=2 //fruit
map[x,y]=-1 //fench
下面是移动snake的简单代码:(向右移动snake数组):

(注意:我们的snake数组元素是单词(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\u size]
,并在地图上标记这些位置:

为了看他是否吃水果,你应该用map[head.x,head.y]==2检查头部位置,或者用-1检查芬奇的头部位置

看他是否割伤。你们应该把整个身体打圈,看看头部是否和身体相撞

并进入堆栈

  • 它是具有Filo行为的数组
  • 您需要存储索引
  • 向该mem[index]添加值,并在按下
    时增加索引;mem[index]=value;++index;
  • 当弹出减少索引并返回mem[index]
    时;--index;返回mem[index]

。创建蛇数组。并移动它们。添加头部
蛇[0](头部的x;y)
,然后清除
蛇[snake\u size]
,这是尾部。 如果是地图,你可以在地图[x,y]区域标记蛇身,并绘制整个地图循环,使用地图值投掷它 伪代码:

map[x,y]=1 //snake body 
map[x,y]=0 //nothing 
map[x,y]=2 //fruit
map[x,y]=-1 //fench
下面是移动snake的简单代码:(向右移动snake数组):

(注意:我们的snake数组元素是单词(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\u size]
,并在地图上标记这些位置:

为了看他是否吃水果,你应该用map[head.x,head.y]==2检查头部位置,或者用-1检查芬奇的头部位置

看他是否割伤。你们应该把整个身体打圈,看看头部是否和身体相撞

并进入堆栈

  • 它是具有Filo行为的数组
  • 您需要存储索引
  • 向该mem[index]添加值,并在按下
    时增加索引;mem[index]=value;++index;
  • 当弹出减少索引并返回mem[index]
    时;--index;返回mem[index]

除非您是多线程,否则只能有一个调用堆栈。其余必须是用户堆栈(即,手动管理)。算法不是太难。你能解释一下为什么需要一个堆栈来检查蛇是否与自身相交吗?如果你将比赛场地表示为一个2D数组,你可以通过检查蛇的一个片段是否会在另一个片段已经位于的同一个单元格中很容易地检测出来。@TJR检查我的答案。看看它是否是他lpfull除非您是多线程,否则只能有一个调用堆栈。其余必须是用户堆栈(即,手动管理)。算法不是太难。你能解释一下为什么需要一个堆栈来检查蛇是否与自身相交吗?如果你将比赛场地表示为一个2D数组,你可以通过检查蛇的一个片段是否会在另一个片段已经位于的同一个单元格中很容易地检测出来。@TJR检查我的答案。看看它是否是他lpfull如果你的意思是对蛇做一个数组-你将如何改变它的大小。如果不是,你如何知道是尾巴(删除尾巴后,你需要在地图上找到它的新位置)。顺便说一下,地图是一个数组?@TJR对于蛇,我们得到了蛇的最大长度的蛇数组。认为这个长度永远不会超过(mapx*mapy)/2.我们得到了保存当前蛇大小的s_大小。如果我们增加s_大小,那么蛇的大小将改变。因为我们清除了蛇[s_大小]这是尾巴。地图是二维数组。我们使用地图来检查和显示。也检查我的答案。我改进了格式,让事情变得更清楚。如果你的意思是对蛇做数组,你将如何改变它的大小。如果不是,你怎么知道是尾巴(删除尾巴后,你需要在地图上找到它的新位置)。顺便说一下,地图是一个数组?@TJR对于snake,我们得到了snake_数组,容量为snake的最大长度。认为这个长度永远不会超过(mapx*mapy)/2.我们得到了保存当前蛇大小的s_大小。如果我们增加s_大小,那么蛇的大小将改变。因为我们清除了蛇[s_大小],它是尾巴。地图是二维数组。我们使用地图进行检查和显示。同时检查我的答案。我改进了格式,使事情更加清楚