Skip to content

课设,基于ZWCAD的ObjectArx开发,实现五子棋的基本功能

Notifications You must be signed in to change notification settings

SpicyAndWolf/ChessGame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ObjectArx 开发——五子棋

1. 简述

基于 ZWCAD 的 ObjectArx 开发,实现了五子棋的基本功能。使用的 IDE 是 visual studio 2017,ZWCAD 的版本是 2021 专业版。其他用到的内容有

    1)objectarxwizard2019.msi
    2)Autodesk_ObjectARX_2019_Win_64_and_32_Bit.sfx.exe
    3)ZWCAD_2021_ZRXSDK.exe

预览图:
运行中 一方获胜

2. 功能和思路

导入 zrx 文件后,输入 playGame 指令创建棋盘,游戏开始。玩家点击棋盘下棋,点击悔棋按钮悔棋。当任意一方有>=5 个棋子连在一起时,该方获胜。

2.1. 基本思路

通过 for 循环不断读入用户的点击位置,根据点击的位置确定将进行的操作。

2.2. 预绘制

创建了一个 Chess 自定义实体,并创建了它对应的 Jig。点击前可以预绘制,点击后可以根据它找到点击的位置。如果点击到棋盘外的地方则删除 jig 连接的 Chess 实体。

2.3. 棋子棋盘连接

将棋子和棋盘建立反应器联系,这样棋子的位置可以适应棋盘的移动和缩放。

2.4. 下棋

点击到棋盘内后,创建棋子并存入数据库。打开棋子,在棋盘格内找到离这个棋子圆心最近的一个坐标,设置棋子圆心位置到那里,同时更新棋盘记录的信息。

2.5. 悔棋

设定悔棋按钮的位置,当点击到这个按钮时触发悔棋。具体实现为,在 chessBoard 内定义一个栈,每次下棋就把当前状态存入栈内,当悔棋时弹出先前状态并读取。同时,删除 react 连接和块表内的棋子对象。

2.6. 胜利

根据当前下的点,在其水平竖直以及两个对角方向上遍历,如果遍历到 5 个棋子,则将这五个棋子的颜色改为绿色,并显示胜利提示。

3. 主函数执行顺序

主程序文件为 main.h/cpp,它引用到的函数均在 utils.h/cpp 中定义,其余代码文件为自定义实体和自定义对象。主函数为 main.h 中的 playGame(),在这个过程中先后完成了:

1)创建棋盘、悔棋按钮 createChessBoard()、createRegretButton()
2)开始游戏循环
3)创建棋子 createChess(double,int)
4)判断棋子位置
    bool isPointInPolygon(AcGePoint3d p, AcGePoint3d* vertices, int vertexCount)
5)安放棋子
6)校准棋子位置使其中心变为离它最近的一格棋盘
    AcGePoint3d findClosePoint(AcGePoint3d , CchessBoard* ,int&, int&);
7)将棋子添加到关于棋盘的反应器中
    void addReactor(CchessBoard* , AcDbObjectId );
8)判断是否胜利
    bool isWin(CchessBoard* , int , int , int );
9)胜利时改变棋子颜色否则继续下一轮循环
    void changeColor(CchessBoard* pChessBoard, int, int, int, int, int, int);
10)在画布上打印游戏结果
    void printToScreen(const AcString&, AcGePoint3d);

*)任意时刻点击悔棋按钮,触发悔棋
    bool regret(int& i, CchessBoard* chessBoard, int& chessColor)
*)悔棋功能中的删除反应器部分中,被注释的报错语句那里有问题,不过毕竟运行无误我就把报错注释了。

4.自定义实体/对象

自定义实体有 CchessBoard、Cchess、CchessJig、CchessBoardJig, 自定义对象为 CmyReactor。

5. 用到的特性

5.1. React 反应器

用于监听棋盘的变形和移动,以此校准棋子位置和大小。见 myReactor

5.2. Jig 和 DimData

用于棋盘的初始创建和参数显示,以及棋子放下前的预绘制。见 chessBoardJig 和 chessJig

5.4. 部分 Undo

实现于 ChessBoard 类中,在 setXXX()函数中实现,与 applyPartialUndo()相配合。只是好像还没有用到过

5.4. 夹点、捕捉点

夹点实现于 chessBoard 中,分别用于方便移动棋盘,捕捉点实现于 ChessBoard 中,用于棋子吸附。chess 中也有基础夹点的实现。

About

课设,基于ZWCAD的ObjectArx开发,实现五子棋的基本功能

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published