首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

麻烦们帮忙解决下这个,多谢!

2012-03-29 
麻烦大虾们帮忙解决下这个,谢谢!!类似俄罗斯方块的,这里只是一小部分,主要是点击“变形”,无法实现。下面是代

麻烦大虾们帮忙解决下这个,谢谢!!
类似俄罗斯方块的,这里只是一小部分,主要是点击“变形”,无法实现。下面是代码
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.*;

public class ErsBlockTest extends JFrame
 {
  /**

*/
private static final long serialVersionUID = 1L;

private JButton
btOne = new JButton("一"),
btTwo = new JButton("T"),
btThree = new JButton("Z"),
btFour = new JButton("L"),
btXuanz=new JButton("变形");
  private JPanel jpanel=new JPanel();
  private JPanel jpanel2=new JPanel();
  private int temp;  
  JButton button[][]=new JButton[4][4];
JPanel boxPanel=new JPanel(new GridLayout(4, 4));

private void setTopButton()
{
btOne.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setButtonBackgroud();
int key = 0x8000;
for (int i = 0; i < button.length; i++) {
for (int j = 0; j < button[i].length; j++) {
if((key & STYLES[0][0])!=0)
{
button[i][j].setBackground(Color.red);
}
key >>= 1;
}
}
repaint();
}
});
btTwo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setButtonBackgroud();
int key = 0x8000;
for (int i = 0; i < button.length; i++) {
for (int j = 0; j < button[i].length; j++) {
if((key & STYLES[1][0])!=0)
{
button[i][j].setBackground(Color.red);
}
key >>= 1;
}
}
repaint();
}
});
btThree.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setButtonBackgroud();
int key = 0x8000;
for (int i = 0; i < button.length; i++) {
for (int j = 0; j < button[i].length; j++) {
if((key & STYLES[2][0])!=0)
{
button[i][j].setBackground(Color.red);
}
key >>= 1;
}
}
repaint();
}
});
btFour.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setButtonBackgroud();
int key = 0x8000;
for (int i = 0; i < button.length; i++) {
for (int j = 0; j < button[i].length; j++) {
if((key & STYLES[3][0])!=0)
{
button[i][j].setBackground(Color.red);
}
key >>= 1;
}
}
repaint();
}
});
jpanel.setLayout(new FlowLayout());
jpanel.add(btOne);  
  jpanel.add(btTwo);
  jpanel.add(btThree);
  jpanel.add(btFour);
}
  private void setMildButton(){
  btXuanz.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent ae) {
// TODO Auto-generated method stub
setButtonBackgroud();
int Key=0x8000;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(temp==STYLES[i][j]){
if(j==3){j=0;temp=STYLES[i][j];break;}
else{j++;temp=STYLES[i][j];break;}
}
for(int n=0;n<button.length;n++){
for(int k=0;k<button[n].length;k++){
if((Key & temp)!=0)  
{
button[n][k].setBackground(Color.red);
}
Key>>=1;
}
}
repaint();
}});
  jpanel2.add(btXuanz);


  }
private void setButtomButton()
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
button[i][j]=new JButton();
boxPanel.add(button[i][j]);
}
}
}

private void setButtonBackgroud()
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
button[i][j].setBackground(Color.BLACK); 
}
}
}
   
public static void main(String[] args) 
{
ErsBlockTest ebt=new ErsBlockTest();
}

public ErsBlockTest()
{
  setLayout(new GridLayout(3, 1));
  setTopButton();
  setMildButton();
  setButtomButton();
  add(jpanel);
  add(jpanel2);
  add(boxPanel);
   
  setSize(300,300);
  setVisible(true);
  addWindowListener(new WindowAdapter()
  {
  public void windowClosing(WindowEvent e)
  {
  System.exit(0);
  }
  });  
}

public final static int[][] STYLES = {// 共28种状态
{0x0f00, 0x4444, 0x0f00, 0x4444}, // 长条型的四种状态
{0x04e0, 0x0464, 0x00e4, 0x04c4}, // 'T'型的四种状态
{0x4620, 0x6c00, 0x4620, 0x6c00}, // 反'Z'型的四种状态
{0x2640, 0xc600, 0x2640, 0xc600}, // 'Z'型的四种状态
{0x6220, 0x1700, 0x2230, 0x0740}, // '7'型的四种状态
{0x6440, 0x0e20, 0x44c0, 0x8e00}, // 反'7'型的四种状态
{0x0660, 0x0660, 0x0660, 0x0660}, // 方块的四种状态
};

}

[解决办法]
代码太多了,自己静下心来慢慢找,变形这个是将方块的各种形状算法封装到一个类中,通过监听不同的按钮去调用不同的算法实现方块的变形。实现方法有多种,你这种算法还挺难的。

热点排行
Bad Request.