123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- MODULE Words;
- IMPORT Files, Random;
- CONST maxLetters = 33;
- maxWords = 1000;
- TYPE
- Word* = RECORD
- len*: INTEGER;
- L*: ARRAY maxLetters OF CHAR;
- open*: ARRAY maxLetters OF BOOLEAN
- END;
- VAR loaded*: BOOLEAN;
- error: BOOLEAN;
- words: ARRAY maxWords, maxLetters OF CHAR;
- lengths: ARRAY maxWords OF INTEGER;
- nofwords: INTEGER;
- PROCEDURE RandomWord*(VAR word: Word);
- VAR i, n: INTEGER;
- BEGIN
- n := Random.Int(nofwords);
- word.len := lengths[n];
- FOR i := 0 TO word.len - 1 DO
- word.L[i] := words[n][i];
- word.open[i] := FALSE
- END
- END RandomWord;
- (** Returns TRUE if all letters in word are open. *)
- PROCEDURE IsOpen*(VAR word: Word): BOOLEAN;
- VAR i: INTEGER;
- BEGIN i := 0;
- WHILE (i # word.len) & word.open[i] DO INC(i) END
- RETURN i = word.len END IsOpen;
- PROCEDURE ApplyLetter*(VAR word: Word; L: CHAR; VAR applied: BOOLEAN);
- VAR i: INTEGER;
- BEGIN applied := FALSE;
- FOR i := 0 TO word.len - 1 DO
- IF ~word.open[i] & (word.L[i] = L) THEN
- word.open[i] := TRUE;
- applied := TRUE
- END
- END
- END ApplyLetter;
- PROCEDURE FallbackWords;
- BEGIN
- loaded := FALSE;
- nofwords := 2;
- words[0] := 'РЫБАЛКА'; lengths[0] := 7;
- words[1] := 'ЯКУБОВИЧ'; lengths[1] := 8
- END FallbackWords;
- PROCEDURE LoadWord*(VAR r: Files.Rider);
- VAR c: CHAR;
- i: INTEGER;
- BEGIN i := 0;
- Files.ReadChar(r, c);
- WHILE ~r.eof & (c > ' ') DO
- IF (i # maxLetters) & ('А' <= c) & (c <= 'Я') THEN
- words[nofwords][i] := c;
- INC(i)
- ELSE error := TRUE
- END;
- Files.ReadChar(r, c)
- END;
- lengths[nofwords] := i;
- INC(nofwords)
- END LoadWord;
- PROCEDURE LoadWords;
- VAR F: Files.File;
- r: Files.Rider;
- BEGIN
- F := Files.Old('words.dat');
- IF F = NIL THEN FallbackWords
- ELSE Files.Set(r, F, 0);
- nofwords := 0; error := FALSE;
- WHILE ~r.eof & ~error & (nofwords # maxWords) DO LoadWord(r) END;
- loaded := ~error
- END
- END LoadWords;
- BEGIN
- LoadWords
- END Words.
|