[工学]面向对象java版课程设计报告.doc

上传人:sccc 文档编号:4531793 上传时间:2023-04-26 格式:DOC 页数:32 大小:141KB
返回 下载 相关 举报
[工学]面向对象java版课程设计报告.doc_第1页
第1页 / 共32页
[工学]面向对象java版课程设计报告.doc_第2页
第2页 / 共32页
[工学]面向对象java版课程设计报告.doc_第3页
第3页 / 共32页
[工学]面向对象java版课程设计报告.doc_第4页
第4页 / 共32页
[工学]面向对象java版课程设计报告.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《[工学]面向对象java版课程设计报告.doc》由会员分享,可在线阅读,更多相关《[工学]面向对象java版课程设计报告.doc(32页珍藏版)》请在三一办公上搜索。

1、课程设计课程设计任务书学 院信息学院专 业工程电子信息学生姓名吴才奇班级学号1103030429课程设计题目基于Java的魔板游戏软件设计实践教学要求与任务:采用java技术设计魔板游戏软件,设计要求如下:(1) 魔板由3*3或4*4个格子组成。对于3*3魔板,在前8个格子里随机放置8个编号18的方块,最后一个格子是未放置方块的空格子;对于4*4的魔板,在前15个格子里随机放置15个编号115的方块,最后一个格子是未放置方块的空格子。(2) 用鼠标单击任何与格子水平或垂直相邻的方块就可以把该方块移入空格子,而当前方块移动之前所在的格子成为空格子。通过不断地移动方块可以将方块一行一行地按数顺序排

2、好。(3) 魔板游戏也可以使用图像来代替数字。例如,对于3*3的魔板,将一幅图像分成3*3个小图像,除去最后一幅小图像(图像的右下角),将其余的各幅小图像打乱顺序后放在魔板的方块上,最终目标是通过移动方块回复原始图像(不包括图像的右下角)。(4) 当用户按要求排列好方块后,程序弹出对话框,提示用户成功的消息。(5) 模板游戏分为两个级别,用户可以通过界面上提供的菜单来选择“初级”或“高级”两个级别。对于“初级”级别,魔板由3*3个格子组成;对于“高级”级别,魔板由4*4个格子组成。“模板游戏”提供一幅默认图像,用户可以使用该图像来玩魔板游戏。用户也可以使界面提供的菜单选择一幅新图像,然后使用这

3、个新的图像来玩魔板游戏。 工作计划与进度安排: 第18周:布置课程设计任务,查阅资料,分组设计,程序调试。 第19周:程序调试,编写课程设计报告,验收,答辩。指导教师: 2012年 月 日专业负责人: 2012年 月 日学院教学副院长: 2012年 月 日一、设计目的()二、总体设计三、关键技术()四、程序流程 () 五、主要源代码总体设计在设计魔板游戏时,需要编写7java源文件:、 PuzzlePad.java、Point.java、Block.java、HandleImage.java、VerifySuccess.java和HandleMove.java。魔板游戏除了需要编写的上述7个j

4、ava源文件所给出的类外,还需要java系提供的一些重要的类,如JMenuItem、JButton、和JRadioButton 等类。魔板游戏所用到的一些重要的类以及之间的组合关系如图所示。1PuzzleGame.java(主类)PuzzleGame.java类负责创建魔板游戏的主窗口,该类含有main方法,程序从该类开始执行。PuzzleGame.java类的成员变量中有4种重要类型的对象:PuzzlePad 、JMenu、JRadioButton和JButton。2.PuzzlePad.java PuzzlePad类创建的对象是PuzzleGame类最重要的成员之一,代表“魔板”。该类的成

5、员变量中雨5种重要类型的对象:Point、Block、HandleMove、HandleImage和Image。3.Block.javaBlock类是JTextField的一个子类,创建的对象是PuzzlePad类的重要成员之一用来表示“魔板”中的“方块”。4.Point.javaPoint类负责创建确定位置的对象,使用Point对象可以确定Block对象在PuzzlePad对象中的位置,即确定“方块”在“魔板”中的位置。5.HandleImage.javaHandleImage类所创建的对象负责将一幅图像分成若干个小图像。6.HandleMove.javaHandleMove类所创建的对象负

6、责处理鼠标事件。7.VerifySuccess.javaVerifySuccess类所创建的对象负责验证用户是否按要求成功排列魔板中的方块。三、关键技术 四、程序流程 制作菜单JMenu制作单选框JRadioButton添加按钮JButton制作魔板PuzzlePadPointBlockHandleMoveImageHandleImageVerifySuccess五、主要源代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import javax.swing.filechooser

7、.*;public class PuzzleGame extends JFrame implements ActionListener PuzzlePad puzzlePad; JMenuBar bar; JMenu gradeMenu,choiceImage; JMenuItem oneGrade,twoGrade,newImage,defaultImage; JRadioButton digitPlay,imagePlay; ButtonGroup group=null; JButton startButton; Image image; Toolkit tool; public Puzz

8、leGame() tool=getToolkit(); bar=new JMenuBar(); gradeMenu=new JMenu(选择级别); choiceImage=new JMenu(选择图像); oneGrade=new JMenuItem(初级); twoGrade=new JMenuItem(高级); newImage=new JMenuItem(选择一幅新图像); defaultImage=new JMenuItem(使用默认图像); gradeMenu.add(oneGrade); gradeMenu.add(twoGrade); choiceImage.add(newIm

9、age); choiceImage.add(defaultImage); bar.add(gradeMenu); bar.add(choiceImage); setJMenuBar(bar); oneGrade.addActionListener(this); twoGrade.addActionListener(this); newImage.addActionListener(this); defaultImage.addActionListener(this); startButton=new JButton(开始); startButton.addActionListener(this

10、); group=new ButtonGroup(); digitPlay=new JRadioButton(数字玩法,true); imagePlay=new JRadioButton(图像玩法,false); group.add(digitPlay); group.add(imagePlay); puzzlePad=new PuzzlePad(); puzzlePad.setGrade(1); puzzlePad.setIsDigitPlay(); add(puzzlePad,BorderLayout.CENTER); JPanel pNorth=new JPanel(); pNorth.

11、add(digitPlay); pNorth.add(imagePlay); pNorth.add(startButton); pNorth.add(new JLabel(如果图像不能立刻显示,请再单击一次按扭); add(pNorth,BorderLayout.NORTH); add(puzzlePad.getHandleMove(),BorderLayout.SOUTH); validate(); setVisible(true); setBounds(100,50,550,380); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try

12、image=tool.createImage(new File(dog.jpg).toURI().toURL(); puzzlePad.setImage(image); catch(Exception exp) public void actionPerformed(ActionEvent e) if(e.getSource()=startButton) if(digitPlay.isSelected() puzzlePad.setIsDigitPlay(); else if(imagePlay.isSelected() puzzlePad.setImage(image); puzzlePad

13、.setIsImagePlay(); else if(e.getSource()=oneGrade) puzzlePad.setGrade(1); else if(e.getSource()=twoGrade) puzzlePad.setGrade(2); else if(e.getSource()=newImage) FileNameExtensionFilter filter = new FileNameExtensionFilter( JPG & GIF Images, jpg, gif); JFileChooser chooser=new JFileChooser(); chooser

14、.setFileFilter(filter); int state=chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) try image=tool.createImage(file.toURI().toURL(); puzzlePad.setImage(image); catch(Exception exp) else if(e.getSource()=defaultImage) try image=tool.cr

15、eateImage(new File(dog.jpg).toURI().toURL(); puzzlePad.setImage(image); catch(Exception exp) public static void main(String args) new PuzzleGame(); import javax.swing.*;import java.awt.*;public class Block extends JTextField Point point; Object object; Block() setEditable(false); setHorizontalAlignm

16、ent(JTextField.CENTER); setFont(new Font(Arial,Font.BOLD,16); setForeground(Color.blue); public void setAtPoint(Point p) point=p; public Point getAtPoint() return point; public void setObject(Object object) this.object=object; if(object instanceof Integer) Integer number=(Integer)object; setText(+nu

17、mber.intValue(); else if(object instanceof Image) repaint(); public Object getObject() return object; public void paintComponent(Graphics g) super.paintComponent(g); int w=getBounds().width; int h=getBounds().height; try g.drawImage(Image)object,0,0,w,h,this); catch(Exception exp) import java.awt.*;

18、import javax.swing.*;import java.awt.image.*;public class HandleImage extends JComponent int imageWidth,imageHeight; Toolkit tool; HandleImage() tool=getToolkit(); public Image getImages(Image image,int rows,int colums) Image blockImage=new Imagerows*colums; try imageWidth=image.getWidth(this); imag

19、eHeight=image.getHeight(this); int w=imageWidth/colums; int h=imageHeight/rows; int k=0; PixelGrabber pg=null; ImageProducer ip=null; for(int i=0;irows;i+) for(int j=0;jcolums;j+) int pixels= new intw*h; pg=new PixelGrabber(image,j*w,i*h,w,h,pixels,0,w); pg.grabPixels(); ip=new MemoryImageSource(w,h

20、,pixels,0,w); blockImagek=tool.createImage(ip); k+; catch(Exception ee) return blockImage; import java.awt.event.*;import java.awt.*;import javax.swing.*;public class HandleMove extends JPanel implements MouseListener,ActionListener Point point; int spendTime=0; javax.swing.Timer recordTime; JTextFi

21、eld showTime; VerifySuccess verify; HandleMove() recordTime=new javax.swing.Timer(1000,this); showTime=new JTextField(16); showTime.setEditable(false); showTime.setHorizontalAlignment(JTextField.CENTER); showTime.setFont(new Font(楷体_GB2312,Font.BOLD,16); JLabel hitMess=new JLabel(用鼠标单击方块,JLabel.CENT

22、ER); hitMess.setFont(new Font(楷体_GB2312,Font.BOLD,18); add(hitMess); add(showTime); setBackground(Color.cyan); public void setPoint(Point p) point=p; public void initSpendTime() recordTime.stop(); spendTime=0; showTime.setText(null); public void setVerifySuccess(VerifySuccess verify) this.verify=ver

23、ify; public void mousePressed(MouseEvent e) recordTime.start(); Block block=null; block=(Block)e.getSource(); int w=block.getBounds().width; int h=block.getBounds().height; int startI=-1,startJ=-1,endI=-1,endJ=-1; Point startPoint=block.getAtPoint(); Point endPoint=null; for(int i=0;ipoint.length;i+

24、) for(int j=0;jpoint0.length;j+) if(pointij.equals(startPoint) startI=i; startJ=j; break; for(int i=0;ipoint.length;i+) for(int j=0;jpoint0.length;j+) if(pointij.isHaveBlock()=false) endI=i; endJ=j; endPoint=pointij; break; boolean moveCondition1=Math.abs(endI-startI)=1&endJ=startJ; boolean moveCond

25、ition2=Math.abs(endJ-startJ)=1&endI=startI; if(moveCondition1|moveCondition2) block.setLocation(endPoint.getX(),endPoint.getY(); block.setAtPoint(endPoint); endPoint.setBlock(block); endPoint.setHaveBlock(true); startPoint.setHaveBlock(false); public void actionPerformed(ActionEvent e) spendTime+; s

26、howTime.setText(您的用时:+spendTime+秒); public void mouseReleased(MouseEvent e) if(verify.isSuccess() recordTime.stop(); JOptionPane.showMessageDialog(this,您成功了!,消息框, JOptionPane.INFORMATION_MESSAGE ); public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(

27、MouseEvent e)public class Point int x,y; boolean haveBlock; Block block=null; public Point(int x,int y) this.x=x; this.y=y; public boolean isHaveBlock() return haveBlock; public void setHaveBlock(boolean boo) haveBlock=boo; public int getX() return x; public int getY() return y; public boolean equal

28、s(Point p) if(p.getX()=this.getX()&p.getY()=this.getY() return true; else return false; public void setBlock(Block block) this.block=block; public Block getBlock() return block; import javax.swing.*;import java.io.*;import java.util.*;import java.awt.*;public class PuzzlePad extends JPanel Point poi

29、nt; Block block; int distance=56,grade,m=3,n=3; HandleMove handleMove; HandleImage handleImage; VerifySuccess verifySuccess; Image image; boolean isDigitPlay; public PuzzlePad() setBackground(Color.gray); setLayout(null); handleMove=new HandleMove(); handleMove.initSpendTime(); handleImage=new Handl

30、eImage(); verifySuccess=new VerifySuccess(); handleMove.setVerifySuccess(verifySuccess); public HandleMove getHandleMove() return handleMove; public void setImage(Image image) this.image=image; public void setGrade(int grade) this.grade=grade; if(grade=1) m=3; n=3; else if(grade=2) m=4; n=4; public

31、int getGrade() return grade; private void needInit() handleMove.initSpendTime(); removeAll(); point=new Pointmn; block=new Blockmn; int Hspace=distance,Vspace=distance; for(int i=0;im;i+) for(int j=0;jn;j+) pointij=new Point(Hspace,Vspace); Hspace=Hspace+distance; Hspace=distance; Vspace=Vspace+dist

32、ance; handleMove.setPoint(point); verifySuccess.setPoint(point); handleMove.setVerifySuccess(verifySuccess); int k=0; for(int i=0;im;i+) if(im-1) for(int j=0;jn;j+) blockij=new Block(); blockij.addMouseListener(handleMove); k+; else for(int j=0;jn-1;j+) blockij=new Block(); blockij.addMouseListener(

33、handleMove); k+; for(int i=0;im;i+) if(im-1) for(int j=0;jn;j+) add(blockij); blockij.setSize(distance,distance); blockij.setLocation(pointij.getX(),pointij.getY(); blockij.setAtPoint(pointij); pointij.setBlock(blockij); pointij.setHaveBlock(true); else for(int j=0;jn-1;j+) add(blockij); blockij.set

34、Size(distance,distance); blockij.setLocation(pointij.getX(),pointij.getY(); blockij.setAtPoint(pointij); pointij.setBlock(blockij); pointij.setHaveBlock(true); public void setIsDigitPlay() needInit(); isDigitPlay=true; ArrayList numberList=new ArrayList(); for(int k=0;km*n-1;k+) numberList.add(k+1); Object object=numberList.toArray(); verifyS

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号