黑马程序员_石头迷阵小游戏
生活随笔
收集整理的這篇文章主要介紹了
黑马程序员_石头迷阵小游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
黑馬程序員_石頭迷陣小游戲
源代碼
一些說明:
1)這些是我看b站黑馬程序員的視頻,自己手打的,想分享一下,如果有侵權啥的請聯系我,馬上刪除
2)一些比較重要的我都有給注釋
3)工具idea idk版本14.0.1
大年三十,祝看到這句話的人兒新年快樂
主函數:
public class APP {public static void main(String[] args) {new MainFrame();} }MainFrame:
import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Random;public class MainFrame extends JFrame implements KeyListener, ActionListener {int [][] datas = new int[4][4];//記錄空白格位置int x0;int y0;//記錄得分int count = 0;//記錄游戲狀態int Flag = 1;//皮膚選項JMenuItem item4 = new JMenuItem("重新開始");JMenuItem item5 = new JMenuItem("關于我們");/*** 該方法用于初始化數據 -- datas數組進行初始化*/public void initData(){int[] a = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};Random r = new Random();//將0~15的一維數組隨機打亂for (int i = 0; i < a.length; i++) {int index = r.nextInt(a.length); // 0~15int tem = a[i];a[i] = a[index];a[index] = tem;}for (int i = 0; i < a.length; i++) {datas[i/4][i%4] = a[i];if (a[i] == 0){x0 = i/4;y0 = i%4;}}}/*** 該方法用于初始化數據 -- datas數組進行初始化*/public void reitData(){initData();paintView();}//空參構造方法public MainFrame(){//初始化窗體initFrame();//初始化菜單initMenu();//初始化數據initData();//繪制界面paintView();//為窗體添加鍵盤監聽this.addKeyListener(this);//設置窗體可見setVisible(true);}/*** 此方法用于初始化菜單(換膚、關于我們)*/public void initMenu() {//1、2、3屬于層級包含關系//1.創建JMenuBar (木棍)JMenuBar menuBar = new JMenuBar();//2.創建欄目對象Jmenu (換膚、關于我們)JMenu menu1 = new JMenu("功能");//3.創建JMenTtem (大蒜),提升作用域到成員變量 // JMenuItem item1 = new JMenuItem("經典"); // JMenuItem item2 = new JMenuItem("賽博朋克"); // JMenuItem item3 = new JMenuItem("小屁孩風");//4.創建聯系關系menuBar.add(menu1);menu1.add(item4);menu1.add(item5);//5.注冊監聽item4.addActionListener(this);item5.addActionListener(this);//6.給窗體對象設置菜單 // super.setJMenuBar(menuBar);setJMenuBar(menuBar);}/*** 窗體初始化方法,所有窗體有關的設置都在這個方法中完成*/public void initFrame(){setTitle("2048");setSize(514,538);//設置窗體居中setLocationRelativeTo(null);//設置窗體置頂setAlwaysOnTop(true);//設置窗體的關閉模式setDefaultCloseOperation(3);//通過窗體對象frame,取消默認布局setLayout(null);}/*** 此方法用于繪制游戲界面*/public void paintView(){//移除掉界面所有內容getContentPane().removeAll();//創建Jlable對象,顯示圖片if (Flag == 2){JLabel loseLabel = new JLabel(new ImageIcon("F:\\JAVA\\day05\\資料\\石頭迷陣image\\win.png"));loseLabel.setBounds(124,230,266,88);getContentPane().add(loseLabel);}for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {JLabel image = new JLabel(new ImageIcon("F:\\JAVA\\day05\\資料\\石頭迷陣image\\"+datas[i][j]+".png"));image.setBounds(50+100*j,50+100*i,100,100);getContentPane().add(image);}} // ImageIcon icon = new ImageIcon("F:\\JAVA\\day05\\資料\\image\\A-Background.png"); // JLabel jl1 = new JLabel(icon); // jl1.setBounds(40,40,420,420);JLabel background = new JLabel(new ImageIcon("F:\\JAVA\\day05\\資料\\石頭迷陣image\\background.png"));background.setBounds(40,40,420,420);//將創建好的Jlable對象(背景)添加到面板當中getContentPane().add(background);JLabel scoreLabel = new JLabel("步數" + count);scoreLabel.setBounds(50,20,100,20);getContentPane().add(scoreLabel);//刷新界面的方法getContentPane().repaint();}/*** 無法監聽到上下左右、ctrl、fn。。。,無需關注*/@Overridepublic void keyTyped(KeyEvent e) {}/*** 鍵盤被按下時,所觸發的方法,在這個方法中區別上下左右按鍵*/@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();CheckVictory();if (keyCode == 37){if (y0 == 3){return;}else{//左移動邏輯,調用左移動方法moveToLeft(1);count++;}}else if (keyCode == 38){if (x0 == 3){return;}else{//上移動邏輯moveTotop(1);count++;}}else if (keyCode == 39){if (y0 == 0){return;}else{//右移動邏輯moveToRight(1);count++;}}else if (keyCode == 40){if (x0 == 0){return;}else{//下移動邏輯moveToBottom(1);count++;}}else if (keyCode == 86 || keyCode == 118){cheat();}else {return;}//重新繪制界面paintView();}//作弊器public void cheat() {int[] c = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};for (int i = 0; i < datas.length; i++) {for (int j = 0; j < datas.length; j++) {datas[i][j]=c[4*i+j];}}x0=3;y0=3;}/*** 此方法用于每次移動之后判斷是否成功*/public void CheckVictory(){int[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};lo:for (int i = 0; i < datas.length; i++) {for (int j = 0; j < datas.length; j++) {if (datas[i][j] != b[4*i+j]){return;}}}Flag = 2;//表示成功了}/*** 此方法用于左移動*/public void moveToLeft(int flag) {datas[x0][y0] = datas[x0][y0+1];datas[x0][y0+1] = 0;y0++;}/***此方法用于右移動*/public void moveToRight(int flag){datas[x0][y0] = datas[x0][y0-1];datas[x0][y0-1] = 0;y0--;}/*** 此方法用于實現上移動*/public void moveTotop(int flag) {datas[x0][y0] = datas[x0+1][y0];datas[x0+1][y0] = 0;x0++;}/*** 此方法用于實現下移動*/public void moveToBottom(int flag) {datas[x0][y0] = datas[x0-1][y0];datas[x0-1][y0] = 0;x0-- ;}/*** 鍵盤被松開時觸發的方法*/@Overridepublic void keyReleased(KeyEvent e) {}/*** 判斷換膚* @param e*/@Overridepublic void actionPerformed(ActionEvent e) {if (e.getSource() == item4){reitData();}else if (e.getSource() == item5){System.out.println("我們都是一家人,相親相愛的一家人");}paintView();} }總結
以上是生活随笔為你收集整理的黑马程序员_石头迷阵小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性代数之矩阵的秩(2)
- 下一篇: Proxyee down 3 for M