结对项目 五子棋
实验题目:五子棋
Github地址:https://github.com/zhangmin131/text/blob/master/FiveChessAppletDemoji
结对人博客园链接:http://www.cnblogs.com/xuweizheng/
一.题目简介
本次代码实现的是五子棋小游戏,下棋时每次在适当位置点击鼠标的时候就在所点击的位置上出现你这个角色的颜色的棋子,然后计算机会用另一个颜色的棋子自动的下棋,计算机自动下棋要有一个控制变量来控制能不能下棋。人可以随意的下,可是计算机就要计算在哪个位置下了。这里由计算机下子的算法来确定,人人对战的话就不象单机游戏一样,要计算机来判断人下子之后计算机下那一个地方了,人人对战只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线程类或接口,以便各自能随时单独控制接发消息。
二.结对分工及过程
姓 名 |
学号 |
承 担 的 任 务 |
张敏 |
2013030140001 |
对弈规则的实现,人机对弈,人人对弈,对代码的最终测试 |
徐伟正 |
201303014014 |
棋盘界面设计棋盘颜色模式的设计,菜单选项的设计, |
(1) ChessFrame主要功能
创建五子棋游戏主窗体和菜单。建立五子棋界面的游戏、视图及视图模式等一系列菜单
public ChessFrame() {
this.setTitle("五子棋游戏");
cm=new ChessModel(1);
mp=new MainPanel(cm);
Container con=this.getContentPane();
con.add(mp,"Center");
this.setResizable(false);
this.addWindowListener(new ChessWindowEvent());
MapSize(20,15);
JMenuBar mbar = new JMenuBar();
this.setJMenuBar(mbar);
JMenu gameMenu = new JMenu("游戏");
mbar.add(makeMenu(gameMenu, new Object[] {
"开局", "棋盘","模式", null, "退出"
}, this));
JMenu lookMenu =new JMenu("视图");
mbar.add(makeMenu(lookMenu,new Object[] {
"灰白色","蓝灰色","金属黄"
},this));
JMenu helpMenu = new JMenu("帮助");
mbar.add(makeMenu(helpMenu, new Object[] {
"关于"
}, this));
}
(2)类chessmodel
功能: 实现了整个程序算法的核心,例如通过对棋子的八个方向进行判断,以及计算机走棋方向等
class ChessModel {
//棋盘的宽度、高度、棋盘的模式(如20×15)
private int width,height,modeChess;
//棋盘方格的横向、纵向坐标
private int x=0,y=0;
//棋盘方格的横向、纵向坐标所对应的棋子颜色,
//数组arrMapShow只有3个值:1,2,3,-5,
//其中1代表该棋盘方格上下的棋子为黑子,
//2代表该棋盘方格上下的棋子为白子,
//3代表为该棋盘方格上没有棋子,
//-5代表该棋盘方格不能够下棋子
private int[][] arrMapShow;
//交换棋手的标识,棋盘方格上是否有棋子的标识符
private boolean IsOdd,isExist;
public ChessModel() {}
//该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘
public ChessModel(int modeChess){
this.IsOdd=true;
if(modeChess == 1){
PanelInit(20, 15, modeChess);
}
if(modeChess == 2){
PanelInit(30, 20, modeChess);
}
if(modeChess == 3){
PanelInit(40, 30, modeChess);
}
}
(3)类MainPanel
功能:
1、构建一个面板,在该面板上画上棋盘;
2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)
class MainPanel extends JPanel
implements MouseListener,MouseMotionListener{
private int width,height;//棋盘的宽度和高度
private ChessModel cm;
//根据棋盘模式设定面板的大小
MainPanel(ChessModel mm){
cm=mm;
width=cm.getWidth();
height=cm.getHeight();
addMouseListener(this);
}
//根据棋盘模式设定棋盘的宽度和高度
public void setModel(ChessModel mm){
cm = mm;
width = cm.getWidth();
height = cm.getHeight();
}
(4)类ChessWindowEvent
主要针对该程序的窗口事件
class ChessWindowEvent extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
ChessWindowEvent()
{
}
}
四.测试情况
主界面进入方式及界面截图
运行程序即可进入主界面
(1)游戏菜单
包括游戏、视图、帮助三个菜单。通过游戏菜单下的棋盘子菜单可以选择棋盘的大小,有三种选择。
通过此菜单可以选择对弈模式,分别有人机对弈和人人对弈。
(2)视图菜单
分别由三种不同的颜色的棋盘,可以根据自己的喜好进行选择,灰白色为默认棋盘颜色。
(3)帮助菜单
开始游戏:(在此选择人机对弈)
先达到五子连珠的即是赢家,可以自己动脑进行游戏。
白棋代表计算机,黑棋先开始走,此图为计算机先达到了在同一个方向上五个白棋
所以玩家输了
此图为玩家赢先达到五子连珠的即是赢家,可以自己动脑进行游戏。
(4)测试情况
第一次测试没有成功,经检查后代码出错。
测试成功后
六、实验总结
通过本课程设计,跟结对人借助网络并结合自己的专业知识编译一个小程序,虽说在设计的过程中遇到了很多错误,但也通过跟结对伙伴互相商量讨论得到了解决,并且两人的基础知识都得到了提高,使知识运用的更熟练,并能学以致用。从中把程序的语法编译规则弄的也更清楚,使用Eclipse 也更加的得心应手,而且也大大的提高了工作效率。总而言之,我明白了,即使过程是坎坷的,只要耐下心来,总能成功的。