(*********************************************************************
 *
 *  :Program.	HilfsModul für SCHIFFCHENVERSENKEN
 *  :Author.	Hans Schafft
 *  :Address.	Landfriedstraße 1A - Hinterhaus
 *  :Address.	6900 Heidelberg
 *  :Phone.	06221 - 22416
 *  :Version.	1.0
 *  :Date.	1990
 *  :Copyright.	PD
 *  :Language.	Modula-II
 *  :Translator.M2Amiga
 *  :Contents.
 *
 *********************************************************************)
IMPLEMENTATION MODULE WASSER;
(*R-*)(*V-*)(*S-*)(*F-*)
FROM Intuition	IMPORT	WindowPtr;
FROM Graphics	IMPORT	RectFill,SetAPen;

CONST	wasser = 6;
	nochNichts = 0;
	schonGetippt = 10;
	yOffset = 70;

(***************************************************************)
PROCEDURE WasserHerum(arPtr : arrayPtr; seite,KaroZahl,boot,farbe : INTEGER);
VAR x,y : INTEGER;
BEGIN
  FOR x := 1 TO KaroZahl DO
    FOR y := 1 TO KaroZahl DO
      IF arPtr^[seite,x,y] = boot THEN
        IF (x < KaroZahl) AND (y < KaroZahl) THEN
          IF arPtr^[seite,x+1,y+1] # boot THEN
            arPtr^[seite,x+1,y+1]  := farbe;
          END;
        END;
        IF (x > 1) AND (y > 1) THEN
          IF arPtr^[seite,x-1,y-1] # boot THEN
            arPtr^[seite,x-1,y-1]  := farbe;
          END;
        END;
        IF (x > 1) AND (y < KaroZahl) THEN
          IF arPtr^[seite,x-1,y+1] # boot THEN
            arPtr^[seite,x-1,y+1]  := farbe;
          END;
        END;
        IF (x < KaroZahl) AND (y > 1) THEN
          IF arPtr^[seite,x+1,y-1] # boot THEN
            arPtr^[seite,x+1,y-1]  := farbe;
          END;
        END;
        IF x < KaroZahl THEN
          IF arPtr^[seite,x+1,y] # boot THEN
            arPtr^[seite,x+1,y]  := farbe;
          END;
        END;
        IF x > 1 THEN
          IF arPtr^[seite,x-1,y] # boot THEN
            arPtr^[seite,x-1,y]  := farbe;
          END;
        END;
        IF y < KaroZahl THEN
          IF arPtr^[seite,x,y+1] # boot THEN
            arPtr^[seite,x,y+1]  := farbe;
          END;
        END;
        IF y > 1 THEN
          IF arPtr^[seite,x,y-1] # boot THEN
            arPtr^[seite,x,y-1]  := farbe;
          END;
        ELSE
        END;
      END;
    END;
  END;
END WasserHerum;

(***************************************************************)
PROCEDURE WasserHerumWeg(arPtr : arrayPtr; seite,KaroZahl,boot : INTEGER);
VAR x,y : INTEGER;
BEGIN
  FOR x := 1 TO KaroZahl DO
    FOR y := 1 TO KaroZahl DO
      IF arPtr^[seite,x,y] = boot THEN
        IF (x < KaroZahl) AND (y < KaroZahl) THEN
          IF (arPtr^[seite,x+1,y+1] = wasser) OR
           (arPtr^[seite,x+1,y+1] = wasser+schonGetippt) THEN
            arPtr^[seite,x+1,y+1]  := nochNichts;
          END;
        END;
        IF (x > 1) AND (y > 1) THEN
          IF (arPtr^[seite,x-1,y-1] = wasser) OR
           (arPtr^[seite,x-1,y-1] = wasser+schonGetippt) THEN
            arPtr^[seite,x-1,y-1]  := nochNichts;
          END;
        END;
        IF (x > 1) AND (y < KaroZahl) THEN
          IF (arPtr^[seite,x-1,y+1] = wasser) OR
           (arPtr^[seite,x-1,y+1] = wasser+schonGetippt) THEN
            arPtr^[seite,x-1,y+1]  := nochNichts;
          END;
        END;
        IF (x < KaroZahl) AND (y > 1) THEN
          IF (arPtr^[seite,x+1,y-1] = wasser) OR
           (arPtr^[seite,x+1,y-1] = wasser+schonGetippt) THEN
            arPtr^[seite,x+1,y-1]  := nochNichts;
          END;
        END;
        IF x < KaroZahl THEN
          IF (arPtr^[seite,x+1,y] = wasser) OR
           (arPtr^[seite,x+1,y] = wasser+schonGetippt) THEN
            arPtr^[seite,x+1,y]  := nochNichts;
          END;
        END;
        IF x > 1 THEN
          IF (arPtr^[seite,x-1,y] = wasser) OR
           (arPtr^[seite,x-1,y] = wasser+schonGetippt) THEN
            arPtr^[seite,x-1,y]  := nochNichts;
          END;
        END;
        IF y < KaroZahl THEN
          IF (arPtr^[seite,x,y+1] = wasser) OR
           (arPtr^[seite,x,y+1] = wasser+schonGetippt) THEN
            arPtr^[seite,x,y+1]  := nochNichts;
          END;
        END;
        IF y > 1 THEN
          IF (arPtr^[seite,x,y-1] = wasser) OR
           (arPtr^[seite,x,y-1] = wasser+schonGetippt) THEN
            arPtr^[seite,x,y-1]  := nochNichts;
          END;
        END;
      END;
    END;
  END;
END WasserHerumWeg;

(***************************************************************)
PROCEDURE EinKaestchenMarkieren(wPtr : WindowPtr; arPtr : arrayPtr;
				seite,KaroZahl,Boot,x,y : INTEGER);
VAR x1,x2,y1,y2,gadBreite,xOffset : INTEGER;
BEGIN
  gadBreite := (310 DIV KaroZahl) - 1;
  xOffset := seite * 320;
  SetAPen(wPtr^.rPort,Boot);
  x1 := (x - 1) * (gadBreite + 1) + xOffset + 1;
  x2 := (x - 1) * (gadBreite + 1) + xOffset + gadBreite;
  y1 := (y - 1) * (gadBreite + 1) + yOffset + 1;
  y2 := (y - 1) * (gadBreite + 1) + yOffset + gadBreite;
(*  RectFill(wPtr^.rPort,xOffset,0,xOffset+gadBreite,gadBreite);*)
  RectFill(wPtr^.rPort,x1,y1,x2,y2);
END EinKaestchenMarkieren;

(***************************************************************)
PROCEDURE AlleKaestchenMarkieren(wPtr : WindowPtr;  arPtr : arrayPtr;
				seite,KaroZahl : INTEGER);
VAR x,y,gadBreite,xOffset : INTEGER;
BEGIN
  xOffset := seite * 320;
  gadBreite := (310 DIV KaroZahl)-1;
  FOR x := 1 TO KaroZahl DO
    FOR y := 1 TO KaroZahl DO
      EinKaestchenMarkieren(wPtr,arPtr,seite,KaroZahl,arPtr^[seite,x,y],x,y);
    END;
  END;
END AlleKaestchenMarkieren;

(***************************************************************)
PROCEDURE EinfaerbenUndWasserHerum(wPtr : WindowPtr; arPtr : arrayPtr;
				seite,KaroZahl,typ : INTEGER);
VAR x,y : INTEGER;
BEGIN
  FOR x := 1 TO 12 DO
    FOR y := 1 TO 12 DO
      IF arPtr^[seite,x,y] = typ THEN
        EinKaestchenMarkieren(wPtr,arPtr,seite,KaroZahl,seite*(typ-10),x,y);
      END;
    END;
  END;
  WasserHerum(arPtr,seite,KaroZahl,typ,wasser+schonGetippt);
  FOR x := 1 TO 12 DO
    FOR y := 1 TO 12 DO
      IF arPtr^[seite,x,y] = wasser+schonGetippt THEN
        EinKaestchenMarkieren(wPtr,arPtr,seite,KaroZahl,seite*wasser,x,y);
      END;
    END;
  END;
END EinfaerbenUndWasserHerum;

BEGIN
END WASSER.
