home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l210 / 1.ddi / EXAMPLES.ARC / CH14EX05.PRO < prev    next >
Encoding:
Prolog Source  |  1988-06-21  |  1.7 KB  |  66 lines

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