alpha,beta回溯法实现简单井字游戏(三子棋)

这篇博客介绍如何用回溯法实现简单的井字游戏(三子棋),包括人机大战的规则和胜利条件。文章详细阐述了游戏的思路,如初始化棋盘、判断胜负和平局的逻辑,以及人和机器交替走棋的过程。代码实现中,机器通过回溯法选择最优走法,确保高胜率或平局。
摘要由CSDN通过智能技术生成

今天做了一个实验题,要求用回溯法实现简单的井字棋游戏,可以理解为人机大战,胜利的条件为任一方在3*3的棋盘上自己的棋子在任何方向上有3个子连在一起,就算赢了。

 

一. 思路

     1. 初始化。无论你做什么程序,第一步都需要初始化,我们需要将棋盘初始化每个位子的子都显示为0,如果人下了一个子,那么显示为P,机器下了一个子,显示为C。调用一个print函数将初始化的棋盘输出来。如果人先走棋,就输入所要走的横坐标和纵坐标即可。如果是机器先走,那么在初始化的时候就应该随机初始化一个机器要走的地方,然后利用print函数将棋盘输出。

     2. 走棋之前。我们需要定义一个函数去判断每一次棋盘是怎样的。也就是有没有人获胜,或者平局。所有获胜的情况总共也没几种,是可以全部写在if中的。然后如果棋盘没有空的地方,而且没有一方获胜,那么就是平局。所以每次不管是谁,走棋之前都要判断两个角色是否赢了比赛,或者是否棋盘为空。

    3. 开始下棋:人和机器不断切换。人走完,角色切换到机器,机器走完角色切换到人就行了。

          (1)如果是人走棋,输入横纵坐标,然后根据横纵坐标找到棋盘位置,如果那个位置还没被占用,就将那个位置改为P。再次print即可。

          (2)如果是机器走棋,它会用回溯法去遍历在当前情况下,所有可能的情况,并且他会走一个能让他赢得概率最大的情况。然后将那个地方改为C,再次print即可。

 

二. 代码

package cn.chinatelecom.test;

import java.util.Random;
import java.util.Scanner;

public class jingziqi {
    char[][] chess = new char[3][3];
    char player,computer;
    boolean playerF;
    boolean detectWin(char player) {//判断玩家player是否胜利
        for(int i=0;i<3;i++)
            if(chess[i][0]==player&&chess[i][1]==player&&chess[i][2]==player) {
                return true;
            }else {
                if(chess[0][i]==player&&chess[1][i]==player&&chess[2][i]==player)
                    return true;
            }
        if(chess[0][0]==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值