标签:1024 applet
闲来无事自己写了几个applet小游戏程序。
先来看下代码构成
// 1024小游戏源代码
// 程序入口类My1024.java
package my1024; import java.awt.AWTEvent; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.io.Serializable; import java.util.Random; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JLayeredPane; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.border.TitledBorder; import util.MyAWTEventListener; public class My1024 extends JFrame implements Serializable { /** * */ private static final long serialVersionUID = 5977722980538750979L; static JTable table; static JLayeredPane desktop; static MyTableModule tbModule; static int rowCount = 5; static int colCount = 4; static RandomIndex randomIndex = new RandomIndex(); public My1024() { super(); desktop = this.getLayeredPane(); setDefaultLookAndFeelDecorated(true); setSize(450, 600); setLocation(400, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); buildFrame(); } public static void main(String[] args) { My1024 myFrame = new My1024(); myFrame.setVisible(true); } public static void buildFrame() { desktop.setLayout(new BoxLayout(desktop, BoxLayout.Y_AXIS)); JPanel btnPanel = new JPanel(); btnPanel.add(loadDescription()); desktop.add(btnPanel); desktop.add(Box.createHorizontalStrut(50)); JPanel tbPanel = new JPanel(); tbPanel.add(loadTable()); desktop.add(tbPanel); } public static long SCORE = 0L; static JLabel jtf = new JLabel(); public static void setScore() { String SCORE_S = String.valueOf(SCORE); for (int i = 8; i > String.valueOf(SCORE).length(); i--) { SCORE_S = "0" + SCORE_S; } jtf.setText(SCORE_S); } public static JPanel loadDescription() { JPanel fr = new JPanel(); JLabel j1, j2, j3; fr.setSize(60, 100); j1 = new JLabel("F1 - New Game"); j1.setForeground(Color.BLUE); j1.setOpaque(true); j2 = new JLabel("F2 - Clear"); j2.setForeground(Color.BLUE); j2.setOpaque(true); j3 = new JLabel("F3 - Cheat"); j3.setForeground(Color.BLUE); j3.setOpaque(true); fr.add(j1); fr.add(j2); fr.add(j3); fr.setCursor(new Cursor(12)); return fr; } public static void keyEvent(KeyEvent e) { // System.out.println(e.getKeyCode()); switch (e.getKeyCode()) { case 112:// 112 F1 begin(); break; case 113:// 113 F2 clear(); break; case 114:// 114 F3 cheat(); break; case 37:// 37 left leftMethod(); break; case 38:// 38 up upMethod(); break; case 39:// 39 right rightMethod(); break; case 40:// 40 down downMethod(); break; default: break; } } public static JPanel loadTable() { JPanel fr4 = new JPanel(); fr4.setBorder(new TitledBorder("My 1024")); fr4.setLayout(new BoxLayout(fr4, BoxLayout.Y_AXIS)); tbModule = new MyTableModule(rowCount, colCount); table = new JTable(tbModule); table.setRowSelectionAllowed(false); table.setColumnSelectionAllowed(false); CellLabelRenderer tcr = new CellLabelRenderer();// 设置table内容居中 tcr.setHorizontalAlignment(SwingConstants.CENTER); tcr.setVerticalAlignment(SwingConstants.CENTER); table.setDefaultRenderer(Object.class, tcr); for (int i = 0; i < table.getColumnCount(); i++) { table.getColumnModel().getColumn(i).setPreferredWidth(100); } table.setRowHeight(100); table.setRowHeight(0, 1); table.setFont(new Font("宋体", Font.BOLD, 20)); Toolkit.getDefaultToolkit().addAWTEventListener( new MyAWTEventListener() { public void keyPressed(KeyEvent e) { keyEvent(e); } }, AWTEvent.KEY_EVENT_MASK); JPanel fr5 = new JPanel(); JLabel jlb = new JLabel(); jlb.setHorizontalAlignment(SwingConstants.CENTER); jlb.setVerticalAlignment(SwingConstants.CENTER); jlb.setText("分数:"); fr5.add(jlb); jtf.setPreferredSize(new Dimension(140, 20)); setScore(); jtf.setFont(new Font("Goudy Stout", Font.BOLD, 18)); jtf.setForeground(Color.RED); jtf.setOpaque(true); jtf.setBackground(Color.BLACK); jtf.setHorizontalAlignment(SwingConstants.CENTER); fr5.add(jtf); fr4.add(fr5); fr4.add(table); return fr4; } public static void cheat() { } public static void clear() { for (int i = 1; i < table.getModel().getRowCount(); i++) { for (int j = 0; j < table.getModel().getColumnCount(); j++) { Object value = table.getValueAt(i, j); if (!checkEmpty(value)) { if (Integer.valueOf(String.valueOf(value)) < 8) { table.setValueAt(null, i, j); } } } } desktop.repaint(); } public static void begin() { for (int i = 1; i < table.getModel().getRowCount(); i++) { for (int j = 0; j < table.getModel().getColumnCount(); j++) { table.setValueAt(null, i, j); } } randomIndex = new RandomIndex(); random(); desktop.repaint(); } static Random random = new Random(); public static void random() { randomIndex.clear(); for (int rowIndex = 1; rowIndex < rowCount; rowIndex++) { for (int colIndex = 0; colIndex < colCount; colIndex++) { if (!checkEmpty(tbModule.getValueAt(rowIndex, colIndex))) { randomIndex.addChoosneL(rowIndex * colCount + colIndex); } else { randomIndex.addIndexL(rowIndex * colCount + colIndex); } } } // 如果 int index = randomIndex.randomIndex(); int row = index / colCount; int col = index % colCount; int rnum = random.nextInt(50); int disNum = 2; if (rnum > 45) { // disNum = 4; } table.setValueAt(disNum, row, col); desktop.repaint(); } public static boolean checkEmpty(Object cellV) { if (cellV == null || String.valueOf(cellV).length() == 0) { return true; } return false; } public static boolean compareData(Object val1, Object val2) { if ((val1 == null && val2 == null) || (String.valueOf(val1).equals(String.valueOf(val2)))) { return true; } return false; } public static boolean compareArr(Object[][] dataArr1, Object[][] dataArr2) { for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { for (int colIndex = 0; colIndex < colCount; colIndex++) { if (!compareData(dataArr1[rowIndex][colIndex], dataArr2[rowIndex][colIndex])) { return false; } } } return true; } public static void upMethod() { // System.out.println("up"); Object[][] dataArr = new Object[rowCount][colCount]; int firstNum = -1; int secondNum = -1; // 按列判断,行从低到高 for (int colIndex = 0; colIndex < colCount; colIndex++) { for (int rowIndex = 1; rowIndex < rowCount; rowIndex++) { // 单元格非空 if (!checkEmpty(table.getValueAt(rowIndex, colIndex))) { // System.out.println((table.getValueAt(rowIndex, // colIndex))); // 第一个值为负赋给第一个,否则赋给第二个 if (firstNum < 0) { firstNum = Integer.valueOf(String.valueOf(table .getValueAt(rowIndex, colIndex))); } else { secondNum = Integer.valueOf(String.valueOf(table .getValueAt(rowIndex, colIndex))); } // 如果两个值一样,那么相加,清空第一个第二个 if (firstNum >= 0 && secondNum >= 0 && compareData(firstNum, secondNum)) { for (int i = 1; i < rowCount; i++) { if (checkEmpty(dataArr[i][colIndex])) { dataArr[i][colIndex] = firstNum + secondNum; SCORE += firstNum + secondNum; setScore(); break; } } firstNum = -1; secondNum = -1; } // 如果两个值不一样,那么赋值第一个,把第二个给第一个,清空能够第二个 else if (firstNum >= 0 && secondNum >= 0 && !compareData(firstNum, secondNum)) { for (int i = 1; i < rowCount; i++) { if (checkEmpty(dataArr[i][colIndex])) { dataArr[i][colIndex] = firstNum; break; } } firstNum = secondNum; secondNum = -1; } } // 到达最大下标 if (rowIndex == rowCount - 1) { for (int i = 1; i < rowCount; i++) { if (firstNum == -1) { break; } if (checkEmpty(dataArr[i][colIndex])) { dataArr[i][colIndex] = firstNum; firstNum = secondNum; secondNum = -1; } } } } } if (compareArr(dataArr, tbModule.dataArr)) { //System.out.println("Invalid Operation!"); } else { tbModule.dataArr = dataArr; random(); desktop.repaint(); } } public static void downMethod() { // System.out.println("down"); Object[][] dataArr = new Object[rowCount][colCount]; int firstNum = -1; int secondNum = -1; // 按列判断,行从高到低 for (int colIndex = 0; colIndex < colCount; colIndex++) { for (int rowIndex = rowCount - 1; rowIndex >= 1; rowIndex--) { // 单元格非空 if (!checkEmpty(table.getValueAt(rowIndex, colIndex))) { // System.out.println((table.getValueAt(rowIndex, // colIndex))); // 第一个值为负赋给第一个,否则赋给第二个 if (firstNum < 0) { firstNum = Integer.valueOf(String.valueOf(table .getValueAt(rowIndex, colIndex))); } else/* if (secondNum < 0) */{ secondNum = Integer.valueOf(String.valueOf(table .getValueAt(rowIndex, colIndex))); } // 如果两个值一样,那么相加,清空第一个第二个 if (firstNum >= 0 && secondNum >= 0 && compareData(firstNum, secondNum)) { for (int i = rowCount - 1; i >= 1; i--) { if (checkEmpty(dataArr[i][colIndex])) { dataArr[i][colIndex] = firstNum + secondNum; SCORE += firstNum + secondNum; setScore(); break; } } firstNum = -1; secondNum = -1; } // 如果两个值不一样,那么赋值第一个,把第二个给第一个,清空能够第二个 else if (firstNum >= 0 && secondNum >= 0 && !compareData(firstNum, secondNum)) { for (int i = rowCount - 1; i >= 1; i--) { if (checkEmpty(dataArr[i][colIndex])) { dataArr[i][colIndex] = firstNum; break; } } firstNum = secondNum; secondNum = -1; } } // 到达最小下标 if (rowIndex == 1) { for (int i = rowCount - 1; i >= 1; i--) { if (firstNum == -1) { break; } if (checkEmpty(dataArr[i][colIndex])) { dataArr[i][colIndex] = firstNum; firstNum = secondNum; secondNum = -1; } } } } } if (compareArr(dataArr, tbModule.dataArr)) { // System.out.println("Invalid Operation!"); } else { tbModule.dataArr = dataArr; random(); desktop.repaint(); } } public static void leftMethod() { // System.out.println("left"); Object[][] dataArr = new Object[rowCount][colCount]; int firstNum = -1; int secondNum = -1; // 按行判断,列从低到高 for (int rowIndex = 1; rowIndex < rowCount; rowIndex++) { for (int colIndex = 0; colIndex < colCount; colIndex++) { // 单元格非空 if (!checkEmpty(table.getValueAt(rowIndex, colIndex))) { // System.out.println((table.getValueAt(rowIndex, // colIndex))); // 第一个值为负赋给第一个,否则赋给第二个 if (firstNum < 0) { firstNum = Integer.valueOf(String.valueOf(table .getValueAt(rowIndex, colIndex))); } else/* if (secondNum < 0) */{ secondNum = Integer.valueOf(String.valueOf(table .getValueAt(rowIndex, colIndex))); } // 如果两个值一样,那么相加,清空第一个第二个 if (firstNum >= 0 && secondNum >= 0 && compareData(firstNum, secondNum)) { for (int i = 0; i < colCount; i++) { if (checkEmpty(dataArr[rowIndex][i])) { dataArr[rowIndex][i] = firstNum + secondNum; SCORE += firstNum + secondNum; setScore(); break; } } firstNum = -1; secondNum = -1; } // 如果两个值不一样,那么赋值第一个,把第二个给第一个,清空能够第二个 else if (firstNum >= 0 && secondNum >= 0 && !compareData(firstNum, secondNum)) { for (int i = 0; i < colCount; i++) { if (checkEmpty(dataArr[rowIndex][i])) { dataArr[rowIndex][i] = firstNum; break; } } firstNum = secondNum; secondNum = -1; } } // 到达最大下标 if (colIndex == colCount - 1) { for (int i = 0; i < colCount; i++) { if (firstNum == -1) { break; } if (checkEmpty(dataArr[rowIndex][i])) { dataArr[rowIndex][i] = firstNum; firstNum = secondNum; secondNum = -1; } } } } } if (compareArr(dataArr, tbModule.dataArr)) { // System.out.println("Invalid Operation!"); } else { tbModule.dataArr = dataArr; random(); desktop.repaint(); } } public static void rightMethod() { // System.out.println("right"); Object[][] dataArr = new Object[rowCount][colCount]; int firstNum = -1; int secondNum = -1; // 按行判断,列从高到低 for (int rowIndex = 1; rowIndex < rowCount; rowIndex++) { for (int colIndex = colCount - 1; colIndex >= 0; colIndex--) { // 单元格非空 if (!checkEmpty(table.getValueAt(rowIndex, colIndex))) { // System.out.println((table.getValueAt(rowIndex, // colIndex))); // 第一个值为负赋给第一个,否则赋给第二个 if (firstNum < 0) { firstNum = Integer.valueOf(String.valueOf(table .getValueAt(rowIndex, colIndex))); } else/* if (secondNum < 0) */{ secondNum = Integer.valueOf(String.valueOf(table .getValueAt(rowIndex, colIndex))); } // 如果两个值一样,那么相加,清空第一个第二个 if (firstNum >= 0 && secondNum >= 0 && compareData(firstNum, secondNum)) { for (int i = colCount - 1; i >= 0; i--) { if (checkEmpty(dataArr[rowIndex][i])) { dataArr[rowIndex][i] = firstNum + secondNum; SCORE += firstNum + secondNum; setScore(); break; } } firstNum = -1; secondNum = -1; } // 如果两个值不一样,那么赋值第一个,把第二个给第一个,清空能够第二个 else if (firstNum >= 0 && secondNum >= 0 && !compareData(firstNum, secondNum)) { for (int i = colCount - 1; i >= 0; i--) { if (checkEmpty(dataArr[rowIndex][i])) { dataArr[rowIndex][i] = firstNum; break; } } firstNum = secondNum; secondNum = -1; } } // 到达最大下标 if (colIndex == 0) { for (int i = colCount - 1; i >= 0; i--) { if (firstNum == -1) { break; } if (checkEmpty(dataArr[rowIndex][i])) { dataArr[rowIndex][i] = firstNum; firstNum = secondNum; secondNum = -1; } } } } } if (compareArr(dataArr, tbModule.dataArr)) { // System.out.println("Invalid Operation!"); } else { tbModule.dataArr = dataArr; random(); desktop.repaint(); } } }
//表格渲染器CellLabelRenderer.java
package my1024; import java.awt.Color; import java.awt.Component; import java.awt.Font; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.TableCellRenderer; import util.ObjectUtil; public class CellLabelRenderer extends JLabel implements TableCellRenderer { private static final long serialVersionUID = 7083489923614792312L; public CellLabelRenderer() { setOpaque(true); setHorizontalAlignment(SwingConstants.CENTER); setVerticalAlignment(SwingConstants.CENTER); } static Color color_gray = new Color(232, 232, 232); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { String oValue = ObjectUtil.getNotNullValue(table .getValueAt(row, column)); this.setFont(new Font("Arial", Font.BOLD, 28)); this.setText(ObjectUtil.getNotNullValue(value)); setVerticalAlignment(CENTER); setHorizontalAlignment(CENTER); if (row == 0) { this.setBackground(new Color(41, 1, 123)); } else { if (My1024.compareData("2", oValue)) { this.setBackground(new Color(123, 123, 123)); } else if (My1024.compareData("4", oValue)) { this.setBackground(new Color(123, 123, 223)); } else if (My1024.compareData("8", oValue)) { this.setBackground(new Color(123, 223, 123)); } else if (My1024.compareData("16", oValue)) { this.setBackground(new Color(223, 123, 123)); } else if (My1024.compareData("32", oValue)) { this.setBackground(new Color(223, 223, 123)); } else if (My1024.compareData("64", oValue)) { this.setBackground(new Color(223, 123, 223)); } else if (My1024.compareData("128", oValue)) { this.setBackground(new Color(123, 223, 223)); } else if (My1024.compareData("256", oValue)) { this.setBackground(new Color(223, 223, 223));// } else if (My1024.compareData("512", oValue)) { this.setBackground(new Color(76, 223, 223)); } else if (My1024.compareData("1024", oValue)) { this.setBackground(new Color(223, 76, 223)); } else if (My1024.compareData("2048", oValue)) { this.setBackground(new Color(223, 223, 76)); } else if (My1024.compareData("4096", oValue)) { this.setBackground(new Color(76, 223, 76)); } else if (My1024.compareData("8192", oValue)) { this.setBackground(new Color(76, 76, 223)); } else if (My1024.compareData("16384", oValue)) { this.setBackground(new Color(76, 76, 76)); } else { this.setBackground(Color.WHITE); } } return this; } }
//键盘监听类MyKeyListener.java
package my1024; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class MyKeyListener implements KeyListener { public void keyPressed(KeyEvent e) { System.out.println(e.getKeyCode()); // 37 left // 38 up // 39 right // 40 down } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } }
// 表格模型MyTableModule.java
package my1024; import java.io.Serializable; import javax.swing.table.AbstractTableModel; public class MyTableModule extends AbstractTableModel implements Serializable { /** * */ private static final long serialVersionUID = 1978547795796513859L; private int rowCount = 1; private int columnCount = 1; public Object[][] dataArr = null; public MyTableModule(int rowCount, int columnCount) { if (columnCount > 1) { this.columnCount = columnCount; } else { this.columnCount = 1; } if (rowCount > 1) { this.rowCount = rowCount; } else { this.rowCount = 1; } dataArr = new Object[rowCount][columnCount]; } public Class<?> getColumnClass(int columnIndex) { if (getValueAt(0, columnIndex) != null) { return getValueAt(0, columnIndex).getClass(); } else { return String.class; } } public String getColumnName(int columnIndex) { return " 第" + columnIndex + "列"; } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { if (rowIndex >= rowCount) { new Exception("Row Index Outbound!").printStackTrace(); } if (columnIndex >= columnCount) { new Exception("Column Index Outbound!").printStackTrace(); } if (dataArr == null) { dataArr = new Object[rowCount][columnCount]; } dataArr[rowIndex][columnIndex] = aValue; fireTableCellUpdated(rowIndex, columnIndex); } public Object getValueAt(int rowIndex, int columnIndex) { if (dataArr == null) { dataArr = new Object[rowCount][columnCount]; } return dataArr[rowIndex][columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } public int getRowCount() { return rowCount; } public int getColumnCount() { return columnCount; } }
// 数据位置随机类RandomIndex.java
package my1024; import java.util.ArrayList; import java.util.List; import java.util.Random; public class RandomIndex { List<Integer> indexL = null; List<Integer> choosenL = null; Random random = new Random(); public RandomIndex() { init(); } private void init() { indexL = new ArrayList<Integer>(); choosenL = new ArrayList<Integer>(); for (int i = 0; i < 16; i++) { indexL.add(i); } } public void addIndexL(Integer i) { if (indexL == null) { indexL = new ArrayList<Integer>(); } indexL.add(i); } public void addChoosneL(Integer i) { if (choosenL == null) { choosenL = new ArrayList<Integer>(); } choosenL.add(i); } public void clear() { indexL = new ArrayList<Integer>(); choosenL = new ArrayList<Integer>(); } public int randomIndex() { if (indexL.isEmpty()) { System.out.println("No more data!"); return 0; } int index = random.nextInt(indexL.size()); int number = indexL.get(index); choosenL.add(number); indexL.remove(index); return number; } public static void main(String args[]) { RandomIndex a = new RandomIndex(); a.init(); while (a.indexL.size() > 0) { System.out.println(a.randomIndex()); } System.out.println(a.indexL); } }
标签:1024 applet
原文地址:http://stanny.blog.51cto.com/836013/1931373