1

我正在使用 Prolog 编程,但我完全迷失了……我不断将编程语言混为一谈,即使它们完全不同……我正在制作一款名为 Meta-Forms 的游戏,作为我必须完成的任务根据我得到的一些线索,将不同类型的棋子放在一个 3x3 的棋盘上。例如,要将黄色矩形放在板“Board”的左上角,我将使用以下代码: place(piece(rectangle, yellow), top, left, Board) 根据第二个和第三个参数,我已根据位置将其放入列表B中。[(上,左),(上,中),(上,右),(中,左),(中,中),(中,左),(下,左),(下,中),(底部,右)]。但不是我需要的位置是“一块(矩形,黄色)”你能帮我制作“

put_piece(X, [X,_,_,_,_,_,_,_,_]) :- line_of(place(_,top,_,_), top), column_of(place(_,_,left,_), !.
put_piece(X, [_,X,_,_,_,_,_,_,_]) :- line_of(place(_,top,_,_), top), column_of(place(_,_,middle,_), middle), !.
put_piece(X, [_,_,X,_,_,_,_,_,_]) :- line_of(place(_,top,_,_), top), column_of(place(_,_,right,_), right), !.
put_piece(X, [_,_,_,X,_,_,_,_,_]) :- line_of(place(_,center,_,_), center), column_of(place(_,_,left,_), left), !.
put_piece(X, [_,_,_,_,X,_,_,_,_]) :- line_of(place(_,center,_,_), center), column_of(place(_,_,middle,_), middle), !.
put_piece(X, [_,_,_,_,_,X,_,_,_]) :- line_of(place(_,center,_,_), center), column_of(place(_,_,right,_), right), !.
put_piece(X, [_,_,_,_,_,_,X,_,_]) :- line_of(place(_,bottom,_,_), bottom), column_of(place(_,_,left,_), left), !.
put_piece(X, [_,_,_,_,_,_,_,X,_]) :- line_of(place(_,bottom,_,_), bottom), column_of(place(_,_,middle,_), middle), !.
put_piece(X, [_,_,_,_,_,_,_,_,X]) :- line_of(place(_,bottom,_,_), bottom), column_of(place(_,_,right,_), right), !.

line_of(place(_,Line,_,_), Line).
column_of(place(_,_,Column,_), Column).
cor_de(defPiece(_,Color), Color).
forma_de(defPiece(Form,_), Form).

place(P, L, Col, Tab) :-
    put_piece(P, Tab),
    line_of(place(_,L,_,_), L),
    column_of(place(_,_,Col,_), Col),
    color_of(Piece, cor),
    form_of(P, forma).

另外,我有点需要你的帮助来制作一对。一块应该是包含表格和颜色的一对,例如位置应该是一对列和一条线。

例子:

challenge(1, Board) :- 
    place(piece(square, blue), bottom, left, Board),
    place(piece(square, yellow), top, left, Board),
    place(piece(circle, blue), center, right, Board),
    place(piece(circle, red), top, middle, Board),
    place(piece(square, red), bottom, right, Board),
    place(piece(triangle, blue), top, right, Board),
    place(piece(circle, yellow), bottom, middle, Board),
    place(piece(triangle, red), center, left, Board),
    place(piece(triangle, yellow), center, middle, Board).

应该打印这个:

[片(方形,黄色),片(圆形,红色),片(三角形,蓝色),片(三角形,红色),片(三角形,黄色),片(圆形,蓝色),片(正方形,蓝色),片(圆形,黄色),片(方形,红色)]

4

1 回答 1

1

尝试重新定义put_piece;例如,将一块放在左上角是:

put_piece(X, [X,_,_,_,_,_,_,_,_], top, left).

然后相应地简化place

place(P,L,C,T) :-
    put_piece( P, T, L, C ).

我不知道你在用 form/forma 做什么。

于 2012-05-16T22:34:14.793 回答