JAVA连连看课程设计报告.docx
- 文档编号:29291448
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:34
- 大小:86.03KB
JAVA连连看课程设计报告.docx
《JAVA连连看课程设计报告.docx》由会员分享,可在线阅读,更多相关《JAVA连连看课程设计报告.docx(34页珍藏版)》请在冰豆网上搜索。
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 连连 课程设计 报告