Advertisement
Guest User

Prolog lab - game playing part

a guest
Jan 21st, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.32 KB | None | 0 0
  1. % temporary knowledge base
  2. w('cat').
  3. w('dog').
  4. w('monkey').
  5. w('frog').
  6. w('reindeer').
  7.  
  8. replace(Word, Asterisks, Char, OutputAsteriks) :-
  9.     replace(Word, Asterisks, Char, OutputAsteriks, []).
  10.  
  11. replace([], [], _, TempOutputAsterisks, TempOutputAsterisks).
  12.  
  13. replace([WordHead | WordTail], [_ | AsterisksTail], Char, OutputAsteriks, TempOutputAsterisks) :-
  14.     WordHead = Char,
  15.     append(TempOutputAsterisks, [Char], TempOutputAsterisks1),  
  16.     replace(WordTail, AsterisksTail, Char, OutputAsteriks, TempOutputAsterisks1), !.
  17.  
  18. replace([_ | WordTail], [AsterisksHead | AsterisksTail], Char, OutputAsteriks, TempOutputAsterisks) :-
  19.     append(TempOutputAsterisks, [AsterisksHead], TempOutputAsterisks1),  
  20.     replace(WordTail, AsterisksTail, Char, OutputAsteriks, TempOutputAsterisks1).
  21.  
  22.  
  23. create_asterisks(0, []).
  24. create_asterisks(Length, List) :-
  25.     Length1 is Length - 1,
  26.     create_asterisks(Length1, List1),
  27.     append(['*'], List1, List).
  28.    
  29.  
  30. compare_words(Chars, Asterisks) :-
  31.     atomics_to_string(Chars, WordString),
  32.     atomics_to_string(Asterisks, AsterisksString),
  33.     WordString = AsterisksString.
  34.    
  35. get_word(Chars, Asterisks) :-
  36.     bagof(X, w(X), Words),
  37.     length(Words, Length),
  38.     random(0, Length, RandVal),
  39.     nth0(RandVal, Words, Word),
  40.     atom_chars(Word, Chars),
  41.     length(Chars, WordLength),
  42.     create_asterisks(WordLength, Asterisks).
  43.      
  44. play :-
  45.     get_word(WordChars, AsterisksChars),
  46.     atomics_to_string(AsterisksChars, AsterisksString), write('\nPlease guess the word: \t'), write(AsterisksString),
  47.     main_loop(WordChars, AsterisksChars, 0).
  48.  
  49. % base case (words match)
  50. main_loop(WordChars, AsterisksChars, GuessesCount) :-
  51.     % if it is the same
  52.     compare_words(WordChars, AsterisksChars),
  53.     write('\nCongratulations! It only took you '), write(GuessesCount), write(' guesses.'), !.
  54.  
  55. main_loop(WordChars, AsterisksChars, GuessesCount) :-
  56.     write('\nPlease guess a letter:\t'), get_single_char(AsciiCode), atom_char(Char, AsciiCode), write(Char),
  57.     GuessesCount1 is GuessesCount + 1,
  58.     replace(WordChars, AsterisksChars, Char, OutputAsteriksChars),
  59.     atomics_to_string(OutputAsteriksChars, OutputAsterisksString), write('\nYour soultion: \t\t'), write(OutputAsterisksString),
  60.     main_loop(WordChars, OutputAsteriksChars, GuessesCount1).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement