REM **********************************************
REM   More Qbasic Software at the Software Page.
REM       http://www.euronet.nl/users/rkohm/
REM          Any questions? E-mail to:
REM              rkohm@euronet.nl
REM **********************************************

' If you don't know the rules of this game, just send me an e-mail.

DECLARE SUB check ()
DECLARE SUB pause (howlong!)
DECLARE SUB board ()

DIM SHARED colomn1(7), colomn2(7), colomn3(7), colomn4(7), colomn5(7)
DIM SHARED colomn6(7), colomn7(7)
COMMON SHARED win
SCREEN 12: RANDOMIZE TIMER

ON KEY(10) GOSUB endofgame
KEY(10) ON

CLS
INPUT "What is your name, player 1: ", name1$
name2: INPUT "What is your name, player 2: ", name2$
name1$ = MID$(name1$, 1, 10)
name2$ = MID$(name2$, 1, 10)
IF name1$ = "" THEN name1$ = "Player 1"
IF name2$ = "" THEN name2$ = "Player 2"
IF name1$ = name2$ THEN BEEP: GOTO name2
DO: rand = FIX(RND * 100 + 1): LOOP UNTIL rand > 0 AND rand <= 100
IF rand < 50 THEN turn = 1: COLOR 4: PRINT name1$; " starts with red."
IF rand >= 50 THEN turn = 2: COLOR 14: PRINT name2$; " starts with yellow."
DO: LOOP UNTIL INKEY$ <> ""

CLS : board
IF turn = 1 THEN COLOR 4: LOCATE 1, 1: PRINT name1$
IF turn = 2 THEN COLOR 14: LOCATE 1, 65: PRINT name2$

DO
again:   
DO: whichcolomn$ = INKEY$: LOOP UNTIL whichcolomn$ <> ""
IF turn = 1 THEN clor = 4
IF turn = 2 THEN clor = 14
number = 130: DRAW "bm0,0"
SELECT CASE whichcolomn$
CASE "1"
 FOR counter = 1 TO 7
  IF counter = 7 THEN colomn1(6) = turn: EXIT FOR
  IF colomn1(1) <> 0 THEN BEEP: GOTO again
  IF colomn1(counter) <> 0 THEN colomn1(counter - 1) = turn: EXIT FOR
  pause .1: DRAW "p0,1": PAINT (140, number), clor, 1: number = number + 60
 NEXT
CASE "2"
 FOR counter = 1 TO 7
  IF counter = 7 THEN colomn2(6) = turn: EXIT FOR
  IF colomn2(1) <> 0 THEN BEEP: GOTO again
  IF colomn2(counter) <> 0 THEN colomn2(counter - 1) = turn: EXIT FOR
  pause .1: DRAW "p0,1": PAINT (200, number), clor, 1: number = number + 60
 NEXT
CASE "3"
 FOR counter = 1 TO 7
  IF counter = 7 THEN colomn3(6) = turn: EXIT FOR
  IF colomn3(1) <> 0 THEN BEEP: GOTO again
  IF colomn3(counter) <> 0 THEN colomn3(counter - 1) = turn: EXIT FOR
  pause .1: DRAW "p0,1": PAINT (260, number), clor, 1: number = number + 60
 NEXT
CASE "4"
 FOR counter = 1 TO 7
  IF counter = 7 THEN colomn4(6) = turn: EXIT FOR
  IF colomn4(1) <> 0 THEN BEEP: GOTO again
  IF colomn4(counter) <> 0 THEN colomn4(counter - 1) = turn: EXIT FOR
  pause .1: DRAW "p0,1": PAINT (320, number), clor, 1: number = number + 60
 NEXT
CASE "5"
 FOR counter = 1 TO 7
  IF counter = 7 THEN colomn5(6) = turn: EXIT FOR
  IF colomn5(1) <> 0 THEN BEEP: GOTO again
  IF colomn5(counter) <> 0 THEN colomn5(counter - 1) = turn: EXIT FOR
  pause .1: DRAW "p0,1": PAINT (380, number), clor, 1: number = number + 60
 NEXT
CASE "6"
 FOR counter = 1 TO 7
  IF counter = 7 THEN colomn6(6) = turn: EXIT FOR
  IF colomn6(1) <> 0 THEN BEEP: GOTO again
  IF colomn6(counter) <> 0 THEN colomn6(counter - 1) = turn: EXIT FOR
  pause .1: DRAW "p0,1": PAINT (440, number), clor, 1: number = number + 60
 NEXT
CASE "7"
 FOR counter = 1 TO 7
  IF counter = 7 THEN colomn7(6) = turn: EXIT FOR
  IF colomn7(1) <> 0 THEN BEEP: GOTO again
  IF colomn7(counter) <> 0 THEN colomn7(counter - 1) = turn: EXIT FOR
  pause .1: DRAW "p0,1": PAINT (500, number), clor, 1: number = number + 60
 NEXT
CASE ELSE
 GOTO again
END SELECT

IF turn = 1 THEN
 LOCATE 1, 1: PRINT STRING$(10, " ")
 LOCATE 1, 65: COLOR 14: PRINT name2$: turn = 2
ELSEIF turn = 2 THEN
 LOCATE 1, 65: PRINT STRING$(10, " ")
 LOCATE 1, 1: COLOR 4: PRINT name1$: turn = 1
END IF

check
IF win = 1 THEN COLOR 4: PRINT name1$; " wins this game!": END
IF win = 2 THEN COLOR 14: PRINT name2$; " wins this game!": END
LOOP

PRINT "Something's going wrong!!!!!"
END

endofgame:
END

SUB board
DRAW "c1 bm110,100 d360 l90 d15 r600 u15 l90 u360 l420"
tmp = 140: DO: CIRCLE (tmp, 130), 25, 1: tmp = tmp + 60: LOOP UNTIL tmp = 560
tmp = 140: DO: CIRCLE (tmp, 190), 25, 1: tmp = tmp + 60: LOOP UNTIL tmp = 560
tmp = 140: DO: CIRCLE (tmp, 250), 25, 1: tmp = tmp + 60: LOOP UNTIL tmp = 560
tmp = 140: DO: CIRCLE (tmp, 310), 25, 1: tmp = tmp + 60: LOOP UNTIL tmp = 560
tmp = 140: DO: CIRCLE (tmp, 370), 25, 1: tmp = tmp + 60: LOOP UNTIL tmp = 560
tmp = 140: DO: CIRCLE (tmp, 430), 25, 1: tmp = tmp + 60: LOOP UNTIL tmp = 560
DRAW "bm320,221 p1,1"
END SUB

SUB check
FOR te = 1 TO 6
IF colomn1(te) = colomn2(te) AND colomn2(te) = colomn3(te) AND colomn3(te) = colomn4(te) AND colomn1(te) <> 0 THEN win = colomn1(te): EXIT SUB
IF colomn2(te) = colomn3(te) AND colomn3(te) = colomn4(te) AND colomn4(te) = colomn5(te) AND colomn2(te) <> 0 THEN win = colomn2(te): EXIT SUB
IF colomn3(te) = colomn4(te) AND colomn4(te) = colomn5(te) AND colomn5(te) = colomn6(te) AND colomn3(te) <> 0 THEN win = colomn3(te): EXIT SUB
IF colomn4(te) = colomn5(te) AND colomn5(te) = colomn6(te) AND colomn6(te) = colomn7(te) AND colomn4(te) <> 0 THEN win = colomn4(te): EXIT SUB
NEXT

FOR te = 1 TO 3
IF colomn1(te) = colomn1(te + 1) AND colomn1(te + 1) = colomn1(te + 2) AND colomn1(te + 2) = colomn1(te + 3) AND colomn1(te) <> 0 THEN win = colomn1(te): EXIT SUB
IF colomn2(te) = colomn2(te + 1) AND colomn2(te + 1) = colomn2(te + 2) AND colomn2(te + 2) = colomn2(te + 3) AND colomn2(te) <> 0 THEN win = colomn2(te): EXIT SUB
IF colomn3(te) = colomn3(te + 1) AND colomn3(te + 1) = colomn3(te + 2) AND colomn3(te + 2) = colomn3(te + 3) AND colomn3(te) <> 0 THEN win = colomn3(te): EXIT SUB
IF colomn4(te) = colomn4(te + 1) AND colomn4(te + 1) = colomn4(te + 2) AND colomn4(te + 2) = colomn4(te + 3) AND colomn4(te) <> 0 THEN win = colomn4(te): EXIT SUB
IF colomn5(te) = colomn5(te + 1) AND colomn5(te + 1) = colomn5(te + 2) AND colomn5(te + 2) = colomn5(te + 3) AND colomn5(te) <> 0 THEN win = colomn5(te): EXIT SUB
IF colomn6(te) = colomn6(te + 1) AND colomn6(te + 1) = colomn6(te + 2) AND colomn6(te + 2) = colomn6(te + 3) AND colomn6(te) <> 0 THEN win = colomn6(te): EXIT SUB
IF colomn7(te) = colomn7(te + 1) AND colomn7(te + 1) = colomn7(te + 2) AND colomn7(te + 2) = colomn7(te + 3) AND colomn7(te) <> 0 THEN win = colomn7(te): EXIT SUB

IF colomn1(te) = colomn2(te + 1) AND colomn2(te + 1) = colomn3(te + 2) AND colomn3(te + 2) = colomn4(te + 3) AND colomn1(te) <> 0 THEN win = colomn1(te): EXIT SUB
IF colomn2(te) = colomn3(te + 1) AND colomn3(te + 1) = colomn4(te + 2) AND colomn4(te + 2) = colomn5(te + 3) AND colomn2(te) <> 0 THEN win = colomn2(te): EXIT SUB
IF colomn3(te) = colomn4(te + 1) AND colomn4(te + 1) = colomn5(te + 2) AND colomn5(te + 2) = colomn6(te + 3) AND colomn3(te) <> 0 THEN win = colomn3(te): EXIT SUB
IF colomn4(te) = colomn5(te + 1) AND colomn5(te + 1) = colomn6(te + 2) AND colomn6(te + 2) = colomn7(te + 3) AND colomn4(te) <> 0 THEN win = colomn4(te): EXIT SUB

IF colomn1(te + 3) = colomn2(te + 2) AND colomn2(te + 2) = colomn3(te + 1) AND colomn3(te + 1) = colomn4(te) AND colomn1(te + 3) <> 0 THEN win = colomn1(te + 3): EXIT SUB
IF colomn2(te + 3) = colomn3(te + 2) AND colomn3(te + 2) = colomn4(te + 1) AND colomn4(te + 1) = colomn5(te) AND colomn2(te + 3) <> 0 THEN win = colomn2(te + 3): EXIT SUB
IF colomn3(te + 3) = colomn4(te + 2) AND colomn4(te + 2) = colomn5(te + 1) AND colomn5(te + 1) = colomn6(te) AND colomn3(te + 3) <> 0 THEN win = colomn3(te + 3): EXIT SUB
IF colomn4(te + 3) = colomn5(te + 2) AND colomn5(te + 2) = colomn6(te + 1) AND colomn6(te + 1) = colomn7(te) AND colomn4(te + 3) <> 0 THEN win = colomn4(te + 3): EXIT SUB
NEXT
END SUB

SUB pause (howlong)
thetime = TIMER
DO: LOOP UNTIL TIMER >= thetime + howlong
END SUB