本文共 9962 字,大约阅读时间需要 33 分钟。
import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.util.Random; public class Brick { boolean reachdown = false; private static Random r = new Random(); public boolean[][] s = new boolean[4][4]; boolean[][] s1 = new boolean[4][4]; final boolean[][] b1 = { {false,false,false,false},{false,false,false,false},{false,false,false,false},{true,true,true,true} };//任意位置 final boolean[][] b2 = { {false,false,false,false},{false,false,false,false},{true,false,false,false},{true,true,true,false} };//靠左 final boolean[][] b3 = { {false,false,false,true},{false,false,false,true},{false,false,false,true},{false,true,true,true} };//靠右 final boolean[][] b4 = { {false,false,false,false},{false,false,false,false},{true,true,false,false},{true,true,false,false} };//靠左 final boolean[][] b5 = { {false,false,false,false},{false,false,false,false},{false,false,true,false},{false,true,true,true} };//靠右 final boolean[][] b6 = { {false,false,false,false},{false,false,false,false},{false,true,false,false},{false,true,false,false} }; boolean[][] background={ {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}, {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}}; S_node[][] background_str = new S_node[8][15]; S_node[][] str = new S_node[4][4]; int[] downside = new int[15]; int[] upside = new int[4]; int begin_r = 1; int begin_c = 11; private class S_node{ final int node_w = Yard.NODE_SIZE; final int node_h = Yard.NODE_SIZE; int row,col; S_node(int row,int col){ this.row =row ; this.col = col; } void draw(Graphics g){ Color c = g.getColor(); g.setColor(Color.WHITE); g.fillRect(col *node_w, row *node_h, node_w, node_h); g.setColor(c); } } public void getCode(){ switch((r.nextInt(6))){ case 0 : for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ s[i][j] = b1[i][j]; } } break; case 1: for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ s[i][j] = b2[i][j]; } } break; case 2 : for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ s[i][j] = b3[i][j]; } } break; case 3: for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ s[i][j] = b4[i][j]; } } break; case 4 : for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ s[i][j] = b5[i][j]; } } break; case 5 : for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ s[i][j] = b6[i][j]; } } break; } } public void getStr(){ for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ if(s[i][j]==true){ str[i][j] = new S_node(begin_r+i,begin_c+j); //绝对坐标 } } } } public void draw(Graphics g){ this.getStr(); for(int i=0; i<4; i++){ upside[i] = 0; } for(int i=0; i<15; i++){ downside[i] = 0; } for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ if(str[i][j]!=null){ str[i][j].draw(g); } } } for(int i=0;i<8;i++){ for(int j=0;j<15;j++){ if(background[i][j]==true){ background_str[i][j] = new S_node(16+i,j+5); } if(background[i][j]==false){ background_str[i][j] = null; } if(background_str[i][j]!=null){ background_str[i][j].draw(g); } } //************ 让满行的消掉********************// if((background[i][0]==true)&&(background[i][1]==true)&&(background[i][2]==true)&&(background[i][4]==true)&& (background[i][5]==true)&&(background[i][6]==true)&&(background[i][7]==true)&&(background[i][8]==true)&& (background[i][9]==true)&&(background[i][10]==true)&&(background[i][11]==true)&&(background[i][12]==true)&& (background[i][13]==true)&&(background[i][14]==true)&&(background[i][3]==true)){ for(int k= 0;k<15;k++){ background[i][k]=false; } //******************** 下行一行*****************// for(int l=i;l>0;l--){ for(int m=0;m<15;m++){ background[l][m]=background[l-1][m]; } } for(int n=0;n<15;n++){ background[0][n]=false; } } // *************************************************// } //****************** 用以记录上下目标位置的数组赋值***************// for(int j=7; j>=0; j--){ for(int i=0; i<15; i++){ if(background[j][i]==true){ downside[i] = 8-j; continue; } } } for(int i=0; i<4; i++){ for(int j=3; j>=0; j--){ if(str[j][i]!=null){ upside[i]=3-j; //离最下一行的空缺数 break; } else upside[i]=4; } } //***************************************************// if(!isReachDown()){ this.moveDown(); } else{ for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ if(str[i][j]!=null){ background[this.begin_r+ i - 16][this.begin_c + j - 5 ]=true; } } } reachdown=false; this.begin_r=1; this.begin_c=10; for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ str[i][j]=null; s[i][j]=false; } } this.getCode(); } } public void moveDown(){ for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ if(str[i][j]!=null){ str[i][j]=new S_node(begin_r+i,begin_c+j); } } } begin_r++; } public void moveLeft(){ for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ if(str[i][j]!=null){ str[i][j]=new S_node(begin_r+i,begin_c+j); } } } begin_c--; } public void moveRight(){ for(int i =0;i<4;i++){ for(int j=0;j<4;j++){ if(str[i][j]!=null){ str[i][j]=new S_node(begin_r+i,begin_c+j); } } } begin_c++; } public boolean isReachDown(){ //************************ 碰撞式触底*************// 解决当str[i]==null的情况 if((str[3][1].row<=(22+upside[0]-downside[str[3][1].col-6]))&&(str[3][1].row<=(22+upside[1]-downside[str[3][1].col-5]))&&(str[3][1].row<=(22+upside[2]-downside[str[3][1].col-4]))&&(str[3][1].row<=(22+upside[3]-downside[str[3][1].col-3]))) return reachdown; //*********************************************// reachdown=true; return reachdown; } public void keyPressed(KeyEvent e){ int Key = e.getKeyCode(); switch(Key){ case KeyEvent.VK_LEFT : this.moveLeft(); break; case KeyEvent.VK_RIGHT: this.moveRight(); break; } } }Brick类
import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Yard extends Frame { public static final int ROW = 25 ; public static final int COL = 25 ; public static final int NODE_SIZE = 20 ; public boolean flag = true; public Brick b = new Brick(); public void launch(){ this.setLocation(200, 200); this.setSize(COL * NODE_SIZE, ROW *NODE_SIZE); this.setVisible(true) ; this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); b.getCode(); this.addKeyListener(new KeyMonitor()); new Thread(new Spaint()).start(); } public void paint(Graphics g){ Color c = g.getColor(); g.setColor(new Color(0,0,128)); g.fillRect(0, 0, COL * NODE_SIZE, ROW * NODE_SIZE); g.setColor(new Color(50,205,50)); g.fillRect(0,0,COL * NODE_SIZE,NODE_SIZE*2); //将边框刷白 g.fillRect(0,0,NODE_SIZE*5,NODE_SIZE*ROW); g.fillRect(0,NODE_SIZE*(ROW - 1),COL * NODE_SIZE,NODE_SIZE*2); g.fillRect(NODE_SIZE*(ROW - 5),0 , NODE_SIZE*6, NODE_SIZE*ROW); g.setColor(new Color(255,255,255)); g.drawString("Designed ", 420, 200); g.drawString("By ", 420, 250); g.drawString("Dustin ", 420, 300); g.setColor(c); b.draw(g); } private class Spaint implements Runnable{ public void run(){ while(flag){ repaint(); for(int i=0; i<15; i++){ System.out.print(b.downside[i]); } System.out.println(); for(int i=0; i<4; i++){ System.out.print(b.upside[i]); } System.out.println(); try{ Thread.sleep(400); }catch(InterruptedException e){ e.printStackTrace(); } } } } private class KeyMonitor extends KeyAdapter{ public void keyPressed(KeyEvent e){ b.keyPressed(e); } } public static void main(String[] args) { new Yard().launch(); } }
转载地址:http://sfdii.baihongyu.com/