⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 panel2.java

📁 这是使用swing制作的俄罗斯方块
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package russian;

import java.util.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.*;

import com.borland.jbcl.layout.*;

/**
 * <p>Title: Russian Block</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 0.2
 */

public class Panel2 extends JPanel
{
    //const fields
    final static int IN_THE_AIR = 0000001;
    final static int PUNCH_WALL = 0000010;
    final static int PUNCH_GROUND = 0000100;
    final static int BOMB = 0001000;
    final static int DEAD = 0010000;
    final static int SHAPE_AGAINST = 0100000;
    final static int PAUSE = 01000000;
    final static int AIR = 0;
    final static int BLOCK = 1;
    final static int BLOW = 2;
    final static Color AIR_COLOR = Color.white;
    final static Color BLOCK_COLOR = Color.cyan;
    final static Color BLOW_COLOR = Color.pink;

    //refer to interface
    final static int TURN_RIGHT = 0;
    final static int TURN_LEFT = 1;
    final static int MOVE_NONE = 0;
    final static int MOVE_RIGHT = 1;
    final static int MOVE_LEFT = 2;
    final static int MOVE_DOWN = 3;

    /**
     * description about a kind of shape in the table
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */
    interface Shape{
	int[][] getMatrix();
	void setLocation(Point p);
	Point getLocation();
	/**
	 * turn left or turn right
	 * @param direction int
	 * @param map int[][]
	 * @return int
	 */
	int turn(int direction,int[][] map);
	/**
	 * move right,move left,move down
	 * @param direction int
	 * @param map int[][]
	 * @return int
	 */
	int move(int direction,int[][] map);
    }

    JPanel jPanel1 = new JPanel();
    JToggleButton jButton1 = new JToggleButton();
    JToggleButton jButton2 = new JToggleButton();
    VerticalFlowLayout verticalFlowLayout1 = new VerticalFlowLayout();
    JToggleButton jButton3 = new JToggleButton();
    JToggleButton jButton4 = new JToggleButton();
    JToggleButton jButton5 = new JToggleButton();
    JToggleButton jButton6 = new JToggleButton();
    JToggleButton jButton7 = new JToggleButton();
    JPanel jPanel2 = new JPanel();
    GridLayout gridLayout1 = new GridLayout();
    JToggleButton jToggleButton1 = new JToggleButton();
    JToggleButton jToggleButton2 = new JToggleButton();
    JToggleButton jToggleButton3 = new JToggleButton();
    JToggleButton jToggleButton4 = new JToggleButton();
    JToggleButton jToggleButton5 = new JToggleButton();
    JToggleButton jToggleButton6 = new JToggleButton();
    JToggleButton jToggleButton7 = new JToggleButton();
    JToggleButton jToggleButton8 = new JToggleButton();
    JToggleButton jToggleButton9 = new JToggleButton();
    ButtonGroup bg = new ButtonGroup();

    boolean gameover = false;
    boolean gamepause = false;
    BorderLayout borderLayout1 = new BorderLayout();
    JScrollPane jScrollPane1 = new JScrollPane();
    MyTableModel tModel = new MyTableModel(10,20);
    TableCellRenderer tcr = new TableCellRenderer(){
	JLabel l = new JLabel();
	/**
	 * getTableCellRendererComponent
	 *
	 * @param table JTable
	 * @param value Object
	 * @param isSelected boolean
	 * @param hasFocus boolean
	 * @param row int
	 * @param column int
	 * @return Component
	 */
	public Component getTableCellRendererComponent(JTable table,
	    Object value, boolean isSelected, boolean hasFocus, int row,
	    int column)
	{
	    l.setOpaque(true);
	    Class c = table.getModel().getColumnClass(column);
	    if(c.equals(Integer.class)){
		int v = Integer.parseInt(value.toString());
		switch(v){
		    case BLOCK:
			l.setBackground(BLOCK_COLOR);
			l.setBorder(border1);
			break;
		    case BLOW:
			l.setBackground(BLOW_COLOR);
			l.setBorder(border1);
			break;
		    case AIR:
		    default:
			l.setBorder(null);
			l.setBackground(AIR_COLOR);
		}
	    }else{
		l.setBorder(null);
		l.setOpaque(false);
	    }
	    return l;
	}
    };
    JTable jTable1 = new JTable(tModel){
	public TableCellRenderer getCellRenderer(int row, int column){
	    return tcr;
	}
	public int getRowHeight(){
	    return this.getColumnModel().getColumn(0).getWidth();
	}
	public int getRowHeight(int row) {
	    return getRowHeight();
	}
    };


    Shape next;
    final static Random r = new Random();
    JPanel jPanel3 = new JPanel();
    JTable jTable2 = new JTable(new TableModel()
    {
	/**
	 * getColumnCount
	 *
	 * @return int
	 */
	public int getColumnCount()
	{
	    return 4;
	}

	/**
	 * getRowCount
	 *
	 * @return int
	 */
	public int getRowCount()
	{
	    return 4;
	}

	/**
	 * isCellEditable
	 *
	 * @param rowIndex int
	 * @param columnIndex int
	 * @return boolean
	 */
	public boolean isCellEditable(int rowIndex, int columnIndex)
	{
	    return false;
	}

	/**
	 * getColumnClass
	 *
	 * @param columnIndex int
	 * @return Class
	 */
	public Class getColumnClass(int columnIndex)
	{
	    return Integer.class;
	}

	/**
	 * getValueAt
	 *
	 * @param rowIndex int
	 * @param columnIndex int
	 * @return Object
	 */
	public Object getValueAt(int rowIndex, int columnIndex)
	{
	    try
	    {
		return new Integer(next.getMatrix()[rowIndex][columnIndex]);
	    }
	    catch (Exception ex)
	    {
		return new Integer(AIR);
	    }
	}

	/**
	 * setValueAt
	 *
	 * @param aValue Object
	 * @param rowIndex int
	 * @param columnIndex int
	 */
	public void setValueAt(Object aValue, int rowIndex, int columnIndex)
	{
	}

	/**
	 * getColumnName
	 *
	 * @param columnIndex int
	 * @return String
	 */
	public String getColumnName(int columnIndex)
	{
	    return "";
	}

	/**
	 * addTableModelListener
	 *
	 * @param l TableModelListener
	 */
	public void addTableModelListener(TableModelListener l)
	{
	}

	/**
	 * removeTableModelListener
	 *
	 * @param l TableModelListener
	 */
	public void removeTableModelListener(TableModelListener l)
	{
	}
    }
    )
	{
	public TableCellRenderer getCellRenderer(int row, int column)
	{
	    return tcr;
	}
    };
    BorderLayout borderLayout2 = new BorderLayout();
    Border border1 = BorderFactory.createBevelBorder(BevelBorder.RAISED);
    JToggleButton jToggleButton10 = new JToggleButton();
    JPanel jPanel4 = new JPanel();
    GridBagLayout gridBagLayout1 = new GridBagLayout();
    JLabel jLabel1 = new JLabel();

    public Panel2()
    {
	try
	{
	    jbInit();
	}
	catch(Exception ex)
	{
	    ex.printStackTrace();
	}
	this.jTable1.addKeyListener(new KeyAdapter()
	{
	    public void keyPressed(KeyEvent evt)
	    {
		handleKey(evt,true);
	    }
	    public void keyReleased(KeyEvent evt){
		handleKey(evt,false);
	    }
	});
	this.tModel.addTableModelListener(new TableModelListener(){
	    /**
	     * tableChanged
	     *
	     * @param e TableModelEvent
	     */
	    public void tableChanged(TableModelEvent e)
	    {
		jTable1.repaint();
		int code = e.getType();
		reflectToButton(code);
		gamepause = (code&PAUSE)!=0;
		gameover = (code&DEAD)!=0;
		MyTableModel mtm = (MyTableModel) e.getSource();
		jLabel1.setText("LAYERS: "+mtm.layer);
		if(next!=mtm.next){
		    next = mtm.next;
		    jTable2.repaint();
		}
	    }
	});
	new Thread(){
	    public void run(){
		//tModel.addShape(new Square());
		while(true){
		    try
		    {
			Thread.sleep(1000);
			if(!gamepause&&!gameover){
			    tModel.move(MOVE_DOWN);
			}
		    }
		    catch (InterruptedException ex)
		    {
		    }
		}
	    }
	}.start();

    }

    /**
     * 控制键
     * @param evt KeyEvent
     * @param pressed boolean
     */
    void handleKey(KeyEvent evt,boolean pressed){
	switch(evt.getKeyCode()){
	    case KeyEvent.VK_UP:
		if(gameover||gamepause) return;
		this.jToggleButton2.setSelected(pressed);
		if(pressed)this.tModel.turn(TURN_LEFT);
		break;
	    case KeyEvent.VK_DOWN:
		if(gameover||gamepause) return;
		this.jToggleButton8.setSelected(pressed);
		if(pressed)this.tModel.move(MOVE_DOWN);
		break;
	    case KeyEvent.VK_LEFT:
		if(gameover||gamepause) return;
		this.jToggleButton4.setSelected(pressed);
		if(pressed)this.tModel.move(MOVE_LEFT);
		break;
	    case KeyEvent.VK_RIGHT:
		if(gameover||gamepause) return;
		this.jToggleButton6.setSelected(pressed);
		if(pressed)this.tModel.move(MOVE_RIGHT);
		break;
	    case KeyEvent.VK_SPACE:
		if(gamepause) return;
		this.jToggleButton10.setSelected(pressed);
		if(pressed){
		    if(gameover){
			this.tModel.reset();
			gameover = false;
		    }
		    else{
			this.gamepause = true;
			int ret = 0;
			do
			{
			    ret = this.tModel.move(MOVE_DOWN);
			}
			while ( (ret&(PAUSE|DEAD|PUNCH_GROUND)) == 0);
			this.gamepause = false;
		    }
		}
		break;
	}
    }

    class MyTableModel implements TableModel{
	int layer = 0;
	int[][] map;
	Shape s;
	Shape next = new Square();
	protected EventListenerList listenerList = new EventListenerList();

	public MyTableModel(int width,int height){
	     map = new int[height][width];
	     addShape(new Square());
	}
	/**
	 * getColumnCount
	 *
	 * @return int
	 */
	public int getColumnCount()
	{
	    return map[0].length;
	}

	/**
	 * getRowCount
	 *
	 * @return int
	 */
	public int getRowCount()
	{
	    return map.length;
	}

	/**
	 * isCellEditable
	 *
	 * @param rowIndex int
	 * @param columnIndex int
	 * @return boolean
	 */
	public boolean isCellEditable(int rowIndex, int columnIndex)
	{
	    return false;
	}

	/**
	 * getColumnClass
	 *
	 * @param columnIndex int
	 * @return Class
	 */
	public Class getColumnClass(int columnIndex)
	{
	    return Integer.class;
	}

	/**
	 * getValueAt
	 *
	 * @param rowIndex int
	 * @param columnIndex int
	 * @return Object
	 */
	public Object getValueAt(int rowIndex, int columnIndex)
	{
	    try{
		return new Integer(this.map[rowIndex][columnIndex]);
	    }catch(java.lang.ArrayIndexOutOfBoundsException e){
		return null;
	    }
	}

	/**
	 * setValueAt
	 *
	 * @param aValue Object
	 * @param rowIndex int
	 * @param columnIndex int
	 */
	public void setValueAt(Object aValue, int rowIndex, int columnIndex)
	{
	    try{
		this.map[rowIndex][columnIndex] = Integer.parseInt(aValue.toString());
	    }catch(java.lang.ArrayIndexOutOfBoundsException e){
		e.printStackTrace();
	    }
	}

	/**
	 * getColumnName
	 *
	 * @param columnIndex int
	 * @return String
	 */
	public String getColumnName(int columnIndex)
	{
	    return columnIndex+"";
	}

	/**
	 * addTableModelListener
	 *
	 * @param l TableModelListener
	 */
	public void addTableModelListener(TableModelListener l)
	{
	    listenerList.add(TableModelListener.class, l);
	}

	/**
	 * removeTableModelListener
	 *
	 * @param l TableModelListener
	 */
	public void removeTableModelListener(TableModelListener l)
	{
	    listenerList.remove(TableModelListener.class, l);
	}
	public int addShape(Shape s){
	    this.s = next;
	    this.next = s;
	    int[][] m = this.s.getMatrix();
	    Point p = new Point((this.map[0].length-m[0].length)/2, 0);
	    this.s.setLocation(p);
	    if (!isOverlap(map, m, p))
	    {
		int ret = move(MOVE_NONE);
		return ret;
	    }
	    new Thread(){
		public void run(){}{
		    for(int i = 0;i<map.length;i++){
			try
			{
			    sleep(80);
			    map[i] = new int[]{l,l,l,l,l,l,l,l,l,l};
			    fireTableChange(PAUSE);
			}
			catch (InterruptedException ex)
			{
			}
		    }
		    Point p = overlogo.getLocation();
		    int[][] m = overlogo.getMatrix();
		    int start = p.y;
		    int end = p.y + m.length-1;
		    for(int i = 0;i<map.length;i++){
			try
			{
			    sleep(80);
			    if (i >= start && i <= end)
			    {
				for(int j = 0;j<map[i].length;j++){
				    map[i][j] = m[i - start][j];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -