版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上面向对象程序设计课程设计报告实验时间: 2010年10月26日 实验班级: * 实验报告总份(片)数: 1 份(片)实验指导老师: * * 设计小组湖南省吉首市吉首大学课程设计报告简单的游戏五子棋小组成员(姓名、学号):*(组长) * * *一、实验分工姓名职责*编写程序、修改程序、设计流程图、设计实验报告*修改程序、分析运行结果、搜索相关资料*修改程序、分析运行结果、整理实验报告二、开发环境(实验编译以及测试环境)硬件环境:CPU:Intel 奔腾双核E5200 主频 2.5GHz内存:2G软件环境:操作系统:Windows 7编程环境 JDK7.0开发工具:Ecl
2、ipse SDK三、使用环境(用户运行环境)硬件环境:CPU主频在500MHZ以上,内存在128M以上软件环境:JAVA运行环境 + Windows XP或Windows 2000 以上操作系统目 录专心-专注-专业第一章 总体设计1.1设计的目的面向对象程序设计课程设计是计算机科学与技术专业集中实践性环节之一,是学习完面向对象程序设计课程后进行的一次全面的综合练习。本课程设计主要目的在于加深学生对面向对象基础理论和基本知识的理解,掌握面向对象程序设计的基本方法,进一步使学生综合运用所学知识和增强实际动手能力。通过课程设计,学生在下述各方面的能力应该得到锻炼:1. 通过本次设计,实现对本学期内
3、容的回顾与综合运用,包括类的建立,用类创建对象,方法的调用,图形组件的使用方法,图形界面的布局形式,事件处理机制,文件对话框的使用,文件操作的基本方法,数据读写的基本用法等。2. 对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 3. 掌握自顶而下的设计方法,将大问题进行模块化、对象化,领会面向对象程序设计的方法。4. 熟练掌握JAVA语言(C#)的基本语法,灵活运用各种预定义类、线程和事件处理。1.2本系统的主要功能 本系统可以实现电脑可以自动下棋,扫描整个棋盘记录连在一起的黑白棋子数,实现人与电脑有次序的下棋,判断人与电脑的胜负,为电脑下棋提供帮助1.3系统包含的类及类之
4、间的关系。本系统共包6个Java源文件。类之间的关系如图1-1所示。ChessAutoplayScanSortJudgeEvaluate图1-1 类之间的关系图1.4 Java源文件及其功能表1-1 java源文件及其功能序号文件名主要功能备注1Chess本程序的主函数初始化棋盘2Autoplay实现电脑可以自动下棋分为8种情况3Scan扫描整个棋盘记录连在一起的黑白棋子数为判断胜负服务4Sort实现人与电脑有次序的下棋黑棋白棋有序的下5Judge判断人与电脑的胜负可以在文本框中显示胜负结果6Evaluate电脑估计为电脑下棋提供帮助1.5 项目构建思路此程序旨在打造一个小型五子棋娱乐游戏,经
5、过认真分析和探索。终于,在大家的共同努力之下,完成了这个小型五子棋游戏。游戏编辑思路,五子棋是一种互动性的益智游戏。需要棋盘、棋子、棋手、裁判。首先,我们绘制一个五子棋棋盘,关键代码如下:/绘制棋盘函数 public void paint(Graphics g) for (int i=40;i<=400;i=i+20) g.drawLine(40,i,400,i); /绘制棋盘 行 for(int j=40;j<=400;j=j+20) g.drawLine(j,40,j,400); /绘制棋盘 列 g.fillOval(97,97,6,6); /使用当前颜色填充外接指定矩形框的椭
6、圆 g.fillOval(337,97,6,6); g.fillOval(97,337,6,6); g.fillOval(337,337,6,6); g.fillOval(217,217,6,6); 其次,我们生成两种颜色不一样的棋子,关键代码如下:黑色棋子代码如下:/ChessPoint_black 类 继承 Canvas类class ChessPoint_black extends Canvas implements MouseListener ChessPad chesspad=null; ChessPoint_black(ChessPad p) setSize(20,20); /设置棋
7、盘每一小格的长宽 addMouseListener(this); chesspad=p; public void paint(Graphics g) g.setColor(Color.black); /设置黑色棋子的颜色 g.fillOval(0,0,18,18); /使用黑色填充椭圆棋子 白色棋子代码如下:class ChessPoint_white extends Canvas implements MouseListener ChessPad chesspad=null; ChessPoint_white(ChessPad p) setSize(20,20); addMouseListe
8、ner(this); chesspad=p; public void paint(Graphics g) /绘制棋子的颜色 g.setColor(Color.white);/设置为白色 g.fillOval(0,0,18,18);/填充白子 再次,为实现双方行棋,我们实现了电脑自动下棋的函数,一共分为8种情况,关键代码如下:class AutoPlay /AutoPlay类实现电脑可以自动下棋 int x,y; /X统计玩家的连起来的棋子数 /Y电脑玩家的连起来的棋子数 void autoPlay(int chesspad,int a,int b) int randomNumber=(int)
9、(Math.random()*8)+1; /获取一个随机数 switch(randomNumber) /分情况实现电脑自动下棋 case(1): /通过a,b的值 执行不同的运算,最后返回不同的/值。达到执行不同的操作。if(chesspada-1b-1=0) x=a-1;y=b-1; if(chesspada-1b+1=0) x=a-1;y=b+1; else if(chesspada-2b-2=0) x=a-2;y=b-2; else x=a-3;y=b-3; break; case(2): if(chesspada-1b=0) x=a-1;y=b; else if(chesspada-2
10、b=0) x=a-2;y=b; else x=a-3;y=b; break; case(3): if(chesspada-1b+1=0) x=a-1;y=b+1; else if(chesspada-2b+2=0) x=a-2;y=b+2; else x=a-3;y=b+3; break; case(4): if(chesspadab+1=0) x=a;y=b+1; else if(chesspadab+2=0) x=a;y=b+2; else x=a;y=b+3; break; case(5): if(chesspada+1b+1=0) x=a+1;y=b+1; else if(chessp
11、ada+2b+2=0) x=a+2;y=b+2; else x=a+3;y=b+3; break; case(6): if(chesspada+1b=0) x=a+1;y=b; else if(chesspada+2b=0) x=a+2;y=b; else x=a+3;y=b; break; case(7): if(chesspada+1b-1=0) x=a+1;y=b-1; else if(chesspada+2b-2=0) x=a+2;y=b-2; else x=a+3;y=b-3; break; case(8): if(chesspadab-1=0) x=a;y=b-1; else if
12、(chesspadab-2=0) x=a;y=b-2; elsex=a;y=b+3; break; 第四,为规范双方行棋的先后顺序,我们实现了一个判断函数,关键代码如下:class Sort /sort类 实现人与电脑有次序的下棋 public void sort(int shape) int temp; for(int i=0;i<19;i+) for(int j=0;j<19;j+) for(int h=1;h<=4;h+) for(int w=3;w>=h;w-) if(shapeijw-1<shapeijw) /如果前者小于后者,则交换 temp=shap
13、eijw-1; shapeijw-1=shapeijw; shapeijw=temp; 第五,脑只是简单的执行代码,没有智能思考的能力。在行棋之前,他需要对整个棋盘上的棋子做一个判断,然后决定该怎么行棋,关键代码如下:class Evaluate /Evaluate类 int max_x,max_y,max; public void evaluate(int shape) int i=0,j=0; for(i=0;i<19;i+) for(j=0;j<19;j+) switch(shapeij0) /电脑根据传进来的三维数组决定该怎么行棋, case 5: shapeij4=200
14、; break; case 4: switch(shapeij1) case 4: shapeij4=150+shapeij2+ shapeij3; break; case 3: shapeij4=100+ shapeij2+ shapeij3; break; default: shapeij4=50+ shapeij2+ shapeij3; break; case 3: switch(shapeij1) case 3: shapeij4=75+ shapeij2+ shapeij3; break; default: shapeij4=20+ shapeij2+ shapeij3; break
15、; case 2: shapeij4=10+shapeij1 +shapeij2 +shapeij3; break; case 1: shapeij4=shapeij0+shapeij1 +shapeij2 +shapeij3; default : shapeij4=0; int x=0,y=0; max=0; for(x=0;x<19;x+) for(y=0;y<19;y+) if(max<shapexy4) max=shapexy4; max_x=x; max_y=y; 第六,在双方行棋后,我们需要判断那一方赢。裁判的功能代码如下/判断人与电脑的胜负class Judge
16、 static boolean judge(int a,int color) int i,j,flag; for(i=0;i<19;i+) /行 flag=0; for(j=0;j<19;j+)/列 if(aij=color) flag+; /棋子计数器 if (flag=5) /如果棋子数等于5 return true; /返回true else flag=0; /返回false for(j=0;j<19;j+) flag=0; /棋子计数器 for(i=0;i<19;i+) if(aij=color) /每一列的棋子颜色一样 flag+; if(flag=5) /棋
17、子数为5 return true; /返回true 否则返回true else flag=0; for(j=4;j<19;j+) flag=0; int m=j; for(i=0;i<=j;i+) if(aim-=color) /对角线棋字数一样 flag+; if(flag=5) /为5 则返回true return true; else flag=0; /棋子计数器归零 for(j=14;j>=0;j-) flag=0; int m=j; for(i=0;i<=18-j;i+) if(aim+=color) /对角线棋子数是否一样 flag+; if(flag=5)
18、 return true; /棋子书为5 则返回true else flag=0; /否则归零 for(i=14;i>=0;i-) flag=0; int n=i; for(j=0;j<19-i;j+) if(an+j=color) flag+; if(flag=5) return true; else flag=0; for(j=14;j>=0;j-) flag=0; int m=j; for(i=18;i>=j;i-) if(aim+=color) flag+; if(flag=5) return true; else flag=0; return false; 最
19、后,我们最终的程序是急于可视化的,所以,需要容器及组建来实现,关键代码如下:class ChessPad extends Panel implements MouseListener,ActionListener/创建棋盘 int array=new int1919;/创建二维数组,生成棋盘 Sort sort=new Sort(); int i=0; /控制棋子颜色 int x=-1,y=-1,棋子颜色=1; Button button=new Button("重新开局"); /确定按钮 TextField text_1=new TextField("请黑棋下子
20、"), /创建文本组件 并初始化第一个 text_2=new TextField(), text_3=new TextField(); ChessPad() /ChessPad函数的构造函数 setSize(440,440); / setLayout(null); setBackground(Color.pink); /设置背景为粉色 addMouseListener(this); add(button);/向组件添加指定的重新开局菜单 button.setBounds(10,5,60,26); /移动组件并调整其大小。由 x 和 y 指定左上角的新位置,由 width 和 heig
21、ht 指定新的大小。 button.addActionListener(this); /添加指定的操作侦听器,以接收来自此按钮的操作事件 add(text_1); text_1.setBounds(90,5,90,24); add(text_2); text_2.setBounds(290,5,90,24); add(text_3); text_3.setBounds(200,5,80,24); for(int i=0;i<19;i+) for(int j=0;j<19;j+) arrayij=0; /初始化数组为0 for(int i=0;i<19;i+) for(int
22、j=0;j<19;j+) for(int h=0;h<5;h+) scanp.shapeijh=0; scanc.shapeijh=0; /初始化三维数组为0 text_1.setEditable(false); text_2.setEditable(false); /设置文本组件为不可编辑 第二章 模块功能介绍2.1主类Chess(1)成员变量见表2-1表2-1 主要成员变量(属性)成员变量描述变量类型名称控制棋子颜色inti重新开局ButtonButton请黑棋下子TextFieldtext_1请白棋下子TextFieldtext_2这是第"+i+"步Tex
23、tFieldtext_3(2)方法见表2-2表2-2 主要方法方法名称返回类型功能备注ChessPad()初始化棋盘设置棋盘颜色,ChessPad()Void paint (Graphics g)对棋子等图像进行初始化设置棋子大小,颜色等Void paint (Graphics g)Public void mousePressed(MouseEvent e)鼠标的实践监听单击实践public void mousePressed(MouseEvent e)public void paint(Graphics g)画出图像控制图像的大小范围public void paint(Graphics g)
24、public void mousePressed(MouseEvent e)处理按下鼠标的事件选中下棋的位置public void mousePressed(MouseEvent e)public void mouseReleased(MouseEvent e)处理鼠标离开的事件本步下棋结束public void mouseReleased(MouseEvent e)public void mouseExited(MouseEvent e)处理鼠标离开棋盘时鼠标离开组件不实现任何事件public void mouseExited(MouseEvent e)public void mouseCl
25、icked(MouseEvent e)处理发生单击的事件实现下棋以及重新开始游戏public void mouseClicked(MouseEvent e)(3)源代码见文件Chess.java中的公共类 Chess2.2类Autoplay(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称统计玩家的连起来的棋子数intX电脑玩家的连起来的棋子数IntY(2)方法见表2-4表2-4 主要方法方法名功能备注void autoPlay(int chesspad,int a,int b)分情况实现电脑自动下棋使用switch语句分为8种情况来下棋(3)源代码见文件Chess.java中的Autoplay类2.3类Scan(1)成员变量见表2.5表2-5 Scan成员变量描述变量类型名称统计棋盘种五个连起来的棋子数数组int shape控制行数inti控
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采购合同存档台帐3篇
- 2024天然气用户安全教育与应急处理合同3篇
- 采购合同跟单的风险评估3篇
- 采购方案与采购合同的培训与发展3篇
- 采购合同风险管理的方法与技巧3篇
- 采购合同预付款的监管与合规要求3篇
- 采购合同规范化样本3篇
- 采购合同电子版本3篇
- 采购合同跟踪的优化方法与案例分享3篇
- 采购合同会审制度的改进措施3篇
- 服装厂安全教育培训规章制度
- 车辆修理厂自查自纠整改方案及总结报告
- 湖北省八校2025届高二生物第一学期期末质量检测模拟试题含解析
- 一例尿毒症患者股骨颈骨折的临床护理查房
- 期末测试卷(试题)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2023年小学二年级数学竞赛试题(后附答案)
- 七年级上册道德与法治第1-4单元共4个单元复习教学设计
- 《数据可视化 》 课件全套 杨华 第1-9章 数据可视化概述- 可视化大屏
- GB/T 44146-2024基于InSAR技术的地壳形变监测规范
- 出国柬埔寨劳务合同范本
- 【人民日报】72则金句期末评语模板-每页4张
评论
0/150
提交评论