安阳工学院JA V A课程综合项目报告项目题目:五子棋专业班级:12网工专升本学生姓名:阮营营学生学号:201203060042指导教师姓名:许研2012年12月安阳工学院计算机学院制目录一、系统目标 (2)二、系统设计思路 (2)三、系统详细设计 (2)四、系统实现 (9)五、系统设计总结 (12)六、参考文献 (12)一、系统目标1、主要是介绍开发五子棋的整个过程,体现流程设计与类设计的基本方法,示范了数组的使用,使用了分支结构与循环结构的流程控制2、通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应软件、开发系统软件等各项工作。
3、通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。
二、系统设计思路1、获取棋盘设计一个11╳11围棋棋盘,由两玩家交替进行对战,并可以实现以下功能。
五子棋的规则为:2、下棋方法两人分别执黑白两色棋子。
轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。
3、输赢判断每次下完一颗棋子,就通过程序从横、竖、斜各个方向扫描棋盘,如果在某个方向中,有同种颜色的棋子达到五连子,则此颜色的玩家为赢。
如果没有相同颜色的棋子达到五连子,则继续游戏。
三、系统详细设计3.1程序流程图3.2创建棋盘类,绘制棋盘的样式main方法创建了ChessFrame类的一个实例对象,并启动屏幕显示显示该实例对象。
public static void main(String argc[]) {myframe f = new myframe();}构造五子棋的主窗体:class myframe extends Frame implements WindowListener {mypanel panel;myframe() {setLayout(null);panel = new mypanel();add(panel);panel.setBounds(0, 23, 360, 360);setTitle("单人版五子棋42阮营营");setBounds(200, 200, 360, 383);setVisible(true);addWindowListener(this);初始化棋盘:mypanel() {Is_Black_True = true;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {chess[i][j] = 0;}}规定棋盘的宽度、高度、棋盘的模式:setBounds(0, 0,360 ,360);setVisible(true);窗体响应事件:public void windowDeactivated(WindowEvent e) {}public void windowActivated(WindowEvent e) {}public void windowOpened(WindowEvent e) {}public void windowClosed(WindowEvent e) {}public void windowIconified(WindowEvent e) {}public void windowDeiconified(WindowEvent e) {}3.3编写一个功能判断落子的位置及画出相应的黑白棋子定义鼠标响应事件,判断该坐标位置是否可下棋子:public void mousePressed(MouseEvent e)判断该坐标位置是否可下棋子:void Drawchess(Graphics g) {for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (chess[i][j] == 1) {g.setColor(Color.BLACK);g.fillOval((i + 1) * 30 - 8, (j + 1) * 30 - 8, 16, 16);}if (chess[i][j] == 2) {g.setColor(Color.WHITE);g.fillOval((i + 1) * 30 - 8, (j + 1) * 30 - 8, 16, 16);3.4判断输赢void Justisewiner() {int black_count = 0;int white_count = 0;int i = 0;for (i = 0; i < 11; i++)// 横向判断{for (int j = 0; j < 11; j++) {if (chess[i][j] == 1) {black_count++;if (black_count == 5) {JOptionPane.showMessageDialog(this, "黑棋胜利");Clear_Chess();return;}} else {black_count = 0;}if (chess[i][j] == 2) {white_count++;if (white_count == 5) {JOptionPane.showMessageDialog(this, "白棋胜利");Clear_Chess();return;}} else {white_count = 0;}}}for (i = 0; i < 11; i++)// 竖向判断{for (int j = 0; j < 11; j++) {if (chess[j][i] == 1) {black_count++;if (black_count == 5) {JOptionPane.showMessageDialog(this, "黑棋胜利");Clear_Chess();return;}} else {black_count = 0;}if (chess[j][i] == 2) {white_count++;if (white_count == 5) {JOptionPane.showMessageDialog(this, "白棋胜利");Clear_Chess();return;}} else {white_count = 0;}}}for (i = 0; i < 7; i++)// 左向右斜判断{for (int j = 0; j < 7; j++) {for (int k = 0; k < 5; k++) {if (chess[i + k][j + k] == 1) {black_count++;if (black_count == 5) {JOptionPane.showMessageDialog(this, "黑棋胜利");Clear_Chess();return;}} else {black_count = 0;}if (chess[i + k][j + k] == 2) {white_count++;if (white_count == 5) {JOptionPane.showMessageDialog(this, "白棋胜利");Clear_Chess();return;}} else {white_count = 0;}}}}for (i = 4; i < 11; i++)// 右向左斜判断{for (int j = 6; j >= 0; j--) {for (int k = 0; k < 5; k++) {if (chess[i - k][j + k] == 1) {black_count++;if (black_count == 5) {JOptionPane.showMessageDialog(this, "黑棋胜利");Clear_Chess();return;}} else {black_count = 0;}if (chess[i - k][j + k] == 2) {white_count++;if (white_count == 5) {JOptionPane.showMessageDialog(this, "白棋胜利");Clear_Chess();return;}} else {white_count = 0;}}}}}四、系统实现4.1编译运行源程序4.2获取棋盘4.3下棋4.4判断输赢1.黑棋胜2.白棋胜五、系统设计总结这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。
但可以肯定,这个课设题的要求绝对在我的能力范围以上。
之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。
结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。
尽管这个系统做的并不是那么的完善。
对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。
但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java 中的绝大多数的知识点,如Java图形用户界面设计、Java的异常处理机制、Java 中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。
但是理解了Java的规则要把这个课设做好也不是那么容易,最难的部分是如何实现各个功能的划分和类的通讯问题。
我在这方面就遇到了不少的问题。
总结这次课设,我还是收获不少。
虽然界面也不是很美观,有点功能间的连接做的也不是特别的好,但是我能认识到自己的不足,并且在跟同学的交流中也学到了一些他们的设计思路,也知道今后要加强哪些方面的知识。
六、参考文献1. 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社2.柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社3. (美)CayS.Horsttmann Gary Cornell JAVA核心技术卷i:基础知识(原书第七版):机械工业出版社4.丁振凡 Java 语言实用教程:北京邮电大学出版社。