[西门子] SCL编程实例100例-115-井字棋游戏

[复制链接]
查看240 | 回复0 | 2024-4-17 20:34:25 | 显示全部楼层 |阅读模式
1 | 题目


编写一个程序实现井字棋游戏的功能,类似于五子棋,三子成线则获胜。功能上可以设置初级、中级、高级三个难度等级,玩家上可以设置人机对战或双人对战。



2 | 设计分析


井字棋为九宫格棋盘,程序上采用二维数组作为棋盘模型。本例只设计了人机对战模式,为了公平,利用随机数来确定先后手。玩家采用点击鼠标的落子方式,计算机采用随机数的落子方式。根据井字棋三子成线的获胜规则,只需判断同色棋子在九宫格中的行、列或对角线是否连成一条线即可。当棋盘下满棋子,而三子并未成线时即为平局。



3 | 创建功能或功能块


创建功能块FB,命名为“TicTacToe”。




4 | 定义接口变量


具体接口变量定义见下图:
定义布尔型二维数组输入变量playerMoves作为玩家落子动作;
定义整型静态变量statTurn作为落子顺序;
定义整型静态变量statRandomX和statRandomY作为计算机随机落子坐标;
定义整型静态变量statResult作为对弈结果;
定义整型二维数组静态变量statBoards作为棋子的落子状态。



5 | 程序代码


编写程序代码。如下图:


开始游戏后调用随机数函数来确定先后手,先手调用先手子程序,后手调用后手子程序,本例未单独设计子程序。判断行成线、列成线、对角线成线来确定胜负。棋盘下满而未决出胜负则为平局。



6 | 代码测试


在循环OB中调用FB-“TicTacToe”,调用时会自动创建背景数据块,命名为“InstTicTacToe”,该背景数据块可以用来监视和修改数据。本例中使用了HMI进行模拟演示。如下图:

一共有胜、平、负三种结果,本例只设计了初级模式和人机对战模式,有兴趣的炮友儿可以完善其它功能。



7 | 总结


学习IF语句的使用;
学习上升沿语句的使用;
学习定时器语句的使用;
学习FOR循环语句的使用;
学习WHILE循环语句的使用;
学习FC或FB在功能块FB中的调用方法;
学习功能块FB在循环组织块OB中的调用方法。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则