home *** CD-ROM | disk | FTP | other *** search
EPOC OPL Source | 1998-08-27 | 11.9 KB | 714 lines |
-
-
- APP Puis4,29091974 REM My date of birth!!!
- ICON "Puis4Ico.mbm"
- ICON "Puis4Mask.mbm"
- ICON "Puis4_32Ico.mbm"
- ICON "Puis4_32Mask.mbm"
- ICON "Puis4_24Ico.mbm"
- ICON "Puis4_24Mask.mbm"
- ENDA
-
- PROC Start:
- GLOBAL Col1%(5),Col2%(5),Col3%(5),Col4%(5)
- GLOBAL Col5%(5),Col6%(5),Col7%(5),Player%
- GLOBAL Pl1$(8),Pl2$(8),DisPl%,Comp1%, Status%
- GLOBAL End%,Comp2%,flag%,UpArr%,SideArr%
- Splash:
- BUSY "INIT..."
- DisPl%=0 REM Disabled by default
- Pl1$="Sir RVB"
- Pl2$="Shake"
- Comp2%=-1
- Player%=1
- LOADM "Z:\System\Opl\Toolbar.opo"
- TBarLink:("TInit")
- ENDP
-
- PROC Splash:
- dINIT "Puissance 4"
- dTEXT "","Puissance 4 v0.6, by Herve Baile"
- dTEXT "","This game is not finished actually... There is no AI at all... and"
- dTEXT "","there is no support of the toolbar... The future version will fix"
- dTEXT "","that. I hope you will find this program and its source code useful."
- dTEXT "","Don't forget to mail me your comments at : hbaile@geocities.com"
- dTEXT "","Keep checking my homepage for the future releases and more infos."
- dBUTTONS "Ok",%o+256
- DIALOG
- ENDP
-
- PROC GrilleInit:
- LOCAL i%
- DO
- i%=i%+1
- Col1%(i%)=0
- Col2%(i%)=0
- Col3%(i%)=0
- Col4%(i%)=0
- Col5%(i%)=0
- Col6%(i%)=0
- Col7%(i%)=0
- UNTIL i%=5
- ENDP
-
- PROC ChangePlayer:
- IF Player%=1
- Player%=2
- ELSE
- Player%=1
- ENDIF
- ENDP
-
- PROC ClearBorders:
- gAT 0,0
- GFILL 507,17,1
- gAT 0,0
- GFILL 17,217,1
- ENDP
-
- PROC ArrowInit:
- rem LOCAL Up$(30),Side$(30)
- rem Up$="c:\System\Apps\Puis4\up.mbm"
- rem Side$="c:\System\Apps\Puis4\side.mbm"
- UpArr%=gLOADBIT("c:\System\Apps\Puis4\up.mbm",0)
- SideArr%=gLOADBIT("c:\System\Apps\Puis4\side.mbm",0)
- ALERT(NUM$(UpArr%,5),NUM$(SideArr%,5))
- gorder 1,255 rem main window background
- ENDP
-
- PROC LastCoin:
- ClearBorders:
- gAT 46,3
- gCOPY UpArr%,0,0,15,12,0
- gAT 3,31
- gCOPY SideArr%,0,0,12,15,0
- ENDP
-
- PROC Grille:
- LOCAL i%, j%, x%, y%
- gMOVE 19,19
- gXBORDER 2,$01,490,200
- x%=19:y%=19
- DO
- DO
- gAT x%,y%
- gXBORDER 2,$44,70,40
- x%=x%+70:i%=i%+1
- UNTIL i%=7
- i%=0:j%=j%+1
- x%=19:y%=y%+40
- UNTIL j%=5
- ENDP
-
- PROC GetRow:(c%)
- LOCAL i%,val%
- DO
- i%=i%+1
- val%=GetVal:(c%,i%)
- IF val%<>0
- IF i%-1<>0
- IF Player%=1
- SetVal:(c%,i%-1,1)
- ELSE
- SetVal:(c%,i%-1,2)
- ENDIF
- RETURN i%-1
- ELSE
- IF (Comp1%=0 AND Player%=1) OR (Comp2%=0 AND Player%=2)
- dINIT "ATTENTION"
- dTEXT "","This Column is full."
- dBUTTONS "Ok",%y
- DIALOG
- ENDIF
- RETURN 0
- ENDIF
- ENDIF
- UNTIL i%=5
- IF Player%=1
- SetVal:(c%,i%,1)
- ELSE
- SetVal:(c%,i%,2)
- ENDIF
- RETURN i%
- ENDP
-
- PROC GetVal:(c%,i%)
- IF c%=1
- RETURN col1%(i%)
- ELSEIF c%=2
- RETURN col2%(i%)
- ELSEIF c%=3
- RETURN col3%(i%)
- ELSEIF c%=4
- RETURN col4%(i%)
- ELSEIF c%=5
- RETURN col5%(i%)
- ELSEIF c%=6
- RETURN col6%(i%)
- ELSEIF c%=7
- RETURN col7%(i%)
- ENDIF
- ENDP
-
- PROC SetVal:(c%,i%,val%)
- IF c%=1
- col1%(i%)=val%
- ELSEIF c%=2
- col2%(i%)=val%
- ELSEIF c%=3
- col3%(i%)=val%
- ELSEIF c%=4
- col4%(i%)=val%
- ELSEIF c%=5
- col5%(i%)=val%
- ELSEIF c%=6
- col6%(i%)=val%
- ELSEIF c%=7
- col7%(i%)=val%
- ENDIF
- ENDP
-
-
- PROC Handle:
- LOCAL i%, col%, ev&(16), r%, cpt%
- BUSY OFF
- WHILE (1)
- DO
- IF Comp1%=-1 AND Comp2%=-1 AND End%=0
- CompPlay:
- i%=KEY
- IF i%<>0
- Settings:
- ENDIF
- ELSE
- IF ((Player%=1 AND Comp1%=-1) OR (Player%=2 AND Comp2%=-1)) AND End%=0
- CompPlay:
- ENDIF
- GETEVENT32 ev&()
- IF (ev&(1) AND &400)=0
- KeyHandle:(ev&(1))
- ENDIF
- IF ev&(3) = 10000 AND cpt%=0
- cpt%=1
- ELSEIF ev&(3) = 10000 AND cpt%=1
- cpt%=0
- MenuHandle:
- ENDIF
- ENDIF
- UNTIL ev&(1)=&408
- IF Comp1%=-1 AND Comp2%=-1 AND End%=0
- CompPlay:
- Settings:
- ENDIF
- IF ev&(4)=0 AND End%=0
- IF ev&(3)=1
- col%=ColPointed:(ev&(6),ev&(7))
- ELSE
- col%=0
- ENDIF
- IF col%<>0
- DrawCoin:(col%)
- gUPDATE
- IF DisPl%<>0 AND End%=0
- CurrentPlayer:
- ELSEIF DisPl%<>0 AND End%<>0
- BUSY OFF
- ENDIF
- ENDIF
- IF (Comp1%=-1 OR Comp2%=-1) AND End%=0 AND Col%<>0
- CompPlay:
- ENDIF
- ELSEIF ev&(4)=0 AND End%<>0
- r%=Attention:("Game finished",CHR$(End%), "New game?")
- IF r%=%y
- New:
- ENDIF
- ENDIF
- ENDWH
- ENDP
-
- PROC CompPlay:
- LOCAL Col%
- BUSY "Thinking",2
- Col%=Heuristic:
- DrawCoin:(Col%)
- gUPDATE
- BUSY OFF
- IF DisPl%<>0 AND End%=0
- CurrentPlayer:
- ELSEIF DisPl%<>0 AND End%<>0
- BUSY OFF
- ENDIF
- ENDP
-
- PROC Currentplayer:
- IF player%=2
- BUSY Pl2$+" turn...",2
- ELSE
- BUSY Pl1$+" turn...",2
- ENDIF
- ENDP
-
- PROC ColPointed:(x&,y&)
- IF y&>19 AND y&<219
- IF x&>19 AND x&<89
- RETURN 1
- ELSEIF x&>89 AND x&<159
- RETURN 2
- ELSEIF x&>159 AND x&<229
- RETURN 3
- ELSEIF x&>229 AND x&<299
- RETURN 4
- ELSEIF x&>299 AND x&<369
- RETURN 5
- ELSEIF x&>369 AND x&<439
- RETURN 6
- ELSEIF x&>439 AND x&<509
- RETURN 7
- ELSE
- RETURN 0
- ENDIF
- ENDIF
- ENDP
-
- PROC DrawCoin:(col%)
- LOCAL Row%,c%
- IF col%=1
- Row%=GetRow:(col%)
- gAT 54,39
- ELSEIF col%=2
- Row%=GetRow:(col%)
- gAT 124,39
- ELSEIF col%=3
- Row%=GetRow:(col%)
- gAT 194,39
- ELSEIF col%=4
- Row%=GetRow:(col%)
- gAT 264,39
- ELSEIF col%=5
- Row%=GetRow:(col%)
- gAT 334,39
- ELSEIF col%=6
- Row%=GetRow:(col%)
- gAT 404,39
- ELSEIF col%=7
- Row%=GetRow:(col%)
- gAT 474,39
- ENDIF
- IF Row%=0 AND ( (Comp1%=-1 AND Player%=1) OR (Comp2%=-1 AND Player%=2) )
- c%=Heuristic:
- DrawCoin:(c%)
- ENDIF
- IF Player%=1 AND Row%<>0
- gCOLOR 200,200,220
- gCIRCLE 10,1
- rem LastCoin:
- ELSEIF Player%=2 AND Row%<>0
- gCOLOR 0,0,0
- gCIRCLE 10,1
- rem LastCoin:
- ENDIF
- IF Row%>1
- ScrollCoin:(col%,Row%)
- Check:(col%,Row%)
- ChangePlayer:
- ELSEIF Row%<>0
- Check:(col%,Row%)
- ChangePlayer:
- ENDIF
- ENDP
-
- PROC Check:(col%,Row%)
- LOCAL Res1%,Res2%
- Res1%=Check_l:(col%,Row%,player%)
- Res2%=Check_r:(col%,Row%,player%)
- IF (Res1%+Res2%-1)>=4
- Win:(Player%)
- RETURN 0
- ENDIF
- Res1%=Check_d:(col%,Row%,player%)
- Res2%=Check_u:(col%,Row%,player%)
- IF (Res1%+Res2%-1)>=4
- Win:(Player%)
- RETURN 0
- ENDIF
- Res1%=Check_ul:(col%,Row%,player%)
- Res2%=Check_dr:(col%,Row%,player%)
- IF (Res1%+Res2%-1)>=4
- Win:(Player%)
- RETURN 0
- ENDIF
- Res1%=Check_ur:(col%,Row%,player%)
- Res2%=Check_dl:(col%,Row%,player%)
- IF (Res1%+Res2%-1)>=4
- Win:(Player%)
- RETURN 0
- ENDIF
- Res1%=End:
- IF Res1%=1
- End%=1
- Res2%=0
- Res1%=Attention:("A Draw","", "New game?")
- IF Res1%=%y
- New:
- ENDIF
- ENDIF
- ENDP
-
- PROC Win:(pl%)
- LOCAL Res%
- End%=1
- IF pl%=1 AND comp1%=-1
- Res%=Attention:("Victory","Computer 1 won!", "New game?")
- ELSEIF pl%=2 AND comp2%=-1
- Res%=Attention:("Victory","Computer 2 won!", "New game?")
- ELSEIF pl%=1
- Res%=Attention:("Victory",pl1$+" won!", "New game?")
- ELSE
- Res%=Attention:("Victory",pl2$+" won!", "New game?")
- ENDIF
- IF Res%=%y
- New:
- ENDIF
- ENDP
-
- PROC ScrollCoin:(c%,r%)
- LOCAL j%,k%,dx%,dy%,x%,y%
- dx%=0
- dy%=40*(r%-1)
- IF c%=1
- x%=43:y%=28
- ELSEIF c%=2
- x%=113:y%=28
- ELSEIF c%=3
- x%=183:y%=28
- ELSEIF c%=4
- x%=253:y%=28
- ELSEIF c%=5
- x%=323:y%=28
- ELSEIF c%=6
- x%=393:y%=28
- ELSEIF c%=7
- x%=463:y%=28
- ENDIF
- gUPDATE
- PAUSE 3
- DO
- j%=j%+1
- gSCROLL dx%,40,x%,y%,22,22
- gUPDATE
- y%=y%+40
- PAUSE 3
- UNTIL j%=r%-1
- ENDP
-
- PROC TInit:
- rem ArrowInit:
- TBarInit:("Puis 4",gWIDTH,gHEIGHT)
- TBarShow:
- New:
- ENDP
-
- PROC New:
- End%=0
- gCLS
- gBORDER 1
- GrilleInit:
- Grille:
- IF DisPl%<>0
- CurrentPlayer:
- ENDIF
- Handle:
- ENDP
-
- PROC Heuristic:
- RETURN 1+INT(RND*7)
- ENDP
-
- PROC KeyHandle:(k&)
- LOCAL mod%
- IF Comp1%=-1 AND Comp2%=-1
- Settings:
- RETURN 0
- ENDIF
- IF k&=14 REM "n"
- mod%=Attention:("New Game","","This game will be lost...")
- IF mod%=%y
- New:
- ENDIF
- ELSEIF k&=15 REM "o"
- Settings:
- ELSEIF k&=1 REM "a"
- About:
- ELSEIF k&=5 REM "e"
- mod%=Attention:("Exit","","You really want to quit?")
- IF mod%=%y
- STOP
- ENDIF
- ELSEIF k&=4150 REM "MENU"
- MenuHandle:
- ENDIF
- ENDP
-
- PROC MenuHandle:
- LOCAL choice%
- mINIT
- mCARD "Game","New",%n,"Settings",%o,"About",%a,"Quit",%e
- choice%=MENU
- IF choice%=%n
- choice%=Attention:("New Game","","This game will be lost...")
- IF choice%=%y
- New:
- ENDIF
- ELSEIF choice%=%o
- Settings:
- ELSEIF choice%=%a
- About:
- ELSEIF choice%=%e
- choice%=Attention:("Exit","","You really want to quit?")
- IF choice%=%y
- STOP
- ENDIF
- ENDIF
- ENDP
-
- PROC Attention:(title$,msg1$,msg2$)
- dINIT title$
- dTEXT msg1$,msg2$
- dBUTTONS "Yes",%y+256+512,"No",%n+256+512
- RETURN DIALOG
- ENDP
-
- PROC Settings:
- dINIT "Settings"
- dEDIT pl1$,"Player 1",10
- dEDIT pl2$,"Player 2",10
- dTEXT "","",$800
- dCHECKBOX Comp1%,"Computer Player 1"
- dCHECKBOX Comp2%,"Computer Player 2"
- dTEXT "","",$800
- dCHECKBOX DisPl%,"Display current player"
- dBUTTONS "Ok",%o+256
- DIALOG
- IF DisPl%=0
- BUSY OFF
- ELSEIF DisPl%=-1
- Currentplayer:
- ENDIF
- IF (Player%=1 AND Comp1%=-1) OR (Player%=2 AND Comp2%=-1)
- CompPlay:
- ENDIF
- ENDP
-
- PROC GetCoin:(c%,r%)
- IF c%=1
- RETURN col1%(r%)
- ELSEIF c%=2
- RETURN col2%(r%)
- ELSEIF c%=3
- RETURN col3%(r%)
- ELSEIF c%=4
- RETURN col4%(r%)
- ELSEIF c%=5
- RETURN col5%(r%)
- ELSEIF c%=6
- RETURN col6%(r%)
- ELSEIF c%=7
- RETURN col7%(r%)
- ENDIF
- ENDP
-
- PROC Check_l:(c%,r%,pl%)
- LOCAL curCol%,curRow%,count%,coin%,dr%
- curCol%=c%
- curRow%=r%
- DO
- IF curCol%<>0
- coin%=GetCoin:(curCol%,curRow%)
- ELSE
- break
- ENDIF
- IF coin%<>pl%
- break
- ELSE
- count%=count%+1
- ENDIF
- curCol%=curCol%-1
- UNTIL count%=4
- RETURN count%
- ENDP
-
- PROC Check_r:(c%,r%,pl%)
- LOCAL curCol%,curRow%,count%,coin%,dr%
- curCol%=c%
- curRow%=r%
- DO
- IF curCol%<>8
- coin%=GetCoin:(curCol%,curRow%)
- ELSE
- break
- ENDIF
- IF coin%<>pl%
- break
- ELSE
- count%=count%+1
- ENDIF
- curCol%=curCol%+1
- UNTIL count%=4
- RETURN count%
- ENDP
-
- PROC Check_d:(c%,r%,pl%)
- LOCAL curCol%,curRow%,count%,coin%,dr%
- curCol%=c%
- curRow%=r%
- DO
- IF curRow%<>6
- coin%=GetCoin:(curCol%,curRow%)
- ELSE
- break
- ENDIF
- IF coin%<>pl%
- break
- ELSE
- count%=count%+1
- ENDIF
- curRow%=curRow%+1
- UNTIL count%=4
- RETURN count%
- ENDP
-
- PROC Check_u:(c%,r%,pl%)
- LOCAL curCol%,curRow%,count%,coin%,dr%
- curCol%=c%
- curRow%=r%
- DO
- IF curRow%<>0
- coin%=GetCoin:(curCol%,curRow%)
- ELSE
- break
- ENDIF
- IF coin%<>pl%
- break
- ELSE
- count%=count%+1
- ENDIF
- curRow%=curRow%-1
- UNTIL count%=4
- RETURN count%
- ENDP
-
- PROC Check_ul:(c%,r%,pl%)
- LOCAL curCol%,curRow%,count%,coin%,dr%
- curCol%=c%
- curRow%=r%
- DO
- IF curRow%<>0 AND curCol%<>0
- coin%=GetCoin:(curCol%,curRow%)
- ELSE
- break
- ENDIF
- IF coin%<>pl%
- break
- ELSE
- count%=count%+1
- ENDIF
- curCol%=curCol%-1
- curRow%=curRow%-1
- UNTIL count%=4
- RETURN count%
- ENDP
-
- PROC Check_dr:(c%,r%,pl%)
- LOCAL curCol%,curRow%,count%,coin%,dr%
- curCol%=c%
- curRow%=r%
- DO
- IF curRow%<>6 AND curCol%<>8
- coin%=GetCoin:(curCol%,curRow%)
- ELSE
- break
- ENDIF
- IF coin%<>pl%
- break
- ELSE
- count%=count%+1
- ENDIF
- curCol%=curCol%+1
- curRow%=curRow%+1
- UNTIL count%=4
- RETURN count%
- ENDP
-
- PROC Check_ur:(c%,r%,pl%)
- LOCAL curCol%,curRow%,count%,coin%,dr%
- curCol%=c%
- curRow%=r%
- DO
- IF curRow%<>0 AND curCol%<>8
- coin%=GetCoin:(curCol%,curRow%)
- ELSE
- break
- ENDIF
- IF coin%<>pl%
- break
- ELSE
- count%=count%+1
- ENDIF
- curCol%=curCol%+1
- curRow%=curRow%-1
- UNTIL count%=4
- RETURN count%
- ENDP
-
- PROC Check_dl:(c%,r%,pl%)
- LOCAL curCol%,curRow%,count%,coin%,dr%
- curCol%=c%
- curRow%=r%
- DO
- IF curRow%<>6 AND curCol%<>0
- coin%=GetCoin:(curCol%,curRow%)
- ELSE
- break
- ENDIF
- IF coin%<>pl%
- break
- ELSE
- count%=count%+1
- ENDIF
- curCol%=curCol%-1
- curRow%=curRow%+1
- UNTIL count%=4
- RETURN count%
- ENDP
-
- PROC About:
- dINIT "About"
- dTEXT "","Puissance 4 v0.6, by Herve Baile"
- dTEXT "","This game is not finished actually. this is a trial version distributed"
- dTEXT "","freely on the WEB at : http://www.geocitties.com/SiliconValley/Bay/8292/"
- dTEXT "","The source code of this program is also available. I hope you will find"
- dTEXT "","it useful. Don't forget to mail me your comments at : hbaile@geocities.com"
- dTEXT "","Keep checking my homepage for the future releases and more infos."
- dBUTTONS "Ok",%o+256
- DIALOG
- ENDP
-
- PROC End:
- LOCAL c%,r%,coin%
- DO
- c%=c%+1
- DO
- r%=r%+1
- coin%=GetVal:(c%,r%)
- IF coin%=0
- RETURN coin%
- ENDIF
- UNTIL r%=5
- r%=0
- UNTIL c%=7
- RETURN 1
- ENDP
-
-
-