//Yatzee include "yatzee_inc" int rcount=0; int buf=-1; board(){ int r=39; int i=0; buset(buf); rect(0,0,39-r,160,160-r,0); textattr(1,1,0); text(12,39-r,"Roll "+rcount+" of 3"); for(i=0;i<8;i++){ textattr(0,1,0); text(2,52+i*12-r,lbl[i]); if(score[i]>-1){ if(lock[i]) textattr(1,1,0); else if(score[i]==0)continue; text(40,52+i*12-r,score[i]); } } for(i=0;i<9;i++){ textattr(0,1,0); text(77,40+i*12-r,lbl[i+8]); if(lock[i+8]) textattr(1,1,0); else if(score[i+8]==0)continue; text(124,40+i*12-r,score[i+8]); } textattr(1,1,0); textalign(1); text(80,148-r,"Total: "+score[17]); textalign(0); textattr(0,1,0); line(1,75,39-r,160,39-r); for(i=1;i<11;i++){ line(1,0,39+(i*12)-r,160,39+(i*12)-r); } line(1,0,52-r,0,159-r); line(1,37,52-r,37,147-r); line(1,75,40-r,75,147-r); line(1,121,40-r,121,147-r); line(1,159,40-r,159,159-r); buset(0); bucopy(buf,0,0,18,0); } check(){ int d[6]; int i; int p1,p2,t; p1=0; p2=0; t=0; for(i=0;i<6;i++){ d[i]=0; } for(i=0;i<18;i++){ if(lock[i]==0){ score[i]=0; } } for(i=0;i<5;i++){ d[dice[i]-1]++; if(!lock[dice[i]-1]) score[dice[i]-1]=score[dice[i]-1]+dice[i]; if(!lock[15]) score[15]=score[15]+dice[i]; } for(i=0;i<6;i++){ if(d[i]>=2){ p1=p2; p2=i+1; if(!lock[8])score[8]=(i+1)*2; } if(d[i]>=3){ t=i+1; if(!lock[10])score[10]=(i+1)*3; } if(d[i]>=4)if(!lock[11])score[11]=(i+1)*4; if(d[i]>=5)if(!lock[16])score[16]=50; } if(d[0]&&d[1]&&d[2]&&d[3]&&d[4]) if(!lock[13])score[13]=15; if(d[5]&&d[1]&&d[2]&&d[3]&&d[4]) if(!lock[14])score[14]=20; if(p1>0&&p2>0){ if(!lock[9])score[9]=(p1*2)+(p2*2); } if(p2>0&&t>0){ if(!lock[12]){ if(t!=p2) score[12]=(p2*2)+(t*3); else if(p1>0) score[12]=(p1*2)+(t*3); } } board(); } roll(){ int i,r=0; for(i=0;i<5;i++){ if(sel[i]){ r=1; sleep(200); dice[i]=random(6)+1; sel[i]=0; pdice(i); } } if(r){ rcount++; check(); } } newGame(){ int e; saveg(); rect(0,0,140,160,160,1); frame(1,31,141,128,158,2); textattr(7,1,0); textalign(1); text(80,142,"New Game"); textalign(0); textattr(0,1,0); while(1){ e=event(1); if(e==2){ if(inrect(penx(),peny(),31,141,128,158)){ rect(3,31,141,128,158,2); sleep(200); rect(3,31,141,128,158,2); break; } } } restoreg(); } initTurn(){ if(tcount>=15){ newGame(); //alert("Total score:"+score[17]); //if(!confirm(" Play new game?")) //return; tcount=0; initScore(); } rcount=0; sel[0]=1; sel[1]=1; sel[2]=1; sel[3]=1; sel[4]=1; update(); roll(); } hPen(int x,int y){ int i,c; if(y>=140&&y<=160){ for(i=0;i<5;i++){ if(x>2+22*i&&x<=(2+22*i)+20){ if(sel[i]) sel[i]=0; else sel[i]=1; pdice(i); } } } if(inrect(x,y,120,144,150,157)){ if(tcount>=15) { initTurn(); return; } if(rcount==3){ alert("No more rolls this turn."); } else{ rect(3,120,144,150,157,2); while(pstate()); rect(3,120,144,150,157,2); roll(); } } if(inrect(x,y,38,30,75,101)){ c=(y-30)/12; if(!lock[c]){ lock[c]=1; tcount++; score[6]=score[6]+score[c]; score[17]=score[17]+score[c]; if(score[6]>=63 &&!lock[7]){ score[7]=35; score[17]=score[17]+35; lock[7]=1; } board(); initTurn(); } } if(inrect(x,y,122,18,159,125)){ c=(y-18)/12+8; if(!lock[c]){ lock[c]=1; tcount++; score[17]=score[17]+score[c]; board(); initTurn(); } } } eventLoop(){ int e; while(1){ e=event(1); switch(e){ case 2://p-down hPen(penx(),peny()); break; } } } main(){ graph_on(); buf=bucreate(160,121); title("Yatzee"); clear(); clearg(); initScore(); /*textattr(7,1,0); text(2,17,"Roll: 1");*/ textattr(2,1,0); text(124,144,"ROLL"); frame(1,120,144,150,157,2); rcount=1; board(); initTurn(); eventLoop(); budelete(buf); graph_off(); }