REM Original program was by Gary Ewer. REM REM Modified by Wayne Geary to correct REM a few minor typos, restructure, and REM option for play against the Psion REM added. Now approx 60% of orig size. REM REM Please feel free to use parts of the REM code in your own programs, however REM please do not modify it and redist- REM ribute it. REM If you believe you have made useful REM modifications to the code however, REM please do email me and tell me at REM gary.ewer@earthling.net REM APP OandX REM type 0 REM icon "\opd\icons\o-and-x" REM ENDA PROC Main: GLOBAL Opath$(128),Obitid%,Xpath$(128),Xbitid%,P1name$(10),P2name$(10),Player$(10) GLOBAL Go%,S%,M%,P2Tot%,P1Tot%,Plyr%,Symbl%,END%,Cell%(9),Cx%,Cy%,Try%,Try$(2) P1name$="Player 1" P2name$="Player 2" dINIT " Who wants to play?" dTEXT "","Set one of the players to" dTEXT "","'PSION' to Play computer" dTEXT ""," " dEDIT P1name$,"Player 1" dEDIT P2name$,"Player 2" DIALOG START:: Go%=1: End%=0: Try%=1: Plyr%=1: Player$=P1name$ WHILE Try% <=9 Cell%(Try%)=0 Try%=Try%+1 ENDWH gAT 0,0 : gFILL 480,160,1 gFONT 8 gAT 100,0 : gFILL 5,160,0 gAT 155,0 : gFILL 5,160,0 gAT 50,50 : gFILL 160,5,0 gAT 50,105 : gFILL 160,5,0 gAT 55,20 : gPRINT "a1" gAT 110,20 : gPRINT "b1" gAT 165,20 : gPRINT "c1" gAT 55,75 : gPRINT "a2" gAT 110,75 : gPRINT "b2" gAT 165,75 : gPRINT "c2" gAT 55,130 : gPRINT "a3" gAT 110,130: gPRINT "b3" gAT 165,130: gPRINT "c3" gAT 240,50 : gFILL 160,2,0 gAT 240,50 : gFILL 2,40,0 gAT 240,90 : gFILL 160,2,0 gAT 400,50 : gFILL 2,40,0 gFONT 6 : gAT 240,30 gPRINT "E-mail " gAT 240,15 gPRINT "Orignal code ¸ Gary Ewer 1998" gAT 240,45 gPRINT "Mods & A.I. by Wayne Geary 1999" gAT 245,67 gPRINT""+P1name$+" = "+FIX$(p1tot%,0,100)+"" gAT 245,82 gPRINT""+P2name$+" = "+FIX$(p2tot%,0,100)+"" S%=S%+1 IF S%>1 gCLOSE Obitid% gCLOSE Xbitid% ENDIF Opath$="M:\OPD\Naught.pic" Obitid%=gLOADBIT(Opath$,1) Xpath$="M:\OPD\X.pic" Xbitid%=gLOADBIT(Xpath$,2) Symbl% = Obitid% mINIT mCARD "Game","New Game",%n,"Exit",%x M%=MENU IF M%=%n GOTO PLAY:: ENDIF IF M%=%x dINIT "Exit O and X" dTEXT "","Are you sure?",2 dBUTTONS "No",%N,"Yes",%Y M%=DIALOG IF M%=ASC("y") STOP ENDIF ENDIF GOTO START:: PLAY:: Try$="" If Player$="PSION" OR Player$="Psion" or Player$="psion" dINIT "Computers turn" dTEXT "","Please press 'RETURN' key" dEDIT Try$, "for Psion to make a Play" dPOSITION 1,1 DIALOG COMPUTE: ELSE dINIT ""+Player$+"'s turn" dEDIT Try$, "Which cell do you want to use" dPOSITION 1,1 DIALOG ENDIF Try%=0 IF Try$="A1" OR Try$="a1" Try%=1 : Cx%=50 : Cy%=0 ELSEIF Try$="B1" OR Try$="b1" Try%=2 : Cx%=105 : Cy%=0 ELSEIF Try$="C1" OR Try$="c1" Try%=3 : Cx%=160 : Cy%=0 ELSEIF Try$="A2" OR Try$="a2" Try%=4 : Cx%=50 : Cy%=55 ELSEIF Try$="B2" OR Try$="b2" Try%=5 : Cx%=105 : Cy%=55 ELSEIF Try$="C2" OR Try$="c2" Try%=6 : Cx%=160 : Cy%=55 ELSEIF Try$="A3" OR Try$="a3" Try%=7 : Cx%=50 : Cy%=110 ELSEIF Try$="B3" OR Try$="b3" Try%=8 : Cx%=105 : Cy%=110 ELSEIF Try$="C3" OR Try$="c3" Try%=9 : Cx%=160 : Cy%=110 ENDIF IF Try%=0 dINIT "That is not a valid cell!" dTEXT "",""+Player$+" please retype your choice",2 dPOSITION 1,1 DIALOG GOTO PLAY:: ENDIF IF Cell%(Try%)>0 dINIT "That cell has already been used!" dTEXT "",""+Player$+" please retype your choice",2 dPOSITION 1,1 DIALOG GOTO PLAY:: ENDIF gAT 0,0 gUSE 1 gAT Cx%,Cy% gCOPY Symbl%,0,0,50,50,3 Cell%(Try%)=Plyr% CHECK:: IF Cell%(1) = Plyr% AND Cell%(2) = Plyr% AND Cell%(3) = Plyr% gAT 50,22 gFILL 160,6,0 End%=END%+1 ENDIF IF Cell%(4) = Plyr% AND Cell%(5) = Plyr% AND Cell%(6) = Plyr% gAT 50,77 gFILL 160,6,0 End%=END%+1 ENDIF IF Cell%(7) = Plyr% AND Cell%(8) = Plyr% AND Cell%(9) = Plyr% gAT 50,132 gFILL 160,6,0 End%=END%+1 ENDIF IF Cell%(1) = Plyr% AND Cell%(4) = Plyr% AND Cell%(7) = Plyr% gAT 72,0 gFILL 6,160,0 End%=END%+1 ENDIF IF Cell%(2) = Plyr% AND Cell%(5) = Plyr% AND Cell%(8) = Plyr% gAT 127,0 : gFILL 6,160,0 End%=END%+1 ENDIF IF Cell%(3) = Plyr% AND Cell%(6) = Plyr% AND Cell%(9) = Plyr% gAT 182,0 : gFILL 6,160,0 End%=END%+1 ENDIF IF Cell%(1) = Plyr% AND Cell%(5) = Plyr% AND Cell%(9) = Plyr% gAT 50,0 : gLINETO 210,160 gAT 51,0 : gLINETO 210,159 gAT 50,1 : gLINETO 209,160 gAT 50,2 : gLINETO 208,160 gAT 52,0 : gLINETO 210,158 gAT 53,0 : gLINETO 210,157 gAT 50,3 : gLINETO 207,160 End%=END%+1 ENDIF IF Cell%(3) = Plyr% AND Cell%(5) = Plyr% AND Cell%(7) = Plyr% gAT 50,160 : gLINETO 210,0 gAT 50,159 : gLINETO 209,0 gAT 50,158 : gLINETO 208,0 gAT 50,157 : gLINETO 207,0 gAT 51,160 : gLINETO 210,1 gAT 52,160 : gLINETO 210,2 gAT 53,160 : gLINETO 210,3 End%=END%+1 ENDIF IF END%>0 dINIT ""+Player$+" is the winner!" IF END%=1 dTEXT "","Congratulations",2 ELSEIF END%>1 dtext "","TWO lines! What a walk over!" ENDIF dPOSITION 1,1 DIALOG IF Plyr%=1 P1Tot%=P1Tot%+1 ELSE P2Tot%=P2Tot%+1 ENDIF GOTO Start:: ENDIF Plyr% = Plyr% + 1 Player$ = P2name$ Symbl% = Xbitid% IF Plyr% > 2 Plyr%=1 Player$ = P1name$ Symbl%=Obitid% ENDIF Go%=Go%+1 IF Go%<=9 GOTO PLAY:: ENDIF dINIT "Neither of you won!" dTEXT "","Please Play another game!" dtext "","Press 'RETURN' to continue" dPOSITION 1,1 DIALOG GOTO START:: ENDP PROC Compute: GLOBAL Pick%,L1%,L2%,L3% LOCAL Opp1%,Opp2%,Opp3%,Slct% LOCAL Own1%,Own2%,Own3%,Sel% IF Go%=1 Pick%=5 ENDIF IF Go%=2 OR Go%=3 IF Cell%(5)=0 Pick%=5 ELSEIF Cell%(1)=0 AND Cell%(9)=0 Pick%=1 ELSEIF Cell%(3)=0 AND Cell%(7)=0 Pick%=3 ENDIF ENDIF IF Go%=4 OR Go%=5 Slct%=1 IF Go%=5 Slct%=2 ENDIF SCANCELL:(Slct%) REM This blocks opponents third point FIND3RD:(L1%,L2%) REM CHECK also if Psion can CLOSE Slct%=2 IF Go%=5 Slct%=1 ENDIF Opp1%=Pick% SCANCELL:(Slct%) REM Can we Win Game now! FIND3RD:(L1%,L2%) IF Pick%=0 Pick%=Opp1% : REM can't close so block ENDIF ENDIF IF Go%>5 AND Go%<9 Slct%=1 IF Go%=7 Slct%=2 ENDIF SCANCELL:(Slct%) REM Find where to Block Opponent FIND3RD:(L1%,L2%) Opp1%=Pick% FIND3RD:(L1%,L3%) Opp2%=Pick% FIND3RD:(L2%,L3%) Opp3%=Pick% Slct%=2 IF Go%=7 Slct%=1 ENDIF SCANCELL:(Slct%) REM Find out if can Win NOW! FIND3RD:(L1%,L2%) Own1%=Pick% FIND3RD:(L1%,L3%) Own2%=Pick% FIND3RD:(L2%,L3%) Own3%=Pick% Pick%=0 IF Own1%>0 Pick%=Own1% ELSEIF Own2%>0 Pick%=Own2% ELSEIF Own3%>0 Pick%=Own3% ENDIF IF Pick%=0 Pick%=Opp1% ENDIF IF Pick%=0 Pick%=Opp2% ENDIF IF Pick%=0 Pick%=Opp3% ENDIF ENDIF If Pick%=0 Sel% = 1 While pick%=0 IF Cell%(Sel%) = 0 Pick%=Sel% ENDIF Sel%=Sel%+1 ENDWH ENDIF If Pick%=1 Try$="A1" ELSEIF Pick%=2 Try$="B1" ELSEIF Pick%=3 Try$="C1" ELSEIF Pick%=4 Try$="A2" ELSEIF Pick%=5 Try$="B2" ELSEIF Pick%=6 Try$="C2" ELSEIF Pick%=7 Try$="A3" ELSEIF Pick%=8 Try$="B3" ELSEIF Pick%=9 Try$="C3" ENDIF ENDP PROC FIND3RD:(C1%,C2%) Pick%=0 IF (C1%=3 AND C2%=2) OR (C1%=7 AND C2%=4) OR (C1%=9 AND C2%=5) Pick%=1 ELSEIF (C1%=3 AND C2%=1) OR (C1%=8 AND C2%=5) Pick%=2 ELSEIF (C1%=2 AND C2%=1) OR (C1%=7 AND C2%=5) OR (C1%=9 AND C2%=6) Pick%=3 ELSEIF (C1%=7 AND C2%=1) OR (C1%=6 AND C2%=5) Pick%=4 ELSEIF (C1%=9 AND C2%=1) OR (C1%=8 AND C2%=2) OR (C1%=7 AND C2%=3) OR (C1%=6 AND C2%=4) Pick%=5 ELSEIF (C1%=9 AND C2%=3) OR (C1%=5 AND C2%=4) Pick%=6 ELSEIF (C1%=4 AND C2%=1) OR (C1%=5 AND C2%=3) OR (C1%=9 AND C2%=8) Pick%=7 ELSEIF (C1%=9 AND C2%=7) OR (C1%=5 AND C2%=2) Pick%=8 ELSEIF (C1%=8 AND C2%=7) OR (C1%=5 AND C2%=1) OR (C1%=6 AND C2%=3) Pick%=9 ENDIF IF Pick%>0 IF Cell%(Pick%)>0 Pick%=0 ENDIF ENDIF ENDP PROC Scancell:(plr%) LOCAL Sel% Sel%=1:L1%=0:L2%=0:L3%=0 WHILE Sel%<=9 IF Cell%(Sel%)=plr% IF L1%>0 IF L2%>0 L3%=L2% ENDIF L2%=L1% ENDIF L1%=Sel% ENDIF Sel%=Sel%+1 ENDWH ENDP