I'm having a problem with my game loop.
The computer keeps picking all of the diagonals and I never get to pick a space.
Can anyone assist me in fixing this?
`GAME LOOP
DO
FOR i = 1 TO 9
XROTATE OBJECT i, OBJECT ANGLE X(i) + 0.5
YROTATE OBJECT i, OBJECT ANGLE Y(i) + 0.5
ZROTATE OBJECT i, OBJECT ANGLE Z(i) + 0.5
NEXT i
IF FL_GameBegin = 0
xrotate object 17, object angle x(17) + 0.5
ENDIF
IF SPACEKEY() = 1
GOSUB _AlterTitle
ENDIF
IF FL_GameBegin = 1
SET OBJECT TO CAMERA ORIENTATION 17
XROTATE OBJECT 17, 53
FOR i = 1 TO 9
SET OBJECT TO CAMERA ORIENTATION i
NEXT i
WAIT 2000
TEXTURE OBJECT 17, 51
REPEAT
key = SCANCODE()
SELECT key
`************************************
`*keypad is laid out like game screen
`*though, regular keys work same...
`************************************
`select box 1
CASE N1, K7
IF this(1) = 1 : GOSUB _PlayRetry : ENDIF
IF this(1) = 2 : GOSUB _BadMove : ENDIF
IF this(1) = 0
TEXTURE object 1, 32
this(1) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`select box 2
CASE N2, K8
IF this(2) = 1 : GOSUB _PlayRetry : ENDIF
IF this(2) = 2 : GOSUB _BadMove : ENDIF
IF this(2) = 0
TEXTURE object 2, 32
this(2) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`select box 3
CASE N3, K9
IF this(3) = 1 : GOSUB _PlayRetry : ENDIF
IF this(3) = 2 : GOSUB _BadMove : ENDIF
IF this(3) = 0
TEXTURE object 3, 32
this(3) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`select box 4
CASE N4, K4
IF this(4) = 1 : GOSUB _PlayRetry : ENDIF
IF this(4) = 2 : GOSUB _BadMove : ENDIF
IF this(4) = 0
TEXTURE object 4, 32
this(4) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`select box 5
CASE N5, K5
IF this(5) = 1 : GOSUB _PlayRetry : ENDIF
IF this(5) = 2 : GOSUB _BadMove : ENDIF
IF this(5) = 0
TEXTURE object 5, 32
this(5) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`select box 6
CASE N6, K6
IF this(6) = 1 : GOSUB _PlayRetry : ENDIF
IF this(6) = 2 : GOSUB _BadMove : ENDIF
IF this(6) = 0
TEXTURE object 6, 32
this(6) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`select box 7
CASE N7, K1
IF this(7) = 1 : GOSUB _PlayRetry : ENDIF
IF this(7) = 2 : GOSUB _BadMove : ENDIF
IF this(7) = 0
TEXTURE object 7, 32
this(7) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`select box 8
CASE N8, K2
IF this(8) = 1 : GOSUB _PlayRetry : ENDIF
IF this(8) = 2 : GOSUB _BadMove : ENDIF
IF this(8) = 0
TEXTURE object 8, 32
this(8) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`select box 9
CASE N9, K3
IF this(9) = 1 : GOSUB _PlayRetry : ENDIF
IF this(9) = 2 : GOSUB _BadMove : ENDIF
IF this(9) = 0
TEXTURE object 9, 32
this(9) = 2
`PLAY SOUND 2
ENDIF
ENDCASE
`**************
`*function keys
`**************
CASE F1
`select F1
ENDCASE
CASE F5
`select F5
ENDCASE
CASE F9
`select F9
ENDCASE
CASE F12
`select F12
ENDCASE
`****************
`*pause selection
`****************
CASE LP
`select pause
ENDCASE
`***************
`*quit selection
`***************
CASE LQ
`select quit
ENDCASE
ENDSELECT
INC turns, 1
GOSUB _CPUTurn
INC turns, 1
GOSUB _CheckForWin
UNTIL (FL_GameBegin = -1) OR (turns = 9)
ENDIF
IF turns = 9
`...CAT WINS
`...SCORE +1 TO CATSCORE
`...PLAY 'AWWWWW' SOUND
`...WAIT FOR SOUND TO STOP
`...RESET turns to 0
ENDIF
IF FL_GameBegin = -1
EXIT
ENDIF
LOOP
This is what I'm using. Please help. The _WORDS are my "subroutines". Anything with FL_WORDS are flags.
[edit]
The 2 letter or letter-number combinations for the SELECT...CASE structure are placeholders for the SCANCODE() function; I've made a list of #CONSTANTs that these represent. Also, there are subroutines that I haven't fixed or created yet, so my code is in the SELECT...CASE structure.