hilo.mod 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. (* $Source$
  2. * $State$
  3. * $Revision$
  4. *)
  5. MODULE HiLo;
  6. FROM InOut IMPORT WriteInt, WriteLn, WriteString, ReadString, ReadInt;
  7. FROM random IMPORT Uniform;
  8. FROM Streams IMPORT FlushStream, OutputStream, StreamResult;
  9. VAR
  10. buffer : ARRAY [0..32] OF CHAR;
  11. PROCEDURE flush;
  12. VAR
  13. strus : StreamResult;
  14. BEGIN
  15. FlushStream(OutputStream, strus);
  16. END flush;
  17. PROCEDURE reads;
  18. BEGIN
  19. WriteString("> ");
  20. flush;
  21. ReadString(buffer);
  22. END reads;
  23. PROCEDURE game;
  24. VAR
  25. Number : INTEGER;
  26. Attempts : INTEGER;
  27. guess : INTEGER;
  28. finished : BOOLEAN;
  29. BEGIN
  30. WriteString("See if you can guess my number.");
  31. WriteLn;
  32. Number := Uniform(0, 99);
  33. Attempts := 1;
  34. finished := FALSE;
  35. WHILE NOT finished DO
  36. WriteString("> ");
  37. flush;
  38. ReadInt(guess);
  39. IF guess = Number THEN
  40. WriteLn;
  41. WriteString("You got it right in only ");
  42. WriteInt(Attempts, 0);
  43. WriteString(" ");
  44. IF Attempts = 1 THEN
  45. WriteString("go");
  46. ELSE
  47. WriteString("goes");
  48. END;
  49. WriteString("!");
  50. WriteLn;
  51. finished := TRUE;
  52. ELSIF guess < Number THEN
  53. WriteLn;
  54. WriteString("Try a bit higher.");
  55. WriteLn;
  56. ELSIF guess > Number THEN
  57. WriteLn;
  58. WriteString("Try a bit lower.");
  59. WriteLn;
  60. END;
  61. Attempts := Attempts + 1;
  62. END;
  63. END game;
  64. VAR
  65. finished : BOOLEAN;
  66. BEGIN
  67. WriteLn;
  68. WriteString("Hi there! I'm written in Modula-2. Before we start, what is your name?");
  69. WriteLn;
  70. reads;
  71. WriteLn;
  72. WriteString("Hello, ");
  73. WriteString(buffer);
  74. WriteString("! ");
  75. finished := FALSE;
  76. WHILE NOT finished DO
  77. game;
  78. WriteLn;
  79. WriteString("Would you like another go?");
  80. WriteLn;
  81. reads;
  82. IF (buffer[0] = 'n') OR (buffer[0] = 'N') THEN
  83. finished := TRUE;
  84. WriteLn;
  85. WriteString("Thanks for playing --- goodbye!");
  86. WriteLn;
  87. ELSE
  88. WriteLn;
  89. WriteString("Excellent! ");
  90. END;
  91. END;
  92. END HiLo.