'===========================================================================
' Subject: MEMORY GAME W/MOUSE CONTROL        Date: 01-01-97 (00:00)       
'  Author: Cheng-ning Pu                      Code: QB, QBasic, PDS        
'  Origin: pu@carib-link.net                Packet: GAMES.ABC
'===========================================================================
'
' ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
' º M E M O R Y    G A M E        -- SHAREWARE                     v1.0  º
' ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼
'
'   HEAD PROGRAM : Cheng-ning Pu
'
'   ASSISTANT PROGRAMMER : John Rodgers
'
'   MOUSE CODE : Fido QuickBasic Sub
'
'   MUSICs & GRAPHICs DESIGN : Cheng-ning Pu
'
'   BACKGROUND IDEA : Cheng-huan Pu
'
'   This program is a shareware, please share with your familly & friends
'
' 


DECLARE SUB PutBack ()
DECLARE SUB threeDbox (uRow%, uCol%, lRow%, lCol%)
DECLARE SUB drawButton (x!, y!, l$)
DEF SEG = 0
M.seg& = 256& * PEEK(207) + PEEK(206)
M.info% = 256& * PEEK(205) + PEEK(204) + 2

' see if a Mouse Driver is loaded
DEF SEG = M.seg&

score1 = 0
score2 = 0
turn = 1

IF (M.seg& OR (M.info% - 2)) AND PEEK(M.info% - 2) = 207 THEN

 COLOR 0, 7
 CLS

 SCREEN 11
 LOCATE 12, 30
 PRINT "Mouse Driver Not Found!"
 LOCATE 14, 28
 PRINT " Load the Mouse and re-try"

END IF
 CALL absolute(0, 0, 0, 0, M.info%)  'Set Default
 SCREEN 9
COLOR 8, 7
CLS

CALL absolute(1, 0, 0, 0, M.info%)
CALL absolute(4, 0, col% * 8, row% * 8, M.info%)
restart:
CLS

'=====E N D     O F      M O U S E     P A R T====================
'CARDS:

DIM SHARED card(24)
 
FOR i = 1 TO 12
card(i) = i
NEXT i
count = 1
FOR i = 13 TO 24
card(i) = count
count = count + 1
NEXT i



FOR j = 1 TO 100
  RANDOMIZE TIMER
     A = INT(RND * 24) + 1
     b = INT(RND * 24) + 1
  SWAP card(A), card(b)
NEXT j

PRINT
FOR i = 1 TO 12
PRINT card(i);
NEXT i
              PRINT
FOR i = 13 TO 24
PRINT card(i);
NEXT i



DIM SHARED mark(24) AS STRING
FOR i = 1 TO 24
mark(i) = CHR$(1)
NEXT i
count = 1
'ÉÍÍÍ»
'º A º
'ÈÍÍÍ¼
CLS
CALL PutBack

rows% = 10

                           'draws a button at x and y with a letter l$
 
DO

 CALL absolute(3, mbut%, xpos%, ypos%, M.info%)  'check on mouse
 'LOCATE 22, 2
 'PRINT " Row"; (ypos% \ 8) + 1; "  "; "Col"; (xpos% \ 8) + 1
 'LOCATE 23, 10

y = (ypos% \ 8) + 1
x = (xpos% \ 8) + 1

' LOCATE 22, 23
' PRINT " Button "; mbut%
'  LOCATE 22, 59
' PRINT "           "


IF mbut% = 1 THEN
found = 0
cardfound = 0
  SELECT CASE y
   CASE 3, 4, 5, 6, 7: cardfound = 0
   CASE 12, 13, 14, 15: cardfound = cardfound + 6
   CASE 21, 22, 23, 24: cardfound = cardfound + 12
   CASE 29, 30, 31, 32, 33: : cardfound = cardfound + 18
   CASE ELSE: PLAY "l40<CCC>": GOTO NotFound
  END SELECT
  SELECT CASE x
   CASE 10, 11, 12, 13, 14: cardfound = cardfound + 1
   CASE 20, 21, 22, 23, 24: cardfound = cardfound + 2
   CASE 30, 31, 32, 33, 34: cardfound = cardfound + 3
   CASE 40, 41, 42, 43, 44: cardfound = cardfound + 4
   CASE 50, 51, 52, 53, 54: cardfound = cardfound + 5
   CASE 60, 61, 62, 63, 64: cardfound = cardfound + 6
   CASE ELSE: PLAY "l10>CCC<": GOTO NotFound
  END SELECT
IF mark(cardfound) = "X" THEN GOTO NotFound
PLAY "l20>CC<"
IF firstcard = 0 THEN


firstcard = cardfound
'LOCATE 1, 1: PRINT "CARD NO : "; cardfound
IF mark(cardfound) = "X" THEN GOTO NotFound

mark(cardfound) = RTRIM$(LTRIM$(STR$(card(cardfound))))
count = 1
CALL PutBack

DO
   CALL absolute(3, mbut%, xpos%, ypos%, M.info%)  'check on mouse
LOOP UNTIL mbut% <> 1
PutBack

ELSE
IF firstcard = cardfound THEN GOTO NotFound
mark(cardfound) = RTRIM$(LTRIM$(STR$(card(cardfound))))
PutBack
 secondcard = cardfound
   IF card(firstcard) = card(secondcard) THEN
      PLAY "l20>CDEFGFEDC<"
         IF turn = 1 THEN score1 = score1 + 1 ELSE score2 = score2 + 1
       mark(firstcard) = "X": mark(secondcard) = "X"
     IF turn = 1 THEN turn = 2 ELSE turn = 1
   ELSE
     mark(firstcard) = CHR$(1): mark(cardfound) = CHR$(1)
   END IF

 IF turn = 1 THEN turn = 2 ELSE turn = 1

DO
   CALL absolute(3, mbut%, xpos%, ypos%, M.info%)  'check on mouse
   
   LOCATE 21, 2: PRINT "press second button to continue....."
LOOP UNTIL mbut% = 2
   LOCATE 21, 2: PRINT "                                        "
 PutBack
firstcard = 0
secondcard = 0


END IF










END IF
NotFound:
LOCATE 23, 20: PRINT "SCORE 1 : "; score1, "SCORE 2 : "; score2
LOCATE 1, 60: PRINT "       TURN :"; turn

cardfound = 0

gameover = 0
FOR i = 1 TO 24
IF mark(i) = CHR$(1) THEN
 gameover = 1
 EXIT FOR
END IF
NEXT i



LOOP UNTIL gameover = 0

IF score1 > score2 THEN
PRINT "PLAYER 1 WIN!"
ELSEIF score2 > score1 THEN
PRINT "PLAYER 2 WIN!"
ELSE
PRINT "PLAY AGAIN YOU WILL SEE WHO IS THE WINNER !"
END IF

SYSTEM

SUB PutBack
LOCATE 1, 27: PRINT "M E M O R Y      G A M E  "
count = 1
FOR i = 10 TO 60 STEP 10
IF mark(count) <> "X" THEN
LOCATE 2, i: PRINT "ÉÍÍÍ»"
LOCATE 3, i: PRINT "º   º"
LOCATE 4, i: PRINT "ÈÍÍÍ¼"
LOCATE 3, i + 2: PRINT mark(count)
ELSE
LOCATE 2, i: PRINT "     "
LOCATE 3, i: PRINT "     "
LOCATE 4, i: PRINT "     "

END IF
count = count + 1
NEXT i

FOR i = 10 TO 60 STEP 10
IF mark(count) <> "X" THEN
LOCATE 7, i: PRINT "ÉÍÍÍ»"
LOCATE 8, i: PRINT "º   º"
LOCATE 9, i: PRINT "ÈÍÍÍ¼"
LOCATE 8, i + 2: PRINT mark(count)
ELSE
LOCATE 7, i: PRINT "     "
LOCATE 8, i: PRINT "     "
LOCATE 9, i: PRINT "     "

END IF
count = count + 1
NEXT i

FOR i = 10 TO 60 STEP 10
IF mark(count) <> "X" THEN
LOCATE 12, i: PRINT "ÉÍÍÍ»"
LOCATE 13, i: PRINT "º   º"
LOCATE 14, i: PRINT "ÈÍÍÍ¼"
LOCATE 13, i + 2: PRINT mark(count)
ELSE
LOCATE 12, i: PRINT "     "
LOCATE 13, i: PRINT "     "
LOCATE 14, i: PRINT "     "

END IF
count = count + 1
NEXT i

FOR i = 10 TO 60 STEP 10
IF mark(count) <> "X" THEN
LOCATE 17, i: PRINT "ÉÍÍÍ»"
LOCATE 18, i: PRINT "º   º"
LOCATE 19, i: PRINT "ÈÍÍÍ¼"
LOCATE 18, i + 2: PRINT mark(count)
ELSE
LOCATE 17, i: PRINT "     "
LOCATE 18, i: PRINT "     "
LOCATE 19, i: PRINT "     "

END IF
count = count + 1

NEXT i

END SUB
