// joust pong // v0.7 int cgrav,cflap, ph, pw; int ssize, px[2], opy[2],py[2],ps[2]; int bx,by,bw,bxs, bys,obx,oby,bm; int score[2], maxscore; int end; string victory; firstVar(){ cgrav=5; cflap=15; bm=8; bxs=8; } initVars(){ maxscore=10; ph=30; pw=10; bw=6; ssize=160; py[0]=(160-ph)/2; py[1]=(160-ph)/2; px[0]=1; px[1]=ssize-pw-1; score[0]=0; score[1]=0; end=0; bx=(160-bw)/2; by=(160-bw)/2; } showVars(){ text(0,80,"Grav:"+cgrav+" "); text(40,80,"Flap:"+ cflap+" "); text(80,80,"Speed:"+bxs+" "); text(120,80,"Angle:"+bm+" "); } mod(int y){ if(y<85)return 1; else return -1; } changeVars(){ int x,y,d;x=penx();y=peny(); if(y>70&&y<100){ d=mod(y); if(x<81){ if(x<41) cgrav=cgrav+d; else cflap=cflap+d; }else{ if(x<121)bxs=bxs+d; else bm=bm+d; } showVars(); } } paintPlayer(int who){ rect(1, px[who], py[who], px[who] + pw, py[who] + ph, 3); } paintBall(){ rect(1, bx,by, bx+bw, by+bw, 3); } eraseBall(){ rect(0, obx,oby, obx+bw, oby+bw, 3); } moveBall(){ bx=bx+bxs; by=by+bys; } throttleBall(){ if(bys > bm){ bys=bm; } if(bys < (-1*bm)){ bys=-1*bm; } } erasePlayer(int who){ rect(0, px[who], opy[who], px[who] + pw, opy[who] + ph, 3); } storeOld(){ opy[0]=py[0]; opy[1]=py[1]; obx=bx; oby=by; } applyGrav(){ ps[0]=ps[0]+cgrav; ps[1]=ps[1]+cgrav; } applySpeed(){ py[0]=py[0]+ps[0]; py[1]=py[1]+ps[1]; } checkBottom(int who){ if(py[who] + ph > ssize){ py[who]= ssize-ph; ps[who]=(ps[who]*-1)/2; } } checkTop(int who){ if(py[who]<0){ py[who]= 0; ps[who]=(ps[who]*-1)/2; } } isAlign(int who){ if(by + bw >= py[who] && by <= py[who]+ph ) { return 1; } } bounceBall(int who){ bxs=bxs*-1; bys=bys+ps[who]; if(who==0) bx=pw; else bx=ssize-pw-bw; } checkWin(int who){ if(score[who]>=maxscore){ if(who==0){ victory="You are victorious!"; } else { victory="BUZZARD BAIT!"; } end=1; } } writeScore(){ text(80,0,"YOU:"+score[0]); text(115,0,"CPU:"+score[1]); } doScore(){ int who; if(bx<(ssize/2) ) who=1; else who=0; score[who]++; writeScore(); checkWin(who); bx=(160-bw)/2; title("JoustPong"); } checkCollide(){ if(bx<=pw || bx>=(ssize-pw)){ if(bx+bw<0 || bx >ssize){ doScore(); }else{//check collide if(bx<(ssize/2)){ if(isAlign(0)){ bounceBall(0); } }else{ //check for right if(isAlign(1)){ bounceBall(1); } } //end collide? }//end farside? } } checkBallBorder(){ if(by<0){ by=0; bys=bys*(-1); } if(by+bw>ssize){ by=ssize-bw; bys=bys*(-1); } } smarts(){ if((by0)|| (py[1]> 80 && bxs<0))//new ps[1]= ps[1]-cflap; } tri(int dir,int x,int y){ line(1,x,y,x+5,y+(dir*5)); line(1,x+5,y+(dir*5),x+10,y); } ending(string msg){ int e; textattr(2,1,0); text(25,60,msg); textattr(0,1,0); text(25,80,"PgDown to Restart"); do{ e=event(1);} while(e!=6); clearg(); title("JoustPong"); return 1; } main(){ int e; firstVar(); initVars(); graph_on(); textattr(2,1,0); text(15,20,"POCKET JOUSTPONG v0.7"); text(35,145,"PgUp Key to Start "); textattr(0,1,0); text(65,2,"An Alien Bill Production"); text(15,32,"PgUp button to flap."); text(15,44,"Avoid missing ball for high score-"); text(15,56,maxscore+" points to win. "); showVars(); tri(-1,20,80);tri(1,20,90); tri(-1,60,80);tri(1,60,90); tri(-1,100,80);tri(1,100,90); tri(-1,140,80);tri(1,140,90); text(15,100,"EMAIL-ME-WARE: "); text(15,110,"kisrael@alienbill.com "); title("JoustPong"); do { e=event(1); if(e==3){ changeVars(); } } while(e != 5); clearg(); do{ initVars(); paintPlayer(0); paintPlayer(1); writeScore(); while(!end){ storeOld(); applyGrav(); moveBall(); if(event(0)==5){ ps[0]= ps[0]-cflap; } smarts(); applySpeed(); checkBottom(0); checkBottom(1); checkTop(0); checkTop(1); checkBallBorder(); checkCollide(); throttleBall(); erasePlayer(0); erasePlayer(1); eraseBall(); paintPlayer(0); paintPlayer(1); paintBall(); } } while(ending(victory)); }