博弈大赛赛前培训_六棋子程序的实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LOGO
六子棋博弈程序
计算机博弈与人工智能协会
计算机博弈与人工智能
讲解要点
机器博弈交互平台 本次大赛通信协议 博弈程序整体设计思路 博弈程序核心模块
本次大赛的一些相关说明
计算机博弈与人工智能
机ຫໍສະໝຸດ Baidu博弈交互平台
棋盘
6 2
3
15
裁判系统
5
黑方程序
1
3 1
4
白方程序
计算机博弈与人工智能
本次大赛通信协议
BYTE x; BYTE y; }STONEPOS;
//走法
typedef struct _stonemove
{
STONEPOS StonePos[2];
int
Score;
}STONEMOVE;
//棋子位置 //走法的分数
计算机博弈与人工智能
示例代码
主函数,程序的入口
void main()
{
int ChessmanType;
if (strcmp(Msg,“black”) == 0) //确定我方棋子的颜色
{
Sleep(50);
//延迟一段时间发送,经测试,立即发 送可
//能造成平台无响应
printf("move JJ\n");
position[9][9] = BLACK;
fflush(stdout);
ChessmanType = BLACK;
白棋(WHITE):1 无子(NOSTONE):0xff
计算机博弈与人工智能
示例代码
宏定义:
#define GRID_NUM 19 //棋盘行数
#define GRID_COUNT 361 //可放棋子总数
#define BLACK 0
//黑棋
#define WHITE 1
//白棋
#define NOSTONE 0xff
//将着法记录在棋盘中 position[x0][y0] = ChessmanType; position[x1][y1] = ChessmanType;
计算机博弈与人工智能
示例代码
while (1) {
//循环接收裁判平台发送的消息,注意需要发送的字符串应该 //以'\n'结束,裁判平台才会认为是一次完整的输入. //发送完需要调用fflush(stdout)清空输出缓冲区,使字符串 //立刻输出到裁判平台 memset(Msg,0,500); scanf("%s",Msg); if (strcmp(Msg,"name?") == 0) {
position[x0][y0] = !ChessmanType; position[x1][y1] = !ChessmanType; }
计算机博弈与人工智能
示例代码
if (SearchAGoodMove(position,ChessmanType)) {
//获得着法的坐标 x0 = m_cmBestMove.StonePos[0].x; y0 = m_cmBestMove.StonePos[0].y; x1 = m_cmBestMove.StonePos[1].x; y1 = m_cmBestMove.StonePos[1].y;
计算机博弈与人工智能
示例代码
if (Msg[2] == ‘\0’) //接收黑方的第一着 {
//move XX\n y0 = (int)(Msg[0]) - (int)('A'); x0 = (int)('S') - (int)(Msg[1]); position[x0][y0] = !ChessmanType; }
计算机博弈与人工智能
示例代码
else //接收对方的招法,一般招法都是一着下两个子 {
//move XYXY\n y0 = (int)(Msg[0]) - (int)('A'); x0 = (int)('S') - (int)(Msg[1]); y1 = (int)(Msg[2]) - (int)('A'); x1 = (int)('S') - (int)(Msg[3]);
接受裁判系统信息:scanf("%s",Msg);
传回裁判系统信息:printf("%s",Move);
1.确定队名:"name?“ 传回队名: "name BitStronger\n“
2.开局:"new" 3.确定黑白方:
黑方:"black" 白方:"white" 4.发送、接收招法 //先横向坐标,后纵向坐标 黑方第一步:move X0Y0
continue;
计算机博弈与人工智能
示例代码
else // if (strcmp(Msg,“white”) == 0) {
ChessmanType = WHITE; continue; } } //确定棋型颜色结束
if (strcmp(Msg,"move") == 0) {
//接收对方的招法 scanf("%s",Msg);
//无棋
全局变量:
BYTE position [GRID_NUM][GRID_NUM]; //棋盘
STONEMOVE m_cmBestMove; //记录着法
注: #include "windows.h"
typedef unsigned char BYTE
计算机博弈与人工智能
示例代码
结构定义: //棋子位置 typedef struct _stoneposition {
printf("%s",name); fflush(stdout); continue; }
计算机博弈与人工智能
示例代码
if (strcmp(Msg,“new”) == 0) //新开局
{
memset(position,NOSTONE,GRID_COUNT); //初始化 棋盘
scanf("%s",Msg);
//记录棋子颜色
char Msg[500];
//保存接收到的消息
char name[] = “name 中国深度\n"; //队伍信息
char Move[] = "move AABB\n";
//走法
int x0,x1,y0,y1; //坐标
//初始化棋盘 memset ( position, NOSTONE, GRID_COUNT);
其他步数:move X0Y0X1Y1
计算机博弈与人工智能
博弈程序整体设计思路
实际问题
数学建模
算法
编程、调试
得到结果
计算机博弈与人工智能
棋盘表示
六子棋棋盘由19条横线和19条纵线组成。 棋盘一共有19*19=361个交点。
交点出现的可能情况:无子、黑子、白子
棋盘:char position[19][19]; 棋子: 黑棋(BLACK):0
六子棋博弈程序
计算机博弈与人工智能协会
计算机博弈与人工智能
讲解要点
机器博弈交互平台 本次大赛通信协议 博弈程序整体设计思路 博弈程序核心模块
本次大赛的一些相关说明
计算机博弈与人工智能
机ຫໍສະໝຸດ Baidu博弈交互平台
棋盘
6 2
3
15
裁判系统
5
黑方程序
1
3 1
4
白方程序
计算机博弈与人工智能
本次大赛通信协议
BYTE x; BYTE y; }STONEPOS;
//走法
typedef struct _stonemove
{
STONEPOS StonePos[2];
int
Score;
}STONEMOVE;
//棋子位置 //走法的分数
计算机博弈与人工智能
示例代码
主函数,程序的入口
void main()
{
int ChessmanType;
if (strcmp(Msg,“black”) == 0) //确定我方棋子的颜色
{
Sleep(50);
//延迟一段时间发送,经测试,立即发 送可
//能造成平台无响应
printf("move JJ\n");
position[9][9] = BLACK;
fflush(stdout);
ChessmanType = BLACK;
白棋(WHITE):1 无子(NOSTONE):0xff
计算机博弈与人工智能
示例代码
宏定义:
#define GRID_NUM 19 //棋盘行数
#define GRID_COUNT 361 //可放棋子总数
#define BLACK 0
//黑棋
#define WHITE 1
//白棋
#define NOSTONE 0xff
//将着法记录在棋盘中 position[x0][y0] = ChessmanType; position[x1][y1] = ChessmanType;
计算机博弈与人工智能
示例代码
while (1) {
//循环接收裁判平台发送的消息,注意需要发送的字符串应该 //以'\n'结束,裁判平台才会认为是一次完整的输入. //发送完需要调用fflush(stdout)清空输出缓冲区,使字符串 //立刻输出到裁判平台 memset(Msg,0,500); scanf("%s",Msg); if (strcmp(Msg,"name?") == 0) {
position[x0][y0] = !ChessmanType; position[x1][y1] = !ChessmanType; }
计算机博弈与人工智能
示例代码
if (SearchAGoodMove(position,ChessmanType)) {
//获得着法的坐标 x0 = m_cmBestMove.StonePos[0].x; y0 = m_cmBestMove.StonePos[0].y; x1 = m_cmBestMove.StonePos[1].x; y1 = m_cmBestMove.StonePos[1].y;
计算机博弈与人工智能
示例代码
if (Msg[2] == ‘\0’) //接收黑方的第一着 {
//move XX\n y0 = (int)(Msg[0]) - (int)('A'); x0 = (int)('S') - (int)(Msg[1]); position[x0][y0] = !ChessmanType; }
计算机博弈与人工智能
示例代码
else //接收对方的招法,一般招法都是一着下两个子 {
//move XYXY\n y0 = (int)(Msg[0]) - (int)('A'); x0 = (int)('S') - (int)(Msg[1]); y1 = (int)(Msg[2]) - (int)('A'); x1 = (int)('S') - (int)(Msg[3]);
接受裁判系统信息:scanf("%s",Msg);
传回裁判系统信息:printf("%s",Move);
1.确定队名:"name?“ 传回队名: "name BitStronger\n“
2.开局:"new" 3.确定黑白方:
黑方:"black" 白方:"white" 4.发送、接收招法 //先横向坐标,后纵向坐标 黑方第一步:move X0Y0
continue;
计算机博弈与人工智能
示例代码
else // if (strcmp(Msg,“white”) == 0) {
ChessmanType = WHITE; continue; } } //确定棋型颜色结束
if (strcmp(Msg,"move") == 0) {
//接收对方的招法 scanf("%s",Msg);
//无棋
全局变量:
BYTE position [GRID_NUM][GRID_NUM]; //棋盘
STONEMOVE m_cmBestMove; //记录着法
注: #include "windows.h"
typedef unsigned char BYTE
计算机博弈与人工智能
示例代码
结构定义: //棋子位置 typedef struct _stoneposition {
printf("%s",name); fflush(stdout); continue; }
计算机博弈与人工智能
示例代码
if (strcmp(Msg,“new”) == 0) //新开局
{
memset(position,NOSTONE,GRID_COUNT); //初始化 棋盘
scanf("%s",Msg);
//记录棋子颜色
char Msg[500];
//保存接收到的消息
char name[] = “name 中国深度\n"; //队伍信息
char Move[] = "move AABB\n";
//走法
int x0,x1,y0,y1; //坐标
//初始化棋盘 memset ( position, NOSTONE, GRID_COUNT);
其他步数:move X0Y0X1Y1
计算机博弈与人工智能
博弈程序整体设计思路
实际问题
数学建模
算法
编程、调试
得到结果
计算机博弈与人工智能
棋盘表示
六子棋棋盘由19条横线和19条纵线组成。 棋盘一共有19*19=361个交点。
交点出现的可能情况:无子、黑子、白子
棋盘:char position[19][19]; 棋子: 黑棋(BLACK):0