import java.awt.*; import java.applet.*; public class Bubbles extends Applet { Font f = new Font("TimesRoman",Font.BOLD,30); Image imageA,imageB,imageC,imageD, imageAPress,imageBPress,imageCPress,imageDPress,imageE,imageEPress,imageNewGame; char position[][] =new char[21][10]; int points,ClickPoints; int temp,i,j,clickx,clicky,count,blinkflag,displaycount; int firstzeroX,lastABCDX,successX,havezeroX ,countzeroX; int firstzeroY,lastABCDY,successY,havezeroY ,countzeroY; double randomnumber; AudioClip ClickSound,ReduceSound; public void init() { points=0; for( int i9=0;i9<=9;i9++) { position[20][i9]='0'; } displaycount=0; ClickPoints=0; count=0; setBackground(Color.white); imageA = getImage(getCodeBase(),"imagea.gif"); imageB = getImage(getCodeBase(),"imageb.gif"); imageC = getImage(getCodeBase(),"imagec.gif"); imageD = getImage(getCodeBase(),"imaged.gif"); imageE = getImage(getCodeBase(),"imagee.gif"); imageAPress = getImage(getCodeBase(),"imageapress.gif"); imageBPress = getImage(getCodeBase(),"imagebpress.gif"); imageCPress = getImage(getCodeBase(),"imagecpress.gif"); imageDPress = getImage(getCodeBase(),"imagedpress.gif"); imageEPress = getImage(getCodeBase(),"imageepress.gif"); imageNewGame = getImage(getCodeBase(),"newgame.gif"); ClickSound = getAudioClip(getCodeBase(),"click.au"); ReduceSound = getAudioClip(getCodeBase(),"reduce.au"); for(i=0;i<=9;i++) { for(j=0;j<=19;j++) { //temp=Randomizer.getInt(1,4); randomnumber=Math.random(); if(randomnumber>=0.00 && randomnumber<0.20) temp=1; if(randomnumber>=0.20 && randomnumber<0.40) temp=2; if(randomnumber>=0.40 && randomnumber<0.60) temp=3; if(randomnumber>=0.60 && randomnumber<0.80) temp=4; if(randomnumber>=0.80 && randomnumber<=1.00) temp=5; switch (temp) { case 1: position[j][i]='A'; break; case 2: position[j][i]='B'; break; case 3: position[j][i]='C'; break; case 4: position[j][i]='D'; break; case 5: position[j][i]='E'; break; } } } } public boolean mouseDown(Event evt, int x, int y) { if(x>=5 && x<=105 && y>=310 && y<=350) { init(); repaint(); return true; } clickx=x/30; clicky=y/30; if((position[clickx][clicky]>='A' && position[clickx][clicky]<='E')||(position[clickx][clicky]=='0') ) { if(blinkflag==1) { for(i=0;i<=9;i++) { for(j=0;j<=19;j++) { switch(position[j][i]) { case '1': { position[j][i]='A'; break; } case '2': { position[j][i]='B'; break; } case '3': { position[j][i]='C'; break; } case '4': { position[j][i]='D'; break; } case '5': { position[j][i]='E'; break; } } blinkflag=0; } } } if(position[clickx][clicky]!='0') { count=0; findconnect(clickx,clicky,position[clickx][clicky]); if(count>0) { ClickSound.play(); ClickPoints = CalculateScore(count+1); } } } else { if(blinkflag==1) { ReduceSound.play(); rearrange(); points=points+ClickPoints; blinkflag=0; } } repaint(); return true; } public void rearrange() { for(int i=0;i<=19;i++) { for(int j=0;j<=9;j++) { if(position[i][j]>='1' && position[i][j]<='5') { position[i][j]='0'; } } } //For height eliminate for(int i9=0;i9<=19;i9++) { havezeroX=0; do { for(int j9=9;j9>=0;j9--) { if(position[i9][j9]=='0') { if(j9!=0) { position[i9][j9]=position[i9][j9-1]; position[i9][j9-1]='0'; } else { position[i9][j9]='0'; } //repaint(); } } //Find first Zero(bottom up) for(int j8=9;j8>=0;j8--) { if(position[i9][j8]=='0') { firstzeroX=j8; havezeroX=1; break; } } //Find last ABCD(bottom up) for(int j7=9;j7>=0;j7--) { if(position[i9][j7]>='A' && position[i9][j7]<='E') lastABCDX=j7; } countzeroX=0; for(int j6=9;j6>=0;j6--) { if(position[i9][j6]=='0') countzeroX++; } if(firstzeroX==(lastABCDX-1)||havezeroX==0||countzeroX==10) successX=1; // dont have zero exit wihile loop else successX=0; //have zero go to do it again }while(successX==0); } //For shift left do { havezeroY=0; for(int i5=0;i5<=19;i5++) { if(position[i5][9]=='0') { for(int i4=i5;i4<=19;i4++) { for(int j5=0;j5<=9;j5++) { position[i4][j5]=position[i4+1][j5]; position[i4+1][j5]='0'; } } } } //find the first zero(left to right) countzeroY=0; for(int i3=0;i3<=19;i3++) { if(position[i3][9]=='0') { firstzeroY=i3; havezeroY=1; break; } } //find the last ABCD(left to right) for(int i6=0;i6<=19;i6++) { if(position[i6][9]>='A' && position[i6][9]<='E') { lastABCDY=i6; } } //Find that how many zero //(if zero=20 that mean all off item eleminted already,finish game at all) countzeroY=0; for(int i6=9;i6>=0;i6--) { if(position[i6][9]=='0') countzeroY++; } if(firstzeroY==(lastABCDY+1)||havezeroY==0||countzeroY==20) successY=1; // dont have zero exit wihile loop else successY=0; //have zero go to do it again }while(successY==0); } public void findconnect(int cx, int cy,char clickvalue) { switch(clickvalue) { case('A'): { position[cx][cy]='1'; break; } case('B'): { position[cx][cy]='2'; break; } case('C'): { position[cx][cy]='3'; break; } case('D'): { position[cx][cy]='4'; break; } case('E'): { position[cx][cy]='5'; break; } } if(cx<19 && cy>=0 && cy<=9) { if(position[cx+1][cy]==clickvalue) { count++; findconnect(cx+1,cy,clickvalue); } } if( cx>0 && cy>=0 && cy<=9) { if(position[cx-1][cy]==clickvalue) { count++; findconnect(cx-1,cy,clickvalue); } } if(cx>=0 && cx<=19 && cy<9) { if(position[cx][cy+1]==clickvalue) { count++; findconnect(cx,cy+1,clickvalue); } } if(cx>=0 && cx<=19 && cy>0) { if(position[cx][cy-1]==clickvalue) { count++; findconnect(cx,cy-1,clickvalue); } } if(count==0) { position[cx][cy]=clickvalue; } else { blinkflag=1; //repaint(); } } public void paint(Graphics g) { g.setColor(Color.white); for(i=0;i<=9;i++) { for(j=0;j<=19;j++) { switch (position[j][i]) { case 'A': g.drawImage(imageA,((j*30)+1),((i*30)+1),30,30,this); break; case 'B': g.drawImage(imageB,((j*30)+1),((i*30)+1),30,30,this); break; case 'C': g.drawImage(imageC,((j*30)+1),((i*30)+1),30,30,this); break; case 'D': g.drawImage(imageD,((j*30)+1),((i*30)+1),30,30,this); break; case 'E': g.drawImage(imageE,((j*30)+1),((i*30)+1),30,30,this); break; case '1': g.drawImage(imageAPress,((j*30)+1),((i*30)+1),30,30,this); break; case '2': g.drawImage(imageBPress,((j*30)+1),((i*30)+1),30,30,this); break; case '3': g.drawImage(imageCPress,((j*30)+1),((i*30)+1),30,30,this); break; case '4': g.drawImage(imageDPress,((j*30)+1),((i*30)+1),30,30,this); break; case '5': g.drawImage(imageEPress,((j*30)+1),((i*30)+1),30,30,this); break; case '0': g.fillRect((j*30)+1,(i*30)+1,30,30); break; } } } g.setColor(Color.yellow); g.fillRect(0,305,600,50); g.drawImage(imageNewGame,5,310,100,40,this); g.setColor(Color.black); g.drawString("Total Score",200,330); g.drawString(String.valueOf(points),280,330); if(count==0) displaycount=0; else displaycount=count+1; g.drawString("Current Total",325,330); g.drawString(String.valueOf(displaycount),420,330); g.drawString("Current Score",450,330); g.drawString(String.valueOf(ClickPoints),530,330); if(endgame()== false) { g.setFont(f); g.setColor(Color.black); g.drawString("GAME OVER",300,300); } } public int CalculateScore(int thiscount) { int Calculated ; switch(thiscount) { case 0: Calculated = 0; break; case 1: Calculated = 0; break; case 2: Calculated = 2; break; case 3: Calculated = 4; break; case 4: Calculated = 6; break; case 5: Calculated = 10; break; case 6: Calculated = 16; break; case 7: Calculated = 26; break; case 8: Calculated = 42; break; case 9: Calculated = 68; break; case 10: Calculated = 110; break; case 11: Calculated = 178; break; case 12: Calculated = 288; break; default : Calculated = CalculateScore(thiscount-1)+CalculateScore(thiscount-2); break; } return Calculated; } public boolean endgame() { for(int i=0;i<=19;i++) { for(int j=0;j<=9;j++) { if(position[i][j]!='0') { if(j!=9) if(position[i][j+1]==position[i][j]) return true; if(i!=19) if(position[i+1][j]==position[i][j]) return true; } } } return false; } }