五子棋程序设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宜宾学院
面向对象课程设计
学院:_计算机与信息工程学院_ 班级: 2014级6班学生姓名: 郑亮学号: 141106020 设计地点(单位)_________宜宾学院__________
设计题目:____________双人五子棋_____________
完成日期:2015年12月5日
目录
1 问题要求及任务描述 (3)
1.1题目要求 (3)
1.2 主要任务 (3)
2 解决问题的主要思路和方法 (3)
2.1 关键问题 (3)
2.2 拟采用解决问题的方法及算法 (4)
2.3主要算法和处理流程图以及类图等 (4)
3 程序实现 (6)
3.1 程序实现时应考虑的问题 (6)
3.2 主要源代码及说明 (8)
3.2.1 总体设计 (8)
3.2.1 详细设计 (8)
4 测试 (18)
4.1 游戏测试结果及分析 (18)
5 小结 (21)
5.1本问题解决方法及程序实现小结 (21)
5.2尚未解决的问题及下一步工作思路。 (23)
5.3 心得与体会 (23)
6 参考文献 (24)
双人五子棋游戏设计报告书
1 问题要求及任务描述
1.1题目要求
双人五子棋游戏
1.2 主要任务
1.独立设计、编制、调试出一款双人五子棋游戏,并单独完成其中一定量的函数模块。
2.要求该游戏具有趣味性和可操作性,能够正常运行。其中用到Java语言中的各种语句、结构。(如其中需要注意全局变量和局部变量的申明,数组的使用等)3.双人五子棋要求能够进入可视化界面,二人对弈,当有五颗同色棋子相连时,判断出输赢等一系列游戏流程。
2 解决问题的主要思路和方法
2.1 关键问题
1.棋盘的绘制
2.棋子的绘制,必须落在棋盘的交叉点处
3.有棋子的地方不能重复落子
4.棋子的黑白交替
5.五子连珠的判断(即游戏输赢判断)
2.2 拟采用解决问题的方法及算法
1.棋盘的绘制:可以用一层for 循环通过分别对X,Y 坐标设置相应的增量来绘制棋盘的横线和竖线。
2.绘制棋子:通过填充一个椭圆的方式来绘制棋子,
棋子的落子位子:首先定义一个二维数组a[][],用二维数组的两个参数来对应一个交叉点的X,Y虚坐标,通过鼠标点击的位置所得坐标来整除棋盘格子的宽度。这样就得到了鼠标点击的位置的最近的一个交叉的位置。然后通过交叉点的位置信息,以交叉点为圆心来绘制相应的棋子。
3.有棋子的位置不能重复落子:可以给二维数组a[][]付初值为“0”,当a[x][y] == 0 时表示无子可以落子,当a[x][y] ! = 0 时就不能落子。
4.棋子的黑白交替:可以定义一个布尔型变量Order 当为真时就为:黑子Order 为假时就为:白子。
5.五子连珠的判断:首先定义一个整形变量color 来存放棋子的颜色。先
对color进行赋值。横向的判断是定义count1 来记录棋子个数,当横向左右有相同颜色的棋子就让count1加上1,当count1 >= 5 时五子连珠成功,结束游戏。其它纵向和斜向方法相同。
2.3主要算法和处理流程图以及类图等
类视图:
算法处理流程图
3 程序实现
3.1 程序实现时应考虑的问题1. 根据所选题目,首先设计模块图
2. 画出主程序和主要模块的流程图
3.2 主要源代码及说明
3.2.1 总体设计
主要包括的类有两个个:Myframe, MyPanel
1、Myframe类: Myframe类是java版五子棋的主框架,程序的启动类。其中包括游戏界面的创建、按钮的设置、相关的事件监听器设置、游戏的启动、实现重新游戏。
2、MyPanel类: MyPanel类主要实现的是棋盘的绘制、创建数组存放棋子的坐标、设置只能在棋盘内可以落子、实现判断黑白棋的输赢。
3.2.1 详细设计
1 .Myframe类
变量定义:
private MyPanel; //新建一个自定义的Jpanel
public JButton btnReset; //创建新游戏按钮
public JButton btnExit;//创建退出
public JButton btnMin;//创建最小化按钮
public JButton btnBfirst;//创建黑子先按钮
public JButton btnWfirst;//创建白子先按钮
按钮的监听器和按钮功能实现:
/**
* 创建新游戏按钮
*/
btnReset = new JButton("\u65B0\u6E38\u620F");
btnReset.setFont(f1);
btnReset.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
myPanel.Reset(); //调用重置棋盘的函数
myPanel.canPlay = true; //开始游戏
myPanel.repeat = true;//解决重复点击设置颜色按钮
repaint();//调用重绘函数
}
});
btnReset.setBounds(432, 351, 142, 58);
myPanel.add(btnReset);
btnReset.setUI(new MyButtonUI());
btnReset.setBackground(new Color(250, 154, 81, 240));
/**
* 创建退出按钮
*/
btnExit = new JButton("\u9000\u51FA");
btnExit.setFont(f2);
btnExit.setBounds(506, 415, 68, 39);
myPanel.add(btnExit);
btnExit.setUI(new MyButtonUI());
btnExit.setBackground(new Color(250, 154, 81, 240));
btnExit.addMouseListener(new MouseAdapter() { //实现按钮单击退出的功能@Override
public void mouseClicked(MouseEvent arg0) {
System.exit(0);
}
});
/**
* 创建最小化按钮
*/