gforth细胞:如何检查至少有一个免费的



我得到了一个使用这种类型的数组设置的代码:

create grid 16 cells allot
: init-grid grid 16 cells 0 fill ;

如何在应用程序运行时检查它。当应用程序运行时,单元格可以添加(如果使用键盘输入相邻(或不在X/Y上(我目前不使用对角线(

但一个单元格必须是自由的才能添加新值,每个循环都可以计算数组,无论当前是否释放一个单元格,所以在某些情况下,我会在输入错误时获得无限循环。

所以我必须按顺序检查:

are all cell used ? no => check next loop of operation & input
are all cell used ? yes => force operation if possible & next loop else end input save square etc...

我如何检查下一个操作是否正常,并将释放一个单元格?

最后我设法使用了一种更好的方法;而不是将其作为矢量(垂直和距离(读取,直到我找到第一个自由细胞(至少一个(

我使用并索引了所有单元格作为X/Y数组,因此现在我可以使用:生成器:

 in Forth, you do many things on your own. This word is used to define 2D arrays
: 2D-ARRAY ( height width )
CREATE DUP ,
* CELLS ALLOT
DOES> ( y x baseaddress )
ROT    ( x baseaddress y )
OVER @ ( x baseaddress y width )
*      ( x baseaddress y*width )
ROT    ( baseaddress y*width x )
+ 1+ CELLS +
;

然后

: findfreecell ( index -- addr )
0 0 tab SWAP ( curr-addr index )
0 0 tab @ 0<> IF 
1+ 
THEN
0 ?DO ( find the next free space index times )
BEGIN
CELL+ DUP @ 0=
UNTIL
LOOP
;

通过这种方式,我确信有空闲的单元格用于下一次操作&我可以调用操作程序。

相关内容

  • 没有找到相关文章

最新更新