资源简介

[纯C语言 + Win32 API]一步一步写个围棋程序之二十二:最终代码 Pelles C 编译通过。

资源截图

代码片段和文件信息

#include 
#include “GoBoard.h“


int g_iBoardSize = 19;                                //棋盘线数
BOARDDATA g_BoardData[MAX_BOARDSIZE*MAX_BOARDSIZE];   //棋盘状态数据

int g_iStoneNumber g_iShowStoneNumber;               //棋子总手数、总显示数
STONECOLOR g_cNextColor = BLACK;                      //下一手棋的颜色
STONEDATA g_StoneData[MAX_STONENUMBER];               //棋子信息数据

int g_iBackStoneNumber;                  //棋子备份总手数
STONEDATA g_BackStoneData[MAX_STONENUMBER];           //备份棋子信息数据

int g_iTempStoneNumber;                  //临时棋子备份总手数

STONECOLOR g_BoardExam0[MAX_BOARDSIZE*MAX_BOARDSIZE];          //点目状态各交叉点真实棋子颜色
STONECOLOR g_BoardExam2[MAX_BOARDSIZE*MAX_BOARDSIZE];          //点目状态各交叉点所属颜色
static STONECOLOR g_BoardExam1[MAX_BOARDSIZE*MAX_BOARDSIZE];   //点目状各色棋子边线

static DIRECTION g_HaveCount[MAX_BOARDSIZE*MAX_BOARDSIZE];     //算气、寻找同色子的方向标志
static bool g_NoLiberty[MAX_BOARDSIZE*MAX_BOARDSIZE];          //算气的死活标志


static int Count(unsigned char unsigned char STONECOLOR);
static int CheckLastStone(void);

static void FindSameInBoardExam0(unsigned char unsigned char STONECOLOR bool);
static STONECOLOR DecideCrossColor(unsigned char unsigned char STONECOLOR *p);

static void AddOneStone(unsigned char unsigned char STONECOLOR bool);
static void DeleteLastStone(void);


//清空棋盘状态数据
extern void ClearBoardData(void)
{
    unsigned char i j;

    //棋盘内数据全部归0
    memset(g_BoardData 0 sizeof(g_BoardData));
    //棋盘外围颜色赋 -1
    j = g_iBoardSize+1;
    for(i=0; i<=j; i++)
    {
        g_BoardData[i].c = GREY;
        g_BoardData[MAKESITE(j i)].c = GREY;
        g_BoardData[MAKESITE(i 0)].c = GREY;
        g_BoardData[MAKESITE(i j)].c = GREY;
    }
}

//清空棋子信息数据
extern void ClearStoneData(void)
{
    g_iStoneNumber = g_iShowStoneNumber = 0;
    g_cNextColor = BLACK;
    memset(g_StoneData 0 sizeof(g_StoneData));
}

//拷贝棋子信息数据
extern void CopyStoneData(void)
{
    g_iBackStoneNumber = g_iStoneNumber;
    memcpy(g_BackStoneData g_StoneData sizeof(STONEDATA)*MAX_STONENUMBER);
}

//扫描 g_BoardExam,取得黑白各色子数
extern void ScanBoardExam(int *b int *w int *e)
{
    unsigned char i j;

    *b = *w = *e = 0;

    //由真实棋子确定各色区域线
    for(i=1; i<=g_iBoardSize; i++)
        for(j=1; j<=g_iBoardSize; j++)
            g_BoardExam1[MAKESITE(i j)] = DecideCrossColor(i j g_BoardExam0);

    //确定各色区域线内空格归属该色
    for(i=1; i<=g_iBoardSize; i++)
        for(j=1; j<=g_iBoardSize; j++)
            g_BoardExam2[MAKESITE(i j)] = DecideCrossColor(i j g_BoardExam1);

    //扫描全盘数子
    for(i=1; i<=g_iBoardSize; i++)
        for(j=1; j<=g_iBoardSize; j++)
        {
            if(g_BoardExam2[MAKESITE(i j)] == BLACK)
                (*b)++;
            else if(g_BoardExam2[MAKESITE(i j)] == WHITE)
                (*w)++;
            else
                (*e)++;
        }
}

//初始化点目状态各交叉点真实棋子颜色
extern void InitBoardExam0(void)
{
    unsigned char i j;
    //盘面棋子

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      14863  2012-09-26 09:10  TryHandTalk\GoBoard.c

     文件       3287  2012-09-26 09:10  TryHandTalk\GoBoard.h

     文件      40670  2012-09-26 09:10  TryHandTalk\main.c

     文件       1583  2012-09-26 08:31  TryHandTalk\main.ppj

     文件     442422  2012-09-03 18:15  TryHandTalk\res\board.bmp

     文件      15550  2007-04-22 18:42  TryHandTalk\res\Dead.wav

     文件      17132  2008-06-02 08:00  TryHandTalk\res\Invalid.wav

     文件       8728  2007-04-22 18:39  TryHandTalk\res\Move.wav

     文件      72654  2012-09-03 18:15  TryHandTalk\res\Stone.bmp

     文件      13878  2012-09-07 12:02  TryHandTalk\res\ToolbarDisable.BMP

     文件      13878  2012-09-07 12:03  TryHandTalk\res\ToolbarHover.BMP

     文件      13878  2012-09-07 12:03  TryHandTalk\res\ToolbarNormal.BMP

     文件       2482  2012-09-13 17:46  TryHandTalk\resource.h

     文件       4929  2012-09-26 09:10  TryHandTalk\sgfSupport.c

     文件        762  2012-09-26 09:10  TryHandTalk\sgfSupport.h

     文件       1761  2012-09-26 08:45  TryHandTalk\TryHandTalk.cbp

     文件       2655  2012-09-13 17:46  TryHandTalk\TryHandTalk.rc

     目录          0  2012-09-07 17:41  TryHandTalk\res

     目录          0  2012-09-26 09:12  TryHandTalk

----------- ---------  ---------- -----  ----

               671112                    19


评论

共有 条评论