简易数字连连看Java程序的设计书.docx

上传人:b****6 文档编号:12600321 上传时间:2023-06-06 格式:DOCX 页数:21 大小:138.94KB
下载 相关 举报
简易数字连连看Java程序的设计书.docx_第1页
第1页 / 共21页
简易数字连连看Java程序的设计书.docx_第2页
第2页 / 共21页
简易数字连连看Java程序的设计书.docx_第3页
第3页 / 共21页
简易数字连连看Java程序的设计书.docx_第4页
第4页 / 共21页
简易数字连连看Java程序的设计书.docx_第5页
第5页 / 共21页
简易数字连连看Java程序的设计书.docx_第6页
第6页 / 共21页
简易数字连连看Java程序的设计书.docx_第7页
第7页 / 共21页
简易数字连连看Java程序的设计书.docx_第8页
第8页 / 共21页
简易数字连连看Java程序的设计书.docx_第9页
第9页 / 共21页
简易数字连连看Java程序的设计书.docx_第10页
第10页 / 共21页
简易数字连连看Java程序的设计书.docx_第11页
第11页 / 共21页
简易数字连连看Java程序的设计书.docx_第12页
第12页 / 共21页
简易数字连连看Java程序的设计书.docx_第13页
第13页 / 共21页
简易数字连连看Java程序的设计书.docx_第14页
第14页 / 共21页
简易数字连连看Java程序的设计书.docx_第15页
第15页 / 共21页
简易数字连连看Java程序的设计书.docx_第16页
第16页 / 共21页
简易数字连连看Java程序的设计书.docx_第17页
第17页 / 共21页
简易数字连连看Java程序的设计书.docx_第18页
第18页 / 共21页
简易数字连连看Java程序的设计书.docx_第19页
第19页 / 共21页
简易数字连连看Java程序的设计书.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简易数字连连看Java程序的设计书.docx

《简易数字连连看Java程序的设计书.docx》由会员分享,可在线阅读,更多相关《简易数字连连看Java程序的设计书.docx(21页珍藏版)》请在冰点文库上搜索。

简易数字连连看Java程序的设计书.docx

简易数字连连看Java程序的设计书

简易数字连连看Java程序设计书

1.1Java程序课程设计任务书

1.1《简易连连看游戏》

本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。

1.1.1具体要求(包括技术要求等):

<1>.该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。

方块上随机分布一些数字,数字的要至少两两相同,位置随机打乱。

<2>.当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。

<3>.重列按钮(帮助)的功能:

游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。

<4>.退出按钮:

击左下方的“退出游戏”按钮,即可结束游戏。

1.2本系统涉及的知识点:

循环,javaGUI组件,函数,数组,分支等

2.功能设计

2.1算法设计

本系统需要实现的功能要求:

 

图一,数字按钮功能模块

 

 

图二,三个功能按钮模块

 

图三,数据记录模块

 

图四,鼠标操作模块

2.2部分模块流程图:

 

 

设计填有数字的按钮

设计铺放按钮的界面

对数据重新排列

结束游戏

输出完成游戏所得分数

操作数字间的链接(配对)

对成功配对的数字进行消除

 

3代码设计

packagemybase.programe;

/*

*lianliankan总体算法思路:

由两个确定的按钮。

若这两个按钮的数字相等,就开始找它们相连的路经。

这个找路经

*分3种情况:

(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。

这样就会有

*三条路经。

若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)

*1.相邻

*

*2.若不相邻的先在第一个按钮的同行找一个空按钮。

1).找到后看第二个按钮横向到这个空按钮

*所在的列是否有按钮。

2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。

3).没有的话,再从

*与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。

没有的话路经就通了,可以消了.

*

*3.若2失败后,再在第一个按钮的同列找一个空按钮。

1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮。

*2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。

3).没有的话,再从与第一个按钮同列的

*那个空按钮横向到与第二个按钮同列看是否有按钮。

没有的话路经就通了,可以消了。

*

*若以上三步都失败,说明这两个按钮不可以消去。

*/

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

publicclassLianLianKanimplementsActionListener{

JFramemainFrame;//主面板

ContainerthisContainer;

JPanelcenterPanel,southPanel,northPanel;//子面板

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

JButtonexitButton,resetButton,newlyButton;//退出,重列,重新开始按钮

JLabelfractionLable=newJLabel("0");//实例化分数标签,并初始化为“0”

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

//储存游戏按钮位置(这里其实只要6行,5列。

但是我们用了8行,7列。

是等于在这个面板按钮的周围还围

//了一层是0的按钮,这样就可以实现靠近面板边缘的两个按钮可以消去)

intgrid[][]=newint[8][7];

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

intx0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV;//游戏按钮的位置坐标

inti,j,k,n;//消除方法控制

publicvoidinit()

{

mainFrame=newJFrame("JKJ连连看");//实例化

thisContainer=mainFrame.getContentPane();//将thisContainer放入mainFrame的容窗口中

thisContainer.setLayout(newBorderLayout());//为thisContainer创建Borderlayout布局管理器

centerPanel=newJPanel();//实例化

southPanel=newJPanel();//实例化

northPanel=newJPanel();//实例化

thisContainer.add(centerPanel,"Center");//以下三行是为thisContainer容器添加不同方位的新的面板组件

thisContainer.add(southPanel,"South");

thisContainer.add(northPanel,"North");

centerPanel.setLayout(newGridLayout(6,5));//为centerPanel面板设置网格式布局管理器(6行5列)的容纳组建的网格

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

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

diamondsButton[cols][rows]=newJButton(String.valueOf(grid[cols+1][rows+1]));//将数组的行数与列数各自加一后对应元素转化为字符串类型并赋值给对应的原始数组按钮

diamondsButton[cols][rows].addActionListener(this);//为每个网格单元设置事件监听接口

centerPanel.add(diamondsButton[cols][rows]);

}

}

exitButton=newJButton("退出");//实例特定按钮并添加时间监听接口

exitButton.addActionListener(this);

resetButton=newJButton("重列");

resetButton.addActionListener(this);

newlyButton=newJButton("再来一局");

newlyButton.addActionListener(this);

southPanel.add(exitButton);//将三个特定接口添加到三个确定方位布局的面板组件容器中

southPanel.add(resetButton);

southPanel.add(newlyButton);

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));

//嵌套,把整形对象Integer转换成基本数据类型int(整数)再转化为字符串型。

 

northPanel.add(fractionLable);

mainFrame.setBounds(280,100,500,450);//设置主界面的大小

mainFrame.setVisible(true);//设置可见

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

}//设置当点击后界面仍旧停留且不会退出进程

 

publicvoidrandomBuild(){//随机数

intrandoms,cols,rows;

for(inttwins=1;twins<=15;twins++){//一共15对button,30个button上的数字

randoms=(int)(Math.random()*25+1);//强制转换随机函数产生的数值,并进行必要运算避免“0”

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

cols=(int)(Math.random()*6+1);//随机选取连连看中的单元网格

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

while(grid[cols][rows]!

=0){//等于0说明这个空格有了button

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

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

}

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

}

}

}

 

publicvoidfraction(){

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));

}

 

publicvoidreload(){

intsave[]=newint[30];

intn=0,cols,rows;

intgrid[][]=newint[8][7];

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

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

if(this.grid[i][j]!

=0){

save[n]=this.grid[i][j];//记下每个button的数字

n++;//有几个没有消去的button

}

}

}

n=n-1;

this.grid=grid;

while(n>=0){//把没有消去的button重新放一次

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]=save[n];

n--;

}

mainFrame.setVisible(false);

pressInformation=false;//这里一定要将按钮点击信息归为初始

init();

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

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

if(grid[i+1][j+1]==0)

diamondsButton[i][j].setVisible(false);

}

}

}

 

publicvoidestimateEven(intplaceX,intplaceY,JButtonbz){

if(pressInformation==false){

x=placeX;

y=placeY;

secondMsg=grid[x][y];

secondButton=bz;

pressInformation=true;

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

}

}

}

 

publicvoidxiao(){//相同的情况下能不能消去。

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){//第二个按钮在空按钮右边

for(i=y-1;i>=j;i--){//检测从第二个按钮横向左边到空格所在列为止是否全是空格

if(grid[x][i]!

=0){

k=0;

break;//存在非空格的就退出,这一退出就不可能k==2了,所以就会到下而215行出同理的判断列

}else{

k=1;

}//K=1说明全是空格通过了第一次验证,也就是从第二个按钮横向左边到空格所在列为止全是空格

}

if(k==1){

linePassOne();//进入第二次验证,也就是从第一个按钮到它同行的空格之间的空格判断

}

}

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

}

}

//第三次检测,检测确定为空的第j列的那个按钮竖向到第二个按钮,看是不是有按钮

if(k==2){

if(x0==x){//第一,二按钮在同行

remove();

}

if(x0

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

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){//第二个按钮与这个空按钮同行

rowPassOne();

}

}

if(k==2){

if(y0==y){//第二个按钮与第一个按钮同列

remove();

}

if(y0

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

}

}

}

}

}//--------------------------------for

}//-------------else

}//------------xiao

publicvoidlinePassOne(){

if(y0>j){//第一按钮同行空按钮在左边

for(i=y0-1;i>=j;i--){//判断第一按钮同左侧空按钮之间有没按钮

if(grid[x0][i]!

=0){

k=0;

break;

}else{

k=2;

}//K=2说明通过了第二次验证

}

}

if(y0

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

if(grid[x0][i]!

=0){

k=0;

break;

}else{

k=2;

}

}

}

}

publicvoidrowPassOne(){

if(x0>i){//第一个按钮在与它同列的那个空格按钮下面

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

if(grid[j][y0]!

=0){

k=0;

break;

}else{

k=2;

}

}

}

if(x0

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

if(grid[j][y0]!

=0){

k=0;

break;

}else{

k=2;

}

}

}

}

publicvoidremove(){

firstButton.setVisible(false);

secondButton.setVisible(false);

fraction();

pressInformation=false;

k=0;

grid[x0][y0]=0;

grid[x][y]=0;

}//具体的消去容,并将已消去的按钮值赋值为“0”

 

publicvoidactionPerformed(ActionEvente){//对按钮事件发生后的定义

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

intgrid[][]=newint[8][7];

this.grid=grid;

randomBuild();

mainFrame.setVisible(false);

pressInformation=false;

init();

}

if(e.getSource()==exitButton)

System.exit(0);

if(e.getSource()==resetButton)

reload();

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

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

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

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

}

}

publicstaticvoidmain(String[]args){//主函数,调用。

LianLianKanllk=newLianLianKan();

llk.randomBuild();

llk.init();

}

}

4.界面及运行效果、测试工具与测试效果

 

 

 

 

5.设计总结

5.1.程序调试情况:

在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。

分三种情况:

(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路径。

这样就会有三条路径。

若这三条路径上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)

5.2.本人在程序设计中感想:

由于市场需要,游戏的更新速度步步加快,为了适应社会的需要,社会对游戏开发人员的需求,在游戏编程的学习过程中,必须理论与实践结合,提高编程能力与水平。

通过小游戏的设计,对以学过的容加深理解,对游戏开发的过程有初步的认识,为以后的游戏开发设计和更加深入的学习计算机语言打下夯实的基础。

目前竞争日益激烈的行业环境,对于未来行业的前景,还是要保持乐观的心态。

毕竟游戏并不是一下子就可以编写成的。

需要不断的技术积累,需要团队的合作,提高了工作的效率,才算是在游戏开发的道路上成功了一半。

在现在这个信息化飞速发展的道路上,要成为一名合格的编程人员,那就必须走好每一步现在的路。

基于Java的连连看小游戏,满足了用户娱乐的需求,已经达到了预期的目标。

虽然该游戏大部分功能基本上已经实现,但是还是会存在一些不足。

在今后的进步中,会逐步改进。

6.致

本次课设得以完成衷心感国权老师的教学指导

感DY社团对编程有兴趣大的小伙伴们在我一筹莫展的时候对我的大力

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2