| | |
Tic-Tac-Toe Game
Please support our Visual Basic 4 / 5 / 6 advertiser: Programming Forums - DaniWeb Sister Site
![]() |
Hi...I have posted here once with a question but it was way back and i figured it out by myself
the thing is, i dont catch onto qbasic well at all. it involves math and a lot of memorization which i am really bad at :rolleyes: right now, i have a tictactoe game im working on. i will give you the code but i know very little in qbasic so i just know the bare minimum....
my question is, do you guys think this is how it should start out? Because I have been on it for 2 days trying to think of a logical way to even begin this program & I cant....i mean the "logic" half. I know I need to loop the questions & the game if the user would like to replay it. this is a 2 user game. also, i have nooo idea how to even be able to tell if the user has 3 in a row or anything. maybe by converting the answer to a number and somehow working from there? ugh sorry...im so bad at this. im extremely frustrated too so any help is greatly appreciated :cry:
omg not again...can someone PLEASE tell me how to paste the code here? when i do, it doesnt take it from qbasic....it takes it from the last place i copied from not in qbasic. for some reason, ive never been able to get how to paste anything INTO qbasic or copy and paste something out of qbasic. i can only do it in the program....
im sorry, i dont know barely ANYTHING and you guys probably think i havent tried hard enough but please help.
now i sound pathetic...ha
thank you
- Fara
the thing is, i dont catch onto qbasic well at all. it involves math and a lot of memorization which i am really bad at :rolleyes: right now, i have a tictactoe game im working on. i will give you the code but i know very little in qbasic so i just know the bare minimum....my question is, do you guys think this is how it should start out? Because I have been on it for 2 days trying to think of a logical way to even begin this program & I cant....i mean the "logic" half. I know I need to loop the questions & the game if the user would like to replay it. this is a 2 user game. also, i have nooo idea how to even be able to tell if the user has 3 in a row or anything. maybe by converting the answer to a number and somehow working from there? ugh sorry...im so bad at this. im extremely frustrated too so any help is greatly appreciated :cry:
omg not again...can someone PLEASE tell me how to paste the code here? when i do, it doesnt take it from qbasic....it takes it from the last place i copied from not in qbasic. for some reason, ive never been able to get how to paste anything INTO qbasic or copy and paste something out of qbasic. i can only do it in the program....
im sorry, i dont know barely ANYTHING and you guys probably think i havent tried hard enough but please help.
now i sound pathetic...ha
thank you
- Fara
OK to copypaste it open the qbasic file in note pad
a: lots of ifs depending if you make levels for it
to be cheeky
you could use the random function (i think it's in qbas) but is in vb
as there are 9 squares use integers
use an aray, for i = 1-(random*1) [making sure it is only 1 number therfore 1] (this giving a random square for the Prog to go)
make sure that the square isn't already taken
hope some of this logic helps abit you could always look on www.planetsourcecode.com
a: lots of ifs depending if you make levels for it
to be cheeky
you could use the random function (i think it's in qbas) but is in vb
as there are 9 squares use integers
use an aray, for i = 1-(random*1) [making sure it is only 1 number therfore 1] (this giving a random square for the Prog to go)
make sure that the square isn't already taken
hope some of this logic helps abit you could always look on www.planetsourcecode.com
CLS
SCREEN 12
WINDOW (0, 0)-(1000, 800)
COLOR 11
REM VERTICAL LINE 1
LINE (435, 400)-(435, 600)
REM VERTICAL LINE 2
LINE (515, 400)-(515, 600)
REM HORIZONTAL LINE 1
LINE (375, 460)-(575, 460)
REM HORIZONTAL LINE 2
LINE (375, 535)-(575, 535)
LOCATE 7.1, 32
PRINT "A"
LOCATE 7, 37.5
PRINT "B"
LOCATE 7, 44
PRINT "C"
LOCATE 9, 28
PRINT "1"
LOCATE 12, 28
PRINT "2"
LOCATE 15, 28
PRINT "3"
LOCATE 20, 1
INPUT "USER 1: ENTER A COLUMN LETTER THEN ROW NUMBER (FOR EXAMPLE, B2 WILL MAKE AN X IN THE CENTER SQUARE)"; X$
INPUT "USER 2: ENTER A COLUMN LETTER THEN ROW NUMBER (FOR EXAMPLE, B2 WILL MAKE AN O IN THE MIDDLE SQUARE)"; O$
IF X$ = "A1" THEN
LINE (379, 539)-(431, 598)
LINE (379, 598)-(431, 539)
ELSEIF X$ = "B1" THEN
LINE (439, 598)-(511, 539)
LINE (439, 539)-(511, 598)
ELSEIF X$ = "C1" THEN
LINE (519, 539)-(571, 598)
LINE (519, 598)-(571, 539)
ELSEIF X$ = "A2" THEN
LINE (379, 463)-(435, 531)
LINE (379, 531)-(435, 463)
ELSEIF X$ = "B2" THEN
LINE (439, 463)-(511, 531)
LINE (439, 531)-(511, 463)
ELSEIF X$ = "C2" THEN
LINE (519, 463)-(571, 531)
LINE (519, 531)-(571, 463)
ELSEIF X$ = "A3" THEN
LINE (379, 400)-(435, 458)
LINE (379, 458)-(435, 400)
ELSEIF X$ = "B3" THEN
LINE (439, 400)-(511, 458)
LINE (439, 458)-(511, 400)
ELSEIF X$ = "C3" THEN
LINE (519, 400)-(571, 458)
LINE (519, 458)-(571, 400)
ELSEIF O$ = "A1" AND X$ <> "A1" THEN
CIRCLE (402, 568), 28
ELSEIF O$ = "B1" AND X$ <> "B1" THEN
CIRCLE (475, 570), 28
ELSEIF O$ = "C1" AND X$ <> "C1" THEN
CIRCLE (548, 570), 28
ELSEIF O$ = "A2" AND X$ <> "A2" THEN
CIRCLE (402, 497), 28
ELSEIF O$ = "B2" AND X$ <> "B2" THEN
CIRCLE (475, 497), 30
ELSEIF O$ = "C2" AND X$ <> "C2" THEN
CIRCLE (550, 499), 30
ELSEIF O$ = "A3" AND X$ <> "A3" THEN
CIRCLE (402, 425), 28
ELSEIF O$ = "B3" AND X$ <> "B3" THEN
CIRCLE (475, 425), 30
ELSEIF O$ = "C3" AND X$ <> "C3" THEN
CIRCLE (550, 425), 28
END IF
thats what i have...i dontthink i did anything right but as you can see, im not that skilled. i know randomize, int, and all that but nothing too complicated. suroot: i have no idea what that means but i'll check out the site, thanks!
SCREEN 12
WINDOW (0, 0)-(1000, 800)
COLOR 11
REM VERTICAL LINE 1
LINE (435, 400)-(435, 600)
REM VERTICAL LINE 2
LINE (515, 400)-(515, 600)
REM HORIZONTAL LINE 1
LINE (375, 460)-(575, 460)
REM HORIZONTAL LINE 2
LINE (375, 535)-(575, 535)
LOCATE 7.1, 32
PRINT "A"
LOCATE 7, 37.5
PRINT "B"
LOCATE 7, 44
PRINT "C"
LOCATE 9, 28
PRINT "1"
LOCATE 12, 28
PRINT "2"
LOCATE 15, 28
PRINT "3"
LOCATE 20, 1
INPUT "USER 1: ENTER A COLUMN LETTER THEN ROW NUMBER (FOR EXAMPLE, B2 WILL MAKE AN X IN THE CENTER SQUARE)"; X$
INPUT "USER 2: ENTER A COLUMN LETTER THEN ROW NUMBER (FOR EXAMPLE, B2 WILL MAKE AN O IN THE MIDDLE SQUARE)"; O$
IF X$ = "A1" THEN
LINE (379, 539)-(431, 598)
LINE (379, 598)-(431, 539)
ELSEIF X$ = "B1" THEN
LINE (439, 598)-(511, 539)
LINE (439, 539)-(511, 598)
ELSEIF X$ = "C1" THEN
LINE (519, 539)-(571, 598)
LINE (519, 598)-(571, 539)
ELSEIF X$ = "A2" THEN
LINE (379, 463)-(435, 531)
LINE (379, 531)-(435, 463)
ELSEIF X$ = "B2" THEN
LINE (439, 463)-(511, 531)
LINE (439, 531)-(511, 463)
ELSEIF X$ = "C2" THEN
LINE (519, 463)-(571, 531)
LINE (519, 531)-(571, 463)
ELSEIF X$ = "A3" THEN
LINE (379, 400)-(435, 458)
LINE (379, 458)-(435, 400)
ELSEIF X$ = "B3" THEN
LINE (439, 400)-(511, 458)
LINE (439, 458)-(511, 400)
ELSEIF X$ = "C3" THEN
LINE (519, 400)-(571, 458)
LINE (519, 458)-(571, 400)
ELSEIF O$ = "A1" AND X$ <> "A1" THEN
CIRCLE (402, 568), 28
ELSEIF O$ = "B1" AND X$ <> "B1" THEN
CIRCLE (475, 570), 28
ELSEIF O$ = "C1" AND X$ <> "C1" THEN
CIRCLE (548, 570), 28
ELSEIF O$ = "A2" AND X$ <> "A2" THEN
CIRCLE (402, 497), 28
ELSEIF O$ = "B2" AND X$ <> "B2" THEN
CIRCLE (475, 497), 30
ELSEIF O$ = "C2" AND X$ <> "C2" THEN
CIRCLE (550, 499), 30
ELSEIF O$ = "A3" AND X$ <> "A3" THEN
CIRCLE (402, 425), 28
ELSEIF O$ = "B3" AND X$ <> "B3" THEN
CIRCLE (475, 425), 30
ELSEIF O$ = "C3" AND X$ <> "C3" THEN
CIRCLE (550, 425), 28
END IF
thats what i have...i dontthink i did anything right but as you can see, im not that skilled. i know randomize, int, and all that but nothing too complicated. suroot: i have no idea what that means but i'll check out the site, thanks!
Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
CLS SCREEN 12 WINDOW (0, 0)-(1000, 800) COLOR 11 REM VERTICAL LINE 1 LINE (435, 400)-(435, 600) REM VERTICAL LINE 2 LINE (515, 400)-(515, 600) REM HORIZONTAL LINE 1 LINE (375, 460)-(575, 460) REM HORIZONTAL LINE 2 LINE (375, 535)-(575, 535) LOCATE 7.1, 32 PRINT "A" LOCATE 7, 37.5 PRINT "B" LOCATE 7, 44 PRINT "C" LOCATE 9, 28 PRINT "1" LOCATE 12, 28 PRINT "2" LOCATE 15, 28 PRINT "3" LOCATE 20, 1 INPUT "USER 1: ENTER A COLUMN LETTER THEN ROW NUMBER (FOR EXAMPLE, B2 WILL MAKE AN X IN THE CENTER SQUARE)"; X$ INPUT "USER 2: ENTER A COLUMN LETTER THEN ROW NUMBER (FOR EXAMPLE, B2 WILL MAKE AN O IN THE MIDDLE SQUARE)"; O$ IF X$ = "A1" THEN LINE (379, 539)-(431, 598) LINE (379, 598)-(431, 539) ELSEIF X$ = "B1" THEN LINE (439, 598)-(511, 539) LINE (439, 539)-(511, 598) ELSEIF X$ = "C1" THEN LINE (519, 539)-(571, 598) LINE (519, 598)-(571, 539) ELSEIF X$ = "A2" THEN LINE (379, 463)-(435, 531) LINE (379, 531)-(435, 463) ELSEIF X$ = "B2" THEN LINE (439, 463)-(511, 531) LINE (439, 531)-(511, 463) ELSEIF X$ = "C2" THEN LINE (519, 463)-(571, 531) LINE (519, 531)-(571, 463) ELSEIF X$ = "A3" THEN LINE (379, 400)-(435, 458) LINE (379, 458)-(435, 400) ELSEIF X$ = "B3" THEN LINE (439, 400)-(511, 458) LINE (439, 458)-(511, 400) ELSEIF X$ = "C3" THEN LINE (519, 400)-(571, 458) LINE (519, 458)-(571, 400) ELSEIF O$ = "A1" AND X$ <> "A1" THEN CIRCLE (402, 568), 28 ELSEIF O$ = "B1" AND X$ <> "B1" THEN CIRCLE (475, 570), 28 ELSEIF O$ = "C1" AND X$ <> "C1" THEN CIRCLE (548, 570), 28 ELSEIF O$ = "A2" AND X$ <> "A2" THEN CIRCLE (402, 497), 28 ELSEIF O$ = "B2" AND X$ <> "B2" THEN CIRCLE (475, 497), 30 ELSEIF O$ = "C2" AND X$ <> "C2" THEN CIRCLE (550, 499), 30 ELSEIF O$ = "A3" AND X$ <> "A3" THEN CIRCLE (402, 425), 28 ELSEIF O$ = "B3" AND X$ <> "B3" THEN CIRCLE (475, 425), 30 ELSEIF O$ = "C3" AND X$ <> "C3" THEN CIRCLE (550, 425), 28 END IF
•
•
Join Date: Feb 2007
Posts: 1
Reputation:
Solved Threads: 0
I created a seperate subprogram for each player for most aspects of the game. The into screen may not work on some computers if it doesn't you can just delete the part that writes "Tic Tac Toe" onto the screen.
1. In a normal game of tic tac toe the first player gets one more turn than the other. This means that you need to put the first 8 moves in a loop but then have an "extra"move for player one outside of the loop.
2. Have the input for player 1 and player 2 in seperate sub-programs. This will make it easier to read and alter.
3. To determine if someone has won is really very simple. There are only 8 ways to get three in a row in tic tac toe. Assign each square a variable. If player one puts and X in a square let the variable for that square = 1. ( I made 18 variables: p1s1,p1s5,p2s1) where p is the player and s is the square. Then after each turn have a subprogram that checks to see if someone won by seeing if squares 1+2+3 = 3 for one of the players.
Here is the code for the program. Please don't just copy it. Try to figure out what I did and why yours isn't working.
DECLARE SUB ExtraMove2.data ()
DECLARE SUB ExtraMove.data ()
DECLARE SUB Draw.data ()
DECLARE SUB Draw2.data ()
DECLARE SUB Check.data ()
DECLARE SUB Check2.data ()
DECLARE SUB Tie.data ()
DECLARE SUB Finish.data ()
DECLARE SUB Winner.data ()
DECLARE SUB Winner2.data ()
DECLARE SUB Input.data ()
DECLARE SUB Welcome.data ()
DECLARE SUB Grid.data ()
'Tic Tac Toe
'Created October 6, 2006 by Michael Burgoyne
'Final Project
'Contains 13 Sub-Programs
COMMON SHARED s1p1, s2p1, s3p1, s4p1, s5p1, s6p1, s7p1, s8p1, s9p1, s1p2, s2p2, s3p2, s4p2, s5p2, s6p2, s7p2, s8p2, s9p2, p1$, p2$, c, pl1name$, pl2name$
CLS
CALL Welcome.data
CALL Grid.data
CALL Input.data
CALL Winner.data:
SUB Check.data
IF s1p1 + s2p1 + s3p1 = 3 THEN
CALL Winner.data
ELSEIF s3p1 + s5p1 + s6p1 = 3 THEN
CALL Winner.data
ELSEIF s7p1 + s8p1 + s9p1 = 3 THEN
CALL Winner.data
ELSEIF s1p1 + s4p1 + s7p1 = 3 THEN
CALL Winner.data
ELSEIF s2p1 + s5p1 + s8p1 = 3 THEN
CALL Winner.data
ELSEIF s3p1 + s6p1 + s9p1 = 3 THEN
CALL Winner.data
ELSEIF s1p1 + s5p1 + s9p1 = 3 THEN
CALL Winner.data
ELSEIF s3p1 + s5p1 + s7p1 = 3 THEN
CALL Winner.data
END IF
END SUB
SUB Check2.data
IF s1p2 + s2p2 + s3p2 = 3 THEN
CALL Winner2.data
ELSEIF s4p2 + s5p2 + s6p2 = 3 THEN
CALL Winner2.data
ELSEIF s7p2 + s8p2 + s9p2 = 3 THEN
CALL Winner2.data
ELSEIF s1p2 + s4p2 + s7p2 = 3 THEN
CALL Winner2.data
ELSEIF s2p2 + s5p2 + s8p2 = 3 THEN
CALL Winner2.data
ELSEIF s3p2 + s6p2 + s9p2 = 3 THEN
CALL Winner2.data
ELSEIF s1p2 + s5p2 + s9p2 = 3 THEN
CALL Winner2.data
ELSEIF s3p2 + s5p2 + s7p2 = 3 THEN
CALL Winner2.data
END IF
END SUB
SUB Draw.data
'Player 1 X's
IF p1$ = "a1" THEN
IF s1p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (155, 55)-(245, 145), 1
LINE (245, 55)-(155, 145), 1
LET s1p1 = 1
ELSEIF p1$ = "a2" THEN
IF s2p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (255, 55)-(345, 145), 1
LINE (345, 55)-(255, 145), 1
LET s2p1 = 1
ELSEIF p1$ = "a3" THEN
IF s3p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (355, 55)-(445, 145), 1
LINE (445, 55)-(355, 145), 1
LET s3p1 = 1
ELSEIF p1$ = "b1" THEN
IF s4p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (155, 155)-(245, 245), 1
LINE (245, 155)-(155, 245), 1
LET s4p1 = 1
ELSEIF p1$ = "b2" THEN
IF s5p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (255, 155)-(345, 245), 1
LINE (345, 155)-(255, 245), 1
LET s5p1 = 1
ELSEIF p1$ = "b3" THEN
IF s6p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (355, 155)-(445, 245), 1
LINE (445, 155)-(355, 245), 1
LET s6p1 = 1
ELSEIF p1$ = "c1" THEN
IF s7p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (155, 255)-(245, 345), 1
LINE (245, 255)-(155, 345), 1
LET s7p1 = 1
ELSEIF p1$ = "c2" THEN
IF s8p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (255, 255)-(345, 345), 1
LINE (345, 255)-(255, 345), 1
LET s8p1 = 1
ELSEIF p1$ = "c3" THEN
IF s9p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (355, 255)-(445, 345), 1
LINE (445, 255)-(355, 345), 1
LET s9p1 = 1
END IF
SkipDraw:
END SUB
SUB Draw2.data
'Player 2 O's
IF p2$ = "a1" THEN
IF s1p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (200, 100), 48, 4
LET s1p2 = 1
ELSEIF p2$ = "a2" THEN
IF s2p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (300, 100), 48, 4
LET s2p2 = 1
ELSEIF p2$ = "a3" THEN
IF s3p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (400, 100), 48, 4
LET s3p2 = 1
ELSEIF p2$ = "b1" THEN
IF s4p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (200, 200), 48, 4
LET s4p2 = 1
ELSEIF p2$ = "b2" THEN
IF s5p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (300, 200), 48, 4
LET s5p2 = 1
ELSEIF p2$ = "b3" THEN
IF s6p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (400, 200), 48, 4
LET s6p2 = 1
ELSEIF p2$ = "c1" THEN
IF s7p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (200, 300), 48, 4
LET s7p2 = 1
ELSEIF p2$ = "c2" THEN
IF s8p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (300, 300), 48, 4
LET s8p2 = 1
ELSEIF p2$ = "c3" THEN
IF s9p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (400, 300), 48, 4
LET s9p2 = 1
END IF
Skipdraw2:
END SUB
SUB ExtraMove.data
INPUT "Player 1: ", p1$
CALL Draw.data
CALL Check.data
CALL Check2.data
END SUB
SUB ExtraMove2.data
INPUT "Player 2: ", p2$
CALL Draw2.data
CALL Check.data
CALL Check2.data
END SUB
SUB Finish.data
END
END SUB
SUB Grid.data
SCREEN 12
'Vertical
LINE (150, 50)-(150, 350), 2
LINE (250, 50)-(250, 350), 2
LINE (350, 50)-(350, 350), 2
LINE (450, 50)-(450, 350), 2
'Horizontal
LINE (150, 50)-(450, 50), 2
LINE (150, 150)-(450, 150), 2
LINE (150, 250)-(450, 250), 2
LINE (150, 350)-(450, 350), 2
'Labels
LOCATE 7, 15
PRINT "a"
LOCATE 13, 15
PRINT "b"
LOCATE 19, 15
PRINT "c"
LOCATE 2, 26
PRINT "1"
LOCATE 2, 38
PRINT "2"
LOCATE 2, 50
PRINT "3"
END SUB
SUB Input.data
LOCATE 24, 1
PRINT "Input the row and column number (example a1 or b3)"
LOCATE 5, 1
DO UNTIL c >= 8
COLOR 1
INPUT "Player 1: ", p1$
LET c = c + 1
CALL Draw.data
CALL Check.data
CALL Check2.data
COLOR 4
INPUT "Player 2: ", p2$
LET c = c + 1
CALL Draw2.data
CALL Check.data
CALL Check2.data
LOOP
'Ninth turn
COLOR 1
INPUT "Player 1: ", p1$
CALL Draw.data
CALL Check.data
CALL Check2.data
CALL Tie.data
END SUB
SUB Tie.data
LOCATE 26, 1
COLOR 15
PRINT "Draw"
CALL Finish.data
END SUB
SUB Welcome.data
'TIC TAC
COLOR 2
LOCATE 5, 14
PRINT "_______ _______ _____ _______ __ _____"
LOCATE 6, 14
PRINT " | | | | / \ | "
LOCATE 7, 14
PRINT " | | | | / \ | "
LOCATE 8, 14
PRINT " | | | | | | | "
LOCATE 9, 14
PRINT " | | | | |----| | "
LOCATE 10, 14
PRINT " | | | | | | | "
LOCATE 11, 14
PRINT " | | | | | | | "
LOCATE 12, 14
PRINT " | | | | | | | "
LOCATE 13, 14
PRINT " | | | | | | | "
LOCATE 14, 14
PRINT " | ___|___ |_____ | | | |_____"
'TOE
LOCATE 32, 27
PRINT "_______ _____ _______"
LOCATE 33, 27
PRINT " | | | | "
LOCATE 34, 27
PRINT " | | | | "
LOCATE 35, 27
PRINT " | | | | "
LOCATE 36, 27
PRINT " | | | | "
LOCATE 37, 27
PRINT " | | | |----- "
LOCATE 38, 27
PRINT " | | | | "
LOCATE 39, 27
PRINT " | | | | "
LOCATE 40, 27
PRINT " | | | | "
LOCATE 41, 27
PRINT " | | | | "
LOCATE 42, 27
PRINT " | |_____| |_______"
COLOR 15
LOCATE 25, 5
PRINT " Welcome to my game of Tic-Tac-Toe. This game is for two people only."
LOCATE 27, 20
PRINT " Created October 6,2006 by Michael Burgoyne"
LOCATE 29, 5
COLOR 1
INPUT "Player 1's name: ", pl1name$
LOCATE 29, 40
COLOR 4
INPUT "Player 2's name: ", pl2name$
END SUB
SUB Winner.data
LOCATE 26, 1
COLOR 1
PRINT pl1name$; " has won!"
COLOR 15
CALL Finish.data
END SUB
SUB Winner2.data
LOCATE 26, 1
COLOR 4
PRINT pl2name$; " has won!"
COLOR 15
CALL Finish.data
END SUB
1. In a normal game of tic tac toe the first player gets one more turn than the other. This means that you need to put the first 8 moves in a loop but then have an "extra"move for player one outside of the loop.
2. Have the input for player 1 and player 2 in seperate sub-programs. This will make it easier to read and alter.
3. To determine if someone has won is really very simple. There are only 8 ways to get three in a row in tic tac toe. Assign each square a variable. If player one puts and X in a square let the variable for that square = 1. ( I made 18 variables: p1s1,p1s5,p2s1) where p is the player and s is the square. Then after each turn have a subprogram that checks to see if someone won by seeing if squares 1+2+3 = 3 for one of the players.
Here is the code for the program. Please don't just copy it. Try to figure out what I did and why yours isn't working.
DECLARE SUB ExtraMove2.data ()
DECLARE SUB ExtraMove.data ()
DECLARE SUB Draw.data ()
DECLARE SUB Draw2.data ()
DECLARE SUB Check.data ()
DECLARE SUB Check2.data ()
DECLARE SUB Tie.data ()
DECLARE SUB Finish.data ()
DECLARE SUB Winner.data ()
DECLARE SUB Winner2.data ()
DECLARE SUB Input.data ()
DECLARE SUB Welcome.data ()
DECLARE SUB Grid.data ()
'Tic Tac Toe
'Created October 6, 2006 by Michael Burgoyne
'Final Project
'Contains 13 Sub-Programs
COMMON SHARED s1p1, s2p1, s3p1, s4p1, s5p1, s6p1, s7p1, s8p1, s9p1, s1p2, s2p2, s3p2, s4p2, s5p2, s6p2, s7p2, s8p2, s9p2, p1$, p2$, c, pl1name$, pl2name$
CLS
CALL Welcome.data
CALL Grid.data
CALL Input.data
CALL Winner.data:
SUB Check.data
IF s1p1 + s2p1 + s3p1 = 3 THEN
CALL Winner.data
ELSEIF s3p1 + s5p1 + s6p1 = 3 THEN
CALL Winner.data
ELSEIF s7p1 + s8p1 + s9p1 = 3 THEN
CALL Winner.data
ELSEIF s1p1 + s4p1 + s7p1 = 3 THEN
CALL Winner.data
ELSEIF s2p1 + s5p1 + s8p1 = 3 THEN
CALL Winner.data
ELSEIF s3p1 + s6p1 + s9p1 = 3 THEN
CALL Winner.data
ELSEIF s1p1 + s5p1 + s9p1 = 3 THEN
CALL Winner.data
ELSEIF s3p1 + s5p1 + s7p1 = 3 THEN
CALL Winner.data
END IF
END SUB
SUB Check2.data
IF s1p2 + s2p2 + s3p2 = 3 THEN
CALL Winner2.data
ELSEIF s4p2 + s5p2 + s6p2 = 3 THEN
CALL Winner2.data
ELSEIF s7p2 + s8p2 + s9p2 = 3 THEN
CALL Winner2.data
ELSEIF s1p2 + s4p2 + s7p2 = 3 THEN
CALL Winner2.data
ELSEIF s2p2 + s5p2 + s8p2 = 3 THEN
CALL Winner2.data
ELSEIF s3p2 + s6p2 + s9p2 = 3 THEN
CALL Winner2.data
ELSEIF s1p2 + s5p2 + s9p2 = 3 THEN
CALL Winner2.data
ELSEIF s3p2 + s5p2 + s7p2 = 3 THEN
CALL Winner2.data
END IF
END SUB
SUB Draw.data
'Player 1 X's
IF p1$ = "a1" THEN
IF s1p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (155, 55)-(245, 145), 1
LINE (245, 55)-(155, 145), 1
LET s1p1 = 1
ELSEIF p1$ = "a2" THEN
IF s2p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (255, 55)-(345, 145), 1
LINE (345, 55)-(255, 145), 1
LET s2p1 = 1
ELSEIF p1$ = "a3" THEN
IF s3p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (355, 55)-(445, 145), 1
LINE (445, 55)-(355, 145), 1
LET s3p1 = 1
ELSEIF p1$ = "b1" THEN
IF s4p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (155, 155)-(245, 245), 1
LINE (245, 155)-(155, 245), 1
LET s4p1 = 1
ELSEIF p1$ = "b2" THEN
IF s5p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (255, 155)-(345, 245), 1
LINE (345, 155)-(255, 245), 1
LET s5p1 = 1
ELSEIF p1$ = "b3" THEN
IF s6p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (355, 155)-(445, 245), 1
LINE (445, 155)-(355, 245), 1
LET s6p1 = 1
ELSEIF p1$ = "c1" THEN
IF s7p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (155, 255)-(245, 345), 1
LINE (245, 255)-(155, 345), 1
LET s7p1 = 1
ELSEIF p1$ = "c2" THEN
IF s8p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (255, 255)-(345, 345), 1
LINE (345, 255)-(255, 345), 1
LET s8p1 = 1
ELSEIF p1$ = "c3" THEN
IF s9p2 = 1 THEN
CALL ExtraMove.data
GOTO SkipDraw
END IF
LINE (355, 255)-(445, 345), 1
LINE (445, 255)-(355, 345), 1
LET s9p1 = 1
END IF
SkipDraw:
END SUB
SUB Draw2.data
'Player 2 O's
IF p2$ = "a1" THEN
IF s1p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (200, 100), 48, 4
LET s1p2 = 1
ELSEIF p2$ = "a2" THEN
IF s2p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (300, 100), 48, 4
LET s2p2 = 1
ELSEIF p2$ = "a3" THEN
IF s3p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (400, 100), 48, 4
LET s3p2 = 1
ELSEIF p2$ = "b1" THEN
IF s4p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (200, 200), 48, 4
LET s4p2 = 1
ELSEIF p2$ = "b2" THEN
IF s5p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (300, 200), 48, 4
LET s5p2 = 1
ELSEIF p2$ = "b3" THEN
IF s6p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (400, 200), 48, 4
LET s6p2 = 1
ELSEIF p2$ = "c1" THEN
IF s7p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (200, 300), 48, 4
LET s7p2 = 1
ELSEIF p2$ = "c2" THEN
IF s8p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (300, 300), 48, 4
LET s8p2 = 1
ELSEIF p2$ = "c3" THEN
IF s9p1 = 1 THEN
CALL ExtraMove2.data
GOTO Skipdraw2
END IF
CIRCLE (400, 300), 48, 4
LET s9p2 = 1
END IF
Skipdraw2:
END SUB
SUB ExtraMove.data
INPUT "Player 1: ", p1$
CALL Draw.data
CALL Check.data
CALL Check2.data
END SUB
SUB ExtraMove2.data
INPUT "Player 2: ", p2$
CALL Draw2.data
CALL Check.data
CALL Check2.data
END SUB
SUB Finish.data
END
END SUB
SUB Grid.data
SCREEN 12
'Vertical
LINE (150, 50)-(150, 350), 2
LINE (250, 50)-(250, 350), 2
LINE (350, 50)-(350, 350), 2
LINE (450, 50)-(450, 350), 2
'Horizontal
LINE (150, 50)-(450, 50), 2
LINE (150, 150)-(450, 150), 2
LINE (150, 250)-(450, 250), 2
LINE (150, 350)-(450, 350), 2
'Labels
LOCATE 7, 15
PRINT "a"
LOCATE 13, 15
PRINT "b"
LOCATE 19, 15
PRINT "c"
LOCATE 2, 26
PRINT "1"
LOCATE 2, 38
PRINT "2"
LOCATE 2, 50
PRINT "3"
END SUB
SUB Input.data
LOCATE 24, 1
PRINT "Input the row and column number (example a1 or b3)"
LOCATE 5, 1
DO UNTIL c >= 8
COLOR 1
INPUT "Player 1: ", p1$
LET c = c + 1
CALL Draw.data
CALL Check.data
CALL Check2.data
COLOR 4
INPUT "Player 2: ", p2$
LET c = c + 1
CALL Draw2.data
CALL Check.data
CALL Check2.data
LOOP
'Ninth turn
COLOR 1
INPUT "Player 1: ", p1$
CALL Draw.data
CALL Check.data
CALL Check2.data
CALL Tie.data
END SUB
SUB Tie.data
LOCATE 26, 1
COLOR 15
PRINT "Draw"
CALL Finish.data
END SUB
SUB Welcome.data
'TIC TAC
COLOR 2
LOCATE 5, 14
PRINT "_______ _______ _____ _______ __ _____"
LOCATE 6, 14
PRINT " | | | | / \ | "
LOCATE 7, 14
PRINT " | | | | / \ | "
LOCATE 8, 14
PRINT " | | | | | | | "
LOCATE 9, 14
PRINT " | | | | |----| | "
LOCATE 10, 14
PRINT " | | | | | | | "
LOCATE 11, 14
PRINT " | | | | | | | "
LOCATE 12, 14
PRINT " | | | | | | | "
LOCATE 13, 14
PRINT " | | | | | | | "
LOCATE 14, 14
PRINT " | ___|___ |_____ | | | |_____"
'TOE
LOCATE 32, 27
PRINT "_______ _____ _______"
LOCATE 33, 27
PRINT " | | | | "
LOCATE 34, 27
PRINT " | | | | "
LOCATE 35, 27
PRINT " | | | | "
LOCATE 36, 27
PRINT " | | | | "
LOCATE 37, 27
PRINT " | | | |----- "
LOCATE 38, 27
PRINT " | | | | "
LOCATE 39, 27
PRINT " | | | | "
LOCATE 40, 27
PRINT " | | | | "
LOCATE 41, 27
PRINT " | | | | "
LOCATE 42, 27
PRINT " | |_____| |_______"
COLOR 15
LOCATE 25, 5
PRINT " Welcome to my game of Tic-Tac-Toe. This game is for two people only."
LOCATE 27, 20
PRINT " Created October 6,2006 by Michael Burgoyne"
LOCATE 29, 5
COLOR 1
INPUT "Player 1's name: ", pl1name$
LOCATE 29, 40
COLOR 4
INPUT "Player 2's name: ", pl2name$
END SUB
SUB Winner.data
LOCATE 26, 1
COLOR 1
PRINT pl1name$; " has won!"
COLOR 15
CALL Finish.data
END SUB
SUB Winner2.data
LOCATE 26, 1
COLOR 4
PRINT pl2name$; " has won!"
COLOR 15
CALL Finish.data
END SUB
•
•
•
•
I created a seperate subprogram for each player for most aspects of the game. The into screen may not work on some computers if it doesn't you can just delete the part that writes "Tic Tac Toe" onto the screen.••••i am just taking this class for one semester but i need help..am i doing this right at all? or should i redo it in another way thank you suroot. ~Fara
Posted on Dec 14th 2004
Here is the code for the program. Please don't just copy it. Try to figure out what I did and why yours isn't working.
The 3 Laws of the Procrastination Society:
1) Never do today that which can be put off until tomorrow
2) Tomorrow never comes
1) Never do today that which can be put off until tomorrow
2) Tomorrow never comes
•
•
Join Date: Feb 2007
Posts: 28
Reputation:
Solved Threads: 3
We might be able to help more if you ask a specific question - what are you wondering?
Visual Basic 6 tutorials and source code samples
Visual Basic 6 tutorials and source code samples
![]() |
Similar Threads
- help~Create a tic-tac-toe game.for C (C)
- Help Needed With Tic Tac Toe Game Using Graphics (Python)
- tic-tac-toe game (Game Development)
- tic-tac-toe game? (C++)
- Tic-Tac-Toe Game - Need some information or help (C++)
- HELP!!! Tic-tac-toe game! (C++)
Other Threads in the Visual Basic 4 / 5 / 6 Forum
- Previous Thread: Activex audio recorder
- Next Thread: Server's mulitple listening
| Thread Tools | Search this Thread |
* 6 429 2007 access activex add age append application basic beginner birth bmp calculator cd cells.find click client code college column component connection connectionproblemusingvb6usingoledb copy creat ctrl+f data database datareport date delete dissertations dissertationthesis dissertationtopic edit error excel excelmacro file filename form hardware header iamthwee image inboxinvb internetfiledownload keypress label listbox listview liveperson login looping machine microsoft movingranges number objectinsert open oracle password prime program prompt range-objects readfile reading record refresh remotesqlserverdatabase report retrieve save search sendbyte sites sort sql sql2008 sqlserver subroutine table tags textbox time urldownloadtofile vb vb6 vb6.0 vba visual visualbasic visualbasic6 web window windows






