(之三)将算法与界面结合起来

用布局和按钮来实现算法的界面

上面已经说完了算法,相信大家也迫不及待的想进入界面的设计了吧,好了,多的不说,我们开始吧。

既然我们的算法是基于二维数组的,那么我们也应该在界面使用一个能反映二维数组的控件。这里有两种方式,一种使用表格来实现,第二种是使用布局来实现。

相对而言,用表格来实现二维数组要简单一些, JAVA 提供的布局方式可能是令大家都不习惯的一种界面设计方式,不过,在这里,我还是选用了布局的方式来实现界面,因为,当你设计完界面后,你会发现 JAVA 的布局也是有它的优点的。

JAVA 提供了 BorderLyout 、 GridLayout 、 FlowLayout 等布局,而在这些布局中, GridLayout 布局是最接近于表格方式的一种布局,同时,我们使用 Jbutton 控件来作为数组中的元素。

//MapUI.java

public class MapUI extends JPanel implements ActionListener {

JButton[] dots = new JButton[Setting.ROW * Setting.COLUMN];

public MapUI() {

// 设计布局

GridLayout gridLayout = new GridLayout();

gridLayout.setRows(Setting.ROW);

gridLayout.setColumns(Setting.COLUMN);

gridLayout.setHgap(2); // 设置纵向间距

gridLayout.setVgap(2); // 设置横向间距

this.setLayout(gridLayout);

// 放置按钮

for (int row = 0; row < Setting.ROW; row++) {

for (int col = 0; col < Setting.COLUMN; col++) {

int index = row * Setting.COLUMN + col;

dots[index].addActionListener(this); // 添加事件处理

this.add(dots[index]);

}

}

}

}

当然了,上面的代码太简单了,简单得连一些基本的事情也没有做,比如说在按钮上加上文字,并且,要保证每个按钮上的文字与算法中二维数组中相对位置的元素的值相对应。现在我们运行一下看看,怎么样,像不像?

界面出来了,那我们怎么知道用户点击的是哪个按钮呢。其实这也不难的,我们在放置按钮的时候,对每个按钮的 CommandName 属性赋一个值,通过这个值,我们就可以知道该按钮对应二维数组中元素的具体位置了,现在,我们按放置按钮的代码改动一下:

// 放置按钮

for (int row = 0; row < Setting.ROW; row++) {

for (int col = 0; col < Setting.COLUMN; col++) {

int index = row * Setting.COLUMN + col;

dots.setActionCommand("" + i);

}

}

在按钮的事情处理中,再把这个值取出来,并且还原到坐标上,

public void actionPerformed(ActionEvent e) {

JButton button = (JButton) e.getSource();

int offset = Integer.parseInt(button.getActionCommand());

int row, col;

row = Math.round(offset / Setting.COLUMN);

col = offset - row * Setting.COLUMN;

}

怎么样,是不是如此简单?已经知道了用户是按的哪个按钮,并且知道了该按钮对应的二维数组中的值,剩下的事情就不用我说了吧:)

现在,我们需要用 JButton 控件来将算法中二维数组中每个元素的值区别出来,最简单的就是用不同的数字来显示,有了这个功能后,我们就可以很方便的实现界面与算法的同步了。

// 根据数组来绘置画面

private void paint() {

for (int row = 0; row < Setting.ROW; row++) {

for (int col = 0; col < Setting.COLUMN; col++) {

int index = row * Setting.COLUMN + col;

if (map.getMap()[row][col] > 0) {

dots[index].setIcon(Kyodai.BlocksIcon[map.getMap()[row][col] - 1]);

dots[index].setEnabled(true);

}

else {

dots[index].setIcon(null);

dots[index].setText(“” + index);

}

}

}

}

设计用户界面

好了,到现在为止,不管怎么说,我们已经大体上实现了与算法有关的界面,虽然还很难看,但总算是有了个界面,也算是对自己的一点安慰吧。

现在,我们要设计用户的界面了,用户的界面也无需让我们多考虑了,既然已经有现成的,我们就抄吧(其实是我天生缺乏美术天份,与其自己做得难看,还不如抄抄别人现成的)。这部分没有太多要说的,我就用图来说明一下吧。

同样,整个界面也是使用了 JAVA 提供的布局方式,这里使用的是 BorderLayout 布局,我们需要注意的就是先算计好每个区域所需要尺寸的大小,并且使用 JPanel 的 setPreferredSize 方法来固定好大小,同时,根据自己的需要,添加命令按钮如开始、退出等。

为用户界面添加功能

用户界面的设计已经出来了,但是相应的功能我们还没有实现,现在,让我们来一起实现这些功能吧。

同样,我们还是参照一下别人游戏中有哪些功能,并且根据自己的需要来进行选择,在这里,我们只需要提供开始游戏、刷新地图、提示、炸弹等功能就好了(其它的暂时可以不管,以后需要的时候可以再添加)。

开始游戏: 当用户开始游戏的时候,我们需要将地图初始化并且显示出游戏界面 。

刷新地图: 此功能我们在算法部分中已经实现了,现在要做的就是使显示部分能够同步进行。

提示功能: 此功能在算法中也已经实现,我们需要做的就是怎么样将找到的这两个并且向别人指出。

炸弹功能: 此功能其实 就是在提示功能的基础上,加上自动消除两个点。

好了,相信这些对我们并非难事,我们还是继续下一步吧。

java连连看算法_用 JAVA 开发游戏连连看(之三)将算法与界面结合起来相关推荐

  1. MySQL和java连连看_用 JAVA 开发游戏连连看(之一)动手前的准备

    JAVA ,相信大家也不会陌生了吧, JAVA 是一门相当优秀的语言.目前 JAVA 领域 J2EE . JSP . STRUTS 等技术不知有多么的热门,他们的主要用途是用来进行企业开发, J2ME ...

  2. java游戏开始被流星_用 JAVA 开发游戏连连看(之一)动手前的准备

    JAVA ,相信大家也不会陌生了吧, JAVA 是一门相当优秀的语言.目前 JAVA 领域 J2EE . JSP . STRUTS 等技术不知有多么的热门,他们的主要用途是用来进行企业开发, J2ME ...

  3. java设计连连看心得_基于Java的连连看游戏的设计与实现

    ComputerKnowledgeand Technology 电脑知识与技术 软件设计开发本栏目责任编辑:谢媛媛 第7卷第35期 (2011年12月) 9 基于Java的连连看游戏的设计与实现 陈珊 ...

  4. Java实现连连看源代码文档_Java实现游戏连连看(有源代码)

    Java实现游戏连连看(有源代码) JAVA语言实现连连看游戏 1.课程设计目的 Java语言是当今流行的网络编程语言,它具有面向对象.跨平台.分布应用等特点.面向对象的开发方法是当今世界最流行的开发 ...

  5. 6种java垃圾回收算法_学习java垃圾回收

    垃圾回收(GC)一直是Java受欢迎背后的重要特性之一.垃圾回收是Java中用于释放未使用的内存的机制.本质上,它追踪所有仍在使用的对象,并将剩下的标记为垃圾.Java的垃圾回收被认为是一种自动内存管 ...

  6. java ee6教程_《Java EE 6 企业级应用开发教程》怎么样_目录_pdf在线阅读 - 课课家教育...

    第1章 java EE概述 1.1 Java EE的产生与发展 1.2 Java EE 6架构 1.3 Java EE 6常用技术 1.4 Java EE 6特性 1.5 Java EE 6应用服务器 ...

  7. java alsa 编程_搭建JavaWeb开发环境

    更好的阅读体验欢迎访问博客搭建JavaWeb开发环境 前言 在服务器上搭建javaweb开发环境,特此记录 一.安装JDK 查看默认JDK java -version rpm -qa|grep jav ...

  8. java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)

    Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算.而朴素算法却需要进行8次乘法运算. 原理 Strassen算法的原理如下 ...

  9. java华容道代码_华容道Java游戏源代码JAVA游戏源码下载

    鉴于JAVA的华容道游戏源码,希望对研讨JAVA游戏的朋友有所帮助.最初运行于西门子是非屏手机上. 华容道Java游戏源代码 (1 folders, 2 files, 1.38 KB, 76.13 K ...

最新文章

  1. 一次性搞定权限树遍历(通用解决方案)
  2. Qt最新版5.13在Windows环境静态编译安装和部署的完整过程(VS 2017/VS 2019)
  3. 微软亚洲研究院NLC组招聘实习生!与一线研究员共探NLP前沿与落地!
  4. anaconda的python环境下无法使用通过pip安装的python库
  5. ASP.NET vNext 概述
  6. Objective-C 常用代码
  7. 计算机组成原理CPUCLK什么,计算机组成原理之CPU原理.pdf
  8. 监狱视频探视(会见)系统
  9. win10专业版占多少空间_Win10系统
  10. 常见的浏览器兼容问题和解决方法
  11. 最清晰易懂的Elasticsearch操作手册|收藏夹必备
  12. 使用addr2line 定位 FORTIFY: vsprintf: prevented write past end of buffer‘ 报错解决思路
  13. 有搜python题目的软件吗_Python开发及应用-中国大学mooc-试题题目及答案
  14. Dubbo监控中心的介绍与安装
  15. 面试系列 -- 常见面试问题回答思路
  16. JZOJ8.14(C组)帕秋莉·诺雷姬
  17. 6、七段数码管显示译码器设计与应用
  18. 春天,陪你一起去赏雨——HTML5下雨效果
  19. 【ODOO OWL】基础 Owl 的 mount 挂载应用程序
  20. Arm A-profile feature names

热门文章

  1. 浪潮信息做5G服务器,看来浪潮和运营商在5G布局非常深,中标移动开了个好头...
  2. 虚拟化 VMware ESXi(二)
  3. 一起学习用Verilog在FPGA上实现CNN----(三)激活层设计
  4. 一个男人和一只狗的故事
  5. U盘插到电脑上就严重发烫,而且计算机也无法发现U盘 这个U盘彻底坏了吗?,U盘插上电脑就死机是什么原因?如何解决?...
  6. kmp算法例题 登山
  7. 通过中央气象台做天气预报
  8. 你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!
  9. Java相关课程系列笔记之一Java学习笔记
  10. RPA机器人的10大基础功能与2大类型