




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础实验(2)应用系统的面向对象的设计与分析 计算机科学与技术系XX学院计算机科学与技术系实 验 报 告课程名称程序设计基础实验(2)实验项目应用系统的面向对象设计与分析实验类型综合性实验完成人所在班级指导教师完成日期2009年11月 30 日 23程序设计基础实验(2)应用系统的面向对象的设计与分析 计算机科学与技术系目 录一、实验报告简表 02二、设计内容与要求 021、设计内容 2、设计要求三、总体设计 031、需求分析2、功能描述3、设计工具与运行环境4、类及类间关系描述四、详细设计051、类图2、源代码五、实例运行及应用效果 201、魔板游戏界面2、测试游戏及输出结果六、体会与总结 24实验报告正文一实验报告简表实验课题名称魔板游戏综合性实验项目应用系统的面向对象设计与分析服务课程程序设计基础实验(2)实验小组组长指导教师参与实验人员及其在实验课题中承担的主要任务(包括组长)学 号小组成员姓名班 级在实验课题中的主要作用二设计内容与要求1、设计内容:用面向对象的Java程序设计语言开发设计GUI界面的魔板游戏程序。2、设计要求:(1)、魔板由3*3或4*4的方格组成,其中一个格子是空的。对于3*3的魔板,其他格子里随机放置8个编号为0-7的方块;对于4*4的魔板,其他格子里随即放置15个编号为0-14的方块,如果是n*n的方格原理相同。(2)、用鼠标单击任何与格子相邻的方块可以把该方块移入空格子。通过不断地移动方块,可以将方块一行一行按数字顺序依次排序。(3)、魔板游戏也可以使用图像来代替数字,对于3*3的魔板,将图像分成3*3个方块,打乱顺序后,放入魔板,并将其中一个方格置为空。最终目标是通过移动方块来恢复为原始图像。4*4的魔板与3*3的方法相似。三总体设计1、需求分析:魔板游戏就是大家以前常玩的拼板游戏!就是将一幅完整的图片分成小块,打乱顺序,再拼好,并且只能将图块和临界的空格交换位置。用最短的时间和最省的步骤将图形拼好,此玩法虽然简单,但特别考验智力,魔板游戏与魔方游戏相似属于益智游戏。此项目我们需要通过面向对象的Java程序设计来实现,游戏设计中需要用到GUI图形界面的设计,产生随机数生成打乱的图片,各种事件(动作事件、鼠标事件和窗口事件等)的响应和处理等面向对象的知识来实现游戏的各项功能。2、功能描述:我们所完成的魔板游戏可以实现基本的魔板游戏的功能。此项目魔板游戏可由用户选择3*3和4*4两个不同难度,N*N的魔板游戏原理与此相同,游戏可以通过下拉列表实现选择不同的游戏图像,增加游戏的趣味性。点击“开始游戏”按钮后可以实现游戏步骤的计数,拼图右边有一个完整的图像可以供用户参照,用鼠标单击任何与格子相邻的方块可以把该方块移入空格子。通过不断地移动方块,可以将方块一行一行按数字或图片依次拼图。若成功完成拼图(即左边的拼图与右边的参照图像一样),则有提示:“恭喜您,成功完成”的字样出现。3、设计工具与运行环境:(1)、设计工具: Editplus。(2)、运行环境:JDKj1.6.0_17,Windows XP。4、类及类间关系描述:此游戏项目创建了两个类:MobanFrame类和MobanSquare类,其中MobanFrame类调用MobanSquare类。四详细设计(包括类图及源代码)1、类图:2、源代码:MobanFrame类:import java.awt.*;import java.awt.event.*;import .*;import java.applet.Applet;import javax.imageio.ImageIO;import java.io.File;import java.awt.image.*;import javax.swing.JOptionPane;public class MobanFrame extends Frame implements ActionListener,MouseListener,ItemListenerMobanSquare position; /声明方块Point startPoint=new Point(110,120); /绘制左边图像的起始点Point rightStartPoint=new Point(450,120); /绘制右边图像的起始点int num; /存储随机数的数组Point pointMove; int totalStep=0; /总共已走的步数String selectedImage=金牛座; /当前选中的要游戏图像String gamingImage= ; /正在游戏的图像boolean startGame=false; int squareNumber=3;int level=1; /游戏等级int squareSize=80;Image sourceImage; /游戏图像的来源图像Image spaceSourceImage; /空格图像的来源图像Image spaceImage;Image myImage; /存储打乱的图像的数组Graphics2D ggg ; /*-*/*显示在界面上的一些组件*/*-*/TextField tfx;TextField tfy;MenuBar mnbMyMenuBar; Menu mnChooseLevel;MenuItem mniLevel1, mniLevel2;Label lbStep; /显示所走的步数Label lbSuccess=new Label();Button btnStartGame;Choice chChoiceImage;public MobanFrame()super(魔板游戏);pointMove=new Point4; /方块可以移动的四个方向pointMove0=new Point(-1,0);pointMove1=new Point(1,0);pointMove2=new Point(0,-1);pointMove3=new Point(0,1);setLayout(new FlowLayout();chChoiceImage=new Choice();chChoiceImage.add(金牛座);chChoiceImage.add(迈克尔乔丹);chChoiceImage.add(多啦a梦);chChoiceImage.add(射手座);chChoiceImage.add(功夫熊猫);chChoiceImage.add(蜡笔小新);chChoiceImage.add(柯南);chChoiceImage.add(小狗);chChoiceImage.add(小狗2);chChoiceImage.add(小猫);chChoiceImage.add(Baby);chChoiceImage.add(数字);mniLevel1=new MenuItem(简单);mniLevel2=new MenuItem(困难);mnChooseLevel=new Menu(难度);mnbMyMenuBar=new MenuBar();tfx=new TextField(8); tfy=new TextField(8);tfx.setText(0);tfy.setText(1);tfx.setVisible(false);tfy.setVisible(false);lbStep=new Label(已走步数: +Integer.toString(totalStep);btnStartGame=new Button(开始游戏);mnChooseLevel.add(mniLevel1);mnChooseLevel.add(mniLevel2);mnbMyMenuBar.add(mnChooseLevel);this.setMenuBar(mnbMyMenuBar);add(tfx);add(tfy);add(lbSuccess);add(lbStep);add(chChoiceImage);add(btnStartGame);mniLevel1.addActionListener(this);mniLevel2.addActionListener(this);btnStartGame.addActionListener(this);chChoiceImage.addItemListener(this);this.addMouseListener(this);addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); );ProInit();GetImage();GetRandom();setSize(800,500);setVisible(true);public void GetImage() /获取要完成的拼图,并将拼图打乱myImage=new ImagesquareNumber*squareNumber;ImageFilter cropFilter1; ImageFilter cropFilter2; ImageFilter cropFilter3;Toolkit tool=getToolkit();sourceImage=tool.createImage(selectedImage+.jpg); spaceSourceImage=tool.createImage(space.jpg);sourceImage=sourceImage.getScaledInstance(squareSize*squareNumber,squareSize*squareNumber,Image.SCALE_DEFAULT); /得到一个指定大小的图像cropFilter1 =new CropImageFilter(0,0,squareSize*squareNumber,squareSize*squareNumber);/四个参数分别为图像起点坐标和宽高,即CropImageFilter(int x,int y,int width,int height),详细情况请参考APIsourceImage=createImage(new FilteredImageSource(sourceImage.getSource(),cropFilter1);for(int i=0;isquareNumber*squareNumber;i+) /从源图像上按选择的游戏难度截取相应个数的小图像块cropFilter2 =new CropImageFilter(i%squareNumber)*squareSize,(i/squareNumber)*squareSize,squareSize,squareSize);myImagei=createImage(new FilteredImageSource(sourceImage.getSource(),cropFilter2);cropFilter3=new CropImageFilter(0,0,squareSize,squareSize);spaceImage=createImage(new FilteredImageSource(spaceSourceImage.getSource(),cropFilter3);myImagesquareNumber*squareNumber-1=spaceImage;public void ProInit()num=new intsquareNumber*squareNumber;position=new MobanSquaresquareNumber+2squareNumber+2;public void paint(Graphics g) /绘制拼图boolean showSuccess=true;lbStep.setText(已走步数: +Integer.toString(totalStep);if (startGame)for (int i=1;isquareNumber+1;i+)for (int j=1;jsquareNumber+1;j+)g.drawImage(positionij.GetImage(),startPoint.x+(positionij.y-1)*squareSize,startPoint.y+(positionij.x-1)*squareSize,this); /绘制左边打乱的方块g.setColor(Color.cyan);for (int i=0;isquareNumber+1;i+)g.drawLine(startPoint.x+squareSize*i,startPoint.y,startPoint.x+squareSize*i,startPoint.y+squareNumber*squareSize);g.drawLine(startPoint.x,startPoint.y+squareSize*i,startPoint.x+squareNumber*squareSize,startPoint.y+squareSize*i);g.drawImage(sourceImage,rightStartPoint.x,rightStartPoint.y,this); /绘制右边参照图/g.drawImage(spaceImage,rightStartPoint.x+(squareNumber-1)*squareSize,rightStartPoint.y+(squareNumber-1)*squareSize,this);for (int i=1;isquareNumber+1;i+) /判断用户是否完成拼图for (int j=1;jsquareNumber+1;j+)if (positionij.GetOrder()!=(i-1)*squareNumber+(j-1)showSuccess=false;if(showSuccess)/用户完成拼图,弹出完成对话框showSuccess=false;lbSuccess.setText(恭喜您,成功完成);public void GetRandom() /生成随机数,并将随机图像赋给每个方块int k=squareNumber*squareNumber;boolean numExist=false;int total=0;for (int j=0;jsquareNumber*squareNumber;j+) numj=-1;while(totalsquareNumber*squareNumber) /生成与方块个数相同的随机数(0.方块个数-1) k=(int)(Math.random()*10)+(int)(Math.random()*10)%(squareNumber*squareNumber);for (int j=0;jtotal;j+) if (k=numj)numExist=true;break; if (!numExist)numtotal=k;total+;numExist=false; for(int i=0;isquareNumber+2;i+) for (int j=0;jsquareNumber+2;j+)if(i=0|i=squareNumber+1|j=0|j=squareNumber+1) /实例化外围方块,这些方块是不可见的this.positionij=new MobanSquare(i,j,-1,squareNumber*squareNumber-1); for (int i=1;isquareNumber+1;i+) /实例化要显示给用户的方块,此些方块可见,并可以移动for (int j=1;jsquareNumber+1;j+)this.positionij=new MobanSquare(i,j,num(i-1)*squareNumber+j-1,squareNumber*squareNumber-1);this.positionij.SetImage(myImagethis.positionij.GetOrder();public void Move(int x,int y) /移动方块int square_X,square_Y,order_Old,order_New;square_X=(y-1-startPoint.y)/squareSize+1;square_Y=(x-1-startPoint.x)/squareSize+1;for (int i=0;i=startPoint.x&click_X=startPoint.y&click_Y=startPoint.y+squareNumber*squareSize)Move(click_X,click_Y);public void mouseExited(MouseEvent e)public void mouseEntered(MouseEvent e)public void mousePressed(MouseEvent e)public void mouseReleased(MouseEvent e)public static void main(String args) new MobanFrame();MobanSquare类:import java.awt.*;import java.awt.event.*;public class MobanSquarepublic int x,y; private int order;private int nowSpaceOrder;private boolean squareHere;public boolean arrive;private Image squareImage;public MobanSquare(int px,int py,int order,int spaceOrder) /MobanSquare的构造函数this.x=px;this.y=py;this.order=order;this.nowSpaceOrder=spaceOrder;if (this.order=this.nowSpaceOrder)arrive=true;elsearrive=false;if (this.order=this.nowSpaceOrder|this.order=-1)squareHere=false;elsesquareHere=true;public boolean GetSquareHere() /得到当前位置是否有方块return this.squareHere;public void SetSquareHere(boolean b) /设置当前位置是否是方块this.squareHere=b;public int GetOrder() /得到当前位置方块上的序号return this.order;public void SetOrder(int order) /设置当前位置方块上的序号 this.order=order;if (this.order=this.nowSpaceOrder)arrive=true;squareHere=false;elsearrive=false;s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东广州市增城区教育局“粤聚英才粤见未来”招聘广州增城外国语实验中学教师10人模拟试卷附答案详解(典型题)
- 2025广东云浮市新兴县“粤聚英才粤见未来”招聘教育人才11人(广西师范大学专场)模拟试卷及参考答案详解一套
- 2025贵州黔东南州剑河县农村集体经济组织选聘职业经理人(总经理)模拟试卷及答案详解(名校卷)
- 2025贵州安顺市社会科学界联合会招聘公益性岗位人员考前自测高频考点模拟试题及答案详解一套
- 2025劳动合同续签申请书
- 2025农商行个人消费贷款合同
- 2025福建厦门市集美区英村(兑山)幼儿园非在编教职工招聘4人考前自测高频考点模拟试题附答案详解(完整版)
- 2025年个体技术股权转让合同
- 2025贵州省妇幼保健院第十三届贵州人才博览会引才模拟试卷及一套完整答案详解
- 2025呼伦贝尔扎兰屯市社会福利中心护理员招聘考前自测高频考点模拟试题附答案详解(典型题)
- 《火灾调查》课件
- GB/T 33629-2024风能发电系统雷电防护
- 中国移动集客技能知识考试题库(浓缩600题)
- 初中三年级全学期信息科技《认识物联网》教学课件
- 部编版初中语文《艾青诗选》整本书阅读公开课堂实录
- DZ∕T 0401-2022 矿山地质工作规范
- 体育学院体育教育专业《足球》必修教学大纲
- 2024-2029年中国司美格鲁肽行业市场现状分析及竞争格局与投资发展研究报告
- 苏教版小学语文第一册电子课本
- 奥氮平氟西汀胶囊-药品解读
- 4D厨房区域区间管理责任卡
评论
0/150
提交评论