当前位置: 代码迷 >> C语言 >> 六子棋问题
  详细解决方案

六子棋问题

热度:159   发布时间:2007-12-27 18:54:06.0
六子棋问题
六子棋问题,那位高手帮我改一下?

下面是源程序:
#include "stdio.h"
#include "SearchEngine.h"


BYTE position[GRID_NUM][GRID_NUM];        //棋盘


void main()
{

    int     ChessmanType;    //记录棋子颜色
    char Msg[500];        //保存接收到的消息
    char name[] = "name BitStronger\n";    //队伍信息
    char Move[] = "move AABB\n";    //走法

    int x0,x1,y0,y1;    //坐标

    memset(position,NOSTONE,GRID_COUNT);//初始化棋盘

    while (1)
    {

        //循环接收裁判平台发送的消息
        //注意需要发送的字符串应该以'\n'结束,裁判平台才会认为是一次完整的输入
        //发送完需要调用fflush(stdout)清空输出缓冲区,使字符串立刻输出到裁判平台

        memset(Msg,0,500);
        scanf("%s",Msg);
        if (strcmp(Msg,"name?") == 0)
        {
            //name?
            printf("%s",name);
            fflush(stdout);    
            continue;
        }

        if (strcmp(Msg,"new") == 0)
        {            
            //new
            memset(position,NOSTONE,GRID_COUNT);//初始化棋盘
            scanf("%s",Msg);    
            if (strcmp(Msg,"black") == 0)
            {
                //new black
                Sleep(50); //延迟一段时间发送,经测试,立即发送可能造成平台无响应
                printf("move JJ\n");
                position[9][9] = BLACK;
                fflush(stdout);
                ChessmanType = BLACK;
                continue;
            }
            else
            {
                //new white
                ChessmanType = WHITE;
                continue;
            }
            
        }
        if (strcmp(Msg,"move") == 0)
        {
            //move
            scanf("%s",Msg);
            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]);

                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;

                //将着法记录在棋盘中
                position[x0][y0] = ChessmanType;
                position[x1][y1] = ChessmanType;

                //将着法转换成要发送的字符形式
                y0 = (char)((int)('A') + y0);
                x0 = (char)((int)('S') - x0);
                y1 = (char)((int)('A') + y1);
                x1 = (char)((int)('S') - x1);

                //Move[] = "move AABB\n"
                //修改 "AABB" 并发送
                Move[5] = y0;
                Move[6] = x0;
                Move[7] = y1;
                Move[8] = x1;
                printf("%s",Move);
                fflush(stdout);
            }
        }//move
    }

[[italic] 本帖最后由 chaizhi 于 2007-12-27 18:56 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
  相关解决方案