Java《石头迷阵02》黑马程序员官方出版万字教程+源码
Posted 黑马程序员官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java《石头迷阵02》黑马程序员官方出版万字教程+源码相关的知识,希望对你有一定的参考价值。
更多Java全套学习资源均在专栏,持续更新中↑↑戳进去领取~
🍅2022年全新Java学习路线图,含源码+笔记,另附在职提升课
🍅跟我20天学Java:01-计算机基础以及JDK、IDEA等安装详解
🍅跟我20天学Java:02-自动类型转换,表达式的自动类型转换,强制类型转换
🍅跟我20天学Java:03-6个案例手把手带你学循环结构
更多内容加急更新,从安装开始学起来👼
文章目录
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[] 11,22,33 ;
但是这个格式稍微有点复杂,我们还有一种简写格式。
格式2:数据类型[] 数组名 = 元素1,元素2,元素3… ;
举例:
int[] array = 11,22,33 ;
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》黑马程序员官方出版万字教程+源码的主要内容,如果未能解决你的问题,请参考以下文章