• 大小: 8KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-31
  • 语言: 其他
  • 标签: 四子棋  AI  

资源简介

人工智能重力四子棋的AI,α-β剪枝实现。效果很不错。

资源截图

代码片段和文件信息

#include “Judge.h“

bool userWin(const int x const int y const int M const int N int* const* board){
//横向检测
    int i j;
    int count = 0;
    for (i = y; i >= 0; i--)
        if (!(board[x][i] == 1))
            break;
    count += (y - i);
    for (i = y; i < N; i++)
        if (!(board[x][i] == 1))
            break;
    count += (i - y - 1);
    if (count >= 4) return true;

    //纵向检测
    count = 0;
    for (i = x; i < M; i++)
        if (!(board[i][y] == 1))
            break;
    count += (i - x);
    if (count >= 4) return true;

    //左下-右上
    count = 0;
    for (i = x j = y; i < M && j >= 0; i++ j--)
        if (!(board[i][j] == 1))
            break;
    count += (y - j);
    for (i = x j = y; i >= 0 && j < N; i-- j++)
        if (!(board[i][j] == 1))
            break;
    count += (j - y - 1);
    if (count >= 4) return true;

    //左上-右下
    count = 0;
    for (i = x j = y; i >= 0 && j >= 0; i-- j--)
        if (!(board[i][j] == 1))
            break;
    count += (y - j);
    for (i = x j = y; i < M && j < N; i++ j++)
        if (!(board[i][j] == 1))
            break;
    count += (j - y - 1);
    if (count >= 4) return true;

    return false;
}

bool machineWin(const int x const int y const int M const int N int* const* board){
//横向检测
    int i j;
    int count = 0;
    for (i = y; i >= 0; i--)
        if (!(board[x][i] == 2))
            break;
    count += (y - i);
    for (i = y; i < N; i++)
        if (!(board[x][i] == 2))
            break;
    count += (i - y - 1);
    if (count >= 4) return true;

    //纵向检测
    count = 0;
    for (i = x; i < M; i++)
        if (!(board[i][y] == 2))
            break;
    count += (i - x);
    if (count >= 4) return true;

    //左下-右上
    count = 0;
    for (i = x j = y; i < M && j >= 0; i++ j--)
        if (!(board[i][j] == 2))
            break;
    count += (y - j);
    for (i = x j = y; i >= 0 && j < N; i-- j++)
        if (!(board[i][j] == 2))
            break;
    count += (j - y - 1);
    if (count >= 4) return true;

    //左上-右下
    count = 0;
    for (i = x j = y; i >= 0 && j >= 0; i-- j--)
        if (!(board[i][j] == 2))
            break;
    count += (y - j);
    for (i = x j = y; i < M && j < N; i++ j++)
        if (!(board[i][j] == 2))
            break;
    count += (j - y - 1);
    if (count >= 4) return true;

    return false;
}

bool isTie(const int N const int* top){
bool tie = true;
    for (int i = 0; i < N; i++)
    {
        if (top[i] > 0)
        {
            tie = false;
            break;
        }
    }
    return tie;
}

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

     文件        503  2013-06-07 16:52  Point.h

     文件      15372  2013-06-10 05:26  Strategy.cpp

     文件       4383  2013-06-10 05:23  Strategy.h

     文件       2730  2013-06-07 16:52  Judge.cpp

     文件       2517  2013-06-07 16:52  Judge.h

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

                25505                    5


评论

共有 条评论