Prolog BattleShips轰炸游戏

时间:2015-11-28 18:43:55

标签: prolog

所以我正在编写一个战舰游戏。游戏有5x5的棋盘,船的位置与真实游戏的逻辑相似,这意味着它们不能并排并相互接触。

所以我遇到了这些问题。

  1. 如何让代码识别哪些棋盘(cordinates)已被拍摄?
  2. 我如何以编程方式识别船只整体以及如何利用这些知识识别船舶何时沉没。
  3. 目前,提示循环将在首次击中后结束,但目标是在所有船只沉没时结束循环。

    编辑:Board包含2个值0和1,0个为空Tile,1表示它有一个船舶部件。

    board([[0, 0, 0, 0, 0],
           [1, 1, 0, 0, 0],
           [0, 0, 0, 0, 0],
           [1, 1, 1, 1, 0],
           [0, 0, 0, 0, 0]]).
    
    row_at(X, Row) :-
      board(Board),
      nth0(X, Board, Row).
    
    column_at(Y, Row, Cell) :-
      nth0(Y, Row, Cell).
    
    ship_at(X, Y) :-
      row_at(X, Row),
      column_at(Y, Row, Cell),
      Cell = 1.
    
    hit:-
        write('hit!'), nl.
    
    miss :-
        write('miss!'), nl.
    
    target(X, Y, State) :-
      (ship_at(X, Y) ->
        hit, asserta(X,Y);
        miss).
    
    prompt_number(Prompt, Number) :-
      write(Prompt),
      write(': '),
      read(Number).
    
    :- initialization(main).
    main :-
      repeat,
      prompt_number('enter column number', Col),
      prompt_number('enter row number', Row),
      target(Row, Col, State),
      (ship_at(Row, Col) ->
        write('you won!'), nl, halt ;
        write('keep trying!'), nl, fail).
    

0 个答案:

没有答案