黑马程序员_石头迷阵小游戏
生活随笔
收集整理的這篇文章主要介紹了
黑马程序员_石头迷阵小游戏
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
黑馬程序員_石頭迷陣小游戲
源代碼
一些說(shuō)明:
1)這些是我看b站黑馬程序員的視頻,自己手打的,想分享一下,如果有侵權(quán)啥的請(qǐng)聯(lián)系我,馬上刪除
2)一些比較重要的我都有給注釋
3)工具idea idk版本14.0.1
大年三十,祝看到這句話的人兒新年快樂(lè)
主函數(shù):
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;//記錄游戲狀態(tài)int Flag = 1;//皮膚選項(xiàng)JMenuItem item4 = new JMenuItem("重新開(kāi)始");JMenuItem item5 = new JMenuItem("關(guān)于我們");/*** 該方法用于初始化數(shù)據(jù) -- datas數(shù)組進(jìn)行初始化*/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的一維數(shù)組隨機(jī)打亂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;}}}/*** 該方法用于初始化數(shù)據(jù) -- datas數(shù)組進(jìn)行初始化*/public void reitData(){initData();paintView();}//空參構(gòu)造方法public MainFrame(){//初始化窗體initFrame();//初始化菜單initMenu();//初始化數(shù)據(jù)initData();//繪制界面paintView();//為窗體添加鍵盤(pán)監(jiān)聽(tīng)this.addKeyListener(this);//設(shè)置窗體可見(jiàn)setVisible(true);}/*** 此方法用于初始化菜單(換膚、關(guān)于我們)*/public void initMenu() {//1、2、3屬于層級(jí)包含關(guān)系//1.創(chuàng)建JMenuBar (木棍)JMenuBar menuBar = new JMenuBar();//2.創(chuàng)建欄目對(duì)象Jmenu (換膚、關(guān)于我們)JMenu menu1 = new JMenu("功能");//3.創(chuàng)建JMenTtem (大蒜),提升作用域到成員變量 // JMenuItem item1 = new JMenuItem("經(jīng)典"); // JMenuItem item2 = new JMenuItem("賽博朋克"); // JMenuItem item3 = new JMenuItem("小屁孩風(fēng)");//4.創(chuàng)建聯(lián)系關(guān)系menuBar.add(menu1);menu1.add(item4);menu1.add(item5);//5.注冊(cè)監(jiān)聽(tīng)item4.addActionListener(this);item5.addActionListener(this);//6.給窗體對(duì)象設(shè)置菜單 // super.setJMenuBar(menuBar);setJMenuBar(menuBar);}/*** 窗體初始化方法,所有窗體有關(guān)的設(shè)置都在這個(gè)方法中完成*/public void initFrame(){setTitle("2048");setSize(514,538);//設(shè)置窗體居中setLocationRelativeTo(null);//設(shè)置窗體置頂setAlwaysOnTop(true);//設(shè)置窗體的關(guān)閉模式setDefaultCloseOperation(3);//通過(guò)窗體對(duì)象frame,取消默認(rèn)布局setLayout(null);}/*** 此方法用于繪制游戲界面*/public void paintView(){//移除掉界面所有內(nèi)容getContentPane().removeAll();//創(chuàng)建Jlable對(duì)象,顯示圖片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);//將創(chuàng)建好的Jlable對(duì)象(背景)添加到面板當(dāng)中getContentPane().add(background);JLabel scoreLabel = new JLabel("步數(shù)" + count);scoreLabel.setBounds(50,20,100,20);getContentPane().add(scoreLabel);//刷新界面的方法getContentPane().repaint();}/*** 無(wú)法監(jiān)聽(tīng)到上下左右、ctrl、fn。。。,無(wú)需關(guān)注*/@Overridepublic void keyTyped(KeyEvent e) {}/*** 鍵盤(pán)被按下時(shí),所觸發(fā)的方法,在這個(gè)方法中區(qū)別上下左右按鍵*/@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();CheckVictory();if (keyCode == 37){if (y0 == 3){return;}else{//左移動(dòng)邏輯,調(diào)用左移動(dòng)方法moveToLeft(1);count++;}}else if (keyCode == 38){if (x0 == 3){return;}else{//上移動(dòng)邏輯moveTotop(1);count++;}}else if (keyCode == 39){if (y0 == 0){return;}else{//右移動(dòng)邏輯moveToRight(1);count++;}}else if (keyCode == 40){if (x0 == 0){return;}else{//下移動(dòng)邏輯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;}/*** 此方法用于每次移動(dòng)之后判斷是否成功*/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;//表示成功了}/*** 此方法用于左移動(dòng)*/public void moveToLeft(int flag) {datas[x0][y0] = datas[x0][y0+1];datas[x0][y0+1] = 0;y0++;}/***此方法用于右移動(dòng)*/public void moveToRight(int flag){datas[x0][y0] = datas[x0][y0-1];datas[x0][y0-1] = 0;y0--;}/*** 此方法用于實(shí)現(xiàn)上移動(dòng)*/public void moveTotop(int flag) {datas[x0][y0] = datas[x0+1][y0];datas[x0+1][y0] = 0;x0++;}/*** 此方法用于實(shí)現(xiàn)下移動(dòng)*/public void moveToBottom(int flag) {datas[x0][y0] = datas[x0-1][y0];datas[x0-1][y0] = 0;x0-- ;}/*** 鍵盤(pán)被松開(kāi)時(shí)觸發(fā)的方法*/@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("我們都是一家人,相親相愛(ài)的一家人");}paintView();} }總結(jié)
以上是生活随笔為你收集整理的黑马程序员_石头迷阵小游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 线性代数之矩阵的秩(2)
- 下一篇: Proxyee down 3 for M