利用Matlab制作三子棋游戏的示例代码

效果:

注: 由于用uifigure和uiaxes写的会比较慢,改成常规的axes和figure会快很多。

完整代码:

function OX_chess
fig=uifigure('units','pixels',...
        'position',[350 100 500 500],...
        'Numbertitle','off',...
        'name','OX_chess',...
        'Color',[1 1 1],...
        'resize','off',...
         'menubar','none');

ax=uiaxes('Units','pixels',...
        'parent',fig,...
        'Color',[0.9106 0.9773 1],...
        'Position',[-22 -20 540 540],...
        'XLim',[0-20 400+20],...
        'YLim',[0-20 400+20],...
        'XColor',[0.8706 0.9373 0.9686],...
        'YColor',[0.8706 0.9373 0.9686]);
ax.Toolbar.Visible='off';
hold(ax,'on')
drawCheckerboard()
%==========================================================================
set(fig,'WindowButtonDownFcn',@buttondown)
    function buttondown(~,~)
        xy=get(ax,'CurrentPoint');
        xp=xy(1,2);yp=xy(1,1);
        Pos=[xp,yp];
        Pos=round((Pos-50)./150)+1;
        if map(Pos(2),Pos(1))==0
            switch turn
                case 1,drawO(Pos(2),Pos(1)),turn=-1;map(Pos(2),Pos(1))=1;
                case -1,drawX(Pos(2),Pos(1)),turn=1;map(Pos(2),Pos(1))=-1;
            end
        end
        judge();
    end
    function judge(~,~)
        judge1=sum(map,1);
        judge2=sum(map,2);
        judge3=sum(map(eye(3)==1));
        judge4=sum(map([3,5,7]));
        winner=[];
        switch 1
            case any(judge1==3)||any(judge2==3)||judge3==3||judge4==3,winner='甜甜圈';
            case any(judge1==-3)||any(judge2==-3)||judge3==-3||judge4==-3,winner='手指饼干';
        end
        if ~isempty(winner)
            buttonName1=uiconfirm(fig,[winner,'获得胜利'],[winner,'获得胜利'],'Options',{'关闭','重新开始'},'Icon','success');
                if isempty(buttonName1),buttonName1='end';end
                if strcmp(buttonName1,'重新开始'),restart();
                elseif strcmp(buttonName1,'关闭');delete(fig);
                end
        end
    end

    function restart(~,~)
        turn=1;
        map=zeros(3,3);
        delete(findobj(ax,'type','patch'))
        delete(findobj(ax,'type','line'))
        delete(findobj(ax,'type','scatter'))
        drawCheckerboard()
    end
turn=1;
map=zeros(3,3);

%==========================================================================
    function drawX(i,j)
        x=50+150*(i-1);
        y=50+150*(j-1);
        Xb=[-55:1:+55,+55:-1:-55];
        Xs=[-50:1:+50,+50:-1:-50];
        Yb=[(-15).*ones(1,length(Xb)/2),(+15).*ones(1,length(Xb)/2)];
        Ys=[(-12).*ones(1,length(Xs)/2),(+12).*ones(1,length(Xs)/2)];
        Xsin=-48:0.1:48;
        Ysin=sin(Xsin./2).*5;
        Xp=-47:15:45;
        Yp=0.*ones(size(Xp));

        theta=pi/6;
        fill(ax,x+Xb.*cos(theta)-Yb.*sin(theta),y+Yb.*cos(theta)+Xb.*sin(theta),[1.0000    0.9216    0.6588]);
        fill(ax,x+Xs.*cos(theta)-Ys.*sin(theta),y+Ys.*cos(theta)+Xs.*sin(theta),[0.6627    0.6431    0.2745],'EdgeColor','none');
        plot(ax,x+Xsin.*cos(theta)-Ysin.*sin(theta),y+Ysin.*cos(theta)+Xsin.*sin(theta),'LineWidth',2,'Color',[0.9451    0.9843    0.8471])
        scatter(ax,x+Xp.*cos(theta)-Yp.*sin(theta),y+Yp.*cos(theta)+Xp.*sin(theta),10,'filled','CData',[0.9216    0.4000    0.3725])

        theta=3*pi/6;
        fill(ax,x+Xb.*cos(theta)-Yb.*sin(theta),y+Yb.*cos(theta)+Xb.*sin(theta),[1.0000    0.9216    0.6588]);
        fill(ax,x+Xs.*cos(theta)-Ys.*sin(theta),y+Ys.*cos(theta)+Xs.*sin(theta),[0.6627    0.6431    0.2745],'EdgeColor','none');
        plot(ax,x+Xsin.*cos(theta)-Ysin.*sin(theta),y+Ysin.*cos(theta)+Xsin.*sin(theta),'LineWidth',2,'Color',[0.9451    0.9843    0.8471])
        scatter(ax,x+Xp.*cos(theta)-Yp.*sin(theta),y+Yp.*cos(theta)+Xp.*sin(theta),10,'filled','CData',[0.9216    0.4000    0.3725])
    end

    function drawO(i,j)
        x=50+150*(i-1);
        y=50+150*(j-1);
        R=55;
        t=0:0.01:2*pi;
        XR=x+cos(t).*R;
        YR=y+sin(t).*R;
        Xr=x+cos(t).*R.*0.4;
        Yr=y+sin(t).*R.*0.4;
        fill(ax,[XR,Xr],[YR,Yr],[0.90 0.73 0.45],'EdgeColor',[0.67 0.42 0.15],'LineWidth',1)

        [t,rL,RL]=createRandomLine_O(R);
        T=[t,t(end:-1:1)];
        Rr=[RL,rL];
        X=x+cos(T).*Rr;
        Y=y+sin(T).*Rr;
        fill(ax,X,Y,[0.33 0.18 0.12],'EdgeColor','none')

        candiColor=[    0.9765    0.8353    0.4902
            0.9647    0.9647    0.8314
            0.1490    0.4235    0.6980
            0.2431    0.4510    0.3490
            0.9490    0.9647    0.9686
            0.7647    0.1059    0.1569
            0.2784    0.1843    0.5216
            0.8824    0.6471    0.7490];
        for i=1:35
            t1=rand(1)*2*pi;
            t2=rand(1)*2*pi;
            r1=(R*0.6-5).*rand(1)+R*0.4;
            x1=x+cos(t1)*r1;
            y1=y+sin(t1)*r1;
            x2=x1+cos(t2)*7;
            y2=y1+sin(t2)*7;
            plot(ax,[x1,x2],[y1,y2],'Color',candiColor(randi(size(candiColor,1)),:),'LineWidth',2);
        end
    end

    function [t,r,R]=createRandomLine_O(RR)
        t=0:0.2:2*pi;
        R=(RR-3)+5.*rand(size(t));
        R=interp1(t,R,0:0.01:2*pi,'spline');

        r=(RR*0.4+7)-6.*rand(size(t));
        r=interp1(t,r,0:0.01:2*pi,'spline');

        t=0:0.01:2*pi;
    end

    function drawCheckerboard
        [Xq,Yq]=createRandomLine_CB(440,10,5,26);
        fill(ax,Xq-20,Yq+112,[0.96 0.80 0.52],'EdgeColor',[0.45 0.11 0.05].*0.8,'LineWidth',1)
        [Xq,Yq]=createRandomLine_CB(440,10,5,26);
        fill(ax,Xq-20,Yq+262,[0.96 0.80 0.52],'EdgeColor',[0.45 0.11 0.05].*0.8,'LineWidth',1)
        [Xq,Yq]=createRandomLine_CB(440,10,5,26);
        fill(ax,Yq+112,Xq-20,[0.96 0.80 0.52],'EdgeColor',[0.45 0.11 0.05].*0.8,'LineWidth',1)
        [Xq,Yq]=createRandomLine_CB(440,10,5,26);
        fill(ax,Yq+262,Xq-20,[0.96 0.80 0.52],'EdgeColor',[0.45 0.11 0.05].*0.8,'LineWidth',1)

        [Xq,Yq]=createRandomLine_CB(440,10,2,10);
        fill(ax,Xq-20,Yq+120,[0.97 0.91 0.65],'EdgeColor',[0.5,0.3 0.3],'LineWidth',1)
        [Xq,Yq]=createRandomLine_CB(440,10,2,10);
        fill(ax,Xq-20,Yq+270,[0.97 0.91 0.65],'EdgeColor',[0.5,0.3 0.3],'LineWidth',1)
        [Xq,Yq]=createRandomLine_CB(440,10,5,10);
        fill(ax,Yq+120,Xq-20,[0.97 0.91 0.65],'EdgeColor',[0.5,0.3 0.3],'LineWidth',1)
        [Xq,Yq]=createRandomLine_CB(440,10,5,10);
        fill(ax,Yq+270,Xq-20,[0.97 0.91 0.65],'EdgeColor',[0.5,0.3 0.3],'LineWidth',1)
    end
    function [Xq,Yq]=createRandomLine_CB(Lim,N,randMax,h)
        X1=linspace(0,Lim,N);
        X2=X1(end:-1:1);
        Y1=-randMax.*rand(size(X1));
        Y2=randMax.*rand(size(X2));

        Xq1=0:0.1:Lim;
        Yq1=interp1(X1,Y1,Xq1,'spline');

        Xq2=Lim:-0.1:0;
        Yq2=interp1(X2,Y2,Xq2,'spline')+h;

        Xq=[Xq1,Xq2];
        Yq=[Yq1,Yq2]; 

    end
end

到此这篇关于利用Matlab制作三子棋游戏的示例代码的文章就介绍到这了,更多相关Matlab三子棋游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用Matlab制作一款3D版2048小游戏

    其实逻辑和2维版本完全一样,就不进行详细解说了,直接看效果: 效果: 目前界面还不咋好看,期待大家的优化 还是键盘↑↓←→操作嗷 完整代码: function game20483D global squaremap global colorlist global fontsizelist global baseX baseY baseZ global barHdl textHdl global txtBest txtScore global best fig=figure('units','pi

  • MATLAB实现五子棋游戏(双人对战、可悔棋)

    本文实例为大家分享了MATLAB实现五子棋游戏的具体代码,供大家参考,具体内容如下 程序介绍: 1.此游戏只可用于双人对战. 2.棋盘颜色.棋盘格数.棋子颜色等参数均可自由设置 3.鼠标点击非棋盘区域可悔棋. 一.游戏界面 二.主程序及函数 1.主程序 %Author:LeiZhen %Date:2018-03-12 %此程序只下五子棋,并判断胜负关系 clear all; clc %定义颜色 Color_QiPanBack=[135,206,255]; Color_ChessLine=[100

  • 使用Matlab制作简易版八分音符酱游戏

    目录 效果 游戏方式 说明 工具箱主要部分代码 完整代码 效果 游戏方式 给电脑插上耳机后叫喊叭 ! 说明 1)使用此代码应首先安装: Audio Toolbox工具箱,博主使用的版本为: Audio Toolbox 版本 3.0 (R2021a) 2)为保证游戏加载完所有素材后再开始,故设置了加载完成界面后停滞3秒再开始运行游戏 若一进入界面就挂了,应是资源加载太久,请关掉窗口后尝试重新运行 工具箱主要部分代码 1)基础设置 这里懒得改了直接照抄的语音命令识别的截断数据,大家可以依据自己需要进

  • 利用Matlab复刻扫雷小游戏

    效果图 点击帮助切换插旗功能: 游戏失败: 完整代码 function SLsXpbombs global Row; Row=10;%雷区行数 global Col; Col=10;%雷区列数 global MineMap; MineMap=[]; %地雷图 global aroundMap;aroundMap=[];%周围地雷数 global MarkMap; MarkMap=ones([Row,Col]); %标记图 global MineNum; MineNum=8;%地雷总数 globa

  • 利用Matlab制作一款狗头翻牌子小游戏

    目录 0游戏效果 1fig界面和背景板 2狗狗牌子与胜利标志 2.1狗狗牌子绘制 2.2游戏胜利标签 2.3鼠标点击牌子回调 3游戏难度按钮组 3.1按钮绘制 3.2难度选择回调 4游戏刷新模块 4.1刷新游戏按钮绘制 4.2模拟鼠标点击 4.3刷新游戏回调 5完整代码 0 游戏效果 就是点击一个牌子时,该牌子和周围四个牌子也会相应发生变化,想办法让所有牌子都在同一面即为游戏胜利. 1 fig界面和背景板 这一段比较简单,主要是对界面和背景板的属性设置,我们采用编程的方式调用app design

  • 如何利用Matlab制作一款真正的拼图小游戏

    效果: 简单原理介绍: 1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形状的拼图(image函数有alphaData属性可以设置) jigsawMask=zeros(101*5,101*5); jigsawMask(102:404,102:404)=1; [xMesh,yMesh]=meshgrid(1:101*5,1:101*5); dis1=sqrt((xMesh-51).^2+(yMesh-253).^2); dis2=sqrt((xMesh-505+50).^2+(yMesh-2

  • C语言版三子棋游戏

    很多人从小都玩过三子棋,相信很多人都对这个游戏的实现有所疑问.那么今天我们就用C语言自己来实现一下. 首先 如流程图所示: 说明一下:首先我们以输入1/0,来判断是否进入游戏.当输入为1时,进入游戏:当输入为0时,退出游戏:当输入为其他值时,我们提示重新输入.所以我们这里用switch实现. 我们回想棋盘,很像一个二维数组,所以我们接下里的数棋盘设计以及向棋盘里赋值都将使用二维数组.为了使得我们的扩展性变强,我们这里使用了宏,来定义行和列的值. 为了将来的判段,我们将棋盘里所以的值都赋值为' '

  • C语言实现三子棋游戏(棋盘可变)

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 思路: main函数结构部署 game函数功能的实现 ①创建存储空间 ②初始化存储空间为空格 ③打印棋盘 ④实现玩家下棋 ⑤实现电脑下棋 ⑥实现玩家和电脑下棋后的输赢判断 所使用的文件: test.c-----用于测试游戏 game.c----用于实现游戏中的一些函数 game.h-----头文件 test.c #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #

  • 利用Matlab制作三子棋游戏的示例代码

    效果: 注: 由于用uifigure和uiaxes写的会比较慢,改成常规的axes和figure会快很多. 完整代码: function OX_chess fig=uifigure('units','pixels',... 'position',[350 100 500 500],... 'Numbertitle','off',... 'name','OX_chess',... 'Color',[1 1 1],... 'resize','off',... 'menubar','none'); a

  • 基于C语言实现三子棋游戏的示例代码

    1.创建文件  test.c (游戏的测试逻辑)game.c(游戏的实现逻辑)gane.h(游戏实现函数的声明) game.c 和game.h属于游戏实现 test.c属于游戏测试 test.c 源文件(源文件添加)——game.c 源文件(源文件添加)——game.h(头文件添加) 三个文件 2.首先在test.c文件写一个主函数,主函数里面有一个测试函数,测试函数里面写菜单.进入游戏.退出游戏 代码展示: void menu() { printf("*********************

  • C语言实现三子棋游戏的示例代码

    目录 1. 前言 2. 准备工作 3. 使用二维数组存储下棋的数据 4. 初始化棋盘为全空格 5. 打印棋盘 6. 玩家下棋 7. 电脑下棋 8. 判断输赢 9. 效果展示 10. 完整代码 game.h game.c test.c 1. 前言 大家好,我是努力学习游泳的鱼,今天我们会用C语言实现三子棋.所谓三子棋,就是三行三列的棋盘,玩家可以和电脑下棋,率先连成三个的获胜.话不多说,我们开始吧. 2. 准备工作 我们可以在一个项目中创建三个文件,分别是: test.c,测试游戏的逻辑. gam

  • C语言实现三子棋游戏含完整代码

    目录 一.text.c源文件部分 1.main函数部分 2.game函数部分 二.game.h头文件部分 三.game.c源文件部分 运行  三子棋是大家小时候和同桌在纸上都玩过的简单小游戏,这个游戏我们在c语言中就可以实现. 在这篇文章我推荐大家使用vs2013,vs2019,vs2022等的编译器.部分学校使用的vc6.0以及Devc++.前者是1998年推出的c语言编译器,在现在的win10或者win11的系统中并不兼容,可能会出现一些问题,后者也在2015年停更,这两款祖传c语言编译器并

  • 利用C语言实现三子棋游戏

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 说明:该游戏的实现需要用到三个文件 1.test.c:放置主函数(main())和菜单函数(menu())和游戏函数(game()). 2.game.c:放置game()里面的相应操作的函数,例如玩家移动(PlayerMove(board)),电脑移动(ComputerMove(board)),以及每一次移动之后打印当前棋盘内容的函数(DisplayBoard(board))等等.由于这些函数内容较多,所以单独放在一个

  • 利用C语言实现简单三子棋游戏

    本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 创建文件 只要弄清了二维数组的相关知识,我们就可以去实现简单的三子棋.对于初学者可谓是成就感满满~~ 首先我们会创建三个文件夹分别是game.h .geme.c .test.c .其中game.h中我们会引用所有需要的头文件(test.c和game.c中#include "game.h"即可):对常用量进行宏定义:还有对封装的函数进行申明和注释,使代码可读性更高.更好进行管理. 准备环节 1.菜单打印 既

  • C语言版的三子棋游戏

    本文实例为大家分享了C语言版三子棋游戏的具体代码,供大家参考,具体内容如下 一.游戏说明 三子棋相信大家都不陌生,小时候经常在纸上画出九宫格就可以直接和小伙伴一起玩,规则就是谁先在九宫格中下出同一行三个一样,或者同一列三个一样,又或者对角线的三个一样的棋子,谁就获胜:其实在编程中,代码也能实现人机版的三子棋小游戏,让我们一起来看看如何实现的吧! 二.游戏设计步骤 将三子棋游戏的实现逻辑分为以下步骤: 1.创建菜单(选择玩游戏或者退出游戏) 2.创建和初始化游戏棋盘(本质上为一个二维数组) 3.打

  • C语言实现简单三子棋游戏

    本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 游戏介绍:使用C语言中二维数组和函数的基本知识实现一个三子棋游戏,这个游戏要实现的基本功能有初始化棋盘.棋盘的打印.玩家下棋.电脑下棋.判断输赢. 代码框架: 1.头文件(game.h) #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<st

  • C语言实现三子棋游戏附注释

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 概述 三子棋棋盘为九宫格形式,玩家和电脑分别轮流落子,若有一方有三个棋连在一起的情况则胜. 实现过程 1.玩家交互菜单创建 2.棋盘创建与初始化 3.玩家与电脑落子 4.判定胜负关系 多文件实现 头文件 game.h #ifndef __GAME_H__ #define __GAME_H__ #include <stdio.h> #include <time.h> #include <stdlib.

  • 使用C语言实现三子棋游戏

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 先简单介绍一下我的三子棋小游戏是怎么玩的,就是自己跟电脑pk,只不过电脑没这么智能.自己输入想要下的坐标,电脑随机生成一个坐标,直到赢家产生.在这个过程中我觉得比较难的就是赢家的判定部分.在c语言中随机数的产生也就是调用srand()函数利用时间戳来获取随机值.算了游戏太简单,我想你们也都是冲着代码来的,直接上代码. 代码和实现 为了代码逻辑性更高,没那么繁杂,主要将代码分为三个部分,头文件game.h,和两个c文件,

随机推荐