Java《石头迷阵02》黑马程序员官方出版万字教程+源码

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java《石头迷阵02》黑马程序员官方出版万字教程+源码相关的知识,希望对你有一定的参考价值。

更多Java全套学习资源均在专栏,持续更新中↑↑戳进去领取~

🍅2022年全新Java学习路线图,含源码+笔记,另附在职提升课
🍅跟我20天学Java:01-计算机基础以及JDK、IDEA等安装详解
🍅跟我20天学Java:02-自动类型转换,表达式的自动类型转换,强制类型转换
🍅跟我20天学Java:03-6个案例手把手带你学循环结构

🍉Maven简介以及手把手教你下载安装

更多内容加急更新,从安装开始学起来👼


文章目录


1,游戏优化

1.1添加背景色

​ 为了让游戏的整个界面更好看一点,所以在添加完15张数字图片之后,还得加一个背景色。

背景色也是一张较大的图片,在资料文件中image里面,名字为:background.png。

可以右键点击属性,看到该图片宽高为:484,450。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9oopXO7F-1646823659207)(img\\background.png)]

1.1.1实现步骤:

​ 1,创建ImageIcon对象,并制定图片位置。

​ 2,创建JLabel对象,并把ImageIcon对象放到小括号中。

​ 3,利用JLabel对象设置大小,宽高。

​ 4,将JLabel对象添加到整个界面当中。

代码实现:

ImageIcon background = new ImageIcon("image\\\\background.png");
JLabel backgroundJlabel = new JLabel(background);
backgroundJlabel.setBounds(26, 30, 450, 484);

注意事项:

​ 在之前添加1-15数字图片的时候,我们是从左上角的点依次添加的。

​ 但是为了能跟背景色匹配起来。我们要对1-15数字图片做一些偏移,让他们都在背景色的黑色

最终代码:

JLabel jLabel1 = new JLabel(new ImageIcon("image\\\\1.png"));
jLabel1.setBounds(0 + 50, 0 + 90, 100, 100);
this.add(jLabel1);

JLabel jLabel2 = new JLabel(new ImageIcon("image\\\\2.png"));
jLabel2.setBounds(100 + 50, 0 + 90, 100, 100);
this.add(jLabel2);

JLabel jLabel3 = new JLabel(new ImageIcon("image\\\\3.png"));
jLabel3.setBounds(200+ 50, 0 + 90, 100, 100);
this.add(jLabel3);

JLabel jLabel4 = new JLabel(new ImageIcon("image\\\\4.png"));
jLabel4.setBounds(300+ 50, 0+ 90, 100, 100);
this.add(jLabel4);

JLabel jLabel5 = new JLabel(new ImageIcon("image\\\\5.png"));
jLabel5.setBounds(0+ 50, 100+ 90, 100, 100);
this.add(jLabel5);

JLabel jLabel6 = new JLabel(new ImageIcon("image\\\\6.png"));
jLabel6.setBounds(100+ 50, 100+ 90, 100, 100);
this.add(jLabel6);

JLabel jLabel7 = new JLabel(new ImageIcon("image\\\\7.png"));
jLabel7.setBounds(200+ 50, 100+ 90, 100, 100);
this.add(jLabel7);

JLabel jLabel8 = new JLabel(new ImageIcon("image\\\\8.png"));
jLabel8.setBounds(300+ 50, 100+ 90, 100, 100);
this.add(jLabel8);

......//重复上面的代码,继续添加其他图片。

JLabel background = new JLabel(new ImageIcon("image/background.png"));
background.setBounds(26,30,450,484);
this.add(background);

1.2抽取代码

​ 我们在写代码的时候,如果代码比较多,会把相同功能的代码,抽取出来,放在一个独立的方法里面,这样以后的阅读代码的时候,不会显得乱糟糟的,要想看什么功能的代码,直接到对应的方法中就可以了。

​ 但是我们现在把所有的代码都写在构造方法当中,会让代码非常的难以阅读,所以我们要进行抽取。

​ 此时在构造方法当中,总体可以分为三部分:

//第一部分:初始化界面的代码
......
//第二部分:初始化菜单的代码
......
//第三部分:初始化1-15数字图片的代码
......    

那现在我们就要把分别写三个方法,装着三段代码。而在构造方法中,直接调用就可以了。

这样会提高代码的阅读性和后期的维护性。

维护性的简单理解:当我们要修改代码的时候,可以很方便快捷的找到代码。

代码示例:

//构造方法
public MyJFrame() 
    //初始化界面
    initFrame();

    //初始化菜单
    initMenu();

    //初始化图片
    initImage();

    //让当前窗体可展示出来。
    this.setVisible(true);


//初始化界面的方法
public void initFrame() 
    //把当前窗体的宽高进行了设置
    this.setSize(514, 595);
    //把当前窗体的标题进行了设置
    this.setTitle("石头迷阵单机版 V1.0");
    //把当前窗体的关闭模式进行了设置
    this.setDefaultCloseOperation(3);
    //让当前窗体可以到屏幕的正中央
    this.setLocationRelativeTo(null);
    //让当前窗体可以置顶。
    this.setAlwaysOnTop(true);
    //让界面添加键盘监听
    this.addKeyListener(this);
    //取消内部居中放置方式
    this.setLayout(null);


//初始化菜单的方法
public void initMenu() 
    //创建一个菜单对象
    JMenuBar jMenuBar = new JMenuBar();
    //设置菜单的宽高
    jMenuBar.setSize(514, 20);
    //创建一个选项
    JMenu jMenu = new JMenu("功能");
    
    //创建一个条目
    jMenuItem = new JMenuItem("重新游戏");
    //把条目添加到选项当中
    jMenu.add(jMenuItem);
    //把选项添加到菜单当中
    jMenuBar.add(jMenu);
    //把菜单添加到最外层的窗体当中
    this.setJMenuBar(jMenuBar);


public void initImage() 
    JLabel jLabel1 = new JLabel(new ImageIcon("image\\\\1.png"));
    jLabel1.setBounds(0 + 50, 0 + 90, 100, 100);
    this.add(jLabel1);

    JLabel jLabel2 = new JLabel(new ImageIcon("image\\\\2.png"));
    jLabel2.setBounds(100 + 50, 0 + 90, 100, 100);
    this.add(jLabel2);

    JLabel jLabel3 = new JLabel(new ImageIcon("image\\\\3.png"));
    jLabel3.setBounds(200+ 50, 0 + 90, 100, 100);
    this.add(jLabel3);

    JLabel jLabel4 = new JLabel(new ImageIcon("image\\\\4.png"));
    jLabel4.setBounds(300+ 50, 0+ 90, 100, 100);
    this.add(jLabel4);

    JLabel jLabel5 = new JLabel(new ImageIcon("image\\\\5.png"));
    jLabel5.setBounds(0+ 50, 100+ 90, 100, 100);
    this.add(jLabel5);

    JLabel jLabel6 = new JLabel(new ImageIcon("image\\\\6.png"));
    jLabel6.setBounds(100+ 50, 100+ 90, 100, 100);
    this.add(jLabel6);

    JLabel jLabel7 = new JLabel(new ImageIcon("image\\\\7.png"));
    jLabel7.setBounds(200+ 50, 100+ 90, 100, 100);
    this.add(jLabel7);

    JLabel jLabel8 = new JLabel(new ImageIcon("image\\\\8.png"));
    jLabel8.setBounds(300+ 50, 100+ 90, 100, 100);
    this.add(jLabel8);
    
    ......//重复上面的代码,继续添加其他图片。

    JLabel background = new JLabel(new ImageIcon("image/background.png"));
    background.setBounds(26,30,450,484);
    this.add(background);

1.3循环

​ 为什么要学习循环?因为在刚刚的代码当中,每一个图片都要创建一个ImageIcon,然后再创建一个JLabel,要把这几行代码,重复的写15遍。才能添加15张图片。非常的麻烦。如果我们一直采取这么复杂的方法,那添加100张图片,这得多少代码?

​ 好几百行啊!

在以后,类似这种需要重复执行的代码,我们就可以使用循环。循环可以重复的执行同样的事情。如果有了循环,我们就可以节约大量的代码。但是在循环中,涉及到了几个小知识点,是需要我们提前学习的。

1.3.1比较运算符

​ 比较运算符,其实就是拿着左边跟右边进行比较。其中包括:等等,大于,大于等于,小于,小于等于

  • 如果满足条件,结果就是true,就表示正确的意思。
  • 如果不满足条件,结果就是false。就表示错误的意思。
符号说明
==a==b,判断a和b的值是否相等,成立为true,不成立为false
>a>b,判断a是否大于b,成立为true,不成立为false
>=a>=b,判断a是否大于等于b,成立为true,不成立为false
<a<b,判断a是否小于b,成立为true,不成立为false
<=a<=b,判断a是否小于等于b,成立为true,不成立为false

代码示例:

int a = 10;
int b = 20;
//10 > 20 ? 错误
System.out.println(a > b);
//10 < 20 ? 正确
System.out.println(a < b);

1.3.2自增运算符

​ 自增运算符是对变量进行的操作,就是把变量里面的值+1。

符号作用说明
++自增变量的值加1

代码示例:

int c = 10;
c++;//把变量c里面的值 + 1
System.out.println(c);
int d = 1;
//把变量里面的值+1  d = 2
d++;
//把变量里面的值+1  d = 3
d++;
System.out.println(d);//3

1.3.3循环的格式

循环:重复的做一件事情。

格式:

for (初始化语句;条件判断语句;条件控制语句) 
     循环体语句;

1.3.4执行流程

​ 首先执行初始化语句,然后执行条件判断语句。

如果条件判断语句结果为真,则进入循环体执行。再执行条件控制语句。回到条件判断语句继续重复这个过程。

如果条件判断语句结果为假,则直接结束循环。

如果大家觉得这个过程有点绕,也没有关系。看下面的代码,简单理解循环。

for(int i = 1; i <= 4; i++)  
    重复执行的代码  

int i = 1.就理解为循环的起始条件。

i<=4就理解为循环的结束条件。

i++就理解为每次循环结束后,i做了什么事情。

因为我们要通过i来控制循环的次数。i++就是每次自增一个数。

既然起始为1,结束为4,那么循环的范围就是从1开始到4结束。一共将大括号中的代码重复执行4次。

1.3.5循环添加图片

既然循环可以帮我们简化代码书写,那么我们就用循环来改进一下。

改进之前,先看一下,重复的代码是什么?

翻阅代码之后,发现,重复的代码就是添加图片的代码。那么就把需要重复执行的代码当做循环体写在大括号中。

JLabel jLabel1 = new JLabel(new ImageIcon("image\\\\1.png"));
jLabel1.setBounds(0 + 50, 0 + 90, 100, 100);
this.add(jLabel1);

找到了循环体,我们还要继续找,这个代码需要重复执行多少次?

一共添加15张图片,所以重复执行15次。循环每次结束,变量+1。

现在,我们以第一排的前4张图片为例:

for(int i = 1; i <= 4 ; i++)
    JLabel jLabel1 = new JLabel(new ImageIcon("image\\\\1.png"));
    jLabel1.setBounds(0 + 50, 0 + 90, 100, 100);
    this.add(jLabel1);

代码修改完,但是这样还不行,这样我们是重复添加了第一张图片,而且把这张图片都放在了左上角位置。

所以我们还要继续修改。

因为我们添加的是4张不同的图片,而且每张图片的位置也不一样。

那么要修改的地方有两个:

  • 图片的路径
  • 图片在游戏界面中的位置

修改代码如下:

for (int i = 1; i <= 4; i++) 
    ImageIcon imageIcon = new ImageIcon("image\\\\1.png");
    JLabel jLabel = new JLabel(imageIcon);
    jLabel.setBounds((i-1) * 100 + 50, 0 + 90, 100, 100);
    this.add(jLabel);

到目前为止,我们就可以把4张图片添加到界面当中了。

如果我们要添加15张,那么把上面的for循环,重复4遍就可以了。难度太高不推荐,我们下面有更好的办法。

2,打乱顺序

​ 现在我们已经可以把1-15所有的数字图片都添加到界面当中了。但是此时添加进去顺序是乱的。我们还得把里面的顺序打乱,这样才可以开始玩游戏。

​ 添加前 打乱顺序之后

2.1打乱步骤

  • 我们要先把这些图片都放在一个容器中,这样才能方便管理。
  • 在容器中打乱顺序
  • 再把容器中打乱的图片展示出来

所以,我们来挨个学习需要使用到的知识点。

3,数组

​ 我们为了方便管理这些图片,要把所有的数组图片都放到一个容器中。这个容器不能使用变量,因为变量只能记录一个值。那么我们就需要用到下面学习的数组。

​ 数组也是一个可以存储数据的容器。用来存储同种数据类型的多个值。 存在数组里面的数据也叫元素。

3.1格式

​ 格式1:数据类型[] 数组名 = new 数据类型[] 元素1,元素2,元素3… ; ,

​ 举例:

int[] array = new int[] 112233 ; 

​ 但是这个格式稍微有点复杂,我们还有一种简写格式。

​ 格式2:数据类型[] 数组名 = 元素1,元素2,元素3… ;

​ 举例:

int[] array =  112233 ;

3.2数组图解

​ int [] array = new int[]11,22,33;

等号左边:

int:表示数组中只能存整数

方括号:java中表示一个数组。

array:表示数组的名字。

等号右边:

new:表示准备创建一个数组

int:表示数组中只能存整数

方括号:java中表示一个数组

大括号里面:就是数组中真实存的数据,每一个数据用逗号隔开。

数组的图解如下:

创建了一个数组,其实在内容中就相当于有了一个容器。这个容器的名字叫做array。

因为数组中存3个值,那么会把这个容器中分为3个小格子。然后把11,22,33分别存入到这三个小格当中。

3.3数组的常见操作

  • 怎么存
  • 怎么取
  • 如何修改数组内的元素
  • 遍历

3.3.1怎么存

​ 在上述数组格式中,我们当我们创建了数组之后,数组内就已经存好了元素。

所以,我们只要把希望存在数组里面的所有数据,都写在大括号中就可以了。元素之后用逗号隔开。

3.3.2怎么取

​ 数组的获取要依赖索引。

​ 格式:数组名[索引]

​ 索引就相当于编号一样。但是他是从0开始,逐一增加的。

比如:在上述图中,四个房间里面分别有四只小鸡在洗衣服,我现在要找洗蓝色衣服的小鸡。

那么其实就可以通过房间的编号来获取,又因为这个编号是从0开始的,所以蓝色小鸡编号为2。

代码示例:

//创建一个数组
int [] arr1 = new int[]1,2,3,4,5;
int [] arr2 = 1,2,3,4,5;

//获取数组中的元素
//获取arr2数组中0索引的元素
int a = arr2[0];
System.out.println(a);

//获取arr2数组中2索引的元素之后,立马打印到控制台上面
System.out.println(arr2[2]);

3.3.3修改元素

​ 修改元素有两种方式,可以直接把值赋值赋值给数组,也可以通过变量进行赋值。

方式一:

​ 数组名[索引] = 数据值;

方式二:

​ 数组名[索引] = 变量;

举例:

//创建一个数组
int [] arr = 1,2,3,4,5;

//把arr2数组中0索引上的元素修改为100
System.out.println("修改前" + arr[0]);
arr[0] = 100;
System.out.println("修改后" + arr[0]);

3.3.4遍历

​ 所谓遍历,把数组的元素一个一个的全部获取出来。

格式为:

int[] arr = ……;
for(int i=0; i<arr.length; i++)   
    arr[i]//此时arr[i]在循环的过程中,就依次表示数组中的每一个元素。
          //我们可以对arr[i]进行任意操作

int i = 0:表

以上是关于Java《石头迷阵02》黑马程序员官方出版万字教程+源码的主要内容,如果未能解决你的问题,请参考以下文章

Java《石头迷阵03》黑马程序员官方出版知识重点+笔记源码

Java《石头迷阵04》涉及Java全部知识点总结

java基础入门黑马程序员第二版,万字长文!

求黑马java的全部全套视频

Java教程-黑马程序员版

黑马程序员Java自学资源汇总放送