上篇文章介绍了对对碰游戏的理论部分和介绍了JLabel、JButton、JPanel、ImageIcon、JTextField、JProgressBar等组件的基本使用,介绍了进度条(JProgressBar)常用的方法。今天小编继续带来进行具体的对对碰游戏功能实现。

项目实施

在实现对对碰功能之前,回顾一下上一节我们主要完成了开始游戏按钮、分数、时间进度条、退出游戏按钮,8X8的动物矩阵的界面设计;

效果图如下所示:

接下来,小编继续带大家完成游戏功能,实现游戏功能需要了解什么是交换、消去、连锁,在游戏项目设定那里有,在这就不重复写了。

(一)添加DuiDuiPeng类的成员变量:定义一些变量

代码如下所示:

private MyListener my = new MyListener();

private Timer timer;

private intscore=0;//总分

private intjindu=0;

private intx1,y1;//第一次点击按钮的坐标位置

private intx2,y2;//第二次点击按钮的坐标位置

private final intEMPTY=-1;//为空的标记

private boolean isDoubleClicked=false;//是否点击两次

(二)在DuiDuiPeng构造函数里给指定组件添加监听

btn_start.addActionListener(my);//开始游戏

btn_exit.addActionListener(my);//退出

(三)实现事件处理的函数体

当点击开始按钮时候,计时器启动,设置进度条,8X8动物矩阵可以互换位置,当点击退出按钮,计时器停止,8X8动物矩阵不可以互换位置。

代码如下所示:

private  class MyListener implements ActionListener{

@Override

publicvoid actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==btn_start){//开始游戏

btn_start.setEnabled(false);

timer.start();

jindu=0;

progress.setValue(jindu);

score=0;

text_score.setText(""+score);

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

button[i][j].setEnabled(true);

}

}

do{initAllAnimals();//初始化动物矩阵

}while(searchAllAnimals(1));//searchAllAnimals  1为查询连接  2为去除连接

}

if(e.getSource()==btn_exit){//退出按钮

timer.stop();

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

button[i][j].setEnabled(false);

}

}

dispose();

}

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

if(e.getSource()==button[i][j]){//动物按钮

System.out.println((i+1)+"行"+(j+1)+"列");

swapAnimal(i,j);//实现交换图片

}

}

}

}

}

(四)添加计时器

1.在DuiDuiPeng构造函数里添加计时器;

代码如下所示:

timer=new Timer(1000,new TimerListener());

2.进度条的值从0开始每秒加一,直到进度条的值达到100,计时器停止,不能位置交换动物头像,进度条开始加的时候,开始按钮是不能点击的,当进度条达到100的时候,我们设置开始按钮可以点击状态。

代码如下所示:

private class TimerListener implements ActionListener{

@Override

publicvoid actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

jindu++;

progress.setValue(jindu);

if(jindu==100){

timer.stop();

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

button[i][j].setEnabled(false);

}

}

btn_start.setEnabled(true);

}

}

}

(五)初始化动物矩阵

代码如下所示:

publicvoid initAllAnimals(){//初始化动物矩阵

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

inttemp=(int)(Math.random()*7);//0-6

button[i][j].setIcon(icon[temp]);

animal[i][j]=temp;

}

}

}

(六)查询是否有三个或以上相同连接的图形,是返回true,不是返回false,判断水平方向上是否有三个或以上相同连接的图形,判断垂直方向上是否有三个或以上相同连接的图形

代码较多,在此就不一一呈现了,文末有获取代码的方式。

(七)把三个或以上相同连接图形设为EMPTY,判断水平方向上是否有三个或以上相同连接的图形,把水平方向上有三个或以上相同连接的图形设为EMPTY。判断垂直方向上是否有三个或以上相同连接的图形,把垂直方向上有三个或以上相同连接的图形设为EMPTY。

代码较多,在此就不一一呈现了,文末有获取代码的方式。

(八)查询所有动物头像(1为查询连接 2为去除连接)

代码如下所示:

publicboolean searchAllAnimals(intflag){

//1为查询连接 2为去除连接

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

if(flag==1){

if(isThreeLinked(i,j)){//查询是否有三个或以上连接

returntrue;

}

}elseif(flag==2){

removeThreeLined(i,j);

}

}

}

returnfalse;

}

(九)动物往下移动

代码如下所示:

publicvoid downAnimal(){//动物往下移动

inttemp;

for(inty=7;y>=0;y--){

for(intx=0;x<8;x++){

if(animal[y][x]==EMPTY){

//找到一个空的位置

for(intk=y-1;k>=0;k--){

if(animal[k][x]!=EMPTY){//找到上面一个非空的

temp=animal[k][x];

animal[k][x]=animal[y][x];

animal[y][x]=temp;

break;

}

}

}

}

}

}

(十)重新显示所有图形

代码如下所示:

publicvoid showAllAnimals(){//重新显示所有图形

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

button[i][j].setIcon(icon[animal[i][j]]);

}

}

}

(十一)为空的重新生成随机图形

代码如下所示:

publicvoid updateAnimal(){//为空的重新生成随机图形

for(inti=0;i<8;i++){

for(intj=0;j<8;j++){

if(animal[i][j]==EMPTY){

animal[i][j]=(int)(Math.random()*7);

}

}

}

}

(十二)交换位置

代码如下所示

publicvoid swapAnimal(inty,intx){//y为行,x为列

if((x>=0 && x<8)&&(y>=0 && y<8)){

if(!isDoubleClicked){

//第一次单击

x1=x;

y1=y;

isDoubleClicked=true;

System.out.println("第一次单击的坐标=("+(y1+1)+","+(x1+1)+")");

}else{

x2=x;

y2=y;

isDoubleClicked=false;

System.out.println("第一次单击的坐标=("+(y2+1)+","+(x2+1)+")");

if((Math.abs(x2-x1)==1 &&(y1==y2))

||(x1==x2)&&(Math.abs(y2-y1)==1)){//相邻两个按钮

inttemp;

temp=animal[y2][x2];//交换

animal[y2][x2]=animal[y1][x1];

animal[y1][x1]=temp;

if(isThreeLinked(y1,x1)|| isThreeLinked(y2,x2)){//有三个或以上连接

if(isThreeLinked(y1,x1)){

removeThreeLined(y1,x1);

}

if(isThreeLinked(y2,x2)){

removeThreeLined(y2,x2);

}

downAnimal();//动物往下移动

updateAnimal();//为空的重新生成随机图形

showAllAnimals();//重新显示所有图形

while(searchAllAnimals(1)){

searchAllAnimals(2);//去除连接

downAnimal();

updateAnimal();

showAllAnimals();

}

}else{//没有三个相邻的

temp=animal[y2][x2];//交换

animal[y2][x2]=animal[y1][x1];

animal[y1][x1]=temp;

}

}

}

}

}

完成事件处理效果图如下图所示:

五、总结

1.本文主要介绍了JLabel、JButton、JPanel、ImageIcon、JTextField、JProgressBar、Timer等组件的基本使用,以及相应的事件处理。

2.讲解事件处理函数的添加,难点是运用理解构造函数、内部类的创建。完成事件处理开始游戏按钮,退出功能、实现进度条计时、初始化动物矩阵、在水平方向或垂直方向是否有三个或三个以上的相同连接图形在、动物往下移、重新显示所有图形、为空的重新生成随机图形,最后交换位置。

3.这些代码看起来比较复杂,但其实不是很难,写的事件处理比较多,希望通过这个对对碰的一个小游戏对你有所帮助!

【编辑推荐】

【责任编辑:姜华 TEL:(010)68476606】

点赞 0

java对对碰游戏设计报告_手把手带你用Java打造一款对对碰游戏(下篇)相关推荐

  1. java洗衣店管理课程设计报告_课内资源 - 基于Java的洗衣店管理系统

    摘 要 随着科技的快速发展,人们的需求也是越来越多,为了方便对信息的管理我们小组就设计了一个洗衣店订单的管理系统. 洗衣店管理系统是典型的的信息管理系统,创建了六个类,分别是:Test类:Person ...

  2. java坦克大战 实训报告_坦克大战系统《Java程序开发实训》综合实训报告.doc

    坦克大战系统<Java程序开发实训>综合实训报告 <Java程序开发实训>综合实训报告 题目: 坦克大战系统 姓名: 方庆 学号: 2010203206 班级: 10软件(2) ...

  3. java future 线程 状态_手把手带你了解Java线程的实现方式及生命周期原理

    前言 我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的.今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术. 概念 ...

  4. java 字节码分析_手把手带你分析Java中的Class字节码文件

    分析Class文件的源码如下: package org.yuequan.klass; public private int m; public int inc(){ return m + 1; } } ...

  5. java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理

    前言 我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的.今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术. 概念 ...

  6. python 视频下载进度_手把手教你用Python打造一款批量下载视频并能可视化显示下载器...

    3.直接上代码和注释. #解析页面def parser: ab=[] rep=requests.get('http://v.u00.cn:93/iappce.htm#sp',timeout=5,hea ...

  7. 对对碰java_Java开发学习之用Java打造一款对对碰游戏(下篇)

    本文主要向大家介绍了Java开发学习之用Java打造一款对对碰游戏,通过具体的内容向大家展现,希望对大家Java开发的学习有所帮助. 在之前的文章介绍了对对碰游戏的理论部分和介绍了JLabel.JBu ...

  8. Java课程设计——挖地雷游戏设计报告

    源文件: 大学生Java课程设计--挖地雷游戏设计报告源文件-其它文档类资源-CSDN文库 目 录 摘 要. 1 一.引言. 2 1.设计任务和基本要求. 2 二.报告正文. 3 1.需求分析. 3 ...

  9. C语言小游戏设计报告

    C语言小游戏设计报告 课程设计名称:贪吃蛇小游戏 专业班级:计科15-2 学号:150809229 姓名:XXX 一.设计目标 通过设计,培养学生对电脑的动手能力,使学生巩固<C语言程序设计&g ...

最新文章

  1. ssh远程操作服务器
  2. 问题文件Android Studio 安装完成不能打开等问题解决记录
  3. Apache虚拟主机(转)
  4. MongoDB数据库(2.MongoDB对数据库的操作以及Mongodb的增删改查)
  5. zabbix安装步骤
  6. python怎么添加按钮_在Python QProcess示例中添加按钮和单独的窗口
  7. 计算机硬件基础——第七章:存储系统
  8. glassfish4 linux,CentOS 6.5上安装GlassFish4.0 过程笔记
  9. 微信JS-SDK的PHP demo页面,解决Internal error 500错误
  10. 苹果cmsV10程序无法搜索影片的处理教程
  11. python_numpy_计算对数收益率和还原问题
  12. linux下设置MySQL密码
  13. Java CSS3:(七)CSS3 中常用的样式(跳动的心)
  14. 2022年网络安全的八大趋势
  15. 逻辑树与视觉树基本概念
  16. 离散余弦变换在图像压缩中的应用
  17. 【前端】wepy/mpvue/taro/uni-app,多端开发框架哪家强?
  18. 2021年在知乎上写的一些文章
  19. 串口通信下连续输出Hello windows
  20. spss24 中文版 2.数据清洗与处理

热门文章

  1. 黑客工具之AppScan下载安装,超详细使用教程
  2. Android代码混淆处理,android代码混淆解决方案
  3. MATLAB RANSAC拟合空间直线
  4. android通话记录手机号码归属地,mui 获取手机通话记录
  5. EasyRecovery适用于Windows和Mac的专业数据恢复软件
  6. 大学物理第12章·气体动理论
  7. 郑州樱桃计算机科技,又到一年樱桃成熟时 盘点郑州7个樱桃采摘地
  8. Solarwinds推出新免费网管工具-IP SLA Monitor
  9. VUE仿猫眼电影总结(一)
  10. Mac的终端下安装pip