




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java应用技术实训报告题 目 五子棋小游戏 起讫日期 2008 年 6月 23日至 2008 年7月4日所在院系 软件学院 学生姓名 索明宇 专 业 应用化学+软件 班 级 05-1 学 号 20 指导教师 李伯林 职称 讲师 所在单位 软件学院 2008年 7 月 4 日一总体设计本系统共包括6个java源文件1类之间的关系如图1所示。ChessAutoplayScanSortJudgeEvaluate图1主类与其它类之间关系2java源文件及其功能如表1.1所示。表1.1 java源文件及其功能序号文件名主要功能备注1Chess本程序的主函数初始化棋盘2Autoplay实现电脑可以自动下棋分为8种情况3Scan扫描整个棋盘记录连在一起的黑白棋子数为判断胜负服务4Sort实现人与电脑有次序的下棋黑棋白棋有序的下5Judge判断人与电脑的胜负可以在文本框中显示胜负结果6Evaluate电脑估计为电脑下棋提供帮助二、详细设计1Chess主类(1)成员变量见表2.1表2.1 Chess成员变量描述变量类型名称控制棋子颜色inti重新开局ButtonButton请黑棋下子TextFieldtext_1请白棋下子TextFieldtext_2这是第+i+步TextFieldtext_3(2)方法见表2.2表2.2 Chess方法名功能备注ChessPad()初始化棋盘设置棋盘颜色,Void paint (Graphics g)对棋子等图像进行初始化设置棋子大小,颜色等public void mousePressed(MouseEvent e)鼠标的实践监听单击实践public void paint(Graphics g)画出图像控制图像的大小范围public void mousePressed(MouseEvent e)处理按下鼠标的事件选中下棋的位置public void mouseReleased(MouseEvent e)处理鼠标离开的事件本步下棋结束public void mouseExited(MouseEvent e)处理鼠标离开棋盘时鼠标离开组件不实现任何事件public void mouseClicked(MouseEvent e)处理发生单击的事件实现下棋以及重新开始游戏(3)源代码见文件Chess.javaimport java.awt.*;import java.awt.event.*;class ChessPad extends Panel implements MouseListener,ActionListener int array=new int1919; Scan scanp=new Scan(); Scan scanc=new Scan(); AutoPlay autoPlay=new AutoPlay(); Evaluate evaluatep=new Evaluate(); Evaluate evaluatec=new Evaluate(); Sort sort=new Sort(); int i=0; int x=-1,y=-1,棋子颜色=1; Button button=new Button(重新开局); TextField text_1=new TextField(请黑棋下子), text_2=new TextField(), text_3=new TextField(); ChessPad() setSize(440,440); setLayout(null);setBackground(Color.pink); addMouseListener(this);add(button);button.setBounds(10,5,60,26); 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;i19;i+) for(int j=0;j19;j+) arrayij=0; for(int i=0;i19;i+) for(int j=0;j19;j+) for(int h=0;h5;h+) scanp.shapeijh=0; scanc.shapeijh=0; text_1.setEditable(false); text_2.setEditable(false); 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); g.fillOval(337,97,6,6); g.fillOval(97,337,6,6); g.fillOval(337,337,6,6); g.fillOval(217,217,6,6); public void mousePressed(MouseEvent e) int a=0,b=0; if(e.getModifiers()=InputEvent.BUTTON1_MASK) x=(int)e.getX();y=(int)e.getY(); ChessPoint_blackchesspoint_black=new ChessPoint_black(this); ChessPoint_white chesspoint_white=new ChessPoint_white(this); i+; text_3.setText(这是第+i+步); if(x+5)/202|(y+5)/2019|(y-5)/2019) else a=(x+10)/20;b=(y+10)/20; if(arrayb-2a-2=0&棋子颜色=1) this.add(chesspoint_black); chesspoint_black.setBounds(a*20-9,b*20-9,18,18); 棋子颜色=棋子颜色*(-1); arrayb-2a-2=1; if (Judge.judge(array,1)text_1.setText(黑棋赢!);棋子颜色=2;removeMouseListener(this); else text_1.setText(); if(i2&棋子颜色=-1) scanp.scan(array,1); scanc.scan(array,-1); sort.sort(scanp.shape); sort.sort(scanc.shape); evaluatep.evaluate(scanp.shape); evaluatec.evaluate(scanc.shape); 棋子颜色=棋子颜色*(-1); this.add(chesspoint_white); if(evaluatep.maxevaluatec.max) text_2.setText(evaluatep.max_x+ +evaluatep.max_y+ +evaluatep.max); chesspoint_white.setBounds(evaluatep.max_y+2)*20-9,(evaluatep.max_x+2)*20-9,18,18); arrayevaluatep.max_xevaluatep.max_y=-1; text_1.setText(请黑棋下子); for(int i=0;i19;i+) for(int j=0;j19;j+) for(int h=0;h5;h+) scanp.shapeijh=0; scanc.shapeijh=0; else text_2.setText(evaluatec.max_x+ +evaluatec.max_y+ +evaluatec.max); chesspoint_white.setBounds(evaluatec.max_y+2)*20-9,(evaluatec.max_x+2)*20-9,18,18) arrayevaluatec.max_xevaluatec.max_y=-1; if (Judge.judge(array,-1) text_2.setText(白棋赢!);棋子颜色=2;removeMouseListener(this); else text_1.setText(请黑棋下子); for(int i=0;i19;i+) for(int j=0;j19;j+) for(int h=0;h5;h+) scanp.shapeijh=0; scanc.shapeijh=0; if(i=2&棋子颜色=-1) autoPlay.autoPlay(array,b-2,a-2); this.add(chesspoint_white); 棋子颜色=棋子颜色*(-1); chesspoint_white.setBounds(autoPlay.y+2)*20-9,(autoPlay.x+2)*20-9,18,18); arrayautoPlay.xautoPlay.y=-1; if (Judge.judge(array,-1) text_2.setText(白棋赢!);棋子颜色=2;removeMouseListener(this); else text_1.setText(请黑棋下子); text_2.setText(autoPlay.x+ +autoPlay.y); public void mouseReleased(MouseEvent e)public void mouseEntered(MouseEvent e)public void mouseExited(MouseEvent e)public void mouseClicked(MouseEvent e) public void actionPerformed(ActionEvent e) this.removeAll(); 棋子颜色=1; add(button);button.setBounds(10,5,60,26); add(text_1);text_1.setBounds(90,5,90,24); text_2.setText(); text_1.setText(请黑棋下子); add(text_2); text_2.setBounds(290,5,90,24); add(text_3); text_3.setBounds(200,5,80,24); i=0; text_3.setText(这是第+i+步); for(int i=0;i19;i+) for(int j=0;j19;j+) arrayij=0; for(int i=0;i19;i+) for(int j=0;j19;j+) for(int h=0;h5;h+) scanp.shapeijh=0; scanc.shapeijh=0; addMouseListener(this); class ChessPoint_black extends Canvas implements MouseListener ChessPad chesspad=null; ChessPoint_black(ChessPad p) setSize(20,20); addMouseListener(this); chesspad=p; public void paint(Graphics g) g.setColor(Color.black);g.fillOval(0,0,18,18); public void mousePressed(MouseEvent e) /*if(e.getModifiers()=InputEvent.BUTTON3_MASK) chesspad.remove(this); chesspad.棋子颜色=1; chesspad.text_2.setText(); chesspad.text_1.setText(请黑棋下子); */ public void mouseReleased(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) class ChessPoint_white extends Canvas implements MouseListener ChessPad chesspad=null; ChessPoint_white(ChessPad p) setSize(20,20);addMouseListener(this); chesspad=p; public void paint(Graphics g) g.setColor(Color.white);g.fillOval(0,0,18,18); public void mousePressed(MouseEvent e) /*if(e.getModifiers()=InputEvent.BUTTON3_MASK) chesspad.remove(this); chesspad.棋子颜色=-1; chesspad.text_2.setText(请白棋下子); chesspad.text_1.setText(); */ public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) public class Chess extends Frame ChessPad chesspad=new ChessPad(); Chess() setVisible(true); setLayout(null); Label label=new Label(五子棋,Label.CENTER); add(label);label.setBounds(70,55,440,26); label.setBackground(Color.orange); add(chesspad);chesspad.setBounds(70,90,440,440); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); pack();setSize(600,550); public static void main(String args) Chess chess=new Chess(); 2Autoplay类(1)成员变量见表2.3表2.3 Autoplay成员变量描述变量类型名称统计玩家的连起来的棋子数intX电脑玩家的连起来的棋子数IntY(2)方法见表2.4表2.4 Autoplay方法名功能备注void autoPlay(int chesspad,int a,int b)分情况实现电脑自动下棋使用switch语句分为8种情况来下棋(3)源代码见文件AutoPlay.javapublic class AutoPlay int x,y; void autoPlay(int chesspad,int a,int b) int randomNumber=(int)(Math.random()*8)+1; switch(randomNumber) case(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-2b=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(chesspada+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(chesspadab-2=0) x=a;y=b-2; elsex=a;y=b+3; break; 3Scan类(1)成员变量见表2.5表2.5Scan成员变量描述变量类型名称统计棋盘种五个连起来的棋子数数组int shape控制行数inti控制列数intj(2)方法见表2.6表2.6 Scan方法名功能备注 void scan(int chesspad,int colour)判断棋盘上连在一起的黑白棋子个数。(3)源代码见文件Scan.javapublic class Scan int shape=new int19195; void scan(int chesspad,int colour) int i,j; for(i=0;i=18;i+) for(j=0;j=0&chesspadm-n=colour) shapeij0+; n=j; while(n+1=0&chesspad-mn=colour)shapeij1+; m=i; while(m+1=0&n+1=18&chesspad-m+n=colour)shapeij2+; m=i;n=j; while(m+1=0&chesspad+m-n=colour)shapeij2+; m=i;n=j; while(m-1=0&n-1=0&chesspad-m-n=colour) shapeij3+; m=i;n=j; while(m+1=18&n+1=18&chesspad+m+n=colour)shapeij3+; 4Sort主类(1)成员变量见表2.7表2.7 Sort成员变量描述变量类型名称保存临时变量 inttemp(2)方法见表表2.8 Sort方法名功能备注public void sort(int shape)实现黑白棋子的交替下数组为参数(3)源代码见文件Sort.javapublic class Sort public void sort(int shape) int temp; for(int i=0;i19;i+) for(int j=0;j19;j+) for(int h=1;h=h;w-) if(shapeijw-1shapeijw) temp=shapeijw-1; shapeijw-1=shapeijw; shapeijw=temp; 5Judge主类(1)成员变量见表2.9表2.9 Judge成员变量描述变量类型名称控制行数inti控制列数intj记录连在一起的黑白棋子数intflag(2)方法见表2.10表2.10 Judge方法名功能备注static boolean judge(int a,int color)判断玩家与电脑的游戏胜负使用静态函数,分多钟情况判断(3)源代码见文件Judge.javapublic class Judge static boolean judge(int a,int color) int i,j,flag; for(i=0;i19;i+) flag=0; for(j=0;j19;j+) if(aij=color) flag+; if (flag=5) return true; else flag=0; for(j=0;j19;j+) flag=0; for(i=0;i19;i+) if(aij=color) flag+; if(flag=5) return true; else flag=0; for(j=4;j19;j+) flag=0; int m=j; for(i=0;i=0;j-) flag=0; int m=j; for(i=0;i=0;i-) flag=0; int n=i; for(j=0;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; 6Evaluate类(1)成员变量见表2.11表2.11 Evaluate成员变量描述变量类型名称玩家最可能下的棋子的行数intmax_x玩家最可能下的棋子的列数intmax_y保存最大可能下棋的位置intmax控制行数inti控制列数intj(2)方法见表表2.12 Evaluate方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度行政合同救济制度在公共资源交易合同中的合同范本
- 2025年度企事业单位短途客运车辆租赁合同范本
- 2025年度口腔医疗资源整合承包服务协议
- 2025年度数字货币保密知识产权与不竞争协议
- 2025版智能安防铁艺栏杆安装与维护服务合同
- 2025年建筑材料搬运承包合同
- 2025版公园场地租赁与旅游观光合作服务协议
- 2025年度房地产项目工程验收合同范本
- 2025版智能语音识别软件知识产权许可合同
- 2025年健康餐饮租赁经营协议
- 餐饮公司应聘简历
- 牢记教师初心不忘育人使命作新时代合格人民教师课件
- 一科一品一特色护理妇产科
- 《老年照护芳香疗法应用规范》标准文本及编制说明
- 2024-年全国医学博士外语统一入学考试英语试题
- 冶金渣公司安全生产委员会工作职责
- 老年患者护理心理护理
- 项目担保合作协议范本
- 2024-2025学年湖南省“炎德·英才·名校联考联合体”高二第一次联考(暨入学检测)数学试题(含答案)
- 夹娃娃机合同模板
- 维修人员技能提升与企业绩效关联研究
评论
0/150
提交评论