home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l217 / 2.ddi / EXAMPLES / CH14EX05.PRO < prev    next >
Encoding:
Prolog Source  |  1990-03-26  |  1.7 KB  |  63 lines

  1. /*
  2.    Copyright (c) 1986, 90 by Prolog Development Center
  3. */
  4.    
  5. domains
  6.    monsters = integer*
  7.  
  8. predicates
  9.    delay(integer)
  10.    zapGun(integer, integer)
  11.    delete(integer, monsters, monsters)
  12.    testresult(monsters, integer)
  13.    test(char, integer, integer)
  14.    do_it(integer, monsters, integer)
  15.    showThem(monsters, integer, char)
  16.  
  17. goal
  18.    makewindow(1, 7, 0, "", 0, 0, 25, 80),
  19.    do_it(56, [42, 45, 50, 55, 56, 59], 0).
  20.  
  21. clauses
  22.    do_it(Initial, Monsters, Row) :-
  23.       testresult(Monsters, Row),
  24.       showThem(Monsters, Row, '\1'),
  25.       readchar(Ch),
  26.       test(Ch, Initial, Final),
  27.       zapGun(24, Final),
  28.       delete(Final, Monsters, LiveMonsters),
  29.       NewRow = Row+1,
  30.       cursor(24, Final),
  31.       showThem(Monsters, Row, ' '),
  32.       do_it(Final, LiveMonsters, NewRow).
  33.    testresult([], _) :- !,
  34.       write("\nWell done, Champion Zapper!"),
  35.       delay(32000), exit.
  36.    testresult(_, Row) :- Row<24, !.
  37.    testresult(_, _) :-
  38.       write("\nToo late, YOU have been zapped !"),
  39.       delay(32000), exit.
  40.  
  41.    showThem([], _, _) :- !.
  42.    showThem([Monster|TheRest], Row, Char) :-
  43.       scr_char(Row, Monster, Char),
  44.       showThem(TheRest, Row, Char).
  45.    zapGun(N, C) :-
  46.       N>0, !, scr_char(N, C, '^'), delay(150),
  47.       scr_char(N, C, ' '), N1 = N-1, zapGun(N1, C).
  48.    zapGun(_, _).
  49.  
  50.    test('z', 0, 0) :- !.
  51.    test('x', 79, 79) :- !.
  52.    test('z', OldCol, NewCol) :- !, NewCol = OldCol-1.
  53.    test('x', OldCol, NewCol) :- !, NewCol = OldCol+1.
  54.    test(_, C, C).
  55.  
  56.    delete(_, [], []).
  57.    delete(X, [X|R], R) :- !.
  58.    delete(X, [Y|R], [Y|R2]) :- !, delete(X, R, R2).
  59.  
  60.    delay(N) :- N>0, !, N1 = N-1, delay(N1).
  61.    delay(0).
  62.  
  63.