import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Pento extends Applet implements Runnable{ int mtd[][] = new int[10][14]; int ttd[][] = new int[5][5],ttds[][] = new int[5][5]; int ttn,tts = 0; int std[] = new int[12]; int pd[][][] = { {{0,0,0,0,0},{0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,0,0,0},{0,1,1,1,1},{0,1,0,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,0,0,0},{0,1,1,1,1},{0,0,1,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,1},{0,1,1,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,0,0,0},{0,1,1,1,0},{0,1,1,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,0,1,0},{0,0,1,1,0},{0,1,1,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,1,1,1,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,0,0,0},{0,1,1,1,0},{0,1,0,1,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,0,1,0},{0,1,1,1,0},{0,1,0,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,1,1,0,0},{0,0,1,1,0},{0,0,1,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,1,0,0},{0,1,1,1,0},{0,0,1,0,0},{0,0,0,0,0}}, {{0,0,0,0,0},{0,0,0,1,0},{0,0,0,1,0},{0,1,1,1,0},{0,0,0,0,0}}, }; Color pc[] = new Color[12],bc; int cd[][] = {{250,0,0},{0,250,0},{0,0,250},{250,250,0},{250,0,250},{0,250,250}, {150,100,0},{150,0,100},{100,150,0},{100,0,150},{0,100,150},{0,150,100}}; int dx,dy,pn; int mx,my,mcx,mcy; Thread th = null; Image os; Graphics og; public void init(){ setBackground(Color.white); os = createImage(680,420); og = os.getGraphics(); for(int j1 = 0;j1 < 14;j1 ++){ mtd[0][j1] = -1;mtd[1][j1] = -1;mtd[8][j1] = -1;mtd[9][j1] = -1; } for(int j2 = 0;j2 < 10;j2 ++){ mtd[j2][0] = -1;mtd[j2][1] = -1;mtd[j2][12] = -1;mtd[j2][13] = -1; } for(int k = 0;k < 12;k ++){ std[k] = 1; pc[k] = new Color(cd[k][0],cd[k][1],cd[k][2]); } bc = new Color(225,225,225); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ dx = e.getX() ; dy = e.getY() ; if((dx > 40) && (dx < 640) && (dy > 260) && (dy < 420)){ pn = ((dx - 40) / 100) + ((dy - 260) / 80) * 6; if((std[pn] == 1)){ if(tts == 0){ tts = 1 ; ttn = pn ; std[pn] = 0; D_in(pn); }else{ std[ttn] = 1 ; ttn = pn ; std[pn] = 0; D_in(pn); } }else{ if(tts == 1){ std[ttn] = 1 ; tts = 0 ; D_in(-1); } } repaint(); } if((dx > 440) && (dx < 640) && (dy > 20) && (dy < 220)){ if(tts == 1){ for(int f1 = 0;f1 < 5;f1 ++){ for(int f2 = 0;f2 < 5;f2 ++){ ttds[f1][4 - f2] = ttd[f2][f1]; } } for(int g1 = 0;g1 < 5;g1 ++){ for(int g2 = 0;g2 < 5;g2 ++){ ttd[g2][g1] = ttds[g2][g1]; } } repaint(); } } if((dx > 20) && (dx < 420) && (dy > 20) && (dy < 260)){ dx = (e.getX() - 20) / 40 ; dy = (e.getY() -20) / 40; if(tts == 1){ C_dp(); repaint(); }else{ if(mtd[dy + 2][dx + 2] > 0){ ttn = mtd[dy + 2][dx + 2] - 1; tts = 1; B_dp(); repaint(); } } } } } ); addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ mx = (e.getX() - 20) / 40 ; my = (e.getY() -20) / 40; if((mx > -1) && (mx < 10) && (my > -1) && (my < 6)){ if((mx != mcx) || (my != mcy)){ mcx = mx;mcy = my; repaint(); } } } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,680,420); for(int lx = 0;lx < 10;lx ++){ for(int ly = 0;ly < 6;ly ++){ if(mtd[ly + 2][lx + 2] == 0){ og.setColor(bc); }else{ og.setColor(pc[mtd[ly + 2][lx + 2] - 1]); } og.fillRect(lx * 40 + 20,ly * 40 + 20,40,40); og.setColor(Color.gray); og.draw3DRect(lx * 40 + 20,ly * 40 + 20,40,40,true); } } for(int tx = 0;tx < 5;tx ++){ for(int ty = 0;ty < 5;ty ++){ if(ttd[ty][tx] == 0){ og.setColor(bc); }else{ og.setColor(pc[ttn]); } og.fillRect(tx * 40 + 440,ty * 40 + 20,40,40); og.setColor(Color.gray); og.draw3DRect(tx * 40 + 440,ty * 40 + 20,40,40,true); } } for(int sn = 0;sn < 12;sn ++){ if(std[sn] == 1){ for(int d1 = 0;d1 < 5;d1 ++){ for(int d2 = 0;d2 < 5;d2 ++){ if(pd[sn][d2][d1] == 1){ og.setColor(pc[sn]); og.fillRect(d1 * 20 + (sn % 6) * 100 + 40,d2 * 20 + (sn / 6) * 80 + 240,20,20); og.setColor(Color.black); og.draw3DRect(d1 * 20 + (sn % 6) * 100 + 40,d2 * 20 + (sn / 6) * 80 + 240,20,20,true); } } } } } if((tts == 1) && (mx > -1) && (mx < 10) && (my > -1) && (my < 6)){ og.setColor(Color.blue); for(int q1 = 0;q1 < 5;q1 ++){ for(int q2 = 0;q2 < 5;q2 ++){ if(ttd[q2][q1] == 1){ if(((mx + q1 - 2) > -1) && ((mx + q1 - 2) < 10) && ((my + q2 - 2) > -1) && ((my + q2 - 2) < 6)){ og.drawRect(40 * (mx + q1 - 2) + 20,40 * (my + q2 - 2) + 20,40,40); } } } } } g.drawImage(os,0,0,this ); } public void D_in(int nn){ for(int k1 = 0;k1 < 5;k1 ++){ for(int k2 = 0;k2 < 5;k2 ++){ if(nn == -1){ ttd[k2][k1] = 0; }else{ ttd[k2][k1] = pd[nn][k2][k1]; } } } } public void C_dp(){ int fg = 1; for(int c1 = 0;c1 < 5;c1 ++){ for(int c2 = 0;c2 < 5;c2 ++){ if((ttd[c2][c1] == 1) && (mtd[dy + c2][dx + c1] != 0)){ fg = 0; } } } if(fg == 1){ for(int d1 = 0;d1 < 5;d1 ++){ for(int d2 = 0;d2 < 5;d2 ++){ if(ttd[d2][d1] == 1){ mtd[dy + d2][dx + d1] = ttn + 1; } } } D_in(-1); tts = 0;ttn = 0; } } public void B_dp(){ for(int p1 = 0;p1 < 10;p1 ++){ for(int p2 = 0;p2 < 6;p2 ++){ if(mtd[p2 + 2][p1 + 2] == ttn + 1){ mtd[p2 + 2][p1 + 2] = 0; } } } for(int p3 = 0;p3 < 5;p3 ++){ for(int p4 = 0;p4 < 5;p4 ++){ ttd[p4][p3] = pd[ttn][p4][p3]; } } } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void stop(){ th = null; } public void run(){ while (th != null){ try { Thread.sleep(20); } catch (InterruptedException e){ } } } public void update( Graphics g ) { paint( g ) ; } }