JAVA连连看课程设计报告.docx

上传人:b****5 文档编号:29291448 上传时间:2023-07-21 格式:DOCX 页数:34 大小:86.03KB
下载 相关 举报
JAVA连连看课程设计报告.docx_第1页
第1页 / 共34页
JAVA连连看课程设计报告.docx_第2页
第2页 / 共34页
JAVA连连看课程设计报告.docx_第3页
第3页 / 共34页
JAVA连连看课程设计报告.docx_第4页
第4页 / 共34页
JAVA连连看课程设计报告.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

JAVA连连看课程设计报告.docx

《JAVA连连看课程设计报告.docx》由会员分享,可在线阅读,更多相关《JAVA连连看课程设计报告.docx(34页珍藏版)》请在冰豆网上搜索。

JAVA连连看课程设计报告.docx

JAVA连连看课程设计报告

滨江学院

实验报告

|

|

 

实验名称JAVA小游戏(连连看)设计

课程名称智能手机程序设计|

|

专业班级:

信息工程1班

学生姓名:

车宇翔

学号:

20112309002

指导教师:

高超

学期:

2013-2014

(2)

成绩:

【选题背景】:

连连看游戏经验,玩法简单,休闲,益智,趣味,广受欢迎。

【选题目的】:

学会JAVA程序开发的环境搭建与配置,并在实际运用中学习和掌握JAVA程序开发的全过程。

进一步熟悉掌握JAVA程序设计语音的基础内容,如用户图形界面设计、JAVA多线程编程、JAVA数据库编程等。

通过亲自动手写程序,拓展知识面,锻炼调试能力。

【系统分析与设计】:

功能分析:

实现连连看的基本游戏功能和重置、提示、消除功能

设计:

通过对图片的调用以及设置是否可见来完成连连看的效果

【课程设计中碰到的问题及解决方案】:

1.不知道如何进行对数组中两个元素是否可以消除的判断

2.时间条的动态表现

解决方案:

1.对每个相同图案进行循环判断,直到找出满足条件的情况

booleanverticalMatch(Pointa,Pointb)//竖线上的判断

booleanhorizonMatch(Pointa,Pointb)//横线上的判断

 

2.为了保证动画过程和游戏过程的平行运行,因此将动画分离成一个独立的控件,并且要保证动画有自己单独的线程来运行。

当每次用户的分数发生变化时,我们可以使用setScore(intl,intc)方法同步分数显示的动画效果。

【程序输出结果】:

游戏开始

【程序代码】:

ImageFactory

packagenicholas.game.kyodai;

importjavax.swing.ImageIcon;

import.*;

publicclassImageFactory{

privatestaticImageFactoryimagefactory;

privatestaticImageIconimages[];

privateImageFactory(){

images=newImageIcon[54];

URLClassLoaderloader=(URLClassLoader)getClass().getClassLoader();

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

images[i]=newImageIcon(getClass().getResource("images/"+i+".gif"));

}

images[39]=newImageIcon(getClass().getResource("images/dots.gif"));

images[40]=newImageIcon(getClass().getResource("images/ico.gif"));

images[41]=newImageIcon(getClass().getResource("images/topbar.gif"));

images[42]=newImageIcon(getClass().getResource("images/splash.gif"));

images[43]=newImageIcon(getClass().getResource("images/sico.gif"));

}

publicImageIcongetImageicon(inti){

returnimages[i];

}

publicstaticsynchronizedImageFactorygetInstance(){

if(imagefactory!

=null){

returnimagefactory;

}else{

imagefactory=newImageFactory();

returnimagefactory;

}

}

}

 

KyodaiGrid

packagenicholas.game.kyodai;

importjava.awt.*;

importjavax.swing.*;

 

publicclassKyodaiGridextendsJLabel{

privateintxpos;

privateintypos;

publicKyodaiGrid(intx,inty){

xpos=x;

ypos=y;

this.setHorizontalAlignment(SwingConstants.CENTER);

}

publicintgetXpos(){

returnxpos;

}

publicintgetYpos(){

returnypos;

}

publicbooleanisPassable(){

return!

isVisible();

}

}

 

LevelInfo

packagenicholas.game.kyodai;

importjava.io.Serializable;

 

publicclassLevelInfoimplementsSerializable{//xBound为行号,yBound为列号

privateintxBound;

privateintyBound;

publicLevelInfo(){

xBound=16;

yBound=9;

}

publicLevelInfo(intx,inty){

xBound=x;

yBound=y;

}

publicintgetXBound(){

returnxBound;

}

publicintgetYBound(){

returnyBound;

}

}

 

MainFrame.java

packagenicholas.game.kyodai;

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

importjavax.swing.*;

importnicholas.swing.AboutDialog;

importnicholas.swing.JSplashWindow;

publicclassMainFrameextendsJFrameimplementsActionListener{

privateJMenuItemaboutItem;//菜单栏

privateJMenuItemexitItem;

privateJMenuItemstartItem;

privateJMenuItemoptionItem;

privateJMenuItemtipItem;

privateJMenuItemrefreshItem;

privateJMenuItemlogItem;

privateJMenuItembombItem;

privateJMenuItempauseItem;

privateMainPanelmainPanel;//完成主要功能

privateLevelInfolevelInfo;

publicMainFrame(){

super("连连看");

levelInfo=newLevelInfo();//设定游戏大小

setMenuBar();//设置菜单

setUI();

setIconImage(ImageFactory.getInstance().getImageicon(43).getImage());

setSize(650,520);

Dimensionscreen=getToolkit().getScreenSize();

setLocation((screen.width-getSize().width)/2,(screen.height-getSize().height)/2);

this.setVisible(true);

addWindowListener(

newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

}

);

}

privatevoidsetMenuBar(){

JMenufileMenu=newJMenu("游戏(G)");

JMenuhelpMenu=newJMenu("帮助(H)");

JMenucontMenu=newJMenu("辅助(C)");

fileMenu.setMnemonic('G');

helpMenu.setMnemonic('H');

contMenu.setMnemonic('C');

startItem=newJMenuItem("开局(N)");

startItem.setMnemonic('N');

startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0));

pauseItem=newJMenuItem("暂停(P)");

pauseItem.setMnemonic('P');

pauseItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAUSE,0));

refreshItem=newJMenuItem("刷新(R)");

refreshItem.setMnemonic('R');

refreshItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));

tipItem=newJMenuItem("提示(T)");

tipItem.setMnemonic('T');

tipItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0));

optionItem=newJMenuItem("选项(O)...");

optionItem.setMnemonic('O');

logItem=newJMenuItem("排行榜(B)...");

logItem.setMnemonic('B');

exitItem=newJMenuItem("退出(X)");

exitItem.setMnemonic('X');

aboutItem=newJMenuItem("关于(A)...");

aboutItem.setMnemonic('A');

aboutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));

bombItem=newJMenuItem("炸弹(M)");

bombItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,0));

bombItem.setMnemonic('M');

startItem.addActionListener(this);

pauseItem.addActionListener(this);

refreshItem.addActionListener(this);

tipItem.addActionListener(this);

optionItem.addActionListener(this);

logItem.addActionListener(this);

exitItem.addActionListener(this);

aboutItem.addActionListener(this);

bombItem.addActionListener(this);

fileMenu.add(startItem);

fileMenu.add(pauseItem);

contMenu.add(refreshItem);

contMenu.add(bombItem);

contMenu.add(tipItem);

fileMenu.addSeparator();

fileMenu.add(exitItem);

helpMenu.add(aboutItem);

helpMenu.add(contMenu);

JMenuBarbar=newJMenuBar();

bar.add(fileMenu);

bar.add(helpMenu);

setJMenuBar(bar);

}

privatevoidsetUI(){

mainPanel=newMainPanel(levelInfo);

getContentPane().add(mainPanel,BorderLayout.CENTER);

}

publicstaticvoidmain(Stringargs[]){

MainFrameapplication=newMainFrame();

}

privatevoidshowAboutDialog(){

Strings1="作者:

车宇翔";

Strings2="邮箱:

531608022@";

Strings3="HaveFun!

!

";

TextAreata=newTextArea();

ta.setText(s1+"\n"+"\n"+"\n"+s2+"\n"+"\n"+"\n"+s3);

ta.setEditable(false);

JFramef=newJFrame("关于");

f.setLocation(300,300);

f.setSize(200,200);

f.add(ta);

f.setBackground(newColor(200,120,150));

f.setResizable(false);

f.setVisible(true);

}

publicvoidactionPerformed(ActionEventae){

if(ae.getSource()==startItem){

mainPanel.restart();

}elseif(ae.getSource()==pauseItem){

mainPanel.setPaused(!

mainPanel.isPaused());

}elseif(ae.getSource()==exitItem){

System.exit(0);

}elseif(ae.getSource()==aboutItem){

showAboutDialog();

}elseif(ae.getSource()==bombItem){

mainPanel.useBomb();

}elseif(ae.getSource()==refreshItem){

mainPanel.refresh();

}elseif(ae.getSource()==tipItem){

mainPanel.showNext();

}

}

}

 

MainPanel.java

packagenicholas.game.kyodai;

importjava.awt.*;

importjava.awt.event.*;

importjava.util.Vector;

importjavax.swing.*;

importjavax.swing.border.Border;

importnicholas.game.kyodai.*;

publicclassMainPanelextendsJPanel{

privateintBOMB=5;

privateintBOMBP=200;

privateintREFRESH=4;

privateintREFRP=250;

privateintTIP=7;

privateintTIPP=120;

privateintPROGRESS=1200;

privateintxBound;

privateintyBound;

privateintpcount;

privateintscore;

privateintrefreshcount;

privateintbombcount;

privateinttipcount;

privateLevelInfolevelInfo;

privateGridMouseAdaptergma;

privateKyodaiGridgrid[][];

privateKyodaiGridnexts,nexte;

privateBorderselectedBorder;

privateBorderopaqueBorder;

privateBordertipBorder;

privateVectorpath[];

privateThreadpthread;

privateJProgressBarprogress;

privateJLabelscoreLabel;

privateJLabelrefreshLabel;

privateJLabelbombLabel;

privateJLabeltipLabel;

privateJPanelgridPanel;

privatebooleanwingame;

publicMainPanel(LevelInfoli){

super(newBorderLayout());

levelInfo=li;

path=newVector[3];

path[0]=newVector();

path[1]=newVector();

path[2]=newVector();

setBackground(Color.black);

gma=newGridMouseAdapter();

opaqueBorder=BorderFactory.createLineBorder(getBackground());

//selectedBorder=BorderFactory.createLineBorder(Color.red);

selectedBorder=BorderFactory.createLineBorder(Color.red);

tipBorder=BorderFactory.createLineBorder(Color.green);

setGridPanel();

setStatusPanel();

}

/**

*设置状态面板

*/

privatevoidsetStatusPanel(){

wingame=false;

JPanelpanel=newJPanel();

panel.setBackground(Color.black);

JLabellabel=newJLabel("剩余时间:

");

label.setForeground(Color.white);

panel.add(label);

progress=newJProgressBar(0,PROGRESS);//时间条显示

progress.setValue(PROGRESS);

progress.setPreferredSize(newDimension(400,20));

progress.setForeground(Color.blue);

progress.setBorderPainted(false);

panel.add(progress);

score=0;

scoreLabel=newJLabel(""+score);

scoreLabel.setForeground(Color.yellow);

scoreLabel.setFont(newFont("Dialog",Font.BOLD,25));

scoreLabel.setHorizontalAlignment(SwingConstants.RIGHT);

scoreLabel.setPreferredSize(newDimension(100,20));

panel.add(scoreLabel);

add(panel,BorderLayout.NORTH);

panel=newJPanel();

panel.setBackground(Color.black);

label=newJLabel("剩余提示:

");

label.setForeground(Color.yellow);

panel.add(label);

tipcount=TIP;

tipLabel=newJLabel(""+tipcount);

tipLabel.setForeground(Color.green);

panel.add(tipLabel);

label=newJLabel("剩余炸弹:

");

label.setForeground(Color.yellow);

panel.add(label);

bombcount=BO

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

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1