• 【研究性学习】五子棋开发日志


    我懒得更新这里了。如果有兴趣就看github仓库吧。
    ——懒惰的czyarl,2021.10.24

    教程

    运行

    在成功编译之后,你可以将编译出来的可执行文件放到任何地方执行。

    编译

    我们给出了一个makefile文件。如果你的电脑中有g++、mingw并支持c++11,你就可以使用这个文件直接编译。
    注意,它只会帮你重新编译在上一次编译过后又被改变了的那些.cpp及其影响的文件。这个机制是为了节约编译时间。
    如果你希望它重新编译,(假设你编译时输入的指令为mingw32-make)运行指令

    mingw32-make clean
    

    即可。

    windows

    你可以这样使用:在文件夹中按住shift并右键单击空白处,在选项中找到“在此处打开PowerShell窗口”,单击它。之后在打开的PowerShell窗口中输入以下命令:

    mingw32-make
    

    如果你的电脑提示没有此文件,(假设你的MinGW在的文件夹叫MinGW64)可以将你的MinGW64/bin/的完整路径添加到系统的path里面,然后在bin里面找一个名字里带make的.exe,假设为Xmake.exe。然后在刚刚打开的PowerShell窗口里面输入命令Xmake就行了。
    如果你打不开PowerShell窗口,可以把上面提到的命令写到.bat里面并运行这个bat也能起到同样的效果。
    如果还不行,再说。

    linux

    请你自己尝试使用mingw的make功能。

    新增AI

    环境及函数

    推荐参考文件Entity1.cpp

    • 一个AI需要提供四个函数do_startGame,do_setPos,do_endGame,do_playChess。
      • do_startGame为提醒你游戏开始,可以预处理。
      • do_setPos为告诉你有人下棋了。会告诉你新棋子的位置和是谁下的(你自己下的也会再告诉你一遍)
      • do_endGame为告诉你游戏结束。你应该释放自己动态申请的空间并结束自己开启的所有线程。
      • do_playChess为让你下棋。你应当返回一个pair<int,int>表示(行,列)。
    • 外部程序会维护若干变量:(你不需要也不应该在四个函数中修改这些变量)
      • int role,n,m:分别表示你的颜色,棋盘行数,棋盘列数。
      • GameType G:表示游戏胜利规则。目前仅有五子棋一种规则,可以暂时忽略。
      • int a[][]:表示棋盘中的状态。理论上用三个变量colorEmpty,colorBlack,colorWhite表示,实际上0表示无棋子,1表示黑棋,2表示白棋。(当然希望你去使用那三个变量,但是无所谓。)
      • const int MaxBoardSize=100:表示棋盘最大的大小。
    • 可以看一下BasicType.h。里面定义的东西可以直接使用。
    • 尽量不要定义宏(如果定义,请使用绝对安全的名字,比如ENTITY4_DO_MAXNUM),但是可以随意include东西。

    新增AI的调试和修改

    假设你将其取名为EntityX(X应该按顺序排下去),你应该

    1. 仿照entity/Entity1建立entity/EntityX.cpp和entity/EntityX.h,将EntityX_do中的private成员改成你的内容,并改动其中的一些带编号的Entity名字。其他函数不应有改动。
    2. 运行entity/AIs/build.exe
    3. 重新编译。如果使用makefile并且之前已经经过编译,他将重新编译newEntity.cpp EntityControl.cpp main.cpp chess_v???.exe。

    版本更新日志

    v0.000000001 chess_dos_randomAI

    这是一个相当愚蠢的版本。
    entity里面放置了几个AI。在这份文档里面是一个随机下棋的AI(Entity1),一个行优先按顺序扫描能放就放的AI(Entity2)和一个从stdin读入坐标的AI(Entity3)。
    basic里面放置了基本struct的定义。现在里面定义了一个棋盘和一个游戏模式。
    chess.cpp 是主程序。
    你可以通过makefile编译。编译输出文件为shiyan
    编译前请确保你有g++和make。

    更进一步的开发请等一等,我要去写题了。

    v0.1 chess_visible_randomAI

    pcftxdy!实现可视化了!我们有了一个优美简洁的UI界面!
    BasicDef.h里面更新了一个从UI获取用户落子地点的函数UI_getPos。
    更新了一个Entity4,其中实现了从UI界面获取用户落子地点的真·人工智能。
    当然,在这个版本里,你也可以观察两个AI对战。

    但是测试时候发现了一个问题:如果是AI对战,落子两轮之后才会在UI上面显示。如果是PVE,这一轮完了UI上面才显示。

    v0.1.1

    我们加入了一些选项。
    你可以设置棋盘大小,游戏规则(现在只开发了一个,就是经典的排成一条线,但是你可以设置长度),这一局使用的AI(我们有4个AI,编号为1至4,每种有2个,编号为0到1;你应当先输入种类,再输入这种的第几个。如果你输入相同的两个AI,我也不知道会发生什么。)
    你可以在AI自动对战的时候,选择每下一步就暂停一下。

    我不想进一步开发,去写题了。大家快写点厉害的AI。

    v0.6.1

    已经好几个版本没有更新readme了!

    伟大的pcf实现了纯UI控制,但是愚蠢的czy加上了一个让AI进行大规模对抗的功能,导致你必须在运行程序时,先用dos窗口选择功能。

    UI

    纯UI控制相信大家都能看懂。值得一提的是,如果你选择让两个AI对抗,点击start之后,你必须把鼠标从start上面移开程序才会正常工作。不过这不是大问题,就先不修了。

    大规模对抗功能

    大规模对抗功能使用的时候,我们将不会创建UI窗口。在读入基本设定之后,程序将按此设定自动运行给定的次数。只会在最后的时候输出黑白双方各自的胜利次数。

    • AI编号:1:随机下棋;2:初级智能AI;3:从stdin读取坐标。
    • 棋盘大小:最大为100* 100。在这个版本中,我们认为棋盘只能是正方形。因此输入棋盘大小的时候你只需要输入一个数字代表正方形边长。
    • 暂停和过程输出功能:供调试使用。不推荐开启。

    v0.6.2

    1. 更新了readme中的教程。
    2. Entity2被偷梁换柱成了pcf的一个只知进攻的AI。
    3. czy写了个新的AI,叫Entity4,是Entity2的魔改版。这个AI太强了!我们都被打爆了!

    v0.6.5

    这是好几个版本累计的更新了。放在一起,就当是这个版本的更新吧。

    1. srf写了一个AI,强度挺好的。
    2. pcf为UI开发了一个船新功能:可以显示每个子是哪一手。就更方便调试分析了。

    v0.6.6

    1. csl写了个Entity6,打爆了czy的Entity4。
    2. 曾经我们认为第一点是对的,但是后来发现这两个AI实际上是先手优势放大机。
    3. czy更新了一个由Entity4改过来的Entity7。

    v0.7

    这是一个大进步!
    我们在保留已有entity接口的同时,优化了新AI的添加逻辑。现在你只需要将同名的按顺序编号的EntityX.cpp和EntityX.h放到entity/AIs/里面并运行__build.exe就可以重新利用makefile编译了。
    但是此时我们的一些细节还有一点点问题。

    v0.7.1

    我们提供了两个全新的功能:撤回以及记录整盘棋局的每步操作。
    snz写了一个新的AI:Entity11。

    v0.7.1.1

    1. 略微修复了部分v0.7.1中的小bug。
    2. 为v0.7.1找回了v0.6.6中更新的Entity7
    3. 顺便说一句,刚刚完成中期汇报。很刺激。
    4. 有没有神仙来写深度学习?

    v0.7.1.2

    1. 因为明天的汇报重启了这个项目(雾。
    2. czy添加了一个可以自行调参的AI: Entity8。
    3. 有没有神仙来写深度学习?
  • 相关阅读:
    读写二进制c# 二进制读写
    重构风险程序员一定要遵守的规则
    文件区域使用fcntl锁定文件,并且测试
    数据清空js清空div里的数据问题
    模板缓存ThinkPHP中的模板引擎和视图层
    描述null11121 Base 2
    操作系统请求操作系统 算法
    工程项目eclipse项目名前出现红色感叹号,小红叉解决
    程序链接关于静态链接,动态链接,共享库,ABI的一些记录(os学习)
    NMAKE命令行编译
  • 原文地址:https://www.cnblogs.com/czyarl/p/14563664.html
Copyright © 2020-2023  润新知