ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:986.99KB ,
资源ID:250095      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-250095.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(五子棋.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

五子棋.docx

1、五子棋 面向对象程序设计课程设计报告题 目: 五子棋软件设计与实现 院 (系): 信息科学与工程学院 专业班级: 计算机科学与技术1201班 学生姓名: 程 伟 学 号: 20121183011 指导教师: 吴 奕 20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制 面向对象程序设计 课程设计任务书一、设计(调查报告/论文)题目五子棋软件设计与实现二、设计(调查报告/论文)主要内容内容:实现一个多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);(3)设计一个1515围棋

2、棋盘,由两玩家交替进行对战 基本功能与要求:1.选择落子的先后顺序2.重置棋盘3.刷新重新开始4.退出提示5.并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。最后判断某一方是否为五子连珠。三、原始资料1.面向对象程序设计课程设计指导书2. 耿祥义JAVA大学实用教程北京:清华大学出版社,2009四、要求的设计(调查/论文)成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料1 张广彬. Java课程设计案例精编(第二版).北京:清华大学出版社, 2011.

3、2 耿祥义. Java课程设计(第二版).北京:清华大学出版社, 2008.3 耿祥义JAVA大学实用教程北京:清华大学出版社,20094 邹林达陈国君 Java2程序设计基础北京:清华大学出版社,20105 邹林达Java2程序设计基础实验指导北京:清华大学,2010指导教师(签名): 20 年 月 日目 录1需求与总体设计11.1需求分析11.2总体设计11.3功能图21.4类图32详细设计52.1程序流程图52.2类的划分52.3类的说明83编码实现123.1 FiveChessFrame.java123.2 MyChessFrame.java243.3Test.java 264系统测试

4、28总结371需求与总体设计1.1需求分析 本系统主要是完成五子棋游戏的基本操作,在玩游戏的过程中玩家可以放松心情得到娱乐。本系统需要满足以下要求:本程序实现了一个小的五子棋游戏,可以实现两个人在用一台机器上进行游戏。程序会自动判断谁输谁赢,在游戏的开始,第一个人可以选择执白棋还是黑棋,之后点击开始进行游戏。1.2总体设计1.2.1本系统的主要功能 本系统可以实现电脑可以自动下棋,扫描整个棋盘记录连在一起的黑白棋子数,实现人与电脑有次序的下棋,判断人与电脑的胜负,为电脑下棋提供帮助。1.2.2系统包含的类及类之间的关系。本系统共包6个Java源文件。类之间的关系如图1-1所示。1.2.3 Ja

5、va源文件及其功能表1-1 java源文件及其功能序号文件名主要功能备注1Chess本程序的主函数初始化棋盘2Autoplay实现电脑可以自动下棋分为8种情况3Scan扫描整个棋盘记录连在一起的黑白棋子数为判断胜负服务4Sort实现人与电脑有次序的下棋黑棋白棋有序的下5Judge判断人与电脑的胜负可以在文本框中显示胜负结果6Evaluate电脑估计为电脑下棋提供帮助1.3功能图图1-2系统的功能图1.4类图 图2-3系统的类图2详细设计2.1程序流程图图2-1程序流程图2.2类的划分1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应触发事件。同时注意面板的设计,使面板设计的尽量

6、的合理美观。a.棋盘的绘制public void draw_qipan(Graphics G) /画棋盘 15*15 G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(int i=1;i16;i+) G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300); b.添加按钮与按钮规划Button b1=new Button(开始); Button b2=new Button(重置游戏); Label lb

7、lWin=new Label( ); Checkbox ckbHB=new Checkbox3; Button exist = new Button(退出); public void init() ckbHB0=new Checkbox(执白,ckgHB,false); ckbHB1=new Checkbox(执黑,ckgHB,false); ckbHB2=new Checkbox(观看,ckgHB, false); C.鼠标棋子相应触发事件public void mouseClicked(MouseEvent e) Graphics g=getGraphics(); int x1,y1; x

8、1=e.getX(); y1=e.getY(); if (e.getX()300 | e.getY()300) return; if (x1%2010) x1+=10; if(y1%2010) y1+=10; x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1); d.按钮的触发事件 public void actionPerformed(ActionEvent e) Graphics g=getGraphics(); if (e.getSource()=b1) Game_start(); else Game_re(); if(e.getSour

9、ce()=exist) Game_re(); lblWin.setText(Get_qizi_color(color_Qizi)+输了!); intGame_Start=0; 2.编写一个功能判断落子的位置及画出相应的黑白棋子public void set_Qizi(int x,int y) /落子 if (intGame_Start=0) /判断游戏未开始 return; if (intGame_Bodyx/20y/20!=0) return; Graphics g=getGraphics(); if (color_Qizi=1)/判断黑子还是白子 g.setColor(Color.blac

10、k); color_Qizi=0; else g.setColor(Color.white); color_Qizi=1; g.fillOval(x-10,y-10,20,20); intGame_Bodyx/20y/20=color_Qizi+1;3.判断胜负if (Game_win_1(x/20,y/20) /判断输赢1 lblWin.setText(Get_qizi_color(color_Qizi)+赢了!); intGame_Start=0; if (Game_win_2(x/20,y/20) /判断输赢2 lblWin.setText(Get_qizi_color(color_Qi

11、zi)+赢了!); intGame_Start=0; if (Game_win_3(x/20,y/20) /判断输赢3 lblWin.setText(Get_qizi_color(color_Qizi)+赢了!); intGame_Start=0; if (Game_win_4(x/20,y/20) /判断输赢4 lblWin.setText(Get_qizi_color(color_Qizi)+赢了!); intGame_Start=0; 2.3类的说明2.3.1主类Chess(1)成员变量见表2-1表2-1 主要成员变量(属性)成员变量描述变量类型名称控制棋子颜色inti重新开局Butto

12、nButton请黑棋下子TextFieldtext_1请白棋下子TextFieldtext_2这是第+i+步TextFieldtext_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 pa

13、int(Graphics g)画出图像控制图像的大小范围public void paint(Graphics g)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)处理鼠标离开棋盘时鼠标离开组件不实现任何事

14、件public void mouseExited(MouseEvent e)public void mouseClicked(MouseEvent e)处理发生单击的事件实现下棋以及重新开始游戏public void mouseClicked(MouseEvent e)2.3.2类Autoplay(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称统计玩家的连起来的棋子数intX电脑玩家的连起来的棋子数IntY(2)方法见表2-4表2-4 主要方法方法名功能备注void autoPlay(int chesspad,int a,int b)分情况实现电脑自动下棋使用switch

15、语句分为8种情况来下棋2.3.3类Scan(1)成员变量见表2-5表2-5 Scan成员变量描述变量类型名称统计棋盘种五个连起来的棋子数数组int shape控制行数inti控制列数intj(2)方法见表2-6表2-6 Scan方法名功能备注 void scan(int chesspad,int colour)判断棋盘上连在一起的黑白棋子个数。3编码实现3.1 FiveChessFrame.javapackage ddlll;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.T

16、oolkit;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JOptionPane;public class FiveChessFrame extends JFrame implements M

17、ouseListener, Runnable / 取得屏幕的宽度 int width = Toolkit.getDefaultToolkit().getScreenSize().width; / 取得屏幕的高度 int height = Toolkit.getDefaultToolkit().getScreenSize().height; / 背景图片 BufferedImage bgImage = null; / 保存棋子的坐标 int x = 0; int y = 0; / 保存之前下过的全部棋子的坐标 / 其中数据内容 0: 表示这个点并没有棋子, 1: 表示这个点是黑子, 2:表示这个

18、点是白子 int allChess = new int1919; / 标识当前应该黑棋还是白棋下下一步 boolean isBlack = true; / 标识当前游戏是否可以继续 boolean canPlay = true; / 保存显示的提示信息 String message = 黑方先行; / 保存最多拥有多少时间(秒) int maxTime = 0; / 做倒计时的线程类 Thread t = new Thread(this); / 保存黑方与白方的剩余时间 int blackTime = 0; int whiteTime = 0; / 保存双方剩余时间的显示信息 String b

19、lackMessage = 无限制; String whiteMessage = 无限制; public FiveChessFrame() / 设置标题 this.setTitle(五子棋); / 设置窗体大小 this.setSize(500, 500); / 设置窗体出现位置 this.setLocation(width - 500) / 2, (height - 500) / 2); / 将窗体设置为大小不可改变 this.setResizable(false); / 将窗体的关闭方式设置为默认关闭后程序结束 this.setDefaultCloseOperation(JFrame.EX

20、IT_ON_CLOSE); / 为窗体加入监听器 this.addMouseListener(this); / 将窗体显示出来 this.setVisible(true); t.start(); t.suspend(); / 刷新屏幕,防止开始游戏时出现无法显示的情况. this.repaint(); String imagePath = ; try imagePath = /E:/java2014/ddlll/bin/image/background.jpg ; bgImage = ImageIO.read(new File(imagePath.replaceAll(, /); catch

21、(IOException e) / TODO Auto-generated catch block e.printStackTrace(); public void paint(Graphics g) / 双缓冲技术防止屏幕闪烁 BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB); Graphics g2 = bi.createGraphics(); g2.setColor(Color.BLACK); / 绘制背景 g2.drawImage(bgImage, 1, 20, this); / 输出标

22、题信息 g2.setFont(new Font(黑体, Font.BOLD, 20); g2.drawString(游戏信息: + message, 130, 60); / 输出时间信息 g2.setFont(new Font(宋体, 0, 14); g2.drawString(黑方时间: + blackMessage, 30, 470); g2.drawString(白方时间: + whiteMessage, 260, 470); / 绘制棋盘 for (int i = 0; i 19; i+) g2.drawLine(10, 70 + 20 * i, 370, 70 + 20 * i);

23、g2.drawLine(10 + 20 * i, 70, 10 + 20 * i, 430); / 标注点位 g2.fillOval(68, 128, 4, 4); g2.fillOval(308, 128, 4, 4); g2.fillOval(308, 368, 4, 4); g2.fillOval(68, 368, 4, 4); g2.fillOval(308, 248, 4, 4); g2.fillOval(188, 128, 4, 4); g2.fillOval(68, 248, 4, 4); g2.fillOval(188, 368, 4, 4); g2.fillOval(188,

24、 248, 4, 4); /* * /绘制棋子 x = (x - 10) / 20 * 20 + 10 ; y = (y - 70) / 20 * 20 + 70 ; * /黑子 g.fillOval(x - 7, y - 7, 14, 14); /白子 g.setColor(Color.WHITE) ; * g.fillOval(x - 7, y - 7, 14, 14); g.setColor(Color.BLACK) ; * g.drawOval(x - 7, y - 7, 14, 14); */ / 绘制全部棋子 for (int i = 0; i 19; i+) for (int j

25、 = 0; j 19; j+) if (allChessij = 1) / 黑子 int tempX = i * 20 + 10; int tempY = j * 20 + 70; g2.fillOval(tempX - 7, tempY - 7, 14, 14); if (allChessij = 2) / 白子 int tempX = i * 20 + 10; int tempY = j * 20 + 70; g2.setColor(Color.WHITE); g2.fillOval(tempX - 7, tempY - 7, 14, 14); g2.setColor(Color.BLAC

26、K); g2.drawOval(tempX - 7, tempY - 7, 14, 14); g.drawImage(bi, 0, 0, this); public void mouseClicked(MouseEvent e) / TODO Auto-generated method stub public void mouseEntered(MouseEvent e) / TODO Auto-generated method stub public void mouseExited(MouseEvent e) / TODO Auto-generated method stub public void mousePressed(MouseEvent e) / TODO Auto-generated method stub /* * System.out.println(X:+e.getX(); System.out.println(Y:+e.getY(

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2