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

合集下载

java课程设计报告连连看

java课程设计报告连连看

java课程设计报告 连连看一、课程目标知识目标:1. 让学生掌握Java基础语法,包括变量声明、数据类型、运算符等。

2. 使学生了解面向对象编程的基本概念,如类、对象、继承、封装等。

3. 帮助学生掌握Java中常用类库和API的使用,如Array、ArrayList等。

4. 让学生学会运用Java编写图形用户界面(GUI)程序。

技能目标:1. 培养学生运用Java语言解决实际问题的能力,特别是在连连看游戏设计中的逻辑思维和编程技巧。

2. 提高学生分析问题、设计解决方案的能力,学会使用Java实现游戏的基本功能。

3. 培养学生团队合作精神,学会在项目中分工合作、共同推进项目进度。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发他们主动探索新技术、新方法的积极性。

2. 培养学生面对问题时的耐心和毅力,让他们体会到编程过程中的成就感。

3. 引导学生树立正确的价值观,认识到编程对于社会发展的重要性,激发他们为我国信息技术产业的发展贡献力量的责任感。

课程性质分析:本课程为Java编程课程设计,旨在通过实际项目——连连看游戏的设计与实现,巩固和拓展学生所学Java知识,提高编程实践能力。

学生特点分析:学生已具备一定的Java基础,了解基本语法和面向对象编程,但实际编程经验不足,需要通过本课程加强实践操作。

教学要求:1. 注重理论与实践相结合,引导学生将所学知识运用到实际项目中。

2. 鼓励学生积极参与讨论,培养解决问题的能力和团队合作精神。

3. 关注学生个体差异,提供个性化指导,确保每位学生都能在课程中取得进步。

二、教学内容1. Java基础语法回顾:变量声明、数据类型、运算符、控制流程(条件语句、循环语句)。

教材章节:第一章至第三章2. 面向对象编程:类与对象、构造方法、封装、继承、多态。

教材章节:第四章至第六章3. Java常用类库和API:String类、Array、ArrayList、泛型。

连连看游戏java课程设计

连连看游戏java课程设计

连连看游戏java课程设计一、课程目标知识目标:1. 理解Java语言中面向对象编程的基本概念,如类、对象、继承、封装等;2. 学会使用Java编写连连看游戏的界面布局和逻辑控制;3. 掌握运用Java集合框架处理游戏数据结构;4. 了解Java事件处理机制,并能应用于游戏交互。

技能目标:1. 能够运用面向对象的方法设计游戏类和对象,实现游戏功能;2. 独立编写连连看游戏的界面和逻辑代码,完成一个完整的Java游戏项目;3. 学会使用集合框架优化游戏数据存储和访问;4. 提高问题分析、程序设计和调试能力。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发创造力和创新能力;2. 培养学生合作学习、分享交流的良好习惯,提高团队协作能力;3. 强化学生的逻辑思维能力,提高解决实际问题的能力;4. 培养学生面对挑战时的积极态度,勇于克服困难,持续优化和完善自己的作品。

课程性质:本课程为信息技术学科选修课程,以项目为导向,注重实践操作和团队合作。

学生特点:学生具备一定的Java编程基础,对游戏开发有浓厚兴趣,具有较强的动手能力和创新能力。

教学要求:结合实际项目需求,引导学生运用所学知识解决问题,注重培养学生的编程能力和团队协作能力,提高学生的综合素质。

通过本课程的学习,使学生能够独立完成一个连连看游戏的Java课程设计。

二、教学内容1. 面向对象编程基础复习:复习Java中类与对象、继承、封装等基本概念,参考教材第二章。

2. 游戏界面设计:学习使用Java的Swing库设计连连看游戏界面,包括菜单、按钮、网格布局等,结合教材第四章。

- 界面组件及布局管理器;- 事件监听器和处理机制;- 图形和图标的使用。

3. 游戏逻辑实现:学习实现游戏核心逻辑,如数据结构设计、游戏规则、配对消除等,参考教材第六章。

- 集合框架的使用;- 算法实现(如查找、排序);- 游戏流程控制。

4. 游戏对象设计:设计游戏中的对象类,如卡片类、游戏引擎类等,运用封装、继承等面向对象原则,参考教材第三章。

数字连连看java课程设计

数字连连看java课程设计

数字连连看java课程设计一、课程目标知识目标:1. 让学生理解Java语言中数组的基础知识,掌握其使用方法;2. 学会使用Java编写简单的图形用户界面(GUI)程序;3. 掌握数字连连看游戏的逻辑设计,理解其算法实现。

技能目标:1. 能够运用Java数组存储和处理数字连连看游戏数据;2. 独立编写数字连连看游戏的代码,实现游戏的基本功能;3. 学会使用Java Swing组件设计游戏界面,提高编程实践能力。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发他们学习Java的热情;2. 培养学生团队协作能力,学会与他人共同解决问题;3. 培养学生面对挑战时的积极态度,提高克服困难的信心。

课程性质:本课程为实践性较强的编程课程,通过数字连连看游戏的设计与实现,帮助学生巩固Java基础知识,提高编程实践能力。

学生特点:本课程针对具有一定Java基础知识的初中生,他们对编程有一定兴趣,善于观察和思考,但可能缺乏实际编程经验。

教学要求:课程应注重理论与实践相结合,以学生为主体,引导学生主动探究,培养他们解决问题的能力。

教学过程中,注重分层教学,关注学生个体差异,确保每个学生都能在原有基础上得到提高。

通过课程学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果。

二、教学内容1. Java数组的基本概念与使用方法,包括数组的声明、初始化和访问;2. Java Swing图形用户界面编程基础,如JFrame、JPanel、JButton等组件的使用;3. 数字连连看游戏逻辑设计,涵盖游戏规则、数据存储、匹配算法等;4. 编程实现数字连连看游戏,包括界面设计、事件处理、游戏流程控制等。

教学内容安排:第一课时:复习Java数组知识,介绍数字连连看游戏规则;第二课时:学习Java Swing组件,设计数字连连看游戏界面;第三课时:编写数字连连看游戏逻辑,实现基本功能;第四课时:优化游戏代码,进行测试与调试。

java连连看课程设计

java连连看课程设计

java连连看课程设计一、课程目标知识目标:1. 学生能理解Java连连看游戏的基本原理和规则。

2. 学生能掌握运用Java编程语言实现连连看游戏的界面布局和基本逻辑。

3. 学生能掌握使用二维数组存储和管理游戏数据的方法。

4. 学生能理解并能运用事件监听机制实现游戏交互。

技能目标:1. 学生能运用所学知识,独立编写并调试Java连连看游戏的简单版本。

2. 学生能通过分析问题,设计合理的算法解决问题,如使用深度优先搜索或广度优先搜索进行路径查找。

3. 学生能运用调试技巧找出并修正程序中的错误,提高代码质量。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发探究精神和创新意识。

2. 学生通过团队协作,培养沟通能力和团队精神,增强合作解决问题的能力。

3. 学生在游戏编程实践中,体验编程带来的成就感,增强自信心。

课程性质:本课程为实践性较强的Java编程课程,通过设计与实现连连看游戏,让学生将所学理论知识应用于实际编程中,提高学生的编程实践能力。

学生特点:学生处于初中年级,对游戏有较高的兴趣,具备一定的编程基础,喜欢动手实践。

教学要求:教师应注重理论与实践相结合,引导学生主动探究,培养学生的编程思维和解决问题的能力。

在教学过程中,关注学生的个体差异,提供个性化指导,确保学生能够达到预定的学习目标。

通过分解课程目标为具体的学习成果,便于后续的教学设计和评估。

二、教学内容1. 游戏原理介绍:讲解连连看游戏的基本规则和原理,引导学生理解游戏的逻辑结构。

- 教材章节:第一章 Java概述,第三节 Java程序的基本结构。

2. 界面设计与实现:教授如何使用Java的Swing图形用户界面工具包设计连连看游戏的界面。

- 教材章节:第五章 图形用户界面,第一节 Swing概述,第二节 常用Swing组件。

3. 数据存储与处理:使用二维数组存储游戏数据,讲解如何进行数据的初始化和管理。

- 教材章节:第四章 数组,第一节 数组的概念,第二节 二维数组。

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) 方法同步分数显示的动画效果。

【程序输出结果】:游戏开始【程序代码】:ImageFactorypackage nicholas.game.kyodai;import javax.swing.ImageIcon;import .*;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;}}}KyodaiGridpackage 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();}}LevelInfopackage 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.javapackage 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@";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) {eBomb();} else if(ae.getSource()==refreshItem) {mainPanel.refresh();} else if(ae.getSource()==tipItem) {mainPanel.showNext();}}}MainPanel.javapackage 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<yBound;y++) {for(int x=0;x<xBound;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<yBound-1;y++) {for(int x=1;x<xBound-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<count;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<yBound-1;y++) {for(int x=1;x<xBound-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(intx=start.getXpos()+direct;x!=end.getXpos()&&x<xBound&&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(inty=start.getYpos()+direct;y!=end.getYpos()&&y<yBound&&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 connerif(xdirect(start,end,path[0])) {return 1;}if(ydirect(start,end,path[0])) {return 1;}//1 connerKyodaiGrid 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//uppath[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;}}//downpath[0].removeAllElements();for(int y=start.getYpos()+1;y<yBound;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;}}//leftpath[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;}}//rightpath[0].removeAllElements();for(int x=start.getXpos()+1;x<xBound;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) {//尝试寻找路径//如果找到路径//animateVector temp = new Vector();temp.add(prev);for(int i=0;i<pcount;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<yBound-1;sy++) {for(int sx=1;sx<xBound-1;sx++) {if(!grid[sy][sx].isVisible()) continue;for(int ey=sy;ey<yBound-1;ey++) {for(int ex=1;ex<xBound-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);//setprev = null;return;}}prev.setBorder(opaqueBorder);prev = current;prev.setBorder(selectedBorder);if(!findPair()) refresh();}}}private class AnimateThread extends Thread {private Vector v;public AnimateThread(Vector temp) {v = temp;}public void run() {KyodaiGrid prev = null;KyodaiGrid current;int j = 0;while(j<v.size()) {prev = (KyodaiGrid)v.remove(0);prev.setVisible(true);v.add(prev);j++;try {sleep(20);} catch(InterruptedException ire) {System.err.println("sleep interrupted");}}current = prev;prev = (KyodaiGrid)v.remove(0);while(!v.isEmpty()) {((KyodaiGrid)v.remove(0)).setVisible(false);try {sleep(20);} catch(InterruptedException ire) {System.err.println("sleep interrupted");}}prev.setVisible(false);current.setVisible(false);current.setIcon(ImageFactory.getInstance().getImageicon(39));prev.setIcon(ImageFactory.getInstance().getImageicon(39));current.setBorder(opaqueBorder);prev.setBorder(opaqueBorder);if(!findPair()) refresh();}//end of method run}private class ProgressThread extends Thread {public ProgressThread() {}public void run() {while(true) {while(progress.getValue()>0) {progress.setValue(progress.getValue()-1);try {sleep(100);} catch(InterruptedException ire) {System.err.println("sleep interrupted");}}repaint();suspend();}}}}【总结自己的体会和收获】:通过这次课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中也发现了自己的不足之处,对以前学过的知识理解的不够深刻,对安卓手机小游戏的程序编写有了一定的了解。

(完整版)Java连连看毕业课程设计

(完整版)Java连连看毕业课程设计

摘要关键字:发展,java,连连看,程序设计;现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握现代科学技术知识,以适应社会的发展,能够独立完成面临的任务,作一名有创新意识的新型人才。

Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。

Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。

有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。

连连看游戏是一种很流行的小游戏,记得在小时候去游戏厅玩的时候就有两台专门的连连看的机器(当然当时不叫这个名字),一个是连麻将牌、另一个是连水果图片。

当时的麻将牌分好几层,相邻层的牌还可以连,看得人眼花缭乱。

作为一个java初学者,我所编辑的“悠嘻猴连连看”小游戏,只有几个基本功能:“开始”“再来一局”炸弹“重新开始”“退出”。

我所选中给出的游戏界面很漂亮,不过似乎图形只有一层,而且数量也不是很多,只有64张图,降低了不少难度。

目录摘要 (I)第1章需求分析 (1)1.1功能分析 (1)1.2流程图 (2)第2章详细设计 (3)2.1课程设计目的 (3)2.2课程设计的实验环境 (3)2.3课程设计的预备知识 (3)2.4课程设计要求 (3)2.5连连看算法设计 (4)2.6类的实现方法 (4)2.6.1 成员变量 (4)2.6.2 方法设计 (5)第3章测试分析 (7)3.1程序运行情况 (7)3.2测试计划及分析 (9)3.2.1检验的先后顺序 (9)3.2.2程序异常处理 (9)第4章课程设计总结 (10)附件A (1)参考资料 (26)第1章需求分析1.1 功能分析每次用户选择两个图形,如果图形满足一定条件(两个图形一样,且这两个图形之间存在转弯少于3的路径),则两个图形都能消掉。

连连看java代码课程设计

连连看java代码课程设计

连连看java代码课程设计一、课程目标知识目标:1. 理解Java基本语法,掌握连连看游戏的核心算法;2. 学会使用Java编写图形用户界面,实现游戏窗口的布局与设计;3. 了解Java事件处理机制,能编写鼠标点击事件监听器。

技能目标:1. 培养学生运用Java语言解决实际问题的能力;2. 提高学生分析问题、设计算法、编写代码、调试程序的综合技能;3. 培养学生的创新思维和团队协作能力,通过分组完成任务,提高沟通与协作效率。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习积极性,增强自信心;2. 培养学生面对困难时,保持积极的心态,勇于尝试,不断克服挫折;3. 培养学生的集体荣誉感,通过团队协作,共同完成任务,体验成功的喜悦。

分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能独立完成连连看游戏的Java代码编写,实现游戏的基本功能;2. 学生能通过小组合作,共同优化游戏界面,提升用户体验;3. 学生在课程学习过程中,能主动探究新知识,勇于挑战更高难度的编程任务;4. 学生在学习过程中,培养良好的编程习惯,注重代码规范和团队协作。

二、教学内容根据课程目标,教学内容主要包括以下几部分:1. Java基本语法:- 数据类型、变量、常量- 运算符、表达式、流程控制(分支、循环)- 数组、字符串2. Java图形用户界面设计:- Swing图形用户界面库简介- JFrame、JPanel容器组件- 布局管理器(边界布局、流布局等)3. Java事件处理机制:- 事件监听器、事件源- 鼠标事件、键盘事件- 事件适配器、事件处理线程4. 连连看游戏核心算法:- 游戏规则、数据结构设计- 算法实现(路径查找、消去逻辑等)- 游戏界面与逻辑分离教学大纲安排如下:1. 第一阶段(2课时):Java基本语法复习与巩固2. 第二阶段(2课时):Swing图形用户界面设计3. 第三阶段(2课时):Java事件处理机制4. 第四阶段(4课时):连连看游戏核心算法分析与实现教学内容与教材关联章节:1. 《Java程序设计》第3章:Java基本语法2. 《Java程序设计》第6章:Swing图形用户界面设计3. 《Java程序设计》第7章:Java事件处理机制4. 《Java程序设计》实例分析:连连看游戏案例三、教学方法针对本课程的教学目标和内容,采用以下多样化的教学方法:1. 讲授法:- 对于Java基本语法、Swing图形用户界面设计、Java事件处理机制等基础知识点,采用讲授法进行教学,使学生在短时间内掌握必要的理论知识;- 讲授过程中注重启发式教学,引导学生主动思考问题,提高课堂互动性。

JAVA连连看游戏课程设计

JAVA连连看游戏课程设计

JAVA连连看游戏课程设计一、教学目标本课程的目标是让学生掌握Java编程基础,学会使用Java语言编写简单的连连看游戏。

通过本课程的学习,学生应达到以下目标:1.知识目标:–理解Java语言的基本语法和编程概念;–掌握面向对象编程的基本思想和方法;–了解常用的数据结构和算法。

2.技能目标:–能够使用Java语言编写简单的程序;–能够运用面向对象编程思想解决实际问题;–能够独立完成连连看游戏的设计和实现。

3.情感态度价值观目标:–培养学生的编程兴趣和自信心;–培养学生解决问题的能力和创新精神;–培养学生团队协作和沟通交流的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.Java语言基础:介绍Java语言的基本语法、数据类型、运算符、控制结构等。

2.面向对象编程:讲解类的定义、属性、方法、继承、多态等概念,并引导学生学会使用面向对象的思想解决问题。

3.常用数据结构和算法:介绍数组、链表、栈、队列等基本数据结构,以及排序、查找等常用算法。

4.连连看游戏设计与实现:引导学生运用所学知识设计和实现一个简单的连连看游戏,包括游戏界面设计、逻辑处理、算法实现等。

三、教学方法本课程采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解基本概念、语法和算法,引导学生掌握知识要点。

2.案例分析法:通过分析实际案例,让学生学会运用所学知识解决实际问题。

3.实验法:学生动手编写代码,实践所学知识,培养编程能力和解决问题的能力。

4.小组讨论法:学生分组讨论,共同完成游戏设计,培养团队协作和沟通交流的能力。

四、教学资源本课程所需教学资源包括:1.教材:《Java编程入门》或其他同类教材;2.参考书:《Java核心技术》等;3.多媒体资料:PPT、教学视频等;4.实验设备:计算机、网络等。

教学资源应支持教学内容和教学方法的实施,丰富学生的学习体验,提高学习效果。

五、教学评估为了全面、客观地评估学生的学习成果,本课程采用以下评估方式:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,以反映学生的学习态度和积极性。

JAVA课程设计连连看(含代码)

JAVA课程设计连连看(含代码)

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

2、具体要求(包括技术要求等):a. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。

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

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

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

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

e.运用基于SWING的图形用户界面设计知识等。

3、学习并掌握以下技术:Java等4、熟练使用以下开发工具:Jcreate 等实现系统上述的功能。

三、计划进度12月28日-12月29 日:课程设计选题,查找参考资料12月30日-12月31日:完成需求分析、程序设计1月1日-1月3日:完成程序代码的编写1月4日-1月6日:系统测试与完善1月7日-1月8日:完成课程设计报告,准备答辩四、主要参考文献[1] (美)埃克尔著陈昊鹏,饶若楠等译. Java编程思想[J]. 机械工业出版社,2005[2](美)Gary J.Bronson著张珑刘雅文译. Java编程原理[J]. 清华大学出版社,2004[3](美)Michael Morrison著徐刚,于健,薛雷译. 游戏编程入门[J]. 人民邮电出版社,2005.9[4](美)Wendy Stahler著冯宝坤,曹英译. 游戏编程中的数理应用[J]. 红旗出版社,2005[5](美)克罗夫特(David Wallace Croft)著彭晖译. Java游戏高级编程[J]. 清华大学出版社,2005[6](美)David Brackeen著邱仲潘译. Java游戏编程[J]. 科学出版社,2004[7] 聂庆亮编著. Java应用开发指南[J]. 清华大学出版社,2010[8] 耿祥义,张跃平编著. Java面向对象程序设计[J]. 清华大学出版社,2010[9] 杨绍方编著. Java编程实用技术与案例[J]. 清华大学出版社,2000.11[10] 明日科技编著. Java编程全能词典[J]. 电子工业出版社,2010摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。

连连看课程设计java

连连看课程设计java

连连看课程设计java一、教学目标本课程旨在通过学习Java编程语言中的“连连看”游戏开发,让学生掌握以下知识目标:1.理解Java编程语言的基本语法和结构。

2.学习使用Java编程语言实现简单的游戏逻辑。

3.掌握使用Java编程语言中的图形用户界面(GUI)设计游戏界面。

在技能目标方面,学生需要能够:1.使用Java编程语言独立完成一个简单的游戏程序。

2.分析并解决游戏开发过程中遇到的问题。

3.能够团队合作,共同完成游戏开发项目。

在情感态度价值观目标方面,我们期望学生:1.培养对计算机编程的兴趣和热情。

2.学会欣赏团队合作的力量,培养团队精神。

3.通过对游戏的开发,培养创新思维和解决问题的能力。

二、教学内容本课程的教学内容将围绕Java编程语言和“连连看”游戏开发展开。

具体内容包括:1.Java编程语言的基本语法和结构。

2.Java编程语言中的图形用户界面(GUI)设计。

3.“连连看”游戏的基本逻辑和规则。

4.使用Java编程语言实现“连连看”游戏。

教学大纲安排如下:第一周:Java编程语言的基本语法和结构。

第二周:Java编程语言中的图形用户界面(GUI)设计。

第三周:“连连看”游戏的基本逻辑和规则。

第四周:使用Java编程语言实现“连连看”游戏。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如:1.讲授法:用于教授Java编程语言的基本语法和结构。

2.讨论法:通过小组讨论,让学生共同解决问题,培养团队精神。

3.案例分析法:分析已有的游戏案例,让学生了解游戏开发的流程和技巧。

4.实验法:让学生动手实践,独立完成“连连看”游戏的开发。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《Java编程语言》。

2.参考书:《Java GUI编程》。

3.多媒体资料:教学PPT、游戏开发案例视频。

4.实验设备:计算机、网络环境。

通过以上教学资源,我们将丰富学生的学习体验,提高教学效果。

java课程设计报告连连看

java课程设计报告连连看

java课程设计报告连连看一、教学目标本课程的教学目标是使学生掌握Java编程的基本语法和编程思想,培养学生解决实际问题的能力。

具体分为以下三个部分:1.知识目标:使学生了解Java编程的基本语法、数据结构、控制流程、面向对象编程等知识。

2.技能目标:培养学生能够使用Java编写简单的程序,解决实际问题。

3.情感态度价值观目标:培养学生热爱编程,勇于探索,勤于实践的科学精神。

二、教学内容根据课程目标,本课程的教学内容主要包括Java基本语法、数据结构、控制流程、面向对象编程等。

具体安排如下:1.第一章:Java入门,介绍Java编程的基本概念和环境配置。

2.第二章:Java基本语法,介绍变量、数据类型、运算符、输入输出等。

3.第三章:控制流程,介绍条件语句、循环语句等。

4.第四章:数据结构,介绍数组、链表、栈、队列等。

5.第五章:面向对象编程,介绍类、对象、继承、多态等。

6.第六章:异常处理,介绍异常的概念和处理机制。

7.第七章:文件操作,介绍文件的读写和操作。

8.第八章:综合案例,使用Java解决实际问题。

三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。

具体如下:1.讲授法:用于讲解Java的基本语法、数据结构、控制流程等知识。

2.讨论法:用于探讨面向对象编程的理念,引导学生主动思考。

3.案例分析法:通过分析实际案例,使学生掌握Java编程解决实际问题的方法。

4.实验法:安排上机实验,让学生动手实践,巩固所学知识。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《Java编程思想》2.参考书:《Java核心技术》3.多媒体资料:教学PPT、视频教程等。

4.实验设备:计算机、网络环境等。

五、教学评估本课程的评估方式包括平时表现、作业、考试等,旨在全面、客观、公正地反映学生的学习成果。

连连看课程设计java

连连看课程设计java

连连看课程设计java一、课程目标知识目标:1. 掌握Java基本语法和数据类型,理解变量和常量的概念;2. 学会使用Java中的控制结构,包括条件语句和循环语句;3. 了解Java中的数组及其应用,能够编写简单的数组操作程序;4. 理解面向对象编程的基本概念,掌握类的定义、方法和属性的使用。

技能目标:1. 能够运用所学知识,设计并实现“连连看”游戏的基本功能;2. 培养编程思维,提高问题分析能力和解决问题的能力;3. 学会使用Java集成开发环境(IDE),熟练编写、调试和运行Java程序。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习主动性和积极性;2. 培养学生的团队合作意识,学会与他人共同解决问题;3. 培养学生严谨、认真的学习态度,养成良好的编程习惯。

本课程针对初中年级学生,充分考虑了学生的认知水平、兴趣和实际需求。

课程内容紧密联系教材,以“连连看”游戏为载体,将Java编程知识融入到实际项目开发中,提高学生的实践能力。

通过本课程的学习,期望学生能够掌握Java编程的基本知识,培养编程思维,提高解决问题的能力,同时形成积极、严谨的学习态度。

二、教学内容1. Java基本语法和数据类型:变量定义与使用,数据类型(整型、浮点型、字符型、布尔型)。

2. 控制结构:条件语句(if-else、switch),循环语句(for、while、do-while)。

3. 数组:数组的定义和初始化,数组的基本操作(遍历、排序、查找)。

4. 面向对象编程基础:类的定义,方法(构造方法、实例方法),属性。

5. “连连看”游戏设计与实现:- 游戏规则和界面设计;- 游戏逻辑实现:随机生成图案,配对消除;- 用户交互:鼠标点击事件处理;- 游戏胜负判定。

教学内容依据教材章节进行组织,分为基础知识和项目实践两部分。

基础知识部分按照以下顺序展开:1. 第1章:Java概述和开发环境配置;2. 第2章:Java基本语法和数据类型;3. 第3章:控制结构;4. 第4章:数组;5. 第5章:面向对象编程基础。

java数字连连看课程设计

java数字连连看课程设计

java数字连连看课程设计一、课程目标知识目标:1. 让学生掌握Java基本数据类型及其运算规则,特别是整数和浮点数的表示和使用。

2. 使学生能够运用循环和条件语句实现数字的排序和查找,解决数字连连看游戏中的逻辑问题。

3. 让学生理解二维数组在表示游戏面板中的应用,并能灵活运用。

技能目标:1. 培养学生编写和调试Java程序的能力,通过数字连连看游戏的开发,提升编程技能。

2. 培养学生分析问题、解决问题的能力,特别是在面对逻辑复杂问题时,能够设计合理的算法。

3. 培养学生的创新思维能力,鼓励他们在游戏设计中加入个人特色。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发他们主动探索新技术的欲望。

2. 培养学生良好的团队协作精神,使他们能够在小组合作中发挥个人优势,共同完成任务。

3. 培养学生面对困难和挑战时的积极态度,增强他们克服困难的信心。

课程性质:本课程为实践性较强的学科课程,结合Java编程知识,以数字连连看游戏为载体,锻炼学生的编程能力和逻辑思维能力。

学生特点:学生处于初中年级,具备一定的Java编程基础,对游戏设计充满兴趣,喜欢动手实践。

教学要求:注重理论与实践相结合,引导学生通过动手实践掌握Java编程技能,培养他们解决问题的能力。

在教学过程中,关注学生的个体差异,提供个性化指导,确保每位学生都能在课程中取得进步。

二、教学内容1. Java基本数据类型:回顾整数类型(byte、short、int、long)、浮点数类型(float、double)的基本概念和使用方法,强调数据类型在数字连连看游戏中的应用。

教材章节:第3章“Java的基本数据类型”2. 控制结构:讲解循环(for、while)和条件语句(if-else、switch)在数字排序和查找中的应用。

教材章节:第4章“Java的控制结构”3. 二维数组:介绍二维数组的概念,演示如何使用二维数组来表示游戏面板上的数字,以及如何进行遍历、访问和修改。

java课程设计连连看

java课程设计连连看

java课程设计连连看一、教学目标本课程的目标是让学生掌握Java编程的基础知识,能够运用Java语言编写简单的程序。

具体分为以下三个部分:1.知识目标:学生需要了解Java语言的基本语法、数据类型、控制结构、类与对象等基本概念。

2.技能目标:学生能够使用Java语言编写简单的控制台应用程序,掌握基本的编程技巧。

3.情感态度价值观目标:培养学生对编程的兴趣,使其认识到编程在现代社会的重要性,培养学生的创新精神和团队合作意识。

二、教学内容教学内容主要包括Java语言的基本语法、数据类型、控制结构、类与对象等。

具体安排如下:1.第一章:Java语言概述,介绍Java语言的起源、特点和应用领域。

2.第二章:基本语法,讲解Java语言的基本语法规则,包括变量、常量、运算符等。

3.第三章:数据类型,介绍Java语言的数据类型系统,包括整数类型、浮点类型、字符类型等。

4.第四章:控制结构,讲解Java语言的控制结构,包括条件语句、循环语句等。

5.第五章:类与对象,介绍Java语言的面向对象编程思想,包括类的定义、对象的创建、方法的重载等。

三、教学方法为了激发学生的学习兴趣和主动性,我们将采用多种教学方法,包括:1.讲授法:讲解基本概念和语法规则,让学生掌握Java语言的基础知识。

2.案例分析法:通过分析实际案例,让学生了解Java语言的应用场景,提高编程能力。

3.实验法:让学生动手编写程序,巩固所学知识,培养实际操作能力。

四、教学资源我们将提供丰富的教学资源,包括:1.教材:《Java编程入门》,为学生提供系统的学习材料。

2.参考书:《Java核心技术》,为学生提供深入学习的参考。

3.多媒体资料:PPT、视频教程等,帮助学生更好地理解知识点。

4.实验设备:计算机、网络等,为学生提供实践操作的环境。

五、教学评估为了全面、客观地评估学生的学习成果,我们将采取以下评估方式:1.平时表现:通过课堂参与、提问、讨论等方式,评估学生的学习态度和积极性。

java实现连连看课程设计

java实现连连看课程设计

java实现连连看课程设计一、课程目标知识目标:1. 掌握Java编程语言的基本语法和结构;2. 理解面向对象编程思想,能够运用类和对象进行程序设计;3. 学会使用Java中的数组存储和管理数据;4. 掌握Java图形用户界面编程,实现连连看游戏的界面设计和布局。

技能目标:1. 能够运用所学知识,独立完成连连看游戏的编写和调试;2. 提高问题分析能力,学会将实际问题转化为计算机程序;3. 培养逻辑思维和编程实践能力,提高编程效率。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习积极性;2. 培养学生的团队协作精神,学会与他人合作解决问题;3. 增强学生的自信心,勇于面对挑战,克服困难;4. 培养学生严谨、细心的学习态度,养成良好的编程习惯。

课程性质:本课程为信息技术学科的一节实践性课程,结合连连看游戏的开发,让学生在实践中掌握Java编程知识。

学生特点:学生处于八年级,具备一定的信息技术基础,对编程有一定的了解,但实践经验不足。

教学要求:注重理论与实践相结合,充分调动学生的积极性,引导学生主动参与课堂讨论和实践操作。

通过完成连连看游戏项目,培养学生的编程能力和解决问题的能力。

在教学过程中,关注学生的个体差异,给予个性化指导,确保每个学生都能达到课程目标。

将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. Java基本语法与结构复习:回顾变量、数据类型、运算符、控制语句等基础知识,确保学生具备编写Java程序的基础能力。

教材章节:第一章 Java语言概述及基础语法。

2. 面向对象编程:介绍类与对象的概念,理解封装、继承、多态等面向对象特性,并通过实例演示如何运用。

教材章节:第二章 面向对象编程。

3. 数组的使用:讲解数组的定义、初始化、遍历和应用,为游戏数据存储打下基础。

教材章节:第三章 数组与字符串。

4. Java图形用户界面编程:介绍Swing库的基本组件,重点讲解容器、布局管理器和事件处理机制。

java课程设计报告连连看

java课程设计报告连连看

java课程设计报告连连看一、课程目标知识目标:1. 学生能掌握Java基础语法,包括变量声明、数据类型、运算符和表达式。

2. 学生能理解并运用基本的控制结构,如顺序结构、分支结构和循环结构。

3. 学生能掌握数组的使用,包括一维数组、二维数组的定义和操作。

4. 学生能理解面向对象编程的基本概念,如类、对象、封装、继承和多态。

技能目标:1. 学生能运用所学知识设计并实现一个简单的“连连看”游戏,展示其逻辑思维和编程能力。

2. 学生通过编写代码,培养解决问题的能力,学会分析问题、设计算法和数据结构。

3. 学生能使用调试工具检查并修正程序中的错误,提高程序调试能力。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习Java的热情,树立学习信心。

2. 学生养成合作学习、团队协作的良好习惯,培养沟通能力和团队精神。

3. 学生认识到编程对解决实际问题的价值,提高对信息技术的认识,培养创新意识和实践能力。

课程性质:本课程为实践性较强的学科,结合理论知识与实际操作,培养学生的编程能力和逻辑思维。

学生特点:学生为初中年级,具备一定的逻辑思维和数学基础,对新鲜事物充满好奇,但注意力容易分散,需要激发学习兴趣。

教学要求:结合学生特点,教师应注重启发式教学,引导学生主动探索,关注个体差异,提高学生的实践操作能力和创新能力。

通过本课程的学习,使学生能够将所学知识应用于实际编程中,达到学以致用的目的。

后续教学设计和评估将围绕以上课程目标展开,确保学生达到预期学习成果。

二、教学内容1. Java基础语法- 变量声明与赋值- 数据类型与转换- 运算符与表达式- 顺序结构程序设计2. 控制结构- 分支结构(if、if-else、switch)- 循环结构(for、while、do-while)3. 数组- 一维数组的使用- 二维数组的使用4. 面向对象基础- 类的定义与对象创建- 封装(私有化属性、公有方法)- 继承与多态5. 游戏设计- “连连看”游戏规则与逻辑- 界面设计与实现- 程序流程控制教学大纲:第一周:Java基础语法学习,包括变量声明、数据类型、运算符和表达式。

数字连连看java课程设计

数字连连看java课程设计

数字连连看java课程设计一、教学目标本节课的学习目标包括:知识目标:学生能够理解数字连连看Java程序的基本原理和实现方法,掌握Java编程的基本语法和流程控制语句。

技能目标:学生能够独立完成数字连连看Java程序的编写和调试,提高编程能力和问题解决能力。

情感态度价值观目标:学生能够体验到编程的乐趣,培养对计算机科学的兴趣和热情,增强自信心和团队合作意识。

二、教学内容本节课的教学内容主要包括:1.数字连连看Java程序的基本原理和实现方法。

2.Java编程的基本语法和流程控制语句。

3.数字连连看Java程序的编写和调试。

4.导入:介绍数字连连看游戏的基本玩法,引导学生思考如何用Java程序实现。

5.原理讲解:讲解数字连连看Java程序的基本原理和实现方法。

6.语法讲解:讲解Java编程的基本语法和流程控制语句。

7.编程实践:学生独立完成数字连连看Java程序的编写和调试。

8.总结与拓展:总结本节课所学内容,提出拓展问题和思考。

三、教学方法本节课的教学方法包括:1.讲授法:讲解数字连连看Java程序的基本原理和实现方法,以及Java编程的基本语法和流程控制语句。

2.讨论法:引导学生进行小组讨论,共同解决问题和总结经验。

3.案例分析法:分析数字连连看Java程序的案例,让学生理解编程的实际应用。

4.实验法:学生独立完成数字连连看Java程序的编写和调试,提高编程能力。

四、教学资源本节课的教学资源包括:1.教材:提供数字连连看Java程序的相关知识和Java编程的基本语法和流程控制语句。

2.参考书:提供更深入的Java编程知识和技巧。

3.多媒体资料:提供数字连连看Java程序的示例和教学视频,帮助学生更好地理解和掌握知识。

4.实验设备:提供计算机和编程环境,让学生能够实际操作和实践编程。

五、教学评估本节课的教学评估方式包括:1.平时表现:评估学生在课堂上的参与程度、提问回答情况等,占总评的30%。

2.作业:评估学生完成作业的质量和速度,占总评的30%。

连连看java课程设计

连连看java课程设计

连连看java课程设计一、课程目标知识目标:1. 理解Java语言的基本语法和程序结构;2. 掌握连连看游戏的逻辑设计和实现方法;3. 学会使用Java编程解决实际问题。

技能目标:1. 能够运用Java语言编写连连看游戏的界面和功能;2. 能够运用条件语句和循环语句实现游戏逻辑;3. 能够运用数组管理游戏数据,提高编程能力。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习积极性;2. 培养学生解决问题的能力,增强自信心;3. 培养学生团队协作意识,提高沟通能力。

课程性质:本课程为实践性较强的Java编程课程,通过设计并实现连连看游戏,让学生在实践中掌握Java编程技能。

学生特点:学生具备一定的Java基础,对编程感兴趣,喜欢动手实践。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,以学生为主体,充分调动学生的积极性和创造性。

将课程目标分解为具体的学习成果,以便于后续教学设计和评估。

二、教学内容1. Java基本语法复习:变量、数据类型、运算符、控制结构;2. 面向对象基础:类与对象、构造方法、成员变量、成员方法;3. 数组的使用:声明、初始化、遍历、排序;4. Java Swing图形用户界面:窗体、按钮、标签、布局管理器;5. 事件处理机制:事件监听器、事件适配器;6. 连连看游戏逻辑设计:游戏规则、数据存储、界面设计;7. 游戏功能实现:随机生成、匹配消除、计分与计时;8. 游戏测试与优化:功能测试、性能优化、用户体验。

教学内容安排与进度:第一课时:Java基本语法复习,面向对象基础;第二课时:数组的使用,Java Swing图形用户界面;第三课时:事件处理机制,连连看游戏逻辑设计;第四课时:游戏功能实现,测试与优化。

教学内容与教材关联:本教学内容与《Java编程思想》第四章至第七章内容相关,涉及基本语法、面向对象、数组和Swing图形用户界面等方面的知识。

通过本章节学习,学生能够将所学理论知识运用到实际项目中,提高编程实践能力。

Java课程设计连连看游戏(含代码)

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]. 电子工业出版社, 2004,47-125.[4](美)Mark Linsenbardt. JSP在数据库中的应用与开发[M]. 希望电子出版社,2005,210-236.[5] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2004, 79-86.[6](美)Karl Avedal,Danny Ayers,Timothy Briggs.JSP编程指南[M].电子工业出版社,2006,47-125.[7] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2005, 79-86.[8] Altendorf. Eric, Hohman. Moses, Zabicki. Roman. Using J2EE on a large,web-based project[J]. IEEE Software.2002,19(02):81-89.摘要当今社会,休闲型游戏越来越得到人们的喜爱,我所做的毕业设计实例“连连看游戏的设计与实现”是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手。

课程设计报告Java实现游戏连连看(有源代码)

课程设计报告Java实现游戏连连看(有源代码)

2.4流程图如下图2 主函数流程图图3 游戏进行流程图图4 使用炸弹流程图图5 计算时间流程图图6 开始游戏后画面用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作。

如果用户选择的是相同的图片(如第八行第二列和第八行第三列),那么系统会消除这两张图片,并使鼠标记数为0,并消除这两张图片的标记,使里面的图片被标记在外面。

以便用户可以进行以后的选择。

图7 消除三对后画面用户也可使通过使用“炸弹”功能进行消除图片。

方法是点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片(如第一行第一列河第一行第四列)。

图8 使用炸弹后画面炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。

并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。

图9 炸弹使用光后画面当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有图片时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败。

图10 时间到时的画面当用户点击确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面。

图11 点击确定时的画面如果在时间未到时,用户使所有的图片都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面。

图12 通关画面4.设计体会通过这次课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

因而,通过课程设计之后,把以前所学过的知识重新温故。

有些在设计过程中已解决,有些还有待今后慢慢学习,只要认真学就会有更多的收获。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录第一章引言 (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张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。

图片全部消完为游戏成功。

游戏还将设置退出,再来一局的按钮,并实现该功能,方便用户进行操作。

1.1课程设计内容(1)游戏计分功能当消去两个相同的图片后分数将增加100分。

(2)退出功能该功能有一个“退出”按钮,当按下“退出”按钮后,将直接退出游戏。

(3)成功完成任务时显示的该功能有,恭喜成功,一个“再来一局”的按钮,当按下“再来一局”按钮后,图片将会重新排列,重新开始游戏。

(4)游戏倒计时功能在游戏界面的上方有一个倒计时的进度条,增加游戏的难度,激发玩家的挑战兴趣。

第二章系统介绍1.连连看游戏规则1.1游戏基本规则用鼠标左键点击方块,将2个图案相同的方块用连线连接起来,连接线不多于3根直线,连接后方块就会消失。

在规定的时间内将30张图片全部消除。

1.2操作规则选择一个图片用鼠标左键点击,图片会变色,然后点击另一个同样图片,如果能够连线就成功消失,如果不能连线,第一次选择的图片就会失效,然后将继续寻找符合规则的图片。

1.3胜利和失败把所有的图片成功消除完毕,则认为是本次游戏成功。

选择图片时间是有限的,在规定的时间内,若未能将图片全部消除,则失败,提醒是否再来一局。

2.游戏流程图分析流程图分析如下图2.1所示:图2.1游戏流程图此次设计所使用的语言为Java。

主要应用到Swing组件,Java小程序,事件及接口等。

这些接口为游戏的制作提供了便捷的条件,本系统的主要特点就是运用Swing组件和事件处理技术,进行界面的绘制,鼠标的操作,以及积分的显示等功能。

这次通过连连看的设计开发将对理解Swing组件技术以及事件处理技术在游戏方面的应用起到很大的帮助作用,同时为掌握Java编程技术及二维休闲游戏设计的一般方法打下坚实的基础。

游戏程序设计一般都采用面向对象的设计模式,提供了一个简单的图像显示接口,利用多文档视图结构的面向对象设计模式。

第三章系统游戏设计1.系统分析1.1游戏系统需求分析主要设计目标:使用GUI设计连连看,载入图片信息,进行正确分析系统的功能,总载入30张图片,且图片信息成对出现,且可以偶数项删除,并具有计时等功能游戏中将有“退出”功能,选择退出命令后程序将终止执行,关闭窗口。

还将有“再来一局”功能,选择再来一局命令后程序将对图片重新排列,重新开始游戏。

该游戏还有一个时间倒计时的进度条,提醒玩家剩余的时间,增加游戏的难度。

在界面的顶部有计分功能,当玩家消去图片后就会赢得相应的分数。

1.2系统开发及运行环境硬件平台:本游戏对硬件要求较低,基本都可以正常运行。

软件平台:操作系统:Windows系列。

开发工具包:JDK Version1.6.2。

1.3系统功能主要要求1.系统采用图片连连看方式.界面美观,用户使用灵活,方便快捷.2.计分自动完成,提高工作效率。

3.用进度条进行游戏界面的计时功能。

4.可方便快捷地进行下一盘游戏,并且两盘的分数在规定的时间内会叠加起来。

5.操作员可以随时退出游戏。

6.对用户输入的信息,系统进行严格的信息检验,尽可能排除人为的错误。

7.系统最大限度地实现了易维护性和易操作性。

8.系统运行稳定、安全可靠。

2.系统总体结构连连看是基于java基本知识设置的一个小游戏,最中间有连连看的主体构成——连连看图片,上面有计分、时间条,下面有退出、再来一局按键。

一个标准的连连看系统应该包括以下几大功结构:1、鼠标操作模块;2、图像处理模块;3、菜单模块;4、显示模块。

3. 系统各模块功能介绍系统各功能模块实现的功能为鼠标操作模块:玩家在玩游戏时需要运用鼠标与游戏系统进行交互,这个模块的实现是运用鼠标事件触发的,在连连看的游戏场景中运用鼠标进行交互的事件主要有两个,一个是用户点击游戏场景中的图片时触发的事件。

另外一种是用户点击菜单栏上的菜单按钮时说触发的鼠标事件。

当用户点击游戏场景中的图像块时就会响应鼠标的OnLButtonDown事件,然后进行相应的逻辑判断。

当用户点击菜单栏上的菜单命令时就会触发相应的菜单命令对应的相应的事件。

图像处理模块: 程序运行后,用户通过游戏菜单的开始命令进入游戏,在这个模块里要把资源文件中的图片进行处理然后加载到游戏场景中这在程序中是通过DrawMap()方法实现的。

其中用到的API函数主要是是BitBlt,他的主要功能是将某一内存块的数据传送到另一内存块,前一内存块被称为"源",后一内存块被称为"目标"图象程序开发者使用Blit的函数在内存中将某页面上的一幅位图经过一定的变换转移到另一个页面上。

菜单模块: 玩家在游戏游戏过程中随时可以通过选择不同的菜单命令来进行相应的操作,菜单的制作是通过MFC框架中多文档程序的菜单栏来添加的,菜单包含一下几个部分:(1)游戏菜单中的开始、放弃和退出命令。

界面显示模块: 游戏场景中界面的显示包括以下部分:游戏计分,剩余时间、游戏主场景,游戏完成提示界面。

这些显示信息会随着游戏的进行而动态改变。

在连连看游戏中。

整个连连看游戏的系统是在VC++6.0开发环境中进行开发的,开发过程中大量的使用了微软提供的API接口方法,减少了程序代码的编写量、提高了编程效率。

第四章系统的具体实现1.系统主要运行界面1.1运行界面运行界面如下图4.1所示:图4.1运行界面1.2执行界面,进入游戏正常运行执行界面如下图4.2所示:图4.2执行界面1.3时间到界面时间到界面如下图4.3所示:图4.3时间到界面1.4赢家界面游戏运行成功界面如下图4.4所示:图4.4游戏运行成功界面1.5进度条界面程序运行进度条如下图4.5所示:图4.5程序运行进度条2.游戏实现代码2.1主面板内所需要的组件的声明主面板内所需要的组件的声明代码如下图4.6所示:图4.6组件声明2.2填充一个矩形框,进行显示时间填充一个矩形框,进行显示时间代码如下图4.7所示:图4.7填充矩形框显示时间2.3主面板及各组件初始化主面板及各组件初始化如下图4.8所示:图4.8主面板及各组件初始化2.4创建时间对象,每隔100毫秒刷新一次创建时间对象,每隔100毫秒刷新一次代码如下图4.9所示:图4.9创建时间对象2.5分数代码。

每消除一对图片,则分数加上100。

代码如下图4.10所示:图4.10 分数代码3.消除图片具体情况当点击两个按钮的图片一样时,运用消去算法来判断是否可消去,具体情况如下:3.1两次点击相同图片相邻当两次点击的相同图片相邻时,如下图4.11所示,则消去。

图4.11 点击图片相邻3.2水平方向消去算法当两次点击的相同图片如下图4.12所示,则在水平方向用循环算法for (j = 0; j < 7; j++)判断,设第一次选中按钮坐标为x0 , y0,第二次选中按钮坐标为x , y,则先找到grid(x0,j)为0的j,再判断x水平方向x到j是否grid(x,j)都为0,若是则判断x0水平方向x0到j是否grid(x0,j)都为0,若是,则再判断x和x0,若相等消去,若不等判断在j竖直方向上是否grid(n,j)(n为x到x0之间的数)都为0,若是则消去。

图4.12水平消去算法图片3.3竖直方向消去算法竖直方向消去算法。

情况与水平方向基本相同,重点提一下图片4.13所示的情况,其余情况不再重复描述。

出现下图情况则会消去,消去原理与水平方向消去算法相似。

图4.13竖直消去算法图片第五章程序清单package c02;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*;import javax.swing.*;class MyPanel extends JPanel {int cnt = 0;public void paint(Graphics g) {super.paint(g);g.setColor(Color.red);g.fillRect(this.getWidth() - cnt, 0, cnt, this.getHeight()); //填充一个矩形区域}public boolean isEnd() {if (cnt++ > this.getWidth())return true;repaint();return false;}}public class LianLianKan implements ActionListener {JFrame mainFrame; // 主面板MyPanel time;JPanel centerPanel, southPanel, northPanel; // 3个子面板JButton diamondsButton[][] = new JButton[6][5];// 游戏按钮数组JButton exitButton, newlyButton; // 退出,重新开始按钮JLabel scoreLable; // 分数标签JButton firstButton, secondButton; // 分别记录两次被选中的按钮Timer timer;int grid[][] = new int[8][7];// 储存游戏按钮位置static boolean pressInformation = false; // 判断是否有按钮被选中int sum=0;int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0, secondMsg = 0; // 游戏按钮的位置坐标int i, j, k, n;// 消除方法控制// =============调用图片================//private static Icon icons[] = new ImageIcon[6 * 5]; //静态数组icons【】用于存放图片绝对地址private static final String imgDir = "f:/meng";static {try{File dir = newFile(imgDir);File[] imgFiles =dir.listFiles(new FilenameFilter() { //获取f:/meng文件中的图片public boolean accept(File dir, String name) {returnname.toLowerCase().endsWith(".jpg");}});for (int i = 0; i < 6 * 5; i++) { //获取f:/meng文件中的图片的绝对路径放在icons数组中icons[i] = new ImageIcon(imgFiles[i].getAbsolutePath());//System.out.println(i+" "+icons[i]);}} catch (Exception e) {e.printStackTrace();// 异常处理}}public void init() { //初始化面板mainFrame = new JFrame("JKJ 连连看");// 设置主面板的名称为"JKJ连连看"mainFrame.setDefaultCloseOperation(JF rame.EXIT_ON_CLOSE);// 结束窗体所在的应用程序mainFrame.setLayout(new BorderLayout()); // 设置为BorderLayout()布局scoreLable= new JLabel("0");centerPanel = new JPanel();// 设置面板southPanel = new JPanel();northPanel = new JPanel();northPanel.setLayout(new BorderLayout()); //设置时间分数面板布局为边界布局mainFrame.add(centerPanel, "Center"); // 添加组件mainFrame.add(southPanel, "South");mainFrame.add(northPanel, "North");centerPanel.setLayout(new GridLayout(6, 5));// 设置一个6*5的网格布局for (int cols = 0; cols < 6;cols++) {for (int rows = 0; rows < 5; rows++) {// ===========设置图片=============//diamondsButton[cols][rows] = new JButton(icons[grid[cols + 1][rows + 1]]);diamondsButton[cols][rows].addActionL istener(this);centerPanel.add(diamondsButton[cols][ro ws]);}}exitButton = new JButton("退出");// 退出按钮exitButton.addActionListener(this);newlyButton = new JButton("再来一局");// 再来一局按钮newlyButton.addActionListener(this);southPanel.add(exitButton);// 添加退出按钮southPanel.add(newlyButton);// 添加再来一局按钮scoreLable.setText(String.valueOf(Intege r.parseInt(scoreLable.getText())));time = new MyPanel();northPanel.add(time, BorderLayout.CENTER); //时间-分数面板上在CENTER位置添加时间northPanel.add(scoreLable, BorderLayout.WEST); //时间-分数面板上在WEST位置添加分数LablemainFrame.setSize(500, 450); // 设置主面板的大小mainFrame.setLocationRelativeTo(null); //设置窗口在屏幕中间显示mainFrame.setVisible(true);//设置窗口可见}public void startt(){timer = new Timer(10, this);//创建时间对象,每隔100毫秒计时一次。

相关文档
最新文档