Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
BOWLING for John
#21
Hey, hey, Hey! No fighting in my topic! I should have you blocked for all that. I got what I wanted, so take your fun elsewhere. :evil:
Reply
#22
Noone's fighting, now, come on Nathan, give me a kiss you hot spaniard! :rotfl:
Reply
#23
Alright, back on topic. I've been given permission by j2krei08 to neaten and document the code. I'll also be adding code to make sure that the game runs approximately the same speed on every computer.

This will probably take a couple days, and I'll post what I end up with back in here.

*peace*

Meg.
Reply
#24
Great!

He knows that it needs repair and I can't wait to see a version with all the GOTO-type stuff removed.

Please also post your result here:
http://www.network54.com/Forum/202193

as a response to
"Get this to work on faster computers by JohnK"

I posted that on his behalf, but nobody responded, so I made a quick patch, which I also posted here.

But if you were to post a better version, I could reference it on The QBasic Forum and an example of how GOTOs can be avoided.

Of course, this is no insult to John. I would have coded the same exact way when I had his experience level. What we are looking for here is something newbies can learn by.

Unfortunately, we can't teach newbies how to have good ideas like John's.

Mac
Reply
#25
It's actually quite well structured.

And GOTO isnt evil, observe:

Code:
Flag = 0
For a = 0 To 1000
For b = 0 To 1000
  For c = 0 To 1000
   For d = 0 To 1000
    If a = 5 And b = 10 And c = 833 And d = 162 Then Flag = 1
    If Flag = 1 Then Exit For
   Next
   If Flag = 1 Then Exit For
  Next
  If Flag = 1 Then Exit For
Next
If Flag = 1 Then Exit For
Next
If Flag = 0 Then
Print "ERROR"
End
End If
Print "Code executed ok!"

Versus:
Code:
For a = 0 To 1000
For b = 0 To 1000
  For c = 0 To 1000
   For d = 0 To 1000
    If a = 5 And b = 10 And c = 833 And d = 162 Then Goto EndNest
   Next
  Next
Next
Next
Print "ERROR"
End
EndNest:
Print "Code executed ok!"
Reply
#26
But, to start at the top of the program, what about this:
Code:
SCREEN 0
CLS
LOCATE 2, 37: PRINT "O O O O"
LOCATE 3, 38: PRINT "O O O"
LOCATE 4, 39: PRINT "O O"
LOCATE 5, 40: PRINT "O"
FOR Q = 23 TO 2 STEP -1
  ' Adjust delay according to your machine speed
  FOR I% = 1 TO 10: WAIT &H3DA, 8, 8: : WAIT &H3DA, 8: NEXT I%
  SELECT CASE Q
  CASE 2: LOCATE 2, 37: PRINT "        ";
  CASE 3: LOCATE 3, 38: PRINT "     ";
  CASE 4: LOCATE 4, 39: PRINT "   ";
  CASE 5: LOCATE 5, 40: PRINT " ";
  END SELECT
  LOCATE Q + 1, 40: PRINT " ";
  LOCATE Q, 40: PRINT "0";
NEXT Q
CLS
versus
Code:
SCREEN 0
CLS
Q = 23
PINLIN4% = 1
PINLIN3% = 1
PINLIN2% = 1
HEADPIN% = 1
L1:
  N% = 1
  FOR I% = 1 TO 20: ' Adjust according to your machine speed
  WAIT &H3DA, 8, 8: : WAIT &H3DA, 8
  LOCATE 2, 37: IF PINLIN4% = 1 THEN PRINT "O O O O" ELSE PRINT "        "
  LOCATE 3, 38: IF PINLIN3% = 1 THEN PRINT "O O O" ELSE PRINT "     "
  LOCATE 4, 39: IF PINLIN2% = 1 THEN PRINT "O O" ELSE PRINT "   "
  LOCATE 5, 40: IF HEADPIN% = 1 THEN PRINT "O" ELSE PRINT " "
  LOCATE Q, 40: PRINT "0"
  NEXT I%
  I% = 0
  Q = Q - 1
  IF Q < 2 THEN GOTO L2
  LOCATE Q + 1, 40: PRINT " "
  IF Q = 5 THEN HEADPIN% = 0
  IF Q = 4 THEN PINLIN2% = 0
  IF Q = 3 THEN PINLIN3% = 0
  IF Q = 2 THEN PINLIN4% = 0
GOTO L1

L2:

(The N% = 1 appeared never to be used and can be dropped from either structure)

Mac
Reply
#27
Code:
Flag = 0
For a = 0 To 1000
For b = 0 To 1000
  For c = 0 To 1000
   For d = 0 To 1000
    If a = 5 And b = 10 And c = 833 And d = 162 Then Flag = 1
    If Flag = 1 Then Exit For
   Next
   If Flag = 1 Then Exit For
  Next
  If Flag = 1 Then Exit For
Next
If Flag = 1 Then Exit For
Next
If Flag = 0 Then
Print "ERROR"
End
End If
Print "Code executed ok!"

[syntax="QBASIC"]
Success% = 0
FOR a = 0 TO 1000
FOR b = 0 TO 1000
FOR c = 0 TO 1000
FOR d = 0 TO 1000
IF a = 5 AND b = 10 AND c = 833 AND d = 162 THEN
Success% = 1
EXIT FOR
END IF
NEXT d, c, b, a
IF Success% = 0 THEN PRINT "Error!" ELSE PRINT "Code executed ok!"
[/syntax]

Although, honestly, I'd go mad if I ever wrote a program with a nested loop like that.

*peace*

Meg.
Reply
#28
Thanks to all that are helping.

I seem to write my programs very linear, if you go all the way through step by step you'll see that everything seems to be in a line pattern...

By the way, I have another project that needs rebuilding, TICTACTO. Here it is.

Code:
TOP:

'MAIN MENU SCREEN STARTS

SCREEN 0: WIDTH 80, 25
CLS
P% = 0
RANDOMIZE TIMER
LOCATE 1, 32: COLOR INT(RND * 15) + 1, 0: PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍ»"
LOCATE 2, 32: COLOR INT(RND * 15) + 1, 0: PRINT "º TIC       º": LOCATE 2, 45: COLOR 8, 0: PRINT "±±"
LOCATE 3, 32: COLOR INT(RND * 15) + 1, 0: PRINT "º    TAC    Âº": LOCATE 3, 45: COLOR 8, 0: PRINT "±±"
LOCATE 4, 32: COLOR INT(RND * 15) + 1, 0: PRINT "º       TOE º": LOCATE 4, 45: COLOR 8, 0: PRINT "±±"
LOCATE 5, 32: COLOR INT(RND * 15) + 1, 0: PRINT "ÈÍÍÍÍÍÍÍÍÍÍͼ": LOCATE 5, 45: COLOR 8, 0: PRINT "±±"
LOCATE 6, 32: COLOR 8, 0: PRINT "±±±±±±±±±±±±±±±"
LOCATE 7, 32: COLOR 7, 0: PRINT "BY JOHN KREITLOW"
LOCATE 8, 34: PRINT "RADIUM-V, INC."
LOCATE 10, 28: PRINT "CREATION DATE 12/26/04"
PRINT
PRINT
PRINT "PRESS ENTER TO START A NEW GAME"
PRINT
PRINT "GAME KEYS:"
PRINT "PRESS `H' FOR HELP"
PRINT "PRESS `ESC' TO QUIT"
PRINT "PRESS `P' TO PAUSE"
FOR Q% = 1 TO 5
NEXT Q%
DO: N$ = INKEY$
IF N$ = CHR$(27) THEN GOTO QUIT
IF N$ = CHR$(104) OR N$ = CHR$(72) THEN GOSUB HELP
'MAIN MENU ENDS

LOOP UNTIL N$ = CHR$(13)
CLS
0
'WHAT I CALL CALIBRATION
A% = 0
B% = 0
C% = 0
D% = 0
E% = 0
F% = 0
G% = 0
H% = 0
I% = 0
J% = 0
K% = 0
L% = 106
M% = 66
P% = 1
1 SCREEN 13

'GRID LINES
LINE (0, 66)-(320, 66), 8
LINE (0, 132)-(320, 132), 8
LINE (106, 0)-(106, 200), 8
LINE (213, 0)-(213, 200), 8

'DRAWS THE X

IF A% = 1 THEN LINE (0, 0)-(106, 66): LINE (106, 0)-(0, 66)
IF B% = 1 THEN LINE (106, 0)-(212, 66): LINE (212, 0)-(106, 66)
IF C% = 1 THEN LINE (212, 0)-(320, 66): LINE (320, 0)-(212, 66)
IF D% = 1 THEN LINE (0, 66)-(106, 132): LINE (106, 66)-(0, 132)
IF E% = 1 THEN LINE (106, 66)-(212, 132): LINE (212, 66)-(106, 132)
IF F% = 1 THEN LINE (212, 66)-(320, 132): LINE (320, 66)-(212, 132)
IF G% = 1 THEN LINE (0, 132)-(106, 200): LINE (106, 132)-(0, 200)
IF H% = 1 THEN LINE (106, 132)-(212, 200): LINE (212, 132)-(106, 200)
IF I% = 1 THEN LINE (212, 132)-(320, 200): LINE (320, 132)-(212, 200)
        
'DRAWS THE O

IF A% = 2 THEN CIRCLE (53, 33), 39
IF B% = 2 THEN CIRCLE (159, 33), 39
IF C% = 2 THEN CIRCLE (265, 33), 39
IF D% = 2 THEN CIRCLE (53, 99), 39
IF E% = 2 THEN CIRCLE (159, 99), 39
IF F% = 2 THEN CIRCLE (265, 99), 39
IF G% = 2 THEN CIRCLE (53, 165), 39
IF H% = 2 THEN CIRCLE (159, 165), 39
IF I% = 2 THEN CIRCLE (265, 165), 39

'IF X'S LINED UP, GOTO WIN!

IF A% = 1 AND B% = 1 AND C% = 1 THEN GOTO WIN
IF A% = 1 AND E% = 1 AND I% = 1 THEN GOTO WIN
IF A% = 1 AND D% = 1 AND G% = 1 THEN GOTO WIN
IF B% = 1 AND E% = 1 AND H% = 1 THEN GOTO WIN
IF C% = 1 AND F% = 1 AND I% = 1 THEN GOTO WIN
IF C% = 1 AND E% = 1 AND G% = 1 THEN GOTO WIN
IF D% = 1 AND E% = 1 AND F% = 1 THEN GOTO WIN
IF G% = 1 AND H% = 1 AND I% = 1 THEN GOTO WIN

'IF O'S LINED UP, GOTO LOSE...

IF A% = 2 AND B% = 2 AND C% = 2 THEN GOTO LOSE
IF A% = 2 AND E% = 2 AND I% = 2 THEN GOTO LOSE
IF A% = 2 AND D% = 2 AND G% = 2 THEN GOTO LOSE
IF B% = 2 AND E% = 2 AND H% = 2 THEN GOTO LOSE
IF C% = 2 AND F% = 2 AND I% = 2 THEN GOTO LOSE
IF C% = 2 AND E% = 2 AND G% = 2 THEN GOTO LOSE
IF D% = 2 AND E% = 2 AND F% = 2 THEN GOTO LOSE
IF G% = 2 AND H% = 2 AND I% = 2 THEN GOTO LOSE

'CAT'S GAME

IF A% > 0 AND B% > 0 AND C% > 0 AND D% > 0 AND E% > 0 AND F% > 0 AND G% > 0 AND H% > 0 AND I% > 0 THEN GOTO CATGAME

'CURRENT X

LINE (J%, K%)-(L%, M%), 1
LINE (L%, K%)-(J%, M%), 1

N$ = INKEY$
IF N$ = CHR$(0) + "H" THEN GOTO UP
IF N$ = CHR$(0) + "P" THEN GOTO DOWN
IF N$ = CHR$(0) + "M" THEN GOTO RIGHT
IF N$ = CHR$(0) + "K" THEN GOTO LEFT
IF N$ = CHR$(32) THEN GOTO ENTER
IF N$ = CHR$(27) THEN GOTO QUIT
IF N$ = CHR$(104) OR N$ = CHR$(72) THEN GOSUB HELP
IF N$ = CHR$(80) OR N$ = CHR$(112) THEN GOSUB PAUSE
GOTO 1

UP:
LINE (J%, K%)-(L%, M%), 0
LINE (L%, K%)-(J%, M%), 0
K% = K% - 66
M% = M% - 66
IF K% < 0 THEN K% = K% + 66: M% = M% + 66
GOTO 1

DOWN:
LINE (J%, K%)-(L%, M%), 0
LINE (L%, K%)-(J%, M%), 0
K% = K% + 66
M% = M% + 66
IF K% > 132 THEN K% = K% - 66: M% = M% - 66
GOTO 1

LEFT:
LINE (J%, K%)-(L%, M%), 0
LINE (L%, K%)-(J%, M%), 0
J% = J% - 106
L% = L% - 106
IF J% < 0 THEN J% = J% + 106: L% = L% + 106
GOTO 1

RIGHT:
LINE (J%, K%)-(L%, M%), 0
LINE (L%, K%)-(J%, M%), 0
J% = J% + 106
L% = L% + 106
IF J% > 212 THEN J% = J% - 106: L% = L% - 106
GOTO 1

ENTER:

'IF THEY HIT ENTER, IT ANALYZES THE SITUATION

'IF ENTER WAS HIT AND THE SPACE IS TAKEN THEN RETURN

IF J% = 0 AND K% = 0 AND A% > 0 THEN GOTO 1
IF J% = 106 AND K% = 0 AND B% > 0 THEN GOTO 1
IF J% = 212 AND K% = 0 AND C% > 0 THEN GOTO 1
IF J% = 0 AND K% = 66 AND D% > 0 THEN GOTO 1
IF J% = 106 AND K% = 66 AND E% > 0 THEN GOTO 1
IF J% = 212 AND K% = 66 AND F% > 0 THEN GOTO 1
IF J% = 0 AND K% = 132 AND G% > 0 THEN GOTO 1
IF J% = 106 AND K% = 132 AND H% > 0 THEN GOTO 1
IF J% = 212 AND K% = 132 AND I% > 0 THEN GOTO 1

'SETS THE SQUARE AS OCCUPIED

IF J% = 0 AND K% = 0 AND A% <> (0 OR 2) THEN A% = 1
IF J% = 106 AND K% = 0 AND B% <> (0 OR 2) THEN B% = 1
IF J% = 212 AND K% = 0 AND C% <> (0 OR 2) THEN C% = 1
IF J% = 0 AND K% = 66 AND D% <> (0 OR 2) THEN D% = 1
IF J% = 106 AND K% = 66 AND E% <> (0 OR 2) THEN E% = 1
IF J% = 212 AND K% = 66 AND F% <> (0 OR 2) THEN F% = 1
IF J% = 0 AND K% = 132 AND G% <> (0 OR 2) THEN G% = 1
IF J% = 106 AND K% = 132 AND H% <> (0 OR 2) THEN H% = 1
IF J% = 212 AND K% = 132 AND I% <> (0 OR 2) THEN I% = 1

'I DON'T KNOW WHICH ONE IS USED, THIS OR THE PREVIOUS ONE

IF A% > 0 AND B% > 0 AND C% > 0 AND D% > 0 AND E% > 0 AND F% > 0 AND G% > 0 AND H% > 0 AND I% > 0 THEN GOTO CATGAME

COMPGO:

'COMPUTER'S TURN

O% = INT(RND * 9) + 1

'HERE'S THE "SMARTS" OF THE COMPUTER

IF A% = 1 AND B% = 1 AND C% = 0 THEN O% = 3
IF A% = 1 AND C% = 1 AND B% = 0 THEN O% = 2
IF B% = 1 AND C% = 1 AND A% = 0 THEN O% = 1

IF A% = 1 AND E% = 1 AND I% = 0 THEN O% = 9
IF A% = 1 AND I% = 1 AND E% = 0 THEN O% = 5
IF E% = 1 AND I% = 1 AND A% = 0 THEN O% = 1

IF A% = 1 AND D% = 1 AND G% = 0 THEN O% = 7
IF A% = 1 AND G% = 1 AND D% = 0 THEN O% = 4
IF D% = 1 AND G% = 1 AND A% = 0 THEN O% = 1

IF B% = 1 AND E% = 1 AND H% = 0 THEN O% = 8
IF B% = 1 AND H% = 1 AND E% = 0 THEN O% = 5
IF E% = 1 AND H% = 1 AND B% = 0 THEN O% = 2

IF C% = 1 AND F% = 1 AND I% = 0 THEN O% = 9
IF C% = 1 AND I% = 1 AND F% = 0 THEN O% = 6
IF F% = 1 AND I% = 1 AND C% = 0 THEN O% = 3

IF C% = 1 AND E% = 1 AND G% = 0 THEN O% = 7
IF C% = 1 AND G% = 1 AND E% = 0 THEN O% = 5
IF E% = 1 AND G% = 1 AND C% = 0 THEN O% = 3

IF G% = 1 AND H% = 1 AND I% = 0 THEN O% = 9
IF G% = 1 AND I% = 1 AND H% = 0 THEN O% = 8
IF H% = 1 AND I% = 1 AND G% = 0 THEN O% = 7

IF D% = 1 AND E% = 1 AND F% = 0 THEN O% = 6
IF D% = 1 AND F% = 1 AND E% = 0 THEN O% = 5
IF E% = 1 AND F% = 1 AND D% = 0 THEN O% = 4

'CORRECTS IF THE SQUARE IS TAKEN

IF O% = 1 AND A% > 0 THEN GOTO COMPGO
IF O% = 2 AND B% > 0 THEN GOTO COMPGO
IF O% = 3 AND C% > 0 THEN GOTO COMPGO
IF O% = 4 AND D% > 0 THEN GOTO COMPGO
IF O% = 5 AND E% > 0 THEN GOTO COMPGO
IF O% = 6 AND F% > 0 THEN GOTO COMPGO
IF O% = 7 AND G% > 0 THEN GOTO COMPGO
IF O% = 8 AND H% > 0 THEN GOTO COMPGO
IF O% = 9 AND I% > 0 THEN GOTO COMPGO

'SETS THE SQUARE

IF O% = 1 AND A% = 0 THEN A% = 2
IF O% = 2 AND B% = 0 THEN B% = 2
IF O% = 3 AND C% = 0 THEN C% = 2
IF O% = 4 AND D% = 0 THEN D% = 2
IF O% = 5 AND E% = 0 THEN E% = 2
IF O% = 6 AND F% = 0 THEN F% = 2
IF O% = 7 AND G% = 0 THEN G% = 2
IF O% = 8 AND H% = 0 THEN H% = 2
IF O% = 9 AND I% = 0 THEN I% = 2

GOTO 1

WIN:
LOCATE 13, 16: PRINT "YOU WIN!"
LOCATE 14, 13: PRINT "PRESS SPACE"
DO: LOOP UNTIL INKEY$ = CHR$(32)
GOTO TOP

LOSE:
LOCATE 13, 15: PRINT "YOU LOSE!"
LOCATE 14, 13: PRINT "PRESS SPACE"
DO: LOOP UNTIL INKEY$ = CHR$(32)
GOTO TOP

CATGAME:
LOCATE 13, 13: PRINT "CAT'S GAME!"
LOCATE 14, 13: PRINT "PRESS SPACE"
DO: LOOP UNTIL INKEY$ = CHR$(32)
GOTO TOP

PAUSE:
LOCATE 13, 18: PRINT "PAUSED!"
LOCATE 14, 12: PRINT "SPACE TO CONTINUE"
DO: LOOP UNTIL INKEY$ = CHR$(32)
CLS
RETURN
'-----------------------------------------------------------------------------

QUIT:
END

HELP:

'HELP SCREEN

SCREEN 0: WIDTH 80, 25
CLS
PRINT "HELP:"
PRINT
PRINT "To select a square, use the arrow keys to move."
PRINT "Then, press the SPACEBAR to place your X on the square."
PRINT "Try to get 3 X's in a row, from one edge to the other either"
PRINT "Horizontally, vertically, or diagonally.  Watch out, though!  The"
PRINT "computer has a mind of its own and can block your move.  Try to outsmart"
PRINT "the computer and win.  Good luck!"
PRINT
PRINT "You are the blue X.  That is your current area.  You cannot place your X"
PRINT "over any space that either already has an X or an O.  If you cannot find"
PRINT "the blue X on the board, simply move it around and it will show itself."
PRINT
PRINT "PRESS ANY KEY TO RETURN"
DO: LOOP UNTIL INKEY$ > CHR$(0)

'FOR SCREEN ISSUES:
IF P% = 0 THEN GOTO TOP
IF P% = 1 THEN RETURN

The only problem is that I use two computers for replying: one to write it and one to post it. So, the wierd symbols are really supposed to be a window. Hope you don't mind.

Anyone who decides to contribute will be added to my fake RADIUM-V company in the credits.
Reply
#29
well ill try my best to help ya but the only thing is the only compiler i can get to work for me is freebasic thats how i found this place. but it does not yet support the 'and' operator so some modifications could be made there ill copy it and do what i can using freebasic but i suggest maybe finding another compiler depending on your comp, but n e way a person who say's they cant has just been surpassed by the one who just did. so count me in
o live is to die, to die is to expel, to expel is to exist is to live without knowing to be
Reply
#30
edit:

Well, the documentation went a lot faster than I thought it would. So here you go! BOWLING, cleaned, re-coded, and with computer speed check.

http://www.ifcdata.com/mb/qb/bowl.bas

John K, please see if you can follow through this code, and let me know if anything in there doesn't make sense.

Also, please take a look at the GetPower function. I couldn't figure out what the E variable did in your program, so I just left it out.

*peace*

Meg.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)