gpt4 book ai didi

arrays - 序幕,骑士攻击

转载 作者:行者123 更新时间:2023-12-03 20:22:09 25 4
gpt4 key购买 nike

我有一个一维数组,这意味着国际象棋 table 。我想找到骑士可以攻击的所有位置。
例如,有一个 3x3 的棋盘(K 是骑士,X 是攻击位置):

---------------
| X | | |
---------------
| | | K |
---------------
| X | | |
---------------

对于这个表,在序言程序中,我想要数组:
-------------------------------------
| X | | | | | K | X | | |
-------------------------------------

我想为所有情况编写通用程序 - 3x3 表、4x4、5x5 等。

我试过:
control(Table, N, Pos, NewTable) :- insert(Table, Pos, 'k' , TempTable1, 1),
insert(TempTable1, Pos-N*2+1, 'x' , TempTable2, 1),
insert(TempTable2, Pos-N*2-1, 'x' , TempTable3, 1),
insert(TempTable3, Pos-N +2, 'x' , TempTable4, 1),
insert(TempTable4, Pos-N -2, 'x' , TempTable5, 1),
insert(TempTable5, Pos+N*2+1, 'x' , TempTable6, 1),
insert(TempTable6, Pos+N*2-1, 'x' , TempTable7, 1),
insert(TempTable7, Pos+N +2, 'x' , TempTable8, 1),
insert(TempTable8, Pos+N -2, 'x' , NewTable, 1).

有 N - 是 table 大小(3),Pos - 骑士位置。
“插入”没问题,但“控制”不能正常工作:
?- control([0,0,0,0,0,0,0,0,0], 3, 6, R).
R = [x, 0, 0, 0, x, k, x, 0, 0].

应该是 R = [x, 0, 0, 0, 0, k, x, 0, 0] .

任何想法,如何改变“控制”谓词?

最佳答案

移除插入物直到流氓 x 消失。这应该告诉你问题出在哪里。

编辑:啊哈!我以前应该想到的。当骑士通过棋盘的左侧或右侧边缘时,您不会剪裁他们的移动,因此骑士向上移动到最高等级,然后向右移动两个,然后环绕到中间等级并将骑士紧挨着它起始位置。 insert只能裁剪顶部和底部,因为它只能看到一个数组;它不知道板子有多宽。

关于arrays - 序幕,骑士攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com