用 JAVA 开发游戏连连看(之三)将算法与界面结合起来

news/2024/7/4 1:25:09 标签: 算法, 游戏, java, button, class, null
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">
class="ns_content"> (之三)将class="tags" href="/tags/SuanFa.html" title=算法>算法与界面结合起来

用布局和按钮来实现class="tags" href="/tags/SuanFa.html" title=算法>算法的界面

上面已经说完了class="tags" href="/tags/SuanFa.html" title=算法>算法,相信大家也迫不及待的想进入界面的设计了吧,好了,多的不说,我们开始吧。

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

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

JAVA 提供了 BorderLyout 、 GridLayout 、 FlowLayout 等布局,而在这些布局中, GridLayout 布局是最接近于表格方式的一种布局,同时,我们使用 Jclass="tags" href="/tags/BUTTON.html" title=button>button 控件来作为数组中的元素。

//MapUI.class="tags" href="/tags/JAVA.html" title=java>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]);

}

}

}

}


当然了,上面的代码太简单了,简单得连一些基本的事情也没有做,比如说在按钮上加上文字,并且,要保证每个按钮上的文字与class="tags" href="/tags/SuanFa.html" title=算法>算法中二维数组中相对位置的元素的值相对应。现在我们运行一下看看,怎么样,像不像?
class="ns_content">  
class="ns_content">
界面出来了,那我们怎么知道用户点击的是哪个按钮呢。其实这也不难的,我们在放置按钮的时候,对每个按钮的 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 class="tags" href="/tags/BUTTON.html" title=button>button = (JButton) e.getSource();

int offset = Integer.parseInt(class="tags" href="/tags/BUTTON.html" title=button>button.getActionCommand());

int row, col;

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

col = offset - row * Setting.COLUMN;

}


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

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

// 根据数组来绘置画面

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

}

}

}

}


设计用户界面

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

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

class="ns_content">

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

为用户界面添加功能

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

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

开始class="tags" href="/tags/YouXi.html" title=游戏>游戏: 当用户开始class="tags" href="/tags/YouXi.html" title=游戏>游戏的时候,我们需要将地图初始化并且显示出class="tags" href="/tags/YouXi.html" title=游戏>游戏界面 。

刷新地图: 此功能我们在class="tags" href="/tags/SuanFa.html" title=算法>算法部分中已经实现了,现在要做的就是使显示部分能够同步进行。

提示功能: 此功能在class="tags" href="/tags/SuanFa.html" title=算法>算法中也已经实现,我们需要做的就是怎么样将找到的这两个并且向别人指出。

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

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

http://www.niftyadmin.cn/n/1860737.html

相关文章

ps怎么让图片边缘与背景融合_PS教程:动态图片太大,无法上传,怎么办?

问题&#xff1a;GIF图片太大&#xff0c;上传不了&#xff0c;苦恼……在日常工作学习中&#xff0c;有时为了更好地表达&#xff0c;我们需要配上一张动态图片&#xff0c;也就是GIF格式图片&#xff0c;这种格式的图片往往比较大&#xff0c;导致无法上传。比如说&#xff0…

HTML5开发就业怎么样?

在企业技术人才缺乏&#xff0c;所以没有一技之长的人选择学习一门技术来为自己镀金&#xff0c;更希望借此技术能找到一份称心如意的工作。从平面到3d&#xff0c;从应用到开发&#xff0c;html 5开发的快速发展&#xff0c;HTML5开发人才的需求也是持续增长的趋势。从先要的水…

this.form.setfieldsvalue如果要设置数组怎么设置_关于Redis缓存,这三个问题一定要知道!...

最近都没看Redis&#xff0c;现在回来温习下&#xff0c;现在从Redis的三大缓存开始重新探一探有多深有多浅(*^▽^*)让我来开始知识的醍醐灌顶把&#xff01;是时候表演真正的技术了。&#xff08;哔哔哔哔....&#xff09;接下来就开始我们的Redis的三大缓存问题之旅&#xff…

程序员是不是都有直男癌?

直男癌一词源于网友对活在自己的世界观、价值观、审美观里&#xff0c;时时向别人流露出对对方的不顺眼及不满&#xff0c;并略带大男子主义的人的一种蔑称或调侃。对女性过度打扮或者暴露不顺眼&#xff0c;对非处和男同表示不满认为母亲的话语至高无上并带有优越感的大男子主…

python py生成exe_Python插件 pyinstaller打包.py文件生成exe

安装pyinstallerpyinstaller支持python2和python3命令行安装&#xff1a;pipinstall pyinstaller217/Note: windows下转换要先安装pywin32:pipinstall pywin32[pywin32的安装]皮皮blogpyinstaller的使用piPIPI/e/mine/python_workspace/nlp(dev)$pyinstaller -FE:/mine/python_…

真正的IT女是什么样子的?

真正的IT女是什么样子的&#xff1f;相信大家在回复这个问题的时候都会围绕着IT女的兴趣&#xff0c;爱情&#xff0c;喜好来作为一个女程序员的体现吧&#xff0c;但我个人认为还是应该从女程序独有的属性来回答这个问题&#xff01; 比如女程序员在工作中的状态&#xff0c;学…

用 JAVA 开发游戏连连看(之四)添加更多的功能

之四&#xff09;添加更多的功能 计分功能 大体上我们的程序已经可以跑了起来&#xff0c;可惜&#xff0c;就这么玩玩也太没有意思了&#xff0c;总得有个计分的吧。虽然我们不知道别人是怎么计分的&#xff0c;可是&#xff0c;程序是我们自己动手写的&#xff0c;我的地…

JAVA程序员遇到职业问题是跑路?还是留守?

初级JAVA程序员最担心在公司里遇到原本其他程序员开发的项目&#xff0c;他们“跑路”以后的工作就由新程序员完成。而新员工也不懂内部的逻辑&#xff0c;酱紫让程序员很难处理后续的问题&#xff1f;摆在他们面试的可能就两个词&#xff0c;离职&#xff01; 坚持&#xff01…