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