【MATLAB课设五子棋教程】(附源码)

设计一个matlab的app是我们期末的答辩内容,我做的这个五子棋主要参考了b站up主唤醒手腕的代码和教程,然后在matlab窗口实现的改到app里实现。最后答辩的实验成绩好像是90+http://【【手把手教程】Matlab棋类游戏超详细的制作教程:如何用Matlab制作棋类游戏,井字棋,五子棋,双人模式,人机模式。】https://www.bilibili.com/video/BV1sB4y1g734?vd_source=a9e3519d86ff64b3c059efea3e631fc2这个app的mlapp文件放在文章最后了,需要自取

一、功能展示

基本的功能悔棋,清盘是有的,不过没有禁手,计时功能。

二、思路

1、创建坐标区

拖一个坐标区进来,然后设置好棋盘,设置的时候刻度值x和y轴这里都设置为0到14的正方形,为了不显示坐标轴旁边的数组我的思路是XTickLabel那一列不填数字,然后设置好棋盘颜色,背景颜色啥的

2、回调函数

点击棋盘右键,进入回调

首先我想获取我鼠标进行点击的坐标值,所以

Matlab 复制代码
pt = get(app.UIAxes, 'CurrentPoint');
x = round(pt(1,1));  
y = round(pt(1,2)); 

然后想要在上面画上黑棋和白棋,用的是

Matlab 复制代码
h=scatter(app.UIAxes, x, y, app.chessSize, 'ok', 'filled');  % 绘制黑子
h=scatter(app.UIAxes, x, y, app.chessSize, 'ow', 'filled');  % 绘制白子

但是我现在想要绘制 黑棋后就换成白棋再绘制,这时候可以设置一个属性count,在这个函数里进行每次下一颗棋,我们count就加一,通过模运算来判断下黑棋还是白棋

Matlab 复制代码
 % 判断轮次是黑棋还是白棋
    if mod(app.count, 2) == 1
        % 黑棋 (1)
        h=scatter(app.UIAxes, x, y, app.chessSize, 'ok', 'filled');  % 绘制黑子
        app.matrix(y, x) = 1;  % 更新棋盘状态为黑棋
         app.moveHandles{end+1} = h;
    end

    if mod(app.count, 2) == 0
        % 白棋 (2)
        h=scatter(app.UIAxes, x, y, app.chessSize, 'ow', 'filled');  % 绘制白子
        app.matrix(y, x) = 2;  % 更新棋盘状态为白棋
        app.moveHandles{end+1} = h;
    end
    
    % 更新轮次
   app.count = app.count + 1;  

然后我们现在已经可以黑白棋交错下了,需要设置5颗棋相连的时候就要结束游戏。

我们可以定义一个判断函数,思路是每下一颗就调用一次这个函数判断是否相连这个函数的代码如下

Matlab 复制代码
function winner = WhoIsWinner1(app, matrix)
    winner = 0;
    [m, n] = size(matrix);  % 获取棋盘大小

    % 遍历每个位置
    for i = 1:m
        for j = 1:n
            if matrix(i, j) == 0
                continue;
            end

            % 水平检查
            if j <= n - 4 && all(matrix(i, j:j+4) == matrix(i, j))
                winner = matrix(i, j);  
                return;
            end

            % 垂直检查
            if i <= m - 4 && all(matrix(i:i+4, j) == matrix(i, j))
                winner = matrix(i, j);  
                return;
            end

            % 主对角线检查
            if i <= m - 4 && j <= n - 4 && all(diag(matrix(i:i+4, j:j+4)) == matrix(i, j))
                winner = matrix(i, j); 
                return;
            end

            % 副对角线检查
            if i <= m - 4 && j >= 5 && all(diag(flipud(matrix(i:i+4, j-4:j))) == matrix(i, j))
                winner = matrix(i, j);  
                return;
            end

            end
        end
    end      

然后我们再调用这个函数像这样

Matlab 复制代码
 winner = app.WhoIsWinner1(app.matrix);

if winner == 1
    % 黑棋胜利
    pause(0.1)
    choice = questdlg('黑棋赢了!再来一局还是退出?', ...
        '游戏结束', ...
        '再来一局', '退出', '再来一局');
    
  
    if strcmp(choice, '再来一局')
        resetGame(app);  
    else
        close(app.UIFigure);  
    end
elseif winner == 2
    % 白棋胜利
    pause(0.1)
    choice = questdlg('白棋赢了!再来一局还是退出?', ...
        '游戏结束', ...
        '再来一局', '退出', '再来一局');
    if strcmp(choice, '再来一局')
        resetGame(app);  
    else
        close(app.UIFigure);  
    end
    end
       

主要实现我觉得就这些,欢迎大家去增加功能

mlapp文件:

https://pan.baidu.com/s/1QxWqNzrdfZ2jRI0HlyE-cw?pwd=738m 提取码: 738m

相关推荐
raysync8882 分钟前
替代传统FTP传输,镭速大数据传输系统实现安全高效数据流转!
开发语言·安全·php
mask哥3 分钟前
算法:LeetCode470_用Rand7()实现Rand10()_java实现
java·开发语言
cr.sheeper13 分钟前
CTFHUB-web进阶-php
开发语言·php
Clockwiseee38 分钟前
PHP之伪协议
android·开发语言·php
开心工作室_kaic1 小时前
springboot498基于javaweb的宠物猫认养系统(论文+源码)_kaic
java·开发语言·数据库·美食
秋雨凉人心1 小时前
上传npm包加强
开发语言·前端·javascript·webpack·npm·node.js
凡人的AI工具箱1 小时前
每天40分玩转Django:Django文件上传
开发语言·数据库·后端·python·django
cloud___fly1 小时前
Java线程池面试题
java·开发语言
chhanz1 小时前
MATLAB符号计算-符号表达式基础运算操作
数学建模·matlab