• 隖齜麡开发日志


    Day?:

    这个程序的导火索是srf做的某一道题,而这时正值研究性学习选课题的最后阶段。由于我们没有什么想法,就将五子棋的实现和研究作为了主要课题。

    以下:主要来自czyarl


    ## 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。在这个版本中,我们认为棋盘只能是正方形。因此输入棋盘大小的时候你只需要输入一个数字代表正方形边长。
    * 暂停和过程输出功能:供调试使用。不推荐开启。

    为了获得更加清楚易懂且便于维护的实现,我们在高铁上提出了“三权分立”的概念,即主控制权、UI权和下棋权三权分立,而这些权利都设立一个自己单独的模块。


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

     1 # 教程
     2 
     3 ### 编译
     4 我们给出了一个makefile文件。如果你的电脑中有g++、mingw并支持c++11,你就可以使用这个文件直接编译。
     5 注意,它只会帮你重新编译在上一次编译过后又被改变了的那些.cpp及其影响的文件。这个机制是为了节约编译时间。
     6 如果你希望它重新编译,(假设你编译时输入的指令为mingw32-make)运行指令
     7 
     8 ```
     9 mingw32-make clean
    10 ```
    11 即可。
    12 
    13 #### windows
    14 你可以这样使用:在文件夹中按住shift并右键单击空白处,在选项中找到“在此处打开PowerShell窗口”,单击它。之后在打开的PowerShell窗口中输入以下命令:
    15 ```
    16 mingw32-make
    17 ```
    18 如果你的电脑提示没有此文件,(假设你的MinGW在的文件夹叫MinGW64)可以将你的MinGW64/bin/的完整路径添加到系统的path里面,然后在bin里面找一个名字里带make的.exe,假设为Xmake.exe。然后在刚刚打开的PowerShell窗口里面输入命令Xmake就行了。
    19 如果你打不开PowerShell窗口,可以把上面提到的命令写到.bat里面并运行这个bat也能起到同样的效果。
    20 如果还不行,再说。
    21 
    22 #### linux
    23 请你自己尝试使用mingw的make功能。
    24 
    25 ### 新增AI
    26 
    27 #### 环境及函数
    28 
    29 推荐参考文件Entity1.cpp
    30 * 一个AI需要提供四个函数do_startGame,do_setPos,do_endGame,do_playChess。
    31 * do_startGame为提醒你游戏开始,可以预处理。
    32 * do_setPos为告诉你有人下棋了。会告诉你新棋子的位置和是谁下的(你自己下的也会再告诉你一遍)
    33 * do_endGame为告诉你游戏结束。你应该释放自己动态申请的空间并结束自己开启的所有线程。
    34 * do_playChess为让你下棋。你应当返回一个pair<int,int>表示(行,列)。
    35 * 外部程序会维护若干变量:(你不需要也不应该在四个函数中修改这些变量)
    36 * int role,n,m:分别表示你的颜色,棋盘行数,棋盘列数。
    37 * GameType G:表示游戏胜利规则。目前仅有五子棋一种规则,可以暂时忽略。
    38 * int a[][]:表示棋盘中的状态。理论上用三个变量colorEmpty,colorBlack,colorWhite表示,实际上0表示无棋子,1表示黑棋,2表示白棋。(当然希望你去使用那三个变量,但是无所谓。)
    39 * const int MaxBoardSize=100:表示棋盘最大的大小。
    40 * 可以看一下BasicType.h。里面定义的东西可以直接使用。
    41 * 尽量不要定义宏(如果定义,请使用绝对安全的名字,比如ENTITY4_DO_MAXNUM),但是可以随意include东西。
    42 
    43 #### 新增AI的调试和修改
    44 
    45 假设你将其取名为newEntity,你应该
    46 1. 仿照entity/Entity1建立entity/newEntity.cpp和entity/newEntity.h,将newEntity_do中的private成员改成你的内容,其他函数不应有改动。
    47 2. 修改entity/EntityControl.cpp:MaxEntityType增加1;Player::setPlayer(int)中仿照前文加一句话。
    48 3. 修改entity/Entity.h: 添加#include "newEntity.h"
    49 4. 修改paint/paint.cpp:init仿照已有代码加入新列表。
    50 5. 修改makefile:在最后一条修改SBJS的代码后添加SBJS += newEntity.o;仿照其他代码添加编译newEntity.cpp的语句:
    51 ```
    52 newEntity.o : entity/newEntity.cpp 
    53 g++ -c entity/newEntity.cpp $(CXXFLAGS)
    54 ```
    55 6. 重新编译。如果使用makefile并且之前已经经过编译,他将重新编译newEntity.cpp EntityControl.cpp main.cpp chess_v???.exe。
    TUTORIAL

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

     1 # 教程
     2 
     3 ### 编译
     4 我们给出了一个makefile文件。如果你的电脑中有g++、mingw并支持c++11,你就可以使用这个文件直接编译。
     5 注意,它只会帮你重新编译在上一次编译过后又被改变了的那些.cpp及其影响的文件。这个机制是为了节约编译时间。
     6 如果你希望它重新编译,(假设你编译时输入的指令为mingw32-make)运行指令
     7 
     8 ```
     9 mingw32-make clean
    10 ```
    11 即可。
    12 
    13 #### windows
    14 你可以这样使用:在文件夹中按住shift并右键单击空白处,在选项中找到“在此处打开PowerShell窗口”,单击它。之后在打开的PowerShell窗口中输入以下命令:
    15 ```
    16 mingw32-make
    17 ```
    18 如果你的电脑提示没有此文件,(假设你的MinGW在的文件夹叫MinGW64)可以将你的MinGW64/bin/的完整路径添加到系统的path里面,然后在bin里面找一个名字里带make的.exe,假设为Xmake.exe。然后在刚刚打开的PowerShell窗口里面输入命令Xmake就行了。
    19 如果你打不开PowerShell窗口,可以把上面提到的命令写到.bat里面并运行这个bat也能起到同样的效果。
    20 如果还不行,再说。
    21 
    22 #### linux
    23 请你自己尝试使用mingw的make功能。
    24 
    25 ### 新增AI
    26 
    27 #### 环境及函数
    28 
    29 推荐参考文件Entity1.cpp
    30 * 一个AI需要提供四个函数do_startGame,do_setPos,do_endGame,do_playChess。
    31 * do_startGame为提醒你游戏开始,可以预处理。
    32 * do_setPos为告诉你有人下棋了。会告诉你新棋子的位置和是谁下的(你自己下的也会再告诉你一遍)
    33 * do_endGame为告诉你游戏结束。你应该释放自己动态申请的空间并结束自己开启的所有线程。
    34 * do_playChess为让你下棋。你应当返回一个pair<int,int>表示(行,列)。
    35 * 外部程序会维护若干变量:(你不需要也不应该在四个函数中修改这些变量)
    36 * int role,n,m:分别表示你的颜色,棋盘行数,棋盘列数。
    37 * GameType G:表示游戏胜利规则。目前仅有五子棋一种规则,可以暂时忽略。
    38 * int a[][]:表示棋盘中的状态。理论上用三个变量colorEmpty,colorBlack,colorWhite表示,实际上0表示无棋子,1表示黑棋,2表示白棋。(当然希望你去使用那三个变量,但是无所谓。)
    39 * const int MaxBoardSize=100:表示棋盘最大的大小。
    40 * 可以看一下BasicType.h。里面定义的东西可以直接使用。
    41 * 尽量不要定义宏(如果定义,请使用绝对安全的名字,比如ENTITY4_DO_MAXNUM),但是可以随意include东西。
    42 
    43 #### 新增AI的调试和修改
    44 
    45 假设你将其取名为EntityX(X应该按顺序排下去),你应该
    46 1. 仿照entity/Entity1建立entity/EntityX.cpp和entity/EntityX.h,将EntityX_do中的private成员改成你的内容,并改动其中的一些带编号的Entity名字。其他函数不应有改动。
    47 2. 运行entity/AIs/build.exe
    48 2. 重新编译。如果使用makefile并且之前已经经过编译,他将重新编译newEntity.cpp EntityControl.cpp main.cpp chess_v???.exe。
    TUTORIAL

    2021_1_28

    不出意料地,我们小组又被选上了!好鵺!

    但好像有些东西已经鸽了,不知道后面会不会更新了。

  • 相关阅读:
    CMS、G1收集器
    一文入门Redis
    一文解析TCP/UDP
    ubuntu官方源
    一、单体架构分析
    netty简介2
    netty简介
    安装vmware tool
    jdk1.8安装(转载)
    HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
  • 原文地址:https://www.cnblogs.com/GreenDuck/p/13956063.html
Copyright © 2020-2023  润新知