黑白棋的人人对战代码编写(黑白棋吃子规则)

黑白棋简单对战下载链接(只能实现人人对战,人机,网络自行编写,大致模板已经有了):

黑白棋人人对战实现(人机,网络暂不可用,自行编写)-桌面系统文档类资源-CSDN下载

黑白棋吃子规则:

int ChessForm::judge(int x,int y,void *chess,Chess::ChessBg currentRole,bool eatChess)
{
    //黑白棋落子规则
          //除非至少翻转了对手的一个棋子,否则就不能落子。如果一方没有合法棋步,也就是说不管他下到哪里,
          //都不能至少翻转对手的一个棋子,那他这一轮只能弃权,而由他的对手继续落子直到他有合法棋步可下。
    //棋盘的八个方向
    int dir[8][2]={{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{0,1},{1,1}};
    int tempx=x,tempy=y;                       //保存临时棋盘数组坐标位置
    int i=0,eat=0;                             //初始化数据
    typedef int(*p)[19];                        //自定义类型
    p chessFalg=p(chess);                     //类型转换

    if(chessFalg[tempx][tempy] != 0)     //如果此方格内已有棋子,返回
    {
        return 0;
    }
    //棋盘的八个方向
    for(i=0;i<8;i++)
    {
        tempx +=dir[i][0];
        tempy +=dir[i][1];      //准备判断相邻的棋子

        //如果没有出界,且相邻棋子是对方棋子,才有吃子的可能
        if(tempx<=18 && tempx>=1 && tempy<=18 && tempy>=1
                &&(chessFalg[tempx][tempy] != currentRole) && (chessFalg[tempx][tempy] != Chess::Empty))
        {
            tempx +=dir[i][0];
            tempy +=dir[i][1];   //判断下一个,向前走一步
            while(tempx <=18 &&tempx >=1 &&tempy<=18 && tempy >=1)
            {
                if(chessFalg[tempx][tempy] ==0) //遇到空位跳出
                {
                    break;
                }
                if(chessFalg[tempx][tempy]==currentRole) //找到自己的棋子,代表可以吃子
                {
                    if(eatChess == true)           //确定吃子
                    {
                        chessFalg[x][y]=currentRole;
                        tempx -= dir[i][0];
                        tempy -= dir[i][1];          //后退一步
                        while(tempx != x || tempy != y)    //只要没有回到开始位置就执行
                        {
                            chessFalg[tempx][tempy] = currentRole;         //标志为自己的棋子
                            tempx -= dir[i][0];              //继续后退一步
                            tempy -= dir[i][1];
                            eat++;                   //累计
                        }
                    }
                    else     //不吃子只是判断这个位置能不能吃子
                    {
                        tempx -=dir[i][0];
                        tempy -=dir[i][1];       //后退一步
                        while(tempx != x || tempy != y)     //只计算可以吃子的个数
                        {
                            tempx -=dir[i][0];
                            tempy -=dir[i][1];        //继续后退一步
                            eat++;
                        }
                    }
                    break;
                }//没有找到自己的棋子,就向前走一步
                tempx += dir[i][0];
                tempy += dir[i][1];
            }
        }//如果这个方向不能吃子,就换一个方向
        tempx =x;
        tempy=y;
    }
    return eat;
}
 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的黑白棋人人对战的Python代码: ```python import numpy as np # 初始化棋盘 board = np.zeros((8, 8)) board[3][3] = 1 board[4][4] = 1 board[3][4] = -1 board[4][3] = -1 # 定义落子函数 def place(board, player, row, col): if board[row][col] != 0: return False directions = [[-1, 0], [1, 0], [0, -1], [0, 1], [-1, -1], [1, 1], [-1, 1], [1, -1]] other_player = -player to_flip = [] for d in directions: r, c = row, col r += d[0] c += d[1] if r < 0 or r >= 8 or c < 0 or c >= 8: continue if board[r][c] == other_player: r += d[0] c += d[1] if r < 0 or r >= 8 or c < 0 or c >= 8: continue while board[r][c] == other_player: r += d[0] c += d[1] if r < 0 or r >= 8 or c < 0 or c >= 8: break if r < 0 or r >= 8 or c < 0 or c >= 8: continue if board[r][c] == player: while True: r -= d[0] c -= d[1] if r == row and c == col: break to_flip.append([r, c]) if len(to_flip) == 0: return False board[row][col] = player for r, c in to_flip: board[r][c] = player return True # 定义判断是否有合法落子点的函数 def has_legal_moves(board, player): for row in range(8): for col in range(8): if board[row][col] == 0: if place(board, player, row, col): return True return False # 定义判断胜负的函数 def get_winner(board): black_score = np.sum(board == 1) white_score = np.sum(board == -1) if black_score > white_score: return 1 elif white_score > black_score: return -1 else: return 0 # 定义主函数 def main(): player = 1 while has_legal_moves(board, player): print(board) print("Player", player) row = int(input("Enter row: ")) col = int(input("Enter column: ")) if place(board, player, row, col): player = -player print(board) winner = get_winner(board) if winner == 1: print("Black wins!") elif winner == -1: print("White wins!") else: print("Tie!") if __name__ == '__main__': main() ``` 这个代码实现了一个简单的黑白棋人人对战游戏,玩家可以通过输入行和列来落子,程序会自动判断是否合法,并进行翻。最后,程序会输出胜利者或者平局。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值