iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于Matlab实现中国象棋的示例代码
  • 496
分享到

基于Matlab实现中国象棋的示例代码

2024-04-02 19:04:59 496人浏览 安东尼
摘要

目录设置变量绘图绘制棋盘绘制棋子棋子移动规则判断是否可以移动移动棋子吃子设置变量 nRowNum = 8; % 画布行数 nColNum = 9; % 画布列数 offset_x =

设置变量

nRowNum = 8; % 画布行数
nColNum = 9; % 画布列数
offset_x = 0;% 红车坐标起点
offset_y = 0;% 红车坐标起点
chess_name = {{'帥','仕','相','马','車','炮','兵'},{'將','仕','象','马','車','炮','卒'}};
chess_type = [5 4 3 2 1 2 3 4 5 6 6 7 7 7 7 7]; % 存储下棋类型
colors = 'rk';
% global variables
chess_x = -ones(2,16);
chess_y = -ones(2,16);
pos_chess = zeros(nRowNum+1,nColNum+1);% 存储棋子位置
cur_turn = 1; % cur_turn为红色表示1
cur_cid = 0;
hText = zeros(2,16);

绘图

绘制棋盘

function DrawBoard()
    for k = 1:2
        for r = 1:nRowNum+1
            x = [(k-1)*5 4+(k-1)*5];
            y = [(r-1) (r-1)];
            plot(x,y,'b-')
        end
        for c = 1:nColNum+1
            x = [(c-1) (c-1)];
            y = [0 nRowNum];
            plot(x,y,'b-')
        end
        x = [0 2] + (k-1)*7;
        y = [3 5];
        plot(x,y,'b-')
        x = [0 2] + (k-1)*7;
        y = [5 3];
        plot(x,y,'b-')
    end 
    text(4.5,1.2,'楚        河                            汉        界','rotation',90)
    end 

绘制棋子

    function DrawAllChess()
    for k = 1:2
        for i = 1:16
            if i>9
                plot(chess_x(k,i),chess_y(k,i),'d','MarkerSize',15)
            end
            h(k,i)=plot(chess_x(k,i),chess_y(k,i),'MarkerSize',70,'Color',colors(k),'marker','.');%改进
            hText(k,i) = text(chess_x(k,i)-0.35,chess_y(k,i),['\fontsize{20}' chess_name{k}{chess_type(i)}],'color','w');
        end
    end
    DrawStart
    DrawEnd
    DrawHelp
   end

棋子移动规则

判断是否可以移动

function flag = CanMove(x,y)
    flag = 1;
    oldx = chess_x(cur_turn,cur_cid);
    oldy = chess_y(cur_turn,cur_cid);
    switch chess_type(cur_cid)
        case 1% 将
            % move 1 step
            if ~(x==oldx && abs(y-oldy)==1) && ~(y==oldy && abs(x-oldx)==1)
                flag = 0;
                return
            end
            % out area
            if cur_turn==1
                if ~(x>=0 && x<=2 && y>=3 && y<=5)
                    flag = 0;
                    return
                end
            else
                if ~(x>=7 && x<=9 && y>=3 && y<=5)
                    flag = 0;
                    return
                end
            end
        case 2% 士
            % move 1 step
            if ~(abs(x-oldx)==1 && abs(y-oldy)==1)
                flag = 0;
                return
            end
            % out area
            if cur_turn==1
                if ~(x>=0 && x<=2 && y>=3 && y<=5)
                    flag = 0;
                    return
                end
            else
                if ~(x>=7 && x<=9 && y>=3 && y<=5)
                    flag = 0;
                    return
                end
            end
        case 3% 象
            % move 1 step
            if ~(abs(x-oldx)==2 && abs(y-oldy)==2)
                flag = 0;
                return
            end
            % out area
            if cur_turn==1
                if ~(x>=0 && x<=4)
                    flag = 0;
                    return
                end
            else
                if ~(x>=5 && x<=9)
                    flag = 0;
                    return
                end
            end
            % in the way
            mx = (x+oldx)/2;
            my = (y+oldy)/2;
            if pos_chess(my+1,mx+1)~=0
                flag = 0;
                return
            end
        case 4% 马
            % move 1 step
            if ~(abs(x-oldx)==1 && abs(y-oldy)==2) && ~(abs(x-oldx)==2 && abs(y-oldy)==1)
                flag = 0;
                return
            end
            % in the way
            if abs(y-oldy)==2
                mx = oldx;
                my = (y+oldy)/2;
            else
                mx = (x+oldx)/2;
                my = oldy;
            end
            if pos_chess(my+1,mx+1)~=0
                flag = 0;
                return
            end
        case 5% 车
            if ~(x==oldx && y~=oldy) && ~(x~=oldx && y==oldy)
                flag = 0;
                return
            end
            % no chess in the way
            if x==oldx
                inc = 1;
                if oldy>y
                    inc = -1;
                end
                if ~isempty(find(pos_chess(oldy+1+inc:inc:y+1-inc,x+1)~=0))
                    flag = 0;
                    return
                end
            else
                inc = 1;
                if oldx>x
                    inc = -1;
                end
                if ~isempty(find(pos_chess(y+1,oldx+1+inc:inc:x+1-inc)~=0))
                    flag = 0;
                    return
                end
            end
        case 6% 炮
            if ~(x==oldx && y~=oldy) && ~(x~=oldx && y==oldy)
                flag = 0;
                return
            end
            % no chess in the way
            if x==oldx
                inc = 1;
                if oldy>y
                    inc = -1;
                end
                if pos_chess(y+1,x+1)~=0
                    if ~(length(find(pos_chess(oldy+1+inc:inc:y+1-inc,x+1)~=0))==1)
                        flag = 0;
                        return
                    end
                else
                    if ~(isempty(find(pos_chess(oldy+1+inc:inc:y+1-inc,x+1)~=0)))
                        flag = 0;
                        return
                    end
                end
            else
                inc = 1;
                if oldx>x
                    inc = -1;
                end
                if pos_chess(y+1,x+1)~=0
                    if ~(length(find(pos_chess(y+1,oldx+1+inc:inc:x+1-inc)~=0))==1)
                        flag = 0;
                        return
                    end
                else
                    if ~(isempty(find(pos_chess(y+1,oldx+1+inc:inc:x+1-inc)~=0)))
                        flag = 0;
                        return
                    end
                end
            end
        case 7% 兵
            if cur_turn==1
                if oldx<=4
                    if ~(y==oldy&&x-oldx==1)
                        flag = 0;
                        return
                    end
                else% pass river
                    if ~(y==oldy&&x-oldx==1) && ~(abs(y-oldy)==1&&x==oldx)
                        flag = 0;
                        return
                    end
                end
            else
                if oldx>=5
                    if ~(y==oldy&&x-oldx==-1)
                        flag = 0;
                        return
                    end
                else% pass river
                    if ~(y==oldy&&x-oldx==-1) && ~(abs(y-oldy)==1&&x==oldx)
                        flag = 0;
                        return
                    end
                end
            end
    end
    end

移动棋子

    function MoveChess(x,y)
    set(h(cur_turn,cur_cid),'xdata',x,'ydata',y)%改进,移动棋子到新位置
    set(hText(cur_turn,cur_cid),'Position',[x-0.35 y]);
    pos_chess(chess_y(cur_turn,cur_cid)+1,chess_x(cur_turn,cur_cid)+1) = 0;
    pos_chess(y+1,x+1) = cur_cid+(cur_turn-1)*16;
    chess_x(cur_turn,cur_cid) = x;
    chess_y(cur_turn,cur_cid) = y;
   
    end

吃子

    function KillChess(kt,kc)
    set(hText(kt,kc),'visible','off');%杀掉棋子
    set(h(kt,kc),'visible','off');
    MoveChess(chess_x(kt,kc),chess_y(kt,kc));
    ChangeTurn();
    sname = {'红','黑'};
    if kc==5
        msgbox([sname{3-kt} '方获胜!'], '象棋', 'modal');
    end
    end

以上就是基于Matlab实现中国象棋的示例代码的详细内容,更多关于Matlab中国象棋的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于Matlab实现中国象棋的示例代码

本文链接: https://www.lsjlt.com/news/138382.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Matlab实现中国象棋的示例代码
    目录设置变量绘图绘制棋盘绘制棋子棋子移动规则判断是否可以移动移动棋子吃子设置变量 nRowNum = 8; % 画布行数 nColNum = 9; % 画布列数 offset_x =...
    99+
    2024-04-02
  • Java实现中国象棋的示例代码
    目录前言主要设计功能截图代码实现总结前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。 中国象棋...
    99+
    2024-04-02
  • 基于HTML+JavaScript实现中国象棋
    目录效果展示项目基本结构HTML 代码CSS 代码JS 代码人工智能初始化迭代加深搜索算法取得棋盘上所有棋子取得棋谱所有己方棋子的算法A:当前棋手value/B:对手value/de...
    99+
    2022-11-13
    JavaScript中国象棋 JavaScript 象棋
  • 基于Python实现围棋游戏的示例代码
    目录1.导入模块2.初始化棋盘3. 开始游戏4.放弃当前回合落子5.悔棋判断6.重新开始7.右侧太极图的设置8.落子设置9.吃子规则判定设置10.其他11.程序入口12.效果图文件自...
    99+
    2024-04-02
  • 基于Matlab实现鲸鱼优化算法的示例代码
    目录1.鲸鱼优化算法建模1.1 包围猎物1.2 螺旋狩猎1.3 搜索猎物 1.4 算法流程图2.Matlab代码实现 2.1 结果2.2 代码...
    99+
    2024-04-02
  • 基于Matlab实现嗅觉优化算法的示例代码
    目录1.概述2.37 个 CEC 基准测试函数代码3.F1 Matlab代码仿真1.概述 嗅觉剂优化是一种新颖的优化算法,旨在模仿气味分子源尾随的药剂的智能行为。该概念分为三个阶段(...
    99+
    2024-04-02
  • 基于Matlab实现野狗优化算法的示例代码
    目录1.概述2.捕食过程的数学模型2.1 种群初始化2.2 群体攻击过程2.3 迫害攻击过程2.4 野狗的存活率3.Matlab代码实现3.1 代码3.2 结果1.概述 ...
    99+
    2024-04-02
  • 基于C语言实现三子棋游戏的示例代码
    1.创建文件  test.c (游戏的测试逻辑)game.c(游戏的实现逻辑)gane.h(游戏实现函数的声明) game.c 和game.h属于游戏实现 test.c属于...
    99+
    2024-04-02
  • 基于C语言实现钻石棋游戏的示例代码
    目录游戏规则实现代码游戏规则 这是一个单人钻石棋游戏,游戏中有两种颜色的棋子:红色和绿色。每个玩家在游戏进行中轮流选择一个空格,并在该空格上放置自己的棋子。游戏的目的是尽可能地连成一...
    99+
    2023-02-26
    C语言实现钻石棋游戏 C语言钻石棋游戏 C语言钻石棋 C语言游戏
  • 基于c++的中国象棋游戏设计与实现
    目录1.文档2.游戏操作逻辑3.UI框架4.网络通信1.文档 文档分为两部分,一部分在代码中,然后通过doxygen生成HTML。解压本目录下的html.zip后打开index.ht...
    99+
    2024-04-02
  • C/C++实现经典象棋游戏的示例代码
    目录大体思路效果展示核心代码大体思路 采用面相过程的设计方式实现,类似于我们平时做的课程设计,实现这样的小游戏无非就是多了图形处理库。这里使用的是acllib图形库。 设计这种小游戏...
    99+
    2024-04-02
  • 基于Matlab绘制小提琴图的示例代码
    目录violinChart 函数使用方法基础使用,Y为矩阵基础使用,Y为向量,X为标签基础使用,多个图像绘制,并添加图例violinChart 完整函数ggtheme violin ...
    99+
    2024-04-02
  • 基于Matlab实现多目标粘液霉菌算法的示例代码
    目录1.概述2.算法过程3.数值实验4.Matlab代码实现1.概述 多目标粘液霉菌算法(MOSMA),这是最近开发的粘液霉菌算法(SMA)的多目标变体,用于处理工业中的多目标优化问...
    99+
    2024-04-02
  • 基于Java实现扫码登录的示例代码
    目录基本介绍原理解析1. 身份认证机制2. 流程概述代码实现1. 环境准备2. 主要依赖3. 生成二维码4. 扫描二维码5. 确认登录6. PC 端轮询7. 拦截器配置效果演示1. ...
    99+
    2024-04-02
  • 基于Springboot实现JWT认证的示例代码
    目录一、了解JWT概念作用1.1 为什么授权要使用jwt二、JWT结构2.1 header2.2 payload2.3 signature三、使用JWT3.1 上手3.2 封装工具类...
    99+
    2024-04-02
  • 利用Matlab制作三子棋游戏的示例代码
    效果: 注: 由于用uifigure和uiaxes写的会比较慢,改成常规的axes和figure会快很多。 完整代码: function OX_chess fig=ui...
    99+
    2024-04-02
  • Matlab实现灰色预测的示例代码
    目录模型介绍基础代码基础代码+修饰模型介绍 略微带过一下原理: 灰色预测对于趋势不强的数据,将其原始数据进行累加后得到具有明显趋势的新数据进行拟合,假设原数据为:  则新...
    99+
    2024-04-02
  • 基于ElementUI中Table嵌套实现多选的示例代码
    前言: 写这个是因为帮朋友修改项目中的bug 我也是第一次写这个功能,有不对的希望大家指正,如果看完有帮助点个赞! 代码中关键是js中Tree的路径查找这个核心,有不懂的自行百度 多...
    99+
    2024-04-02
  • 基于Java实现中文分词系统的示例代码
    目录1.问题描述2.相关工作3.系统框架和算法设计3.1系统整体框架1.问题描述 中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个...
    99+
    2024-04-02
  • 基于WPF实现步骤控件的示例代码
    WPF 实现步骤控件 框架使用.NET40; Visual Studio 2019; Step 继承 ItemsControl 使用 Grid...
    99+
    2023-01-11
    WPF实现步骤控件 WPF步骤控件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作