Common Int score[2], player randomize Do cls; tabxy (20,12) p=keyin int ("Do you want to be player #1 or player #2? ") If p=1 Or p=2 Break Loop If (p=2) p=0 Do init @ player=p Do If player If !get move() Call quit End Else make move @ If (!update()) player=1-player If score[0]+score[1]=25 If (score[0]>score[1]) w="Red\nWins" Else w="Blue\nWins" tabxy (39,15) framed text (w) wait key (0, 2500) Break End delay (500) Loop Loop //----------------------------------------------------------------------------------- Task init Common Int score[2], player score[0]=0; score[1]=0 cls; hide mouse solid color (3) solid rectangle (0, 0, 639, 479) solid color (7) solid rectangle (170, 90, 469, 389) frame (170, 90, 469, 389) solid color (0) Do ky=0,5 Do kx=0,5 x=195+50*kx y=115+50*ky solid rectangle (x-2, y-2, x+2, y+2) Loop Loop show mouse //----------------------------------------------------------------------------------- Int get move () Int xc, yc, hv, but Do get door (xc, yc, hv, but) @ If but hide mouse If getpixel (xc, yc) Break show mouse End If readkey(27) Return 0 Loop move (xc, yc, hv) @ Return 1 //----------------------------------------------------------------------------------- Task make move Common Int score[2], player hide mouse //Test for "gimmies" Do j=-2,+2 xx=320+50*j Do k=-2,+2 yy=240+50*k If getpixel(xx,yy)!=7 Continue z=getpixel(xx-25,yy) + \ getpixel(xx+25,yy) + \ getpixel(xx,yy-25) + \ getpixel(xx,yy+25) If z=7 If (getpixel(xx-25,yy)) move (xx-25, yy, 1) @ If (getpixel(xx+25,yy)) move (xx+25, yy, 1) @ If (getpixel(xx,yy-25)) move (xx, yy-25, 0) @ If (getpixel(xx,yy+25)) move (xx, yy+25, 0) @ Return End Loop Loop n1=0; n2=0 hv1=-1; hv2=-1 //Test vertical doors Do j=0,5 xx=195+50*j Do k=1,5 yy=90+50*k If getpixel(xx,yy)!=7 Continue zz=looklr(xx,yy) If zz>7 n1=n1+1 If random(n1) Continue x1=xx; y1=yy; hv1=1 End Else n2=n2+1 If random(n2) Continue x2=xx; y2=yy; hv2=1 End Loop Loop //Test horizontal doors Do j=1,5 xx=170+50*j Do k=0,5 yy=115+50*k If getpixel(xx,yy)!=7 Continue zz=lookud(xx,yy) If zz>7 n1=n1+1 If random(n1) Continue x1=xx; y1=yy; hv1=0 End Else n2=n2+1 If random(n2) Continue x2=xx; y2=yy; hv2=0 End Loop Loop //Select move If (hv1<0) move (x2, y2, hv2) @ Else move (x1, y1, hv1) @ //----------------------------------------------------------------------------------- Int update () Common Int score[2], player hide mouse mark=0 Do j=-2,+2 xx=320+50*j Do k=-2,+2 yy=240+50*k If getpixel(xx,yy)!=7 Continue If getpixel(xx-25,yy) + \ getpixel(xx+25,yy) + \ getpixel(xx,yy-25) + \ getpixel(xx,yy+25) Continue If player solid color (1) filled circle (xx, yy, 20) solid color (9) filled circle (xx, yy, 10) End Else solid color (4) filled circle (xx, yy, 20) solid color (12) filled circle (xx, yy, 10) End score[player]=score[player]+1 mark=mark+1 Loop Loop show mouse Return mark //----------------------------------------------------------------------------------- Task get door (Int xc, Int yc, Int hv, Int but) Int xa, xb, ya, yb, xm, ym da=9999; db=9999 read mouse (xm, ym, but) Do ky=0,5 y=115+50*ky Do kx=0,5 x=195+50*kx d=iabs(x-xm)+iabs(y-ym) If d420 Return l Return mini (l, r) //----------------------------------------------------------------------------------- Int lookud (Int xx, Int yy) u=getpixel(xx-25,yy-25) + \ getpixel(xx+25,yy-25) + \ getpixel(xx,yy-50) d=getpixel(xx-25,yy+25) + \ getpixel(xx+25,yy+25) + \ getpixel(xx,yy+50) If yy<140 Return d If yy>340 Return u Return mini (u, d)