首页 > 其他分享 >五子棋

五子棋

时间:2023-04-02 17:45:24浏览次数:29  
标签:matrix 五子棋 else break posZ posX c2

import time

import mcpi.minecraft as minecraft
import mcpi.block as block

mc = minecraft.Minecraft.create()

# 棋盘矩阵
matrix = [
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
]


# 清理区域
def Refresh():
    mc.setBlocks(0, 0, 0, 29, 15, 29, block.AIR.id)
    for i in range(30):
        for j in range(30):
            # mc.setBlock(i, 0, j, block.WOOL.id, matrix[i][j])
            mc.setBlock(i, 0, j, block.WOOL.id,4)


# 判断是否五子连接
def check(posX, posZ):
    # 八个方向实际就是四条正方向,四条反方向
    for k in range(5):
        # c1 正方向 c2 返方向
        # 第一步算到正方向上面
        c1 = 1
        c2 = 0

        # 正方向判断
        for x in range(0, 5):
            # 上 下
            if k == 1:
                # 依次往前面去判断
                if matrix[posX + x][posZ] == matrix[posX + x + 1][posZ]:
                    c1 += 1
                # 防止中间出现断层后还去判断
                else:
                    break
            # 右上 左下
            if k == 2:
                if matrix[posX + x][posZ + x] == matrix[posX + x + 1][posZ + x + 1]:
                    c1 += 1
                else:
                    break
            # 右 左
            if k == 3:
                if matrix[posX][posZ + x] == matrix[posX][posZ + x + 1]:
                    c1 += 1
                else:
                    break
            # 右下 左上
            if k == 4:
                if matrix[posX + x][posZ - x] == matrix[posX + x + 1][posZ - x - 1]:
                    c1 += 1
                else:
                    break
        # 反方向
        for y in range(0, 5):
            if k == 1:
                # 依次往前面去判断
                if matrix[posX - y][posZ] == matrix[posX - y - 1][posZ]:
                    c2 += 1
                # 防止中间出现断层后还去判断
                else:
                    break
            if k == 2:
                if matrix[posX - y][posZ - y] == matrix[posX - y - 1][posZ - y - 1]:
                    c2 += 1
                else:
                    break
            if k == 3:
                if matrix[posX ][posZ - y] == matrix[posX ][posZ - y - 1]:
                    c2 += 1
                else:
                    break
            if k == 4:
                if matrix[posX - y][posZ + y] == matrix[posX - y - 1][posZ + y + 1]:
                    c2 += 1
                else:
                    break
        if c1 + c2 >= 5:
            return True


mc.postToChat("welcome to nille's world")
Refresh()

# 黑棋先下
player = 0
# 标志位,表示一轮游戏一轮结束
flag = False

while True:
    # 获得击打事件
    events = mc.events.pollBlockHits()

    for e in events:
        # 击打事件在棋盘里面
        if e.pos.x >= 0 and e.pos.x <= 29 and e.pos.z >= 0 and e.pos.z <= 29 and e.pos.y == 0:
            # 改变方块的颜色
            # 判断击打事件在黄色羊毛上才生效
            if player == 0 and matrix[e.pos.x][e.pos.z] == 4:

                mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.WOOL.id, 15)
                # 更改数字里面的值
                matrix[e.pos.x][e.pos.z] = 15
                if check(e.pos.x, e.pos.z):
                    mc.postToChat("black win!")
                    flag = True
                # 白棋随后
                player = 1

            elif player == 1 and matrix[e.pos.x][e.pos.z] == 4:
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.WOOL.id, 0)
                matrix[e.pos.x][e.pos.z] = 0
                if check(e.pos.x, e.pos.z):
                    mc.postToChat("white win!")
                    flag = True
                player = 0
        else:
            mc.postToChat("OUT OF RANGE")

        if flag:
            mc.postToChat("The game restarts after ten seconds")
            for i in range(11):
                mc.postToChat(f'countdown:{10-i}')
                time.sleep(1)
            flag =False
            Refresh()

标签:matrix,五子棋,else,break,posZ,posX,c2
From: https://www.cnblogs.com/Wesuiliye/p/17280880.html

相关文章

  • golang蒙特卡洛树算法实现五子棋AI
    已经实现蒙特卡洛树算法的通用逻辑,只需要对应结构体实现相关接口就可以直接使用该算法。优化算法主要优化GetActions生成下一步动作,要尽可能少,去掉无意义的动作。以及优化ActionPolicy从众多动作挑选比较优秀的动作。对应五子棋就是执行该动作后当前局面评分最高。packagemain......
  • 稀疏数组(五子棋)
    packagesuanfa;publicclassxishuarr{publicstaticvoidmain(String[]args){intchessArr1[][]=newint[11][11];intsum=0;chessArr1[1][2]=1;......
  • 【验证码逆向专栏】某验四代五子棋、消消乐验证码逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切......
  • 人工智能五子棋游戏——(6)完整的项目代码
    本项目使用的是JavaScript语言,用到了其中的jquery库的jquery-2.2.2.min版本,请自行网上下载,本文就不再给出。 (1)前端html文件index.html1<!DOCTYPEhtml>2<html>......
  • 人工智能五子棋游戏——(4)五子棋游戏的前端实现
    该系统包括了前端和算法两大模块,其中,前端的代码是主要的展示,而算法则是内部的数据处理。前端是用户操作的主界面。后端算法是人工智能五子棋算法的主要体现。前端实现游......
  • 人工智能五子棋游戏——(5)五子棋游戏的后端实现
    后端实现主体代码设计后端主要采用的是JavaScript语言实现的,对HTML中五子棋落子的点击操作进行反应,确定胜负条件等判断。初始化棋盘的主要代码如下: varchessboard=......
  • 人工智能五子棋游戏——(5)五子棋游戏的算法实现
    算法代码设计五子棋的内层算法决定了人工智能五子棋的反应速度和下棋实力。通过数值搜索算法,以尽量快的响应速度,让玩家感受不到延迟。不断的对算法进行优化,提高人工智能五......
  • 人工智能五子棋游戏——(2)功能模块简介
    功能模块简介游戏各功能模块的设计也各不相同,游戏中的棋盘系统、计时系统、游戏控制在前端。游戏控制包括玩家黑子控制和人工智能白子控制。后端算法主要负责判定游戏胜负......
  • 人工智能五子棋游戏——(3)算法模块简介
     游戏的运算能力是决定整个游戏性能和性能的关键因素。算法是软件的核心,所以当你自己的工作要做某些事情的时候,它就必须要有一个演算法。一个好的方法可以减少错误率,高效......
  • 软件测试|教你使用Python实现五子棋游戏(一)
    前言五子棋是我们传统的益智游戏之一,老少皆宜,上手简单,对于锻炼逻辑思维,增强思考能力有很大帮助。那么,我们能不能使用Python来写出五子棋的程序呢,毕竟不是什么时候都有对手和......