java课设基于Java的连连看游戏软件设计(含源文件)

问题描述:

沈阳理工大学课程设计报告

目录

1. 课设软件主要功能????????????????1

2. 类总体设计???????????????????1

2.1 类组合关系图???????????????????2

2.2 主类???????????????????????2

2.3 其它类??????????????????????3

3. 类详细设计(画UML 图),对类成员详细说明????3

3.1 Lianliankan类(主类)??????????????3

3. 1. 1方法设计???????????????????3

3.1.2成员变量???????????????????7

4. 关键类成员函数流程图及代码(详细注释)????8

4.1关键类成员函数流程图???????????????8

4. 1. 1主函数????????????????????8

4. 1. 2算法流程图??????????????????9

4.2程序代码(节选)?????????????????10

5. 软件运行结果??????????????????13 结论??????????????????????14 参考文献????????????????????14

沈阳理工大学课程设计报告

1

1. 课设软件主要功能

(1)、用户可以通过点击JDK 中的“执行文件”,开始新游戏程序【1】【2】。程序会载入数字,并通

过特定的算法排列数字,并标记数字,以便判断数字是否相同。记录数字坐标,以方便计算数字是否可以相连。确定数字大小,以确定用户点击的是哪个数字。

图1 数字连接方式

(2)、用户选择两张一样的数字,通过鼠标进行选取(如图1),如果用户两次点击的数字不相

同,那么系统认为用户没有点(鼠标记数归 0),以完成用户以后的选取工作。如果用户选择的是相同的数字,那么系统会消除这两个数字,并使鼠标记数为 0,并消除这两个数字的标记,使里面的数字被标记在外面。以便用户可以进行以后的选择。

(3)、用户也可使通过使用“重列”功能进行数字重新排版。

(4)、用户点击“再来一局”重新开始新的游戏。

(5)、用户点击“退出”结束游戏。

2. 类总体设计

数字连连看游戏程序中只有一个类,类名为Lianliankan ,该类实现了接口ActionListener ;

该类总共有十一个方法,他们的功能分别是:init()初始化;randomBuild ()产生十五对随机数字;fraction()计算得分;reload()将游戏按钮重列;estimateEven(int placeX,int placeY,JButton bz) 传进两个int 型和一个JButton 型的三个参数(分别是击中的按钮位置坐标和按钮),选中按钮信息的存储与操作;xiao()消去符合游戏规则的相同的两个按钮;linePassOne()在第一个按钮同行有空按钮的条件下判断第二个转折点出现的情况;rowPassOne()在第一个按钮同列有空按钮的条件下判断第二个转折点出现的情况;remove():将相同的两个按钮消去;actionPerformed()实现按钮事件的监听;main()主方法。

【3】

沈阳理工大学课程设计报告

2

2.1 类组合关系图

图2.1主类组合关系图【4】

2.2 主类:Lianliankan 类

程序代码如下【5】【6】:

public class Lianliankan implements ActionListener

{

JFramemainFrame; //主面板

Container thisContainer;

JPanelcenterPanel,southPanel,northPanel; //子面板

JButtondiamondsButton[][] = new JButton[6][5];//游戏按钮数组

JButtonexitButton,resetButton,newlyButton; //退出,重列,重新开始按钮 JLabelfractionLable=new JLabel("0"); //分数标签

JButtonfirstButton,secondButton; //分别记录两次被选中的按钮

int grid[][] = new int[8][7];//储存游戏按钮位置

沈阳理工大学课程设计报告

3

static booleanpressInformation=false; //判断是否有按钮被选中

int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标 inti,j,k,n;//消除方法控制

??}

2.3 其它类

Lianliankan 类只有一个主类,其他都是主类里面的方法,例如:randomBuild()、remove()、main(String[] args)等。

3. 类详细设计(画UML 图),对类成员详细说明

3.1 Lianliankan 类(主类)

3.1.1 方法设计

1)主类Lianliankan 的UML 关系图:

图2.2 UML类图

2)主类Lianliankan 与方法的数据视图:

图3.1成员方法图

沈阳理工大学课程设计报告

4

注:

1、 init() :初始化

2、 randomBuild ():产生十五对随机数字

代码如下:

public void randomBuild() {

int randoms,cols,rows;

for(int twins=1;twins<=15;twins++) {

randoms=(int)(Math.random()*25+1);

for(int alike=1;alike<=2;alike++) {

cols=(int)(Math.random()*6+1);

rows=(int)(Math.random()*5+1);

while(grid[cols][rows]!=0) {

cols=(int)(Math.random()*6+1);

rows=(int)(Math.random()*5+1);

}

this.grid[cols][rows]=randoms;

}

}

3、 fraction():计算得分

4、 reload():将游戏按钮重列

5、 estimateEven(int placeX,int placeY,JButton bz):传进两个int 型和一个JButton 型的三个参数(分

别是击中的按钮位置坐标和按钮),选中按钮信息的存储与操作

代码如下:

public void estimateEven(int placeX,int placeY,JButton bz) {

if(pressInformation==false) {

x=placeX;

y=placeY;

secondMsg=grid[x][y];

secondButton=bz;

pressInformation=true;

}

沈阳理工大学课程设计报告

5

else {

x0=x;

y0=y;

fristMsg=secondMsg;

firstButton=secondButton;

x=placeX;

y=placeY;

secondMsg=grid[x][y];

secondButton=bz;

if(fristMsg==secondMsg && secondButton!=firstButton){

xiao();

}

}

6、 xiao():消去符合游戏规则的相同的两个按钮

7、 linePassOne()、rowPassOne():在第一个按钮同行、列有空按钮的条件下判断第二个转折点出现的情况

8、 remove():将相同的两个按钮消去

代码如下:

public void remove(){

firstButton.setVisible(false);

secondButton.setVisible(false);

fraction();

pressInformation=false;

k=0;

grid[x0][y0]=0;

grid[x][y]=0;

}

9、 actionPerformed(ActionEvent e):实现按钮事件的监听

代码如下:

public void actionPerformed(ActionEvent e) {

if(e.getSource()==newlyButton){

int grid[][] = new int[8][7];

沈阳理工大学课程设计报告

6

this.grid = grid;

randomBuild();

mainFrame.setVisible(false);

pressInformation=false;

init();

}

if(e.getSource()==exitButton)

System.exit(0);

if(e.getSource()==resetButton)

reload();

for(int cols = 0;cols < 6;cols++){

for(int rows = 0;rows < 5;rows++ ){

if(e.getSource()==diamondsButton[cols][rows])

estimateEven(cols+1,rows+1,diamondsButton[cols][rows]); }

}

}

10、 main(String[] args):主方法,开始程序运行

代码如下:

public static void main(String[] args) {

Lianliankan llk = new Lianliankan();

llk.randomBuild();

llk.init();

}

沈阳理工大学课程设计报告

7

3.1.2成员变量

图3.2 成员变量图

代码如下(含注释):

public class Lianliankan implements ActionListener

{

JFramemainFrame; //主面板

Container thisContainer;

JPanelcenterPanel,southPanel,northPanel; //子面板

JButtondiamondsButton[][] = new JButton[6][5];//游戏按钮数组

JButtonexitButton,resetButton,newlyButton; //退出,重列,重新开始按钮 JLabelfractionLable=new JLabel("0"); //分数标签

JButtonfirstButton,secondButton; //分别记录两次被选中的按钮

int grid[][] = new int[8][7];//储存游戏按钮位置

static booleanpressInformation=false; //判断是否有按钮被选中

int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标 inti,j,k,n;//消除方法控制

沈阳理工大学课程设计报告

8

4. 关键类成员函数流程图及代码(详细注释)

4.1关键类成员函数流程图

4.1.1主函数

图4.1 主函数流程图

【8】

沈阳理工大学课程设计报告

9

4.1.2算法流程图

图4.2 算法模块流程图【8】

沈阳理工大学课程设计报告

10

4.2程序代码(节选)【9】

public void xiao() {

//相同的情况下能不能消去。仔细分析,不一条条注释

if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))){

//判断是否相邻

remove();}

else{

for (j=0;j<7;j++ ) {

if (grid[x0][j]==0){

//判断第一个按钮同行哪个按钮为空

if (y>j) {

//如果第二个按钮的Y 坐标大于空按钮的Y 坐标说明第一按钮在第二按钮左边

for (i=y-1;i>=j;i-- ){

//判断第二按钮左侧直到第一按钮中间有没有按钮

if (grid[x][i]!=0) {

k=0;break;}

else{ k=1; }

//K=1说明通过了第一次验证

}if (k==1)

{linePassOne();}

}if (y<j){

//如果第二个按钮的Y 坐标小于空按钮的Y 坐标说明第一按钮在第二按钮右边

for (i=y+1;i<=j ;i++ ){

//判断第二按钮左侧直到第一按钮中间有没有按钮

if (grid[x][i]!=0)

{k=0;break;}

else { k=1; }

}if (k==1)

{linePassOne();}

}if (y==j )

{linePassOne();}

沈阳理工大学课程设计报告

11

}if (k==2)

{if (x0==x)

{remove();}

if (x0<x)

{for (n=x0;n<=x-1;n++ ) {if (grid[n][j]!=0)

{k=0;break;}

if(grid[n][j]==0 && n==x-1)

{remove();}

}

}if (x0>x)

{for (n=x0;n>=x+1 ;n-- ) {if (grid[n][j]!=0)

{k=0;break;}

if(grid[n][j]==0 && n==x+1)

{remove();}

}}}}

for (i=0;i<8;i++ ) { //列 if (grid[i][y0]==0) {

if (x>i) {

for (j=x-1;j>=i ;j-- ) {

if (grid[j][y]!=0)

{k=0;break;}

else { k=1; }

}if (k==1)

{rowPassOne();}

}if (x<i)

{for (j=x+1;j<=i;j++ ) {if (grid[j][y]!=0)

{k=0;break;}

else { k=1; }

沈阳理工大学课程设计报告

12

}if (k==1)

{rowPassOne();}

}if (x==i)

{rowPassOne();}

}if (k==2)

{if (y0==y)

{remove();}

if (y0<y) {

for (n=y0;n<=y-1 ;n++ ) {

if (grid[i][n]!=0)

{k=0;break;}

if(grid[i][n]==0 && n==y-1)

{remove();}

}}

if (y0>y) {

for (n=y0;n>=y+1 ;n--) {

if (grid[i][n]!=0)

{k=0;break;}

if(grid[i][n]==0 && n==y+1)

{remove();}

}

}

}

}

}

}

沈阳理工大学课程设计报告

13

5. 软件运行结果

1)打开游戏运行界面:

图5.1CMD 运行界面

【10】

2)游戏运行界面:

图5.2 游戏运行图

沈阳理工大学课程设计报告

14

结论

1)本课题采用Java 语言,主要利用Swing 类的监听技术,设计了连连看软件,该软件可实现如下功能:

1、 利用awt 实现良好的游戏界面;

2、 游戏开始时,能产生随机数字和随机位置;

3、 在按动鼠标和键盘时,游戏能玩起来,即能响应鼠标事件;

4、 能消去满足条件的含有相同数字的图片;

5、 能重列图片顺序;

6、 能选择退出和重新再来一局。

2)不足之处:

1、游戏界面单调;

2、没有实现图片显示;

3、没有计时功能,不能引起玩家的兴趣;

4、无级别选项,类型单一;

5、无音乐,无乐趣。

参考文献

[1]耿祥义, 张跃平. Java2实用教程(第三版)[M] . 北京:清华大学出版社, 2006

[2]耿祥义. Java课程设计(第三版)[M] . 北京:清华大学出版社, 2004

[3]张跃平.Java2实用教程实验指导与习题解答(第三版)[M]. 北京:清华大学出版社,2004

[4]朱喜福等. Java程序设计 . 人民邮电出版社,2005

[5]吴其庆. Java程序设计实例教程. 冶金工业出版社,2006

[6]陈国君等编著. Java2程序设计基础. 北京:清华大学出版社,2006

[7]赵文靖编著. Java程序设计基础与上机指导. 北京:清华大学出版社,2006

[8]宛延闿等编著. 实用Java 程序设计教程. 北京:机械工业出版社,2006

[9]郑莉. 王行言. 马素霞编著.Java 语言程序设计. 北京:清华大学出版社,2006

[10]丁振凡主编. Java语言实用教程. 北京:北京邮电大学出版社,2005

1个回答 分类:综合 2018-01-23

问题解答:

我来补答
 
 
展开全文阅读
剩余:2000