package text2; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Date;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem; public class MyJframeSuper extends JFrame implements KeyListener , ActionListener{
public static void main(String[] args) { new MyJframeSuper().painJframe();
} //下面三個是方便進行行動監聽進行換膚判斷 JMenuItem jMenuItem1 = new JMenuItem("經典"); JMenuItem jMenuItem2 = new JMenuItem("霓藍"); JMenuItem jMenuItem3 = new JMenuItem("糖果"); //下面是定義換膚的字串 String str = "A-"; int score = 0; int data[][] = new int[4][4]; //判斷上下左右整體移動效果,如果移動失敗則游戲失敗
public void check() { if(checkLeft() == false && checkRight() == false && checkUp() == false && checkDown() == false) { System.out.println("游戲失敗"); } } //陣列拷貝方法
public void copyArray(int src [][],int dest [][]) { for (int i = 0; i < src.length; i++) { for (int j = 0; j < src[i].length; j++) { dest[i][j] = src[i][j]; } }
} //每次移動就產生新的圖片
public void frushPainting() { int frushI[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; int frushj[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; int w = 0; for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { if(data[i][j]==0) { frushI[w] = i; frushI[w] = j; w++; } } } if(w != 0) { Random r = new Random(); int index = r.nextInt(w); int x=frushI[index]; int y=frushI[index]; data[x][y] = 2; } } //產生兩張隨機圖片
public void iniData() { frushPainting(); frushPainting();
} //檢查左移動
public boolean checkLeft() { //創建一個型陣列 int newArray[][] = new int [4][4]; //定義一個方法用來拷貝陣列 copyArray(data, newArray); //呼叫左移方法 left(); //設定一個標號 boolean flag = false; //再來判斷一下 lo : for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { if(data[i][j] != newArray[i][j]) { flag = true; break lo; } } } //然后把陣列轉換回來,用字的陣列拷貝方法 copyArray(newArray,data); return flag; } //檢查右移動 public boolean checkRight() { //創建一個型陣列 int newArray[][] = new int [4][4]; //定義一個方法用來拷貝陣列 copyArray(data, newArray); //呼叫右移方法 horizonReserve(); //設定一個標號 boolean flag = false; //再來判斷一下 lo : for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { if(data[i][j] != newArray[i][j]) { flag = true; break lo; } } } //然后把陣列轉換回來,用字的陣列拷貝方法 copyArray(newArray,data); return flag; } //檢查上移動 public boolean checkUp() { //創建一個型陣列 int newArray[][] = new int [4][4]; //定義一個方法用來拷貝陣列 copyArray(data, newArray); //呼叫上移方法 //先逆時針翻轉 anticlockwise(); //然后呼叫左移 left(); //最后順時針翻轉 clockwise(); //設定一個標號 boolean flag = false; //再來判斷一下 lo : for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { if(data[i][j] != newArray[i][j]) { flag = true; break lo; } } } //然后把陣列轉換回來,用字的陣列拷貝方法 copyArray(newArray,data); return flag; } //檢查下移動 public boolean checkDown() { //創建一個型陣列 int newArray[][] = new int [4][4]; //定義一個方法用來拷貝陣列 copyArray(data, newArray); //呼叫下移方法 //先順時針翻轉 clockwise(); //然后呼叫右移 horizonReserve(); //最后逆時針翻轉 anticlockwise(); //設定一個標號 boolean flag = false; //再來判斷一下 lo : for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { if(data[i][j] != newArray[i][j]) { flag = true; break lo; } } } //然后把陣列轉換回來,用字的陣列拷貝方法 copyArray(newArray,data); return flag; } //繪制換膚選單欄 public void printinfjmenubar() { JMenuBar jb = new JMenuBar(); JMenu jMenu1 = new JMenu("換膚"); JMenu jMenu2 = new JMenu("關于我們"); jb.add(jMenu1); jb.add(jMenu2); jMenu1.add(jMenuItem1); jMenu1.add(jMenuItem2); jMenu1.add(jMenuItem3); this.setJMenuBar(jb); jMenuItem1.addActionListener(this); jMenuItem2.addActionListener(this); jMenuItem3.addActionListener(this); } //繪制表單 public void painJframe() { //繪制表單 this.setTitle("我的繪圖"); printinfjmenubar(); this.setSize(514, 538); this.addKeyListener(this); this.setLocation(150, 100); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true);//這是讓表單顯示出來 iniData(); painting( ); }
//繪制表單背景
public void painting( ) { getContentPane().removeAll();//消除所有界面 for (int j = 0; j < 4; j++) { for (int i = 0; i < 4; i++) { JLabel jb = new JLabel(new ImageIcon("E:\\阿鵬apeng\\Jimage\\A-"+data[j][i]+".png"));//從檔案夾匯入圖片 jb.setBounds(50+100*i, 50+100*j, 100, 100);//設定圖片的位置 this.getContentPane().add(jb);//把圖片添加到表單 } } //下面是設定表單的背景 JLabel jb1 = new JLabel(new ImageIcon("E:\\阿鵬apeng\\Jimage_background\\"+str+"2.png")); jb1.setBounds(40, 40, 420, 420); JLabel jb2 = new JLabel("得分"+":"+score);//這是定義得分的字樣 jb2.setBounds(40, 20, 100, 20); this.getContentPane().add(jb2); this.getContentPane().add(jb1); getContentPane().repaint();//重繪界面
}
//圖片下移
public void clockwise() { //這個是順時針旋轉 int newArray[][] = new int [4][4]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { newArray[j][3-i]=data[i][j]; } } data = newArray;
}
//圖片上移
public void anticlockwise() { //這個是逆時針旋轉 int newArray[][] = new int [4][4]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { newArray[3-j][i]=data[i][j]; } } data = newArray;
}
//圖片左移
public void left() { //下面是程式左移代碼 for (int i = 0; i < data.length; i++) {
int b[] = new int[4];
int index = 0;
for (int x = 0; x < data[i].length; x++) {
if(data[i][x]!=0) { b[index] = data[i][x]; index++;
}
}
data[i]=b;
//下面判斷前面的數和后面的數是否相同,是相同則合并
for (int k = 0; k < 3; k++) { if(data[i][k] == data[i][k+1]) { data[i][k] *= 2; score += data[i][k]; for (int j = k+1; j < 3; j++) { data[i][j] = data[i][j+1]; } data[i][3] = 0; }
}
} }
//圖片右移
public void horizonReserve() { //這個是水平翻轉代碼 for (int i = 0; i < data.length; i++) { int array[] = new int [4]; for (int start = 0 , end = array.length -1; start<end ;start++,end--) { int temp = data[i][start]; data[i][start] = data[i][end]; data[i][end] = temp; } };
} @Override
public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override
public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub if(e.getKeyCode()==37) { left(); frushPainting(); }else if (e.getKeyCode()==38) { //先逆時針翻轉 anticlockwise(); //然后呼叫左移 left(); //最后順時針翻轉 clockwise(); frushPainting(); }else if (e.getKeyCode()==39) { //先是反轉陣列 horizonReserve(); //然后左移 left(); //然后在反轉 horizonReserve(); frushPainting(); }else if (e.getKeyCode()==40) { //先順時針翻轉 clockwise(); //然后呼叫右移 horizonReserve(); //最后逆時針翻轉 anticlockwise(); frushPainting(); } check();//每次游戲結束判斷一下是否失敗 painting();//每次陣列翻轉以后呼叫繪圖 } @Override
public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } @Override
public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource() == jMenuItem1) { str = "A-"; }else if (e.getSource() == jMenuItem2) { str = "B-"; }else if (e.getSource() == jMenuItem3) { str = "C-"; } painting( );
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264308.html
標籤:其它游戲引擎
上一篇:智能燈控計費系統的設計
