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课程设计一、课程目标知识目标: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课程设计一、课程目标知识目标: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连连看课程设计一、课程目标知识目标: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小游戏(连连看)设计课程名称智能手机程序设计| |专业班级:信息工程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语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为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代码课程设计一、课程目标知识目标: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语言编写简单的连连看游戏。
通过本课程的学习,学生应达到以下目标:1.知识目标:–理解Java语言的基本语法和编程概念;–掌握面向对象编程的基本思想和方法;–了解常用的数据结构和算法。
2.技能目标:–能够使用Java语言编写简单的程序;–能够运用面向对象编程思想解决实际问题;–能够独立完成连连看游戏的设计和实现。
3.情感态度价值观目标:–培养学生的编程兴趣和自信心;–培养学生解决问题的能力和创新精神;–培养学生团队协作和沟通交流的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.Java语言基础:介绍Java语言的基本语法、数据类型、运算符、控制结构等。
2.面向对象编程:讲解类的定义、属性、方法、继承、多态等概念,并引导学生学会使用面向对象的思想解决问题。
3.常用数据结构和算法:介绍数组、链表、栈、队列等基本数据结构,以及排序、查找等常用算法。
4.连连看游戏设计与实现:引导学生运用所学知识设计和实现一个简单的连连看游戏,包括游戏界面设计、逻辑处理、算法实现等。
三、教学方法本课程采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解基本概念、语法和算法,引导学生掌握知识要点。
2.案例分析法:通过分析实际案例,让学生学会运用所学知识解决实际问题。
3.实验法:学生动手编写代码,实践所学知识,培养编程能力和解决问题的能力。
4.小组讨论法:学生分组讨论,共同完成游戏设计,培养团队协作和沟通交流的能力。
四、教学资源本课程所需教学资源包括:1.教材:《Java编程入门》或其他同类教材;2.参考书:《Java核心技术》等;3.多媒体资料:PPT、教学视频等;4.实验设备:计算机、网络等。
教学资源应支持教学内容和教学方法的实施,丰富学生的学习体验,提高学习效果。
五、教学评估为了全面、客观地评估学生的学习成果,本课程采用以下评估方式:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,以反映学生的学习态度和积极性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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毫秒计时一次。