JAVA游戏直棋(一)

本模块为游戏规则和界面设计,计划于2005.3.9完成。目前进展顺利,预计将提前一天完成。

本模块分两部分:
1)界面设计。准备需要的图片文件等;设计图形界面;该部分设计已完成,耗费时间两天。主要类:
MainFrame:游戏窗口,初步定为游戏本身,将拥有三个逻辑成员:
       UI:游戏界面,只负责显示;(完成)
       GameMaster:游戏管理者,负责游戏秩序,监控玩家行为及修改游戏状态。
       StateObserver:游戏状态观察者,观察游戏状态并在UI上显示。(完成)

2)游戏规则设计。设计游戏规则及ChessPlayer和游戏间的互动。主要类:
GameMaster:游戏管理者,负责游戏秩序,监控玩家行为及修改游戏状态。当玩家为人类时,监控若干ChessGrid及三个辅助JButton;当玩家

为电脑AI时,监控AI得到落子位置。根据落子的位置及规则,做出相应的行为。最后修改游戏状态GameState,包括记录棋谱和切换用户,由

GameState激发其观察者StateObserver修改状态显示。其拥有的域为:
       ChessGrid[][][]:棋格数组
       JButton[]:辅助按钮
       GameState:游戏状态,拥有两个玩家,或为人类或为AI;

GameMaster部分算法:

mouseClicked() {
    //handle mouse event
    //假如落子位置合法,关闭ChessGrid监控
    status = checkStep(current);
        //假如需要辅助输入,开启辅助Button监控;return;
    nextPlayer();
}
...
actionPerformed() {
    handle(Decision);
    nextPlayer();
}
...
nextPlayer() {
    //ready for next player
    GameState.addStep(current,Decision);
    GameState.nextPlayer();
    while(!GameState.isHumanTurn()) {
        decision = GameState.getNextStep(current);
        status = checkStep(current);
            //假如需要辅助输入,因为AI在计算current时必定已考虑好如何输入
            handle(decision);
        GameState.addStep(current,Decision);
        GameState.nextPlayer();
    }
    //开启ChessGrid监控,准备接受人类输入
}

GameState:为被观察者。拥有两个ChessPlayer,nextPlayer()中,首先notifyObserver()修改状态,然后指向下一个ChessPlayer。在

getNextStep()中,调用当前ChessPlayer提供的getNextStep()方法,获取AI计算结果。

StateObserver:为观察者。观察GameState的状态并做出相应修改。

目前剩余的任务有:
1)GameMaster中需要判断游戏结束。游戏结束条件将在下列条件中选择:
        a)无法继续落子判和
        b)一方子全灭判输
        c)一方落子时间超过期限判输
        d)一方三子连珠判赢
2)GameMaster中增加时间限制
3)通过MainFrame中的菜单对游戏进行控制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序功能简介 该程序是TICTACTOE游戏,棋盘为3*3,3个棋子连起来即为赢。输入参数时,若输入的数字超过边界或在已有棋子的地方再输入,则提示出错,要求重新输入。 课程设计要求 1. 将程序改写成类。 2. 将棋盘扩充成4*4。 3. 统计输赢结果并打印输出。 4. 选做:使游戏更生动。(输赢条件相同) 评定难易程度:B 程序设计思想 设计一个玩家下棋的操作类,里面封装了棋盘﹑棋子类别和输赢次数等成员数据。 操作类的函数包括有初始化棋盘﹑下棋﹑判断输赢等。定义一个类的对象,在调用类中函数时直接使用对象名加函数名即可。 将两个玩家定义为两个数组用于区分他们的信息,分别用‘O’和‘X’代表两个玩家所用棋子,然后分别对两个玩家通过已定义的类的对象调用类中的函数,完成下棋过程。 进一步改进程序: 1. 程序中用if else if格式的语句来判断玩家的输赢,当棋盘增大时,三子连珠的各种可能性成倍增加,使得语句非常繁琐,所以将其改为for语句的循环结构进行判断,当棋盘增大时,只需更改循环条件结束的参数即可,可灵活使用于各种尺寸的棋盘。 2. 为防止用户误操作,特别是在姓名的输入时的失误,可以采用cin.getline函数读入在判断确认。 3. 在完成第一步的基础上可将三子连珠扩充为标准的五子棋。 论文名称:VC 课程设计报告 欢迎下载!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值