; COWS AND BULLS
; VERSION 0.02
; PROGRAMMED BY STARWINDZ


INCLUDE "H:RUNTIME.ACT"

;=========================================
MODULE
BYTE ARRAY TARGET_NUMBER(3)
BYTE ARRAY USER_NUMBER(10)
BYTE COWS, BULLS

        
;=========================================
PROC SHOW_NUMBER(BYTE ARRAY A)
BYTE I

FOR I = 0 TO 2
DO
  PRINTB(A(I))
  PRINT("")
OD
PRINTE("")

RETURN


;=========================================
PROC MAKE_TARGET()
BYTE I

TARGET_NUMBER(0) = RAND(10)

DO
  TARGET_NUMBER(1) = RAND(10)
  IF (TARGET_NUMBER(1) <> TARGET_NUMBER(0)) THEN
    EXIT
  FI
OD

DO
  TARGET_NUMBER(2) = RAND(10)
  IF (TARGET_NUMBER(2) <> TARGET_NUMBER(0)) THEN
    IF (TARGET_NUMBER(2) <> TARGET_NUMBER(1)) THEN
      EXIT
    FI
  FI
OD

RETURN


;=========================================
PROC CHECK_NUMBER()
BYTE I, J
BYTE C, B   ; C: COWS, B: BULLS

C = 0
B = 0

FOR I = 0 TO 2
DO
  IF TARGET_NUMBER(I) = USER_NUMBER(I) THEN
    C = C + 1
  FI
OD

FOR I = 0 TO 2
DO
  FOR J = 0 TO 2
  DO
    IF I <> J THEN
      IF TARGET_NUMBER(I) = USER_NUMBER(J) THEN
        B = B + 1
      FI      
    FI
  OD
OD

COWS = C
BULLS = B

PRINTF("COWS AND BULLS: %DC, %DB", COWS, BULLS)
PRINTE("")

RETURN


;=========================================
PROC MAIN()         
BYTE I, J
BYTE ARRAY S(10)
INT YN
      
PRINTE("== COWS AND BULLS (V0.02) ==")
PRINTE("PROGRAMMED BY STARWINDZ");
PRINTE("")

PRINT("PRESS ANY KEY TO CONTINUE");
INPUTS(S)

DO
  MAKE_TARGET()
  
  PRINTE("")
  PRINTE("TARGET NUMBER HAS BEEN GENERATED.")
  ;SHOW_NUMBER(TARGET_NUMBER)

  I = 0
  DO
    I = I + 1
    IF I > 9 THEN
      PRINTE("MAXIMUM TRIAL COUNT EXCEEDED.")
      PRINT("TARGET NUMBER IS ")
      SHOW_NUMBER(TARGET_NUMBER)
      EXIT
    FI    

    PRINTF("%D: ENTER THREE DIGIT NUMBERS => ", I)
    INPUTS(S)
    FOR J = 0 TO 2
    DO
      USER_NUMBER(J) = S(J + 1) - 48    
    OD
  
    CHECK_NUMBER()
    IF COWS = 3 THEN
      PRINTE("SUCCESS!")
      PRINTE("")
      EXIT  
    FI    
  OD

  PRINT("PLAY AGAIN? (1:YES, 2:NO) ")
  YN = INPUTI()
  
  IF YN = 2 THEN
    EXIT
  FI
  
OD

DO
OD

RETURN
