当前位置:文档之家› JAVA连连看课程设计报告

JAVA连连看课程设计报告

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

滨江学院

实验报告|

|

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

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

专业班级:信息工程1班

学生姓名:车宇翔

学号:20112309002

指导教师:高超

学期:2013-2014(2)

成绩:

【选题背景】:

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

【选题目的】:

学会JAVA程序开发的环境搭建与配置,并在实际运用中学习和掌握JAVA程序开发的全过程。进一步熟悉掌握JAVA程序设计语音的基础内容,如用户图形界面设计、JAVA多线程编程、JAVA数据库编程等。通过亲自动手写程序,拓展知识面,锻炼调试能力。【系统分析与设计】:

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

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

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

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

2.时间条的动态表现

解决方案:

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

boolean verticalMatch(Point a, Point b) // 竖线上的判断

boolean horizonMatch(Point a, Point b) // 横线上的判断

2.为了保证动画过程和游戏过程的平行运行,因此将动画分离成一个独立的控件,并且要保证动画有自己单独的线程来运行。当每次用户的分数发生变化时,我们可以使用setScore(int l, int c) 方法同步分数显示的动画效果。

【程序输出结果】:

游戏开始

【程序代码】:

ImageFactory

package nicholas.game.kyodai;

import javax.swing.ImageIcon;

import https://www.doczj.com/doc/f615500054.html,.*;

public class ImageFactory {

private static ImageFactory imagefactory;

private static ImageIcon images[];

private ImageFactory() {

images = new ImageIcon[54];

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

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

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

}

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

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

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

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

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

}

public ImageIcon getImageicon(int i) {

return images[i];

}

public static synchronized ImageFactory getInstance() {

if(imagefactory != null) {

return imagefactory;

} else {

imagefactory = new ImageFactory();

return imagefactory;

}

}

}

KyodaiGrid

package nicholas.game.kyodai;

import java.awt.*;

import javax.swing.*;

public class KyodaiGrid extends JLabel {

private int xpos;

private int ypos;

public KyodaiGrid(int x, int y) {

xpos = x;

ypos = y;

this.setHorizontalAlignment(SwingConstants.CENTER);

}

public int getXpos() {

return xpos;

}

public int getYpos() {

return ypos;

}

public boolean isPassable() {

return !isVisible();

}

}

LevelInfo

package nicholas.game.kyodai;

import java.io.Serializable;

public class LevelInfo implements Serializable {//xBound为行号,yBound 为列号

private int xBound;

private int yBound;

public LevelInfo() {

xBound = 16;

yBound = 9;

}

public LevelInfo(int x, int y){

xBound = x;

yBound = y;

}

public int getXBound() {

return xBound;

}

public int getYBound() {

return yBound;

}

}

MainFrame.java

package nicholas.game.kyodai;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import javax.swing.*;

import nicholas.swing.AboutDialog;

import nicholas.swing.JSplashWindow;

public class MainFrame extends JFrame implements ActionListener {

private JMenuItem aboutItem;//菜单栏

private JMenuItem exitItem;

private JMenuItem startItem;

private JMenuItem optionItem;

private JMenuItem tipItem;

private JMenuItem refreshItem;

private JMenuItem logItem;

private JMenuItem bombItem;

private JMenuItem pauseItem;

private MainPanel mainPanel;//完成主要功能

private LevelInfo levelInfo;

public MainFrame() {

super("连连看");

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

setMenuBar();//设置菜单

setUI();

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

setSize(650,520);

Dimension screen = getToolkit().getScreenSize();

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

this.setVisible(true);

addWindowListener(

new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

}

);

}

private void setMenuBar() {

JMenu fileMenu = new JMenu("游戏(G)");

JMenu helpMenu = new JMenu("帮助(H)");

JMenu contMenu = new JMenu("辅助(C)");

fileMenu.setMnemonic('G');

helpMenu.setMnemonic('H');

contMenu.setMnemonic('C');

startItem = new JMenuItem("开局(N)");

startItem.setMnemonic('N');

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

pauseItem = new JMenuItem("暂停(P)");

pauseItem.setMnemonic('P');

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

refreshItem = new JMenuItem("刷新(R)");

refreshItem.setMnemonic('R');

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

tipItem = new JMenuItem("提示(T)");

tipItem.setMnemonic('T');

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

optionItem = new JMenuItem("选项(O)...");

optionItem.setMnemonic('O');

logItem = new JMenuItem("排行榜(B)...");

logItem.setMnemonic('B');

exitItem = new JMenuItem("退出(X)");

exitItem.setMnemonic('X');

aboutItem = new JMenuItem("关于(A)...");

aboutItem.setMnemonic('A');

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

bombItem = new JMenuItem("炸弹(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);

JMenuBar bar = new JMenuBar();

bar.add(fileMenu);

bar.add(helpMenu);

setJMenuBar(bar);

}

private void setUI() {

mainPanel = new MainPanel(levelInfo);

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

public static void main(String args[]) {

MainFrame application = new MainFrame();

}

private void showAboutDialog() {

String s1="作者:车宇翔";

String s2="邮箱:531608022@https://www.doczj.com/doc/f615500054.html,";

String s3="Have Fun!!";

TextArea ta=new TextArea();

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

ta.setEditable(false);

JFrame f=new JFrame("关于");

f.setLocation(300, 300);

f.setSize(200,200);

f.add(ta);

f.setBackground(new Color(200,120,150));

f.setResizable(false);

f.setVisible(true);

}

public void actionPerformed(ActionEvent ae) {

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

mainPanel.restart();

} else if(ae.getSource()==pauseItem) {

mainPanel.setPaused(!mainPanel.isPaused());

} else if(ae.getSource()==exitItem) {

System.exit(0);

} else if(ae.getSource()==aboutItem) {

showAboutDialog();

} else if(ae.getSource()==bombItem) {

https://www.doczj.com/doc/f615500054.html,eBomb();

} else if(ae.getSource()==refreshItem) {

mainPanel.refresh();

} else if(ae.getSource()==tipItem) {

mainPanel.showNext();

}

}

}

MainPanel.java

package nicholas.game.kyodai;

import java.awt.*;

import java.awt.event.*;

import java.util.Vector;

import javax.swing.*;

import javax.swing.border.Border;

import nicholas.game.kyodai.*;

public class MainPanel extends JPanel {

private int BOMB = 5;

private int BOMBP = 200;

private int REFRESH = 4;

private int REFRP = 250;

private int TIP = 7;

private int TIPP = 120;

private int PROGRESS = 1200;

private int xBound;

private int yBound;

private int pcount;

private int score;

private int refreshcount;

private int bombcount;

private int tipcount;

private LevelInfo levelInfo; private GridMouseAdapter gma; private KyodaiGrid grid[][]; private KyodaiGrid nexts, nexte;

private Border selectedBorder; private Border opaqueBorder; private Border tipBorder; private Vector path[];

private Thread pthread;

private JProgressBar progress; private JLabel scoreLabel; private JLabel refreshLabel; private JLabel bombLabel; private JLabel tipLabel;

private JPanel gridPanel; private boolean wingame; public MainPanel(LevelInfo li) {

super(new BorderLayout());

levelInfo = li;

path = new Vector[3];

path[0] = new Vector();

path[1] = new Vector();

path[2] = new Vector();

setBackground(Color.black);

gma = new GridMouseAdapter();

opaqueBorder = BorderFactory.createLineBorder(getBackground());

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

selectedBorder = BorderFactory.createLineBorder(Color.red);

tipBorder = BorderFactory.createLineBorder(Color.green);

setGridPanel();

setStatusPanel();

}

/**

*设置状态面板

*/

private void setStatusPanel() {

wingame = false;

JPanel panel = new JPanel();

panel.setBackground(Color.black);

JLabel label = new JLabel("剩余时间:");

label.setForeground(Color.white);

panel.add(label);

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

progress.setValue(PROGRESS);

progress.setPreferredSize(new Dimension(400,20));

progress.setForeground(Color.blue);

progress.setBorderPainted(false);

panel.add(progress);

score = 0;

scoreLabel = new JLabel(""+score);

scoreLabel.setForeground(Color.yellow);

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

scoreLabel.setHorizontalAlignment(SwingConstants.RIGHT);

scoreLabel.setPreferredSize(new Dimension(100,20));

panel.add(scoreLabel);

add(panel,BorderLayout.NORTH);

panel = new JPanel();

panel.setBackground(Color.black);

label = new JLabel("剩余提示:");

label.setForeground(Color.yellow);

panel.add(label);

tipcount = TIP;

tipLabel = new JLabel(""+tipcount);

tipLabel.setForeground(Color.green);

panel.add(tipLabel);

label = new JLabel("剩余炸弹:");

label.setForeground(Color.yellow);

panel.add(label);

bombcount = BOMB;

bombLabel = new JLabel(""+bombcount);

bombLabel.setForeground(Color.green);

panel.add(bombLabel);

label = new JLabel("可用刷新:");

label.setForeground(Color.yellow);

panel.add(label);

refreshcount = REFRESH;

refreshLabel = new JLabel(""+refreshcount);

refreshLabel.setForeground(Color.green);

panel.add(refreshLabel);

add(panel,BorderLayout.SOUTH);

pthread = new ProgressThread();

pthread.start();

}

private void setGridPanel() {//完成布局

gridPanel = new JPanel();

gridPanel.setBackground(getBackground());

xBound = levelInfo.getXBound()+2;

yBound = levelInfo.getYBound()+2;

gridPanel.setLayout(new GridLayout(yBound,xBound,0,0));

grid = new KyodaiGrid[yBound][xBound];

int count = 0;

int sub = levelInfo.getXBound()*levelInfo.getYBound()/4;

KyodaiGrid temp[] = new KyodaiGrid[xBound*yBound];

for(int y=0;y

for(int x=0;x

grid[y][x] = new KyodaiGrid(x, y);

if(x==0||x==(xBound-1)||y==0||y==(yBound-1)) {

grid[y][x].setIcon(ImageFactory.getInstance().getImageicon(39));

grid[y][x].setVisible(false);

} else {

grid[y][x].setIcon(ImageFactory.getInstance().getImageicon(count%sub));

grid[y][x].setBorder(opaqueBorder);

grid[y][x].addMouseListener(gma);

temp[count] = grid[y][x];

count++;

}

gridPanel.add(grid[y][x]);

}

}

JPanel t = new JPanel();

t.setBackground(Color.black);

t.add(gridPanel);

add(t,BorderLayout.CENTER);

shuffle(temp, count);

}

/**

*开始新游戏

*/

public void restart() {//重新开始

resetStatusPanel();

resetGridPanel();

}

/**

*重置面板状态和游戏图标

*/

private void resetStatusPanel() {

wingame = false;

score = 0;

scoreLabel.setText(""+score);

bombcount = BOMB;

bombLabel.setText(""+bombcount);

refreshcount = REFRESH;

refreshLabel.setText(""+refreshcount);

tipcount = TIP;

tipLabel.setText(""+tipcount);

progress.setValue(PROGRESS);

pthread.resume();

}

private void resetGridPanel() {

int count = 0;

int sub = (xBound-2)*(yBound-2)/4;

KyodaiGrid temp[] = new KyodaiGrid[xBound*yBound];

for(int y=1;y

for(int x=1;x

grid[y][x].setIcon(ImageFactory.getInstance().getImageicon(count%sub));

grid[y][x].setBorder(opaqueBorder);

grid[y][x].setVisible(true);

temp[count] =grid[y][x];

count++;

}

}

shuffle(temp,count);

}

/**

*暂停

*/

public void setPaused(boolean p) {

if(p) {

pthread.suspend();

gridPanel.setVisible(false);

} else {

pthread.resume();

gridPanel.setVisible(true);

}

}

/**

*是否暂停

*/

public boolean isPaused() {

return !gridPanel.isVisible();

}

/**

*没有布局存在时胜利

*计算得分

*/

private void win() {

wingame = true;

pthread.suspend();

score += progress.getValue()/20+bombcount*BOMBP+refreshcount*REFRP+tipcount*TIPP;

scoreLabel.setText(""+score);

}

private void shuffle(KyodaiGrid array[], int count) {

if(wingame) return;

do {

setVisible(false);

int j,k;

Icon temp;

for(int i=0;i

j = (int)(Math.random()*count);

k = (int)(Math.random()*count);

temp = array[k].getIcon();

array[k].setIcon(array[j].getIcon());

array[j].setIcon(temp);

}

setVisible(true);

} while(!findPair());

}

public void refresh() {

if(wingame||progress.getValue()==0||refreshcount==0) return;

KyodaiGrid temp[] = new KyodaiGrid[xBound*yBound];

int count = 0;

for(int y=1;y

for(int x=1;x

if(grid[y][x].isVisible()) {

grid[y][x].setBorder(opaqueBorder);

temp[count] = grid[y][x];

count++;

}

}

}

if(count!=0) {

refreshcount--;

refreshLabel.setText(""+refreshcount);

shuffle(temp,count);

} else win();

}

private boolean xdirect(KyodaiGrid start, KyodaiGrid end,Vector path) {

if(start.getYpos()!=end.getYpos()) return false;

int direct = 1;

if(start.getXpos()>end.getXpos()) {

direct = -1;

}

path.removeAllElements();

for(int x=start.getXpos()+direct;x!=end.getXpos()&&x=0;x+=direct) { if(grid[start.getYpos()][x].isVisible()) return false;

path.add(grid[start.getYpos()][x]);

}

path.add(end);

return true;

}

private boolean ydirect(KyodaiGrid start, KyodaiGrid end,Vector path) {

if(start.getXpos()!=end.getXpos()) return false;

int direct = 1;

if(start.getYpos()>end.getYpos()) {

direct = -1;

}

path.removeAllElements();

for(int y=start.getYpos()+direct;y!=end.getYpos()&&y=0;y+=direct) { if(grid[y][start.getXpos()].isVisible()) return false;

path.add(grid[y][start.getXpos()]);

}

path.add(end);

return true;

}

private int findPath(KyodaiGrid start, KyodaiGrid end) {

//0 conner

if(xdirect(start,end,path[0])) {

return 1;

}

if(ydirect(start,end,path[0])) {

return 1;

}

//1 conner

KyodaiGrid xy = grid[start.getYpos()][end.getXpos()];

if(!xy.isVisible()&&xdirect(start,xy,path[0])&&ydirect(xy,end,path[1])) { return 2;

}

KyodaiGrid yx = grid[end.getYpos()][start.getXpos()];

if(!yx.isVisible()&&ydirect(start,yx,path[0])&&xdirect(yx,end,path[1])) { return 2;

}

//2 conner

//up

path[0].removeAllElements();

for(int y=start.getYpos()-1;y>=0;y--) {

xy = grid[y][start.getXpos()];

yx = grid[y][end.getXpos()];

if(xy.isVisible()) break;

path[0].add(xy);

if(!yx.isVisible()&&xdirect(xy,yx,path[1])&&ydirect(yx,end,path[2])) { return 3;

}

}

//down

path[0].removeAllElements();

for(int y=start.getYpos()+1;y

xy = grid[y][start.getXpos()];

yx = grid[y][end.getXpos()];

if(xy.isVisible()) break;

path[0].add(xy);

if(!yx.isVisible()&&xdirect(xy,yx,path[1])&&ydirect(yx,end,path[2])) { return 3;

}

}

//left

path[0].removeAllElements();

for(int x=start.getXpos()-1;x>=0;x--) {

yx = grid[start.getYpos()][x];

xy = grid[end.getYpos()][x];

if(yx.isVisible()) break;

path[0].add(yx);

if(!xy.isVisible()&&ydirect(yx,xy,path[1])&&xdirect(xy,end,path[2])) { return 3;

}

}

//right

path[0].removeAllElements();

for(int x=start.getXpos()+1;x

yx = grid[start.getYpos()][x];

xy = grid[end.getYpos()][x];

if(yx.isVisible()) break;

path[0].add(yx);

if(!xy.isVisible()&&ydirect(yx,xy,path[1])&&xdirect(xy,end,path[2])) { return 3;

}

}

return 0;

}

/**

*在布局中消除配对

*/

private void deletePair(KyodaiGrid prev, KyodaiGrid current) {

//尝试寻找路径

//如果找到路径

//animate

Vector temp = new Vector();

temp.add(prev);

for(int i=0;i

temp.addAll(path[i]);

path[i].removeAllElements();

}

AnimateThread thread = new AnimateThread(temp);

thread.start();

score += progress.getValue()/20;

scoreLabel.setText(""+score);

progress.setValue(progress.getValue()+60);

}

/**

*展示找到的配对

*/

public void showNext() {

if(wingame||progress.getValue()==0||tipcount==0) return;

tipcount--;

tipLabel.setText(""+tipcount);

if(nexts!=null&&nexte!=null) {

nexts.setBorder(tipBorder);

nexte.setBorder(tipBorder);

}

}

/**

*删除找到的配对

*/

public void useBomb() {

if(wingame||progress.getValue()==0||bombcount==0) return;

bombcount--;

bombLabel.setText(""+bombcount);

if(nexts!=null&&nexte!=null) {

deletePair(nexts,nexte);

}

}

/**

*发现有连接路径的配对

*@返回是否发现

*/

private boolean findPair() {

nexts = null;

nexte = null;

for(int sy=1;sy

for(int sx=1;sx

if(!grid[sy][sx].isVisible()) continue;

for(int ey=sy;ey

for(int ex=1;ex

if(!grid[ey][ex].isVisible()||(ey==sy&&ex==sx)) continue;

if(grid[sy][sx].getIcon()==grid[ey][ex].getIcon()) {

pcount = findPath(grid[sy][sx],grid[ey][ex]);

if(pcount!=0) {

nexts = grid[sy][sx];

nexte = grid[ey][ex];

return true;

}

}

}

}

}

}

return false;

}

private class GridMouseAdapter extends MouseAdapter { private KyodaiGrid prev;

public void mouseClicked(MouseEvent me) {

if(prev == null) {

prev = (KyodaiGrid)me.getSource();

prev.setBorder(selectedBorder);

} else {

if(progress.getValue()==0) return;

KyodaiGrid current = (KyodaiGrid)me.getSource();

if(current == prev) return;

if(current.getIcon()==prev.getIcon()) {

pcount = findPath(prev,current);

if(pcount!=0) {

deletePair(prev,current);

//set

prev = null;

return;

}

}

prev.setBorder(opaqueBorder);

prev = current;

prev.setBorder(selectedBorder);

if(!findPair()) refresh();

}

}

}

private class AnimateThread extends Thread {

private Vector v;

public AnimateThread(V ector temp) {

v = temp;

}

public void run() {

KyodaiGrid prev = null;

KyodaiGrid current;

int j = 0;

while(j

prev = (KyodaiGrid)v.remove(0);

prev.setVisible(true);

java课程设计报告书

《Java程序设计》课程设计报告2015—2016学年第二学期 设计题目:《数字连连看》 学生:黄杰 学号: 2 专业班级:软件工程1402 指导教师:国权 2016 年7 月2 日

目录 1.JAVA程序设计书 3 1.1《简易连连看》 3 1.1.1具体要求 3 1.2本系统设计的知识点 3 2.功能设计 3 2.1算法设计 3 2.2部分模块流程图 4 3.代码设计 5 4.界面及运行效果,测试工具与测试效果14 5.设计总结 16 5.1.程序调试情况:16 5.2.本人在程序设计中感想: 16 6.致 16 主要参考文献16

: 1.1Java程序课程设计任务书 1.1《简易连连看游戏》 本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。 1.1.1具体要求(包括技术要求等): <1>. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。方块上随机分布一些数字,数字的要至少两两相同,位置随机打乱。 <2>. 当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。 <3>. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。 <4>. 退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。 1.2本系统涉及的知识点: 循环,javaGUI组件,函数,数组,分支等 2.功能设计 2.1算法设计 本系统需要实现的功能要求: 图一,数字按钮功能模块 图二,三个功能按钮模块

连连看游戏设计

中南林业科技大学 《数据结构课程设计》报告必做题:连连看游戏 选做题: 姓名: 学号: 专业班级:软件工程1班 学院:计算机与信息工程学院 指导老师:

签名: 2017年1 月10 日 目录 一、连连看问题.............................. 错误!未定义书签。 1.1需求分析.................................... 错误!未定义书签。 ............................................. 错误!未定义书签。 ............................................. 错误!未定义书签。 1.2系统设计.................................... 错误!未定义书签。 1.2.1 程序流程图 ............................. 错误!未定义书签。 1.2.2 程序组成 ............................... 错误!未定义书签。 1.3调试测试.................................... 错误!未定义书签。 1.3.1测试用例................................ 错误!未定义书签。 1.3.2测试结果................................ 错误!未定义书签。 1.3.3存在问题................................ 错误!未定义书签。 1.3.4改进设想................................ 错误!未定义书签。

连连看-JAVA课程设计报告

课程设计 2013 ~ 2014学年第二学期 设计题目连连看游戏程序 院(系) 专业软件工程 班级学号 学生姓名 设计时间 2014年6月24日~2014年6月27日 指导教师 提交日期 2014年6月27日

目录 目录 (2) 1.课程设计的目的与要求 (3) 1.1课程设计目的与要求 (3) 1.2课程设计内容 (3) 1.3课程设计的实验环境 (3) 1.4课程设计的预备知识 (3) 2.系统模块结构图 (4) 2.1 模块设计 (4) 2.1.1 菜单控制模块 (4) 2.1.2 算法模块 (5) 2.1.3 界面显示模块 (7) 3.详细设计 (9) 3.1总体算法思路 (9) 3.2代码实现 (9) 4.小结 (9)

1.课程设计的目的与要求 1.1课程设计目的与要求 1.掌握JA V A语言中面向对象的概念,并能在程序中熟练运用。 2.了解面向对象程序设计(JA V A)的基本概念以及运用面向对象技术进行程序设计的基本思 想。 3.能正确编写和调试JA V A程序。 4.了解在JA V A环境下进行程序设计的基本思想和方法。 1.2课程设计内容 1.设计一个连连看的游戏程序。 2.在JA V A环境下,将上述程序使用GUI、数据结构等内容完成 3.设计思路: (1)界面设计 1)初始测试界面可以考虑使用简单的按钮来代表连连看游戏中的图标。 2)布局可以考虑使用GRID方式。 3)设计菜单选择连连看难度等内容,具体可参照QQ连连看,也可自定义。 4)考虑完善界面,例如动画等。 (2)代码设计 1)本设计的核心为练练看算法的设计,可以考虑数据结构中的图的遍历章 节,合理设计算法,将界面中各按钮的分布映射入数学矩阵进行路径规划。 (可以上网搜索相关算法)。 2)完成连连看游戏的图形、算法等代码的设计。 4.实验步骤(包括操作方法、数据处理) (1)界面设计 (2)算法设计 (3)代码设计 1.3课程设计的实验环境 硬件要求能运行Windows xp/7操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境, ECLIPSE开发工具。 1.4课程设计的预备知识 熟悉JAVA语言及ECLIPSE开发工具。

简易数字连连看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代码设计 package mybase.programe; /* * lianliankan总体算法思路:由两个确定的按钮。若这两个按钮的数字相等,就开始找它们相连的路经。这个找路经 * 分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有 * 三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)

Java课程设计报告模板

Java课程设计报告 模板

浙江科技学院 《Java程序设计》课程设计报告 设计题目:学生信息管理系统 姓名:邱焕明 学号: 所属院系:信息学院 专业:软件工程 小组成员:邱焕明 设计时间: -1-6 指导教师:虞建东

一、课程设计目的 (1)实验目的:结合开发的系统,给出学生信息管理系统 二、课程设计完成的任务 三、设计过程 (一)需求分析 1、基础资料管理 基础资料管理包括对院系、班级和学期的设置。该模块可实现以下功能: 添加、修改、删除和显示院系代码、院系名称和电话号码。 添加、修改、删除和显示班级代码、班级名称、学生人数和所属院系名。 添加、修改、删除和显示学期代码、学期名称。 2、学生信息管理 学生信息管理包括对学生档案和学籍的管理。该模块可实现以下功能: 添加、修改、查询和显示学生的基本信息、所属班级和院系。 记录学生学籍、学生离校信息和学生调动信息。 3、课程信息管理 课程信息管理包括对课程设置和班级选课的管理。该模块可实

现以下功能: 添加、修改、删除和显示课程代码、课程名称、学分和院系名称。 添加、删除和提交班级所选课程。 4、成绩信息管理 成绩信息管理包括对成绩录入和成绩分析的管理。该模块可实现以下功能: 录入班级课程成绩,以不同形式(列表统计、图表分析)显示班级课程成绩。 (二)系统设计概念、流程初定义 1、实体名:院系 2、实体名:班级 3、实体名:学生 4、实体名:课程 (三)系统内容规划 1、班级信息表 表3-1 班级信息表 2、课程信息表 表3-2 课程信息表

(四)系统总体设计 内 (五)系统详细设计 (六)系统测试 列名 数据类型 长度 备注 课程代码 char 10 主键 课程名称 varchar 50 无 学 分 tinyint 1 无 所属院系 varchar 50 无

Java课程设计

武汉科技大学城市学院 课程设计报告 课程设计名称JAVA程序设计课程设计 题目 A C M 院系信息工程学部 专业软件工程 班级 姓名 指导教师 2017 年 6 月23 日

课程设计评分表

JA V A编程课程设计指导书 学时:1周,学分:1 1.课程设计目的:JAVA编程课程设计属于软件开发类课程设计。该课程设计培养学生熟练应用当前主流的JAVA软件开发语言,检验软件的设计、编码与测试,具备较强的JAVA语言软件开发能力。 2.课程设计方式: (1)JAVA编程课程设计方式采取ACM测试的方式,利用所学的面向对象程序设计(JAVA)知识,培养学生具有分析应用问题的能力,能够独立完成应用程序的编制与调试工作。 (3)每个同学必须完成8-12道题,每题写出解题报告,解题报告内容:○1.题目标题○2.题目描述○3.解题思路○4.源码○5.小结 3.课程设计平台: eclipse或Myeclipse 4.课程设计考核方式 (1)学生独立提交软件设计作品和“课程设计报告书”,指导教师根据学生组提交的软件设计作品和“课程设计报告书”的质量,为学生组评定“优”“良”“中”“及格”或“不及格”; (2)根据各组学生所选题目的难易程度以及验收结果,为学生评定“优”“良”“中”“及格”或“不及格”。 “课程设计报告书”包括:课程设计项目名称,课程设计任务, 课程设计任务(功能)说明及功能模块图,数据库设计,各模块功能说明,使用的算法描述(如果需使用算法),各模块界面设计,各模块中关键代码段功能说明与代码行注释,测试说明,参考文献等。 5.参考文献 [1] 张思民. Java语言程序设计(第2版)[M].北京:清华大学出版社,2012.1 [2] 姜华. Java项目实战教程[M]. 北京:清华大学出版社,2012.9 [3] 陈喧. Java程序设计教程[M]. 北京:清华大学出版社,2011.5 [4] [美]Echel,B .Java编程思想(第四版)[M].北京:机械工业出版社,2007 [5] Michael Main. 数据结构:Java语言描述(第二版)(国外经典计算机科学教材)[M]. 北京:中国电力出版社,2007

Java课程设计报告

湖北大学 本科课程设计 题目 ATM 自助机模拟程序姓名 学号 专业年级 指导教师 职称

目录 第一章系统描述 (2) 1 前言 (2) 2 系统功能需求 (2) 第二章系统分析与设计 (3) 1 功能模块划分 (3) 2 功能模块的描述 (3) 3 系统设计流程图 (4) 4 测试数据及期望结果 (6) 第三章系统详细设计 (7) 1 主界面开发设计 (7) 2 功能选择界面开发设计 (7) 3 取款界面开发设计 (7) 4 存款界面开发设计 (8) 5 转账界面开发设计 (8) 6 查询界面开发设计 (9) 7 修改密码界面开发设计 (9) 8 界面开发设计使用函数 (9) 第四章系统测试 (11) 第五章源程序部分清单 (21) 第六章实验心得 (30) 参考文献 (31)

第一章系统描述 1 前言 Java技术是一门简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言,它也是一个平台,它基于Java虚拟机技术,借助这个东西建立了跨平台的优势。Java编程语言与众不同之处在于:Java程序既是编译型的,又是解释型的。 Java平台是一种纯软件平台,它有三个版本Java SE、Java EE、Java ME。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 本课程设计采用Eclipse作为开发工具,并采用Window Builder下的SWT Designer来实现相应的功能。着重通过模拟实现当前非常快捷又使用的ATM机来加深对java开发设计的了解,从而进一步提高自己对java图像界面的设计及相关知识的认识。 2 系统功能需求 当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM 柜员机系统,用户可以按照以下规则进行: (1)查询余额:初始余额为10000元。 (2)ATM取款:每次取款金额为100的倍数,一次取款不能超过1000,总额不 超过5000元,支取金额不允许透支,有快捷取款和用户自定义取款。 (3)ATM存款:每次存款金额为100的倍数,一次存款不能超过1000,不能出 现负存款。 (4)ATM转账:只有在两次输入账号相同且输入转账金额正确的情况下才允许 转账,不允许透支。 (5)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只 有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。

连连看游戏设计

连连看游戏设计 Company number:【0089WT-8898YT-W8CCB-BUUT-202108】

中南林业科技大学 《数据结构课程设计》报告必做题:连连看游戏 选做题: 姓名: 学号: 专业班级:软件工程1班 学院:计算机与信息工程学院 指导老师: 签名: 2017年 1 月10 日 目录

一、连连看问题 问题描述 该游戏对一堆图案中相同的图案进行配对,点击开始按钮后,要求在一定的时间内完成对所有的图片配对,玩家每次选择两个图形,如果两图形相同,且这两个图形之间存在少于2个拐角的连通路径,则可以消除这两个图形。成功消除一对图片则计分板会增加10分,对应的时间增加3秒。要求各类类型的图片个数为偶数个,途中若有玩家找不到可以匹配的图片时可以点击提示按钮,由系统提示出一对可以消除的图片,通过玩家的点击可以消除。当所有的图片消除时,系统提示消息为“恭喜你,通关了”,如果没有在规定时间完成所有图片的配对,则系统提示为“游戏结束”。 基本要求 (1)生成游戏初始局面; (2) 每次用户选择两个图形,如果图形能满足一定条件(如果两个图形一样,且这个两个图形直接存在少于 2个弯的拐角),则两个图形都能消掉。给定具有相同图形的任意两个格子,我们需要寻找这两个格子之间在转弯少的情况下,经过格子数目少的路径。如果这个优路径的转弯数目少于 2,则这个两个格子可以消去; (3)判断游戏是否结束。如果所有图形全部消去,游戏结束;

(4) 判断死锁,当游戏玩家不可能消去任意两个图像的时候,游戏进入“死锁”状态。 设计思想 判断两个图形可以消除的条件是:两个图形必须相同,它们之间存在着0个拐角,或1个拐角,亦或是2个拐角可以互相连通消除,否则,消除不了。 广度优先搜索的具体实现:如果两个图形可以通过0个拐角连通,则从第一个选中的图片一次向右,向下,向左,向上搜索可以和当前选中图片消除的另一图片,当搜索到与之相同的图片时,则与之消去;图片布局刷新; 如果两个图片之间存在1个拐角可以消去,则广度搜索从当前图片出发,向左,右上下一次寻找一个路径节点(没有图片的点),使得寻找到的路径节点可以与选中的图片一线连通,并且可以与第二次选中的图片一线连通,则可以判断为可消除图片;图片布局重新刷新; 如果连个图片之间存在两个拐角可以连通,则分为两种情况:一种是两个图片在矩形区域的最外沿,则通过判断是否存在一条线使得在两待消除的图片周围一个单位,若存在则消去。二是两图片在矩形区域内部,则在两待消除的图片水平方向和垂直方向上寻找另外两个中间点能使两中间点之间连通,并且其中一个中间点能和待消图片1一线连通,另一中间点能和待消图片2一线连通,如若找到这样的点,则判断两图片能消去,找不到则不能消去。 需求分析 (1) 初始化游戏界面 该部分主要由执行窗口创建函数及游戏地图加载函数来实现。通过数据的初始化及游戏地图资源的加载为用户呈现一个游戏初始的界面。 (2) 图片的选择

java(源代码)连连看课程设计

目录 第一章引言 (2) 1.背景 (2) 1.1课程设计内容 (3) 第二章系统介绍 (4) 1.连连看游戏规则 (4) 1.1游戏基本规则 (4) 1.2操作规则 (4) 1.3胜利和失败 (4) 2.游戏流程图分析 (4) 第三章系统游戏设计 (7) 1.系统分析 (7) 1.1游戏系统需求分析 (7) 1.2系统开发及运行环境 (7) 1.3系统功能主要要求 (7) 2.系统总体结构 (8) 3. 系统各模块功能介绍 (8) 第四章系统的具体实现 (9) 1.系统主要运行界面 (9) 1.1运行界面 (9) 1.2执行界面,进入游戏正常运行 (9) 1.3时间到界面 (10) 1.4赢家界面 (11) 1.5进度条界面 (12) 图4.5程序运行进度条 (12) 2.游戏实现代码 (12) 2.1主面板内所需要的组件的声明 (12) 2.2填充一个矩形框,进行显示时间 (12) 2.3主面板及各组件初始化 (13) 2.4创建时间对象,每隔100毫秒刷新一次 (13) 2.5分数代码。 (13) 3.消除图片具体情况 (14) 3.1两次点击相同图片相邻 (14)

3.2水平方向消去算法 (14) 3.3竖直方向消去算法 (15) 第五章程序清单 (16) 第六章结束语 (24) 第七章参考文献 (25) 第一章引言 1.背景 游戏“连连看”顾名思义就是找出相关联的东西,这个连连看在网上基本是用在小游戏中,就是找出相同的两样东西,在一定的规则之内可以做为相关联处理。“连连看”的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。 游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。这其中,顾方编写的“阿达连连看”以其精良的制作广受好评,这也成为顾方“阿达系列软件”的核心产品。并于2004年,取得了国家版权局的计算机软件著作权登记证书。 随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。如“水晶连连看”、“果蔬连连看”等,流行的“水晶连连看”以华丽界面吸引了一大批的女性玩家。 2008年,随着社交网络的普及和开放平台的兴起,“连连看”被引入了社交网络。“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行。 网络小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型。 不管走到哪个网页游戏网站,连连看游戏总是排在受玩家欢迎排名的前5位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络、单机休闲小游戏。 游戏《连连看》,只要将相同的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,适合细心的玩家。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。 该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。图片全部消完为游戏成功。游戏还将设置退出,再来一局的按钮,并实现该功能,方便用户进行操作。

Javawebapp课程设计报告

《电子商务网站》课程设计报告 项目题目电子拍卖平台系统分析与设计 学生姓名 班级/ 学号 专业\ 指导教师 2011年10月制

1、系统概述 本系统实现的是一个网上拍卖系统,可以实现在线登录,注册;卖家上货,买家出价竞拍;拍卖商品列表、商品拍卖信息和商品搜索等功能,普通的Internet用户可以通过该系统注册成为会员后可以上传自己拍卖的产品和竞拍卖价的商品。 2、网站结构分析与设计 2.1目标设计 竞拍网站所要实现的功能如下。 会员注册:会员注册信息和会员登录验证 会员管理:会员资金管理 买家信息管理 卖家信息管理 2.2系统功能分析设计 竞拍网共分为三个模块:会员注册模块、会员个人管理模块和商品列表和搜索模块。其功能模块划分如图所示:

2.3数据库结构设计 根据系统功能的设计要求和模块划分,表结构设计如下:

2.4 数据库需求分析 数据项和数据结构如下。 会员信息表:自动编号、用户名、密码和身份证号码、资金、日期 商品信息表:自动编号、商品名、上传人、商品详情 卖家信息表:会员编号、商品编号、商品价格、截止时间 商品竞拍成功信息列表:商品名、用户名、竞拍时间、起初价格、最终价格、最成交时间 2.5、开发环境 开发工具:myeclipse 服务器软件:tomcat 数据库:MySQL 3.网站详细设计. 3.1网站流程设计

3.2数据库功能设计 三个存储过程: Onsell:展示拍卖信息,返回当时拍卖的所有信息; Buyingshow:展示某个商品详细信息 Buying:当用户竟拍是执行. 3.3 JA VA控制层设置 POJO包:与每一项功能相对应,设置对象类 DAO包:所有连接数据库的代码 Servlet:所有前台页面的操作过程. 3.4前台设计 以JSP为主,辅助以JS的主流技术,实现网页的动态效果和数据的动态接收,这里是项目最困难的地方. 4.网站的实施 前台\后台\控制分布实施: 4.1,初步软件结构实施 其中DAO包里全部是与数据库有关的连接数据库模式。 POJO包里全部是业务需要的数据结构类。 SERVLET包里全部是逻辑控制的控制模式。

java课程设计报告书

《Java程序设计》课程设计报告 2015—2016学年第二学期 设计题目:《数字连连看》 学生:黄杰 学号: 2 专业班级:软件工程1402 指导教师:国权 2016 年 7 月 2 日 目录 1.JAVA程序设计书 3 1.1《简易连连看》3 1.1.1具体要求 3 1.2本系统设计的知识点 3

2.功能设计 3 2.1算法设计 3 2.2部分模块流程图 4 3.代码设计 5 4.界面及运行效果,测试工具与测试效果14 5.设计总结 16 5.1.程序调试情况:16 5.2.本人在程序设计中感想: 16 6.致 16 主要参考文献16

: 1.1Java程序课程设计任务书 1.1《简易连连看游戏》 本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。 1.1.1具体要求(包括技术要求等): <1>. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。方块上随机分布一些数字,数字的要至少两两相同,位置随机打乱。 <2>. 当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。 <3>. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。 <4>. 退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。 1.2本系统涉及的知识点: 循环,javaGUI组件,函数,数组,分支等 2.功能设计 2.1算法设计 本系统需要实现的功能要求: 图一,数字按钮功能模块 图二,三个功能按钮模块

JAVA课程设计—连连看

Java 课程设计报告 (一):前言: 随着计算机的快速发展,计算机的应用范围越来越广。其内容范围跨越了教育科研、文化事业、金融、商业、新闻出版、体育等各个领域,也应用到了娱乐方面。让人们在业余时间来放松心情。 (二):内容: 1:实验课题:连连看小游戏的开发设计 2:实验任务:完成游戏的运行 3:功能需求和分析: 本程序将涉及一款单机小型连连看游戏,该程序具备以下的功能:(1)该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。方块上随 机分布一些数字,数字的要求是至少两两相同,位置随机打乱。(2)游戏规则是将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则视为无效,若连接一对成功就 消失于界面,继续游戏,直到游戏结束。 (3)帮助:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。 (4)退出游戏:可点击左下方“退出游戏”按钮,结束游戏。(5)该游戏纯属个人小型休闲游戏。

(三):代码设计 连连看java源代码 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implements ActionListener { JFrame mainFrame; //主面板 Container thisContainer; JPanel centerPanel,southPanel,northPanel; //子面板 JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组 JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮 JLabel fractionLable=new JLabel("0"); //分数标签 JButton firstButton,secondButton; //分别记录两次被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; //判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标int i,j,k,n;//消除方法控制 public void init(){ mainFrame=new JFrame("JKJ连连看"); thisContainer = mainFrame.getContentPane(); thisContainer.setLayout(new BorderLayout()); centerPanel=new JPanel(); southPanel=new JPanel(); northPanel=new JPanel(); thisContainer.add(centerPanel,"Center"); thisContainer.add(southPanel,"South"); thisContainer.add(northPanel,"North"); centerPanel.setLayout(new GridLayout(6,5)); for(int cols = 0;cols < 6;cols++){ for(int rows = 0;rows < 5;rows++ ){ diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1])); diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } } exitButton=new JButton("退出"); exitButton.addActionListener(this); resetButton=new JButton("重列"); resetButton.addActionListener(this); newlyButton=new JButton("再来一局");

连连看源代码

摘要: 近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点, 得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编 程领域的首选编程语言。 Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展 所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期 内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应 用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java 自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中 了. 连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进 行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成 为办公一族的新宠,并迅速传遍了世界各地。饱受工作压力的人们没有太多的时间进行 复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。之后村子的连连看风靡版, 阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就 了一个连连看的新世界。连连看游戏有多种地图样式和道具系统、大大加强了游戏的可 玩性,是一款老少皆宜的休闲佳品。 关键字:发展,java,连连看,程序设计; 1.课程设计介绍 课题设计的目的: 1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。 2) 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼 我们的分析解决;实际问题的能力,提高学生适应实际,实践编程的能力。 3)熟练掌握JAVA语言中图形用户界面程序的编写; 4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。 课程设计的要求: 由于Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等 特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义, 而且有利于软件的维护和继承学会java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面 设计、Java多线程编程、Applet程序的设计、文件和网络输入输出流编程、Java数据库编程等。通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。

基于java的连连看游戏设计毕业设计论文(含源文件)

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

java课程设计实验报告

Java课程设计实验报告实验题目:打字游戏小程序 专业:计算机科学与技术系 班级:1202班 成员:

Java课程设计(打字游戏小程序) 一、课程设计目的 经过一学期的java学习,能灵活运用书中和实验中所学习的各类知识和技巧,并且能在程序开发中得以很好的运用和发挥。在以后的学习和工作中,可以从中获取很好的经验,并且锻炼自己开发程序和创新的意识。 二、课程设计内容 1.课程设计简介 设计的是一个打字的小游戏,屏幕上不断地有英文字母下落,键盘输入字母,屏幕上与输入的字母形同的就会消失,并计分,如果有没有消去的字母掉到屏幕底,将扣分。 2.设计说明 因为要进行键盘操作,所以引用了event包,还要注册事件监听。字母是随机产生的,又要用。注册了线程。还要对窗口定义坐标,防止字母出现在同一位子。并且通过一位数组来给随机出现的字母做坐标定义。主要通过一位数组来控制字母的坐标,并且通过字母坐标的改变来对整个游戏的流程进行控制。 3.设计流程图 4.实现功能 随机产生字母,运用了键盘操作当按对屏幕中出现的字母时,该字母全部消失,并且在分数上相应的增加或减少。 5.详细设计(源代码) 1) packageDownCharGame; import import import /** *下落的字母实体类 *@authorshenbf * */ publicclassCharEntity{ raw(g); } etY()>=480){ etX((int)()*580)+30); chs[i].setY(0);

chs[i].setColor(newColor((int)()*256), (int)()*256),(int)()*256))); chs[i].setCh((char)(65+(int)()*26))); } chs[i].down(); } repaint();tart(); } publicvoidkeyTyped(KeyEvente){ } publicvoidkeyPressed(KeyEvente){ } publicvoidkeyReleased(KeyEvente){ etCh()||key==chs[i].getCh()+32){ etY()

Java课程设计报告书

华东交通大学理工学院课程设计报告书( 2010-- 2011年度第 2 学期) 所属课程名称 Java面向对象程序设计题目设计一个多功能计算器分院电信分院 专业班级 09信管<1>班 学号 20090210450106 蔡炜指导教师黄建华 2011年06月23日

华东交通大学理工学院 课程设计(论文)任务书专业09信管班级 <1>班姓名蔡炜 一、课程设计(论文)题目设计一个多功能计算器 二、课程设计(论文)工作:自 2011 年06 月 13日起至2011年 06 月 23日止。 三、课程设计(论文)的内容要求: 本应用程序继承自框架类(JFrame),此程序使用Frame布局管理器BorderLayout,将单行文本框加入到“North”区域,包含各种按钮的面板Panel p加入到”Center”区域。包含各种按钮的面板Panel p 采用4行5列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中。同时注册按钮事件监听器。如:Button b=new Button(); b.addActionListener(事件监听器); 事件监听器中的事件处理方法void actionPerformed(ActionEvent evt)完成主要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件(”0”,”1”,”2”…”8”,”9”)、运算符按钮事件(”+”,”-“,”*”,”/”,”%”)、正负号按钮事件(”+/-“)、小数点按钮事件(”.”)、等号按钮事件(”=”)、求倒按钮事件(”1/x”)、清零按钮事件(“C”)。

在事件处理触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。 计算器完成的是一个数学表达式,如:3+2,所以可以采用一个链表(LinkedList类)来存储数字或字符,如3,+,2分别存储在链表中,最后运算时,可以一一取出来进行运算。 学生签名: ( ) 2011 年06 月 23 日 课程设计(论文)评阅意见 评阅人职称 20 年月日

(完整版)Java毕业课程设计连连看游戏(含代码)

Java程序课程设计任务书 一、主要任务与目标 1、了解图形用户界面的概念; 2、了解AWT的基本体系结构,掌握窗口的基本原理; 3、掌握几种布局管理器的使用方法; 4、掌握java的事件处理机制; 5、了解Swing的基本体系结构,掌握Swing组件的使用方法; 6、掌握java小程序的工作原理和使用方法; 7、该游戏还将设置退出,再来一局按钮,并实现相应的功能。 8、设计一个用户注册登录界面 二、主要内容与基本要求 游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。 该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。图片全部消完为游戏成功。游戏还将设置退出,再来一局的按钮,和倒计时的功能,方便用户进行操作。并且有一个用户登录注册界面,玩家必须登录以后才可以进行游戏。

三、计划进度 12月28日~ 12月29日:课程设计选题,查找参考资料 12月30日~ 12月31日:阅读参考书籍,收集资料,完成需求分析1月1日~ 1月3日:系统的代码设计及实现,数据库设计与实现 1月4日~ 1月5日:系统的调试,修改,完善 1月6日~ 1月7日:完成课程设计报告,准备答辩 四、主要参考文献 [1] 刘宝林.Java程序设计与案例习题解答与实验指导[M]. [2] 王鹏何云峰.Swing图形界面开发与案例分析[M]. [3](美)Karl Avedal , Danny Ayers, Timothy Briggs. JSP编程指南[M]. 电子工业出版社,. [4](美)Mark Linsenbardt. JSP在数据库中的应用与开发[M]. 希望电 子出版社,. [5] Dianne Phelan,Building a simple web database application[C].IEEE International Professional Communication Conference, 2004, 79-86. [6](美)Karl Avedal,Danny Ayers,Timothy Briggs.JSP编程指南[M].电子 工业出版社. [7] Dianne Phelan,Building a simple web database application[C].IEEE International Professional Communication Conference, 2005, 79-86. [8] Altendorf. Eric, Hohman. Moses, Zabicki. Roman. Using J2EE on a large, web-based project[J]. IEEE Software. (02):81-89.

JAVA 连连看 源代码行行注释

所实现应用的功能及具体实现. 需求规定 退出:退出界面,停止游戏。 重列:重新排列按键。 再来一局:重新开始一局,分数不重计。运行环境 硬件要求:普通计算机即可。 操作系统:windows XP,windows 7 等 开发环境:Myeclipse 8.5

流程图 实现思路 1:将整张地图拆分为n行m列,接着用一个二维数组表示将在地图中显示什么,例如0表示此处没有东西(如果两个按键可以消除时,就可以将数组中对应的元素赋为0)。 2:游戏中需要处理鼠标按下时间和获取鼠标当前点击坐标信息。 3:如果其在地图范围内按下某个按键,则将其转换为在二维数组中对应的行和列。

4:游戏关键就是如何判断两张图片可以消除,这也是连连看游戏的关键吧。在这个简单连连看中可以直接比较两个按键标示的数字,如果数字相等则可以消去,如果不相等则不能消去。 我们可以将开始点的前后左右四个方向的结点都推入队列中,继续查看其前后左右的前后左右,如果其中有为0的(代表此处没有图片,存在通路),还是元素值和开始点相同的都推入队列中。 在判断前后左右时就可以对转弯次数进行累加了,如果还是原来的方向,则保持转弯次数不变,否则转弯次数+1。如果搜索的过程中,发现存在转弯的次数少于或者等于2的,且其结点信息和结束点一样,代表我们已经找到了开始点和结束点之间的通路了,这时也就是两个按键可以消去了。 5:如何画出两张图片消去的路径呢,我的思路是这样的,每次寻找到一个新结点时,我们可以将其上一步结点的信息也保存下来,这样当我们找到结束点时,我们就可以沿着相反的方向,搜索回去,找出原来的整条路径。

代码介绍及分析。 package test; import javax.swing.*; //AWT的扩展 import java.awt.*; //抽象窗口工具包 import java.awt.event.*; class lianliankan implements ActionListener //实现ActionListener接口{ JFrame mainFrame; //主面板,JFrame定义的是一个容器,可向里面添加组件Container thisContainer; //定义一个容器 JPanel centerPanel,southPanel,northPanel; //子面板,JPanel是个轻量级容器,可添加入JFrame中 JButton diamondsButton[][] = new JButton[6][5];//定义存储游戏按钮的数组JButton exitButton,resetButton,newlyButton; //定义退出,重列,重新开始按钮JLabel fractionLable=new JLabel("0"); //定义分数标签,并初始化为0. JButton firstButton,secondButton; //分别记录两次先后被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; // 声明了一个静态布尔类型的变量,判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标 int i,j,k,n;//消除方法控制 public void init(){ //init方法 mainFrame=new JFrame("连连看"); //定义主面板为命名为“连连看”的JFrame容器thisContainer = mainFrame.getContentPane(); //初始化mainFrame. thisContainer.setLayout(new BorderLayout()); //定义布局为东西南北中的形式centerPanel=new JPanel(); //初始化centerPanel southPanel=new JPanel(); //初始化southPanel northPanel=new JPanel(); //初始化northPanel thisContainer.add(centerPanel,"Center"); //将centerPanel加入mainFrame中的Center位置 thisContainer.add(southPanel,"South"); //将southPanel加入mainFrame中的South位置 thisContainer.add(northPanel,"North"); //将northPanel加入mainFrame中的North位置 centerPanel.setLayout(new GridLayout(6,5)); //将centerPanel初始化为6*5

相关主题
文本预览
相关文档 最新文档