一、思路分析
首先我们需要来分析这些界面中有哪些东西,然后才能开始写代码。
这些界面代码不需要大家自己写,但是我们需要知道里面有哪些东西。
它有的东西非常多,但是不要慌,我们一个一个来讲解。
![image-20240429154338694](https://img-blog.csdnimg.cn/img_convert/da0d2b5bd21c2c5ec7a6505d7efcd1e9.png)
最重要的肯定是中间的牌盒,一开始我们需要将所有的牌加载到牌盒中,然后才能洗牌、发牌,这个牌盒我们就可以用一个集合来表示。
还有就是三个玩家手上的牌和三张底牌,这个也可以使用集合来表示。因此我们一共需要有四个结合。
只不过三个玩家手上的牌在很多地方都需要使用,因此需要统一管理:我们需要拿一个集合去装它们,这里就会用到集合的嵌套。
在大集合中,0索引
就是左边第一个玩家的牌,1索引
就是中间我们自己的牌,2索引
就是右边玩家的牌。
底牌是不会放到大集合中的,因为底牌不会在很多地方用到,它是作为一个单独的集合放在这里。
在后面打牌的时候,我们还需要再用一个集合,将我们打出的牌装起来。
如果不装,就不好判断当前玩家是什么牌型。也不好判断两个玩家之间谁的牌打,谁的牌小。
因此我们还需要再定义三个集合用来装当前打出的牌。
这里有一个小细节:我们每次在打牌的时候,需要注意数据移动的方向。
例如我们打 红桃三
,那么此时就是从我手上的牌的集合移动到上面的集合中。
![image-20240429155053085](https://img-blog.csdnimg.cn/img_convert/9f41348ce0b943fd3135d86b1b3807fc.png)
并且这三个集合,我们也需要使用一个大集合进行管理:0索引
就是左边第一个玩家打出的牌,1索引
就是中间我们自己打出的牌,2索引
就是右边玩家打出的牌。
以上就是我们在打牌的过程中所用到的八个集合。
![image-20240429155241665](https://img-blog.csdnimg.cn/img_convert/909959fd339654a85fefefd28c947984.png)
继续往下,还有提示的文本信息,即这里的倒计时,每一个玩家前面都有,其实就是三个 JLabel
,我们要使用一个大数组去进行管理。
但是为什么这里使用数组呢?
一般来说数据比较少,不需要进行删除 / 添加操作的,就可以使用数组来进行管理。
但是如果我们需要频繁的删除 / 添加数据,此时就需要用到集合来进行管理了。
跟集合一样,0索引
就是左边第一个玩家提示的文字,1索引
就是中间我们自己提示的文字,2索引
就是右边玩家提示的文字。
![image-20240429155642768](https://img-blog.csdnimg.cn/img_convert/43f6588af791f87bb41c14c6d56775dd.png)
还没完,在我们自己面前,还有四个简单的按钮,只不过这四个按钮不会让他们同时展示出来。
在代码中我们会将这四个按钮分成两组,再用大数组进行管理。
0索引
就是左边的按钮,1索引
就是右边的按钮。
最后一个,左下角地主的图标,这个也是一个 JLabel
,谁是地主,我们就将这个图标放在谁的前面。
二、代码实现
首先界面代码是不需要你自己写的,我们只需要能看懂即可。
首先在最上面,我们定义了一个静态变量 container
,它表示JFrame界面中隐藏容器,所有的组件都需要放到隐藏的容器中。
![image-20240429160324701](https://img-blog.csdnimg.cn/img_convert/1f7ea8549414cb9cb42d66e001957349.png)
如果我们没有把它放到成员位置,那以后在添加组件的时候每次都需要去调用 this.getContentPane()
获取到隐藏的容器,然后再去调用 add()
才能去添加组件。
我觉得每次都这么写太麻烦了,而且每次都需要调用 this.getContentPane()
方法,效率比较低。
如果我们不想让这个方法频繁的被调用,此时就可以在 initJframe()
中只调用一次这个方法,相当于在一开始的会死后就将隐藏的容器获取出来了,然后将它获取给成员位置的 container
。
![image-20240429160645692](https://img-blog.csdnimg.cn/img_convert/f8e927c7c551982e2a558b464b6c66d6.png)
那么以后我们在添加组件的时候,就不需要去调用方法获取隐藏容器再去调用add了,而是直接使用 container
调用 add()
就行了,效率会有一丢丢的提升,代码也更简单了。