黑马程序员_石头迷阵小游戏

源代码

一些说明:

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();}
}

黑马程序员_石头迷阵小游戏相关推荐

  1. 黑马程序员_关于2048小游戏的一些经验总结

    ----------------------  ASP.Net+Unity开发 . .Net培训 .期待与您交流! ----------------------

  2. 自学Java篇之JFrame创建《石头迷阵小游戏》

    自学Java篇之JFrame创建<石头迷阵小游戏> 根据黑马程序员java教程自学完java基础,觉得石头迷阵小游戏案例具有一定的编程练习价值,记录之. 最终效果: 案例主要思想流程: ​ ...

  3. 黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

    黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合 ...

  4. 黑马程序员_异常(老毕视频总结及《疯狂java》补充)

    ----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+A ...

  5. 黑马程序员_基础测试

    -------android培训.java培训.期待与您交流! ---------- 黑马程序员训练营基础测试题及个人代码(包含思路.步骤和基本注释) 1. 编写程序计算12+22+32+....+1 ...

  6. 解析python网络爬虫pdf 黑马程序员_正版 解析Python网络爬虫 核心技术 Scrapy框架 分布式爬虫 黑马程序员 Python应用编程丛书 中国铁道出版社...

    商品参数 书名:Python应用编程丛书:解析Python网络爬虫:核心技术.Scrapy框架.分布式爬虫 定价:52.00元 作者:[中国]黑马程序员 出版社:中国铁道出版社 出版日期:2018-0 ...

  7. Java石头迷阵小游戏

    //测试类 import javax.swing.*;public class Test {public static void main(String[] args) {new MainFrame( ...

  8. 基于Java的石头迷阵小游戏的设计与实现

    文章目录 1 搭建游戏主界面 1.1 用JFrame类来创建窗体 (知识点继承) 1.2 菜单制作JMenuBar 1.3 添加图片 1.4 代码 2 添加游戏功能 2.1 事件监听机制 2.2 设计 ...

  9. 黑马程序员_集合总篇_基础之重点

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

最新文章

  1. [PHP] JQuery+Layer实现添加删除自定义标签代码
  2. php和nginx安装脚本,Nginx + PHP 配置和启动脚本
  3. 不是碰不到更好的,是因为已经有了你!
  4. cx+oracle+sql含中文,sql 判断字段值是是否包含中文字符
  5. amd linux 性能,10年内AMD处理器有多大改进?Linux下皓龙和霄龙每瓦性能对决
  6. 迷失lost结局什么意思_沉默的真相结局是什么意思?严良为什么把球送给江阳儿子?...
  7. 【Python】字符串类型及操作求三位水仙花数
  8. boost::fusion::pop_back用法的测试程序
  9. 实现lua面向对象的private属性
  10. PHP(四)运算符、表达式和语句
  11. web前端顶岗实习总结报告_web前端年度工作总结范文
  12. mac/windows用Chrome浏览器截取长图
  13. “好工作”的最关键指标:场景足够复杂、数据量足够大、杠杆率足够高
  14. unity 360°全景图
  15. Netty高级进阶之基于Netty的Websocket开发网页聊天室
  16. 谈一谈游戏AI - 行为树
  17. Android 点击按钮切换图片
  18. Dancing Line、网易蜗牛读书——创新性分析
  19. 善用SQL Server 2008 SMSS的服务器组功能
  20. vue整合dorado框架

热门文章

  1. 50道HIVE练习题-搞定了这50题hive sql,那可不嘚直接通关起飞!!!
  2. 微信小程序中的图片处理
  3. 一文读懂pid控制器
  4. 关于实现联系人中英文名排序的问题
  5. Hdu2022 多校训练(5) BBQ
  6. Matplotlib空气质量数据分析(附数据集下载)
  7. android 多线程创建texture,从源码角度剖析Android系统EGL及GL线程
  8. 2017年10月23日提高组T2 灵知的太阳信仰 单调队列优化dp
  9. 使用线性回归,岭回归,Lasso回归预测鲍鱼年龄
  10. 租车APP哪家强?这三款软件可能是你的手机必备