Posted By

ozkriff on 10/07/09


Tagged


Versions (?)

kris


 / Published in: Pascal
 

  1. {
  2. Программа для игры "Поле Чудес".
  3. Машина задумывает слово; Человек называет буквы;
  4. если введенная буква есть в задуманном слове, то она "открывается".
  5. При этом идет подсчет очков. По ходу игры машина выводит подсказки,
  6. касающиеся значения заданного слова.
  7. Работа идет в интерактивном режиме,
  8. по желанию пользователя протокол работы может записываться на диск.
  9.  
  10. а) задумываются слова из словаря, хранящегося в текстовом файле;
  11. формат следующий:
  12. слово на отдельной строке начинается с 1й позиции;
  13. затем, начиная со следующей строки со 2й позиции
  14. обьяснение значения этого слова,
  15. которое выводится на экран перед началом игры;
  16. перед каждым ходом человека, задается случайное число от 1 до 5;
  17. если буква угадывается правильно, то это число очков добавляется,
  18. иначе - отнимается.
  19. }
  20.  
  21. program guess_word; {Название программы}
  22.  
  23. uses crt; {подключение модуля псевдографики}
  24.  
  25. var {секция обьявления переменных}
  26. answer : string; {загаданное слово}
  27. description : string; {описание слова}
  28. display : string; {отображаемая пользователю информация}
  29. input_file : text; {указатель на входной файл}
  30. ii : integer; {счетчик}
  31. protocol : text; {файл для хранений лога}
  32. is_protocol : boolean; {ведется протокол?}
  33. buffer : char; {буффер ввода}
  34. score : integer; {счет игры}
  35. had_guessed : boolean; {угадал что либо за ход?}
  36.  
  37.  
  38.  
  39. {процедура проверяет включена ли запись в протокол и, если включена,
  40. записывает передаваемую строку "s" в файл "protocol"}
  41. procedure proto (s :string);
  42. begin
  43. if is_protocol = true then
  44. writeln(protocol, s);
  45. end;
  46.  
  47.  
  48.  
  49. begin {тело программы}
  50. randomize; {инициализация рандома}
  51.  
  52. {вести или нет протокол?}
  53. is_protocol := false; {инициализация перменной}
  54. write('enable protocol? [y/n] : ');
  55. if readKey = 'y' then {если пользователь сказал 'y'}
  56. begin
  57. is_protocol := true; {переключить флаг}
  58. assign(protocol, 'protocol.txt'); {прикрепить файл}
  59. rewrite(protocol ); {"перемотать" файл на начало}
  60. proto('game started'); {занести 1ую запись в лог}
  61. end;
  62.  
  63. writeln; {перевести строку}
  64.  
  65. ii := 0; {начальное значение}
  66. assign(input_file, 'dict.txt'); {прикрепить файл}
  67. reset(input_file); {перемотать файл на начало}
  68. while not EOF(input_file) do {до конца файла}
  69. begin
  70. readln(input_file); {считывать из него по одной строке}
  71. ii := ii + 1; {запоминая их количество}
  72. end;
  73.  
  74. {прочитать вопрос и ответ наугад из файла}
  75. reset(input_file);
  76. for ii := 0 to random(Round(ii/2)) do
  77. begin
  78. readln(input_file, answer);
  79. readln(input_file, description);
  80. end;
  81.  
  82. delete(answer, 1, 1); {удаление 1ого пробела}
  83. delete(description, 1, 2); {удаление 2х пробелов}
  84. proto('answer is: ' + answer); {запись в протокол}
  85. proto('descr: ' + description); {запись в протокол}
  86.  
  87. writeln(description); {вывод подсказки}
  88. {заполнение звездочками отображаемой пользователю инфы}
  89. display := '';
  90. for ii := 1 to length(answer) do
  91. display := display + '*';
  92.  
  93. score := 0; {обнуление счета}
  94. writeln('Enter [Spacebar][Enter] to quit'); {подсказка}
  95. while true do {бесконечный цикл}
  96. begin
  97. write('>'); {вывод "приглашения"}
  98. readln(buffer); {прочитать символ}
  99. proto('user entered ' + buffer); {запись в протокол}
  100.  
  101. {если пользователь ввел пробел - выйти}
  102. if buffer = ' ' then
  103. begin
  104. proto('QUIT');
  105. break; {обрыв главного цикла}
  106. end;
  107.  
  108. had_guessed := false; {сброс флага}
  109. for ii := 1 to length(answer) do {для каждого символа в answer}
  110. if (answer[ii] = buffer) and {если символ совпадает с вводом пользователя}
  111. (answer[ii] <> display[ii]) then {и еще не открыт}
  112. begin
  113. score := score + random(4)+1; {увеличить счет на число от 1 до 5ти}
  114. display[ii] := answer[ii]; {открыть букву}
  115. had_guessed := true; {установка флага}
  116. proto('right!'); {запись в протокол}
  117. end;
  118.  
  119. if had_guessed = false then {если не угадано ни одной буквы}
  120. begin
  121. score := score - (random(4)+1); {уменьшить счет на число от 1 до 5ти}
  122. proto('wrong!'); {запись в протокол}
  123. end;
  124.  
  125. writeln(display, ' [', score, ']'); {вывод на экран инфы}
  126.  
  127. if display = answer then {если слово польностью угадано то}
  128. begin
  129. writeln('COOL! U DONE IT'); {вывод инцы пользователю}
  130. proto('User guessed word!'); {запись в протокол}
  131. break; {выход из главного цикла}
  132. end;
  133. end;
  134.  
  135. if is_protocol = true then {если велся протокол}
  136. close(protocol); {закрыть файл протокола}
  137. end. {конец}
  138.  
  139.  
  140.  
  141.  
  142. {
  143. пример работы:
  144.  
  145. C:\downloads\CURSE\a\KRIS>more dict.txt
  146.  fuck
  147.   "fuck"
  148.  shit
  149.   "shit"
  150.  tits
  151.   "tits"
  152.  linux
  153.   'linux'
  154.  
  155. C:\downloads\CURSE\a\KRIS>c
  156.  
  157. C:\downloads\CURSE\a\KRIS>..\..\b\fpc\bin\i386-win32\fpc.exe MAIN.PAS
  158. Free Pascal Compiler version 2.2.4 [2009/04/10] for i386
  159. Copyright (c) 1993-2008 by Florian Klaempfl
  160. Target OS: Win32 for i386
  161. Compiling MAIN.PAS
  162. Linking MAIN.exe
  163. 138 lines compiled, 0.3 sec , 32720 bytes code, 1704 bytes data
  164.  
  165. C:\downloads\CURSE\a\KRIS>del main.o
  166.  
  167. C:\downloads\CURSE\a\KRIS>pause
  168. Для продолжения нажмите любую клавишу . . .
  169.  
  170.  
  171. C:\downloads\CURSE\a\KRIS>MAIN.exe
  172. enable protocol? [y/n] :
  173. "shit"
  174. Enter [Spacebar][Enter] to quit
  175. >g
  176. **** [-4]
  177. >s
  178. s*** [-2]
  179. >h
  180. sh** [1]
  181. >h
  182. sh** [0]
  183. >i
  184. shi* [1]
  185. >t
  186. shit [5]
  187. COOL! U DONE IT
  188.  
  189. C:\downloads\CURSE\a\KRIS>more protocol.txt
  190. game started
  191. answer is: shit
  192. descr: "shit"
  193. user entered g
  194. wrong!
  195. user entered s
  196. right!
  197. user entered h
  198. right!
  199. user entered h
  200. wrong!
  201. user entered i
  202. right!
  203. user entered t
  204. right!
  205. User guessed word!
  206. }

Report this snippet  

You need to login to post a comment.