//Tic-Tac-Toe

$n = 5;//五阶棋盘

$res = array();

function check($arr)

{

$n = $GLOBALS['n'];

$res = $GLOBALS['res'];

//已经下过这一步,返回false;没有,赋值

if (isset($res[$arr[1]][$arr[2]])) {

return false;

} else {

$res[$arr[1]][$arr[2]] = $arr[0];

}

//如果某一步下在对角线上,额外进行一次对角线判断(前提:阶数为奇数)

if ($n % 2 == 1) {

if ($arr[1] == $arr[2]) {

for ($i = 0; $i < $n - 1; $i++) {

if (!(isset($res[$i][$i]) && isset($res[$i + 1][$i + 1])) || $res[$i][$i] != $res[$i + 1][$i + 1]) {

break;

} elseif ($n - 2 == $i) {

var_dump($arr[0] . '--- Win!');

$GLOBALS['res'] = $res;

return true;

}

}

} elseif ($arr[1] + $arr[2] + 1 == $n) {

for ($i = 0; $i < $n - 1; $i++) {

if (!(isset($res[$i][$n - 1 - $i]) && isset($res[$i + 1][$n - 2 - $i])) || $res[$i][$n - 1 - $i] != $res[$i + 1][$n - 2 - $i]) {

break;

} elseif ($n - 2 == $i) {

var_dump($arr[0] . '--- Win!');

$GLOBALS['res'] = $res;

return true;

}

}

}

}

for ($i = 0; $i < $n - 1; $i++) {

//横列判断(是否赋值 or 是否相等),不符合则进行纵列判断

if (!(isset($res[$arr[1]][$i]) && isset($res[$arr[1]][$i+1])) || $res[$arr[1][$i]] != $res[$arr[1][$i+1]]) {

//进行纵列判断(是否赋值 or 是否相等),不符合则跳出两层循环

for ($j = 0; $j < $n -1; $j++) {

if (!(isset($res[$j][$arr[2]]) && isset($res[$j+1][$arr[2]])) || $res[$j][$arr[2]] != $res[$j+1][$arr[2]]) {

break 2;

} elseif ($n - 2 == $j) {

var_dump($arr[0] . '--- Win!');

$GLOBALS['res'] = $res;

return true;

}

}

break;

} elseif ($n - 2 == $i) {

var_dump($arr[0] . '--- Win!');

$GLOBALS['res'] = $res;

return true;

}

}

$GLOBALS['res'] = $res;

}

模拟两位用户下棋并最终打印结果:

check(['a', 0, 3]);

check(['b', 2, 4]);

check(['a', 1, 3]);

check(['b', 1, 2]);

check(['a', 2, 3]);

check(['b', 2, 0]);

check(['a', 3, 3]);

check(['b', 3, 1]);

check(['a', 4, 3]);

var_dump($res);

输出:

ex0.php:49:string 'a--- Win!' (length=9)

ex0.php:73:

array (size=5)

0 =>

array (size=1)

3 => string 'a' (length=1)

2 =>

array (size=3)

4 => string 'b' (length=1)

3 => string 'a' (length=1)

0 => string 'b' (length=1)

1 =>

array (size=2)

3 => string 'a' (length=1)

2 => string 'b' (length=1)

3 =>

array (size=2)

3 => string 'a' (length=1)

1 => string 'b' (length=1)

4 =>

array (size=1)

3 => string 'a' (length=1)

php井字游戏代码_PHP初级笔试题:Tic-Tac-Toe(n阶井字棋)判断胜负相关推荐

  1. 华大计算机面试题,华大基因java初级笔试题.docx

    华大基因java初级笔试题 姓名: 电话: PAGE4 / NUMPAGES4 华大基因-Java工程师笔试题基础题目java的基本数据类型有哪些?String是最基本的数据类型吗?Byte shor ...

  2. C++ 很有趣:编写一个井字游戏 (Tic Tac Toe)

    英文原文:C++ is fun: Writing a Tic Tac Toe Game 这个有趣的C++系列打算展示一下使用C++写代码可以和其他主流语言一样高效而有趣.在第二部分,我将向你展示使用C ...

  3. python井字棋游戏代码_Python实现的井字棋(Tic Tac Toe)游戏示例

    Python实现的井字棋(Tic Tac Toe)游戏示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python实现的井字棋(Tic Tac Toe)游戏示 ...

  4. python游戏代码运行不了_无法使我的tic tac toe游戏在python中正确运行

    转不到"玩家1"的原因是你的支票中缺少一个空格.你也没有正确地检查一个玩家何时获胜,这就是为什么你会有这种奇怪的行为.你需要检查每个位置,而不仅仅是最后一个.我还添加了对用户输入的 ...

  5. 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法代码讲解+资源打包下载】...

    一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...

  6. 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法代码讲解+资源打包下载】

    一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...

  7. python编写井字棋_编写井字游戏

    python编写井字棋 Programming computer games may be the most technically challenging (and possibly the bes ...

  8. 用TensorFlow基于神经网络实现井字棋(含代码)

    为了展示如何应用神经网络算法模型,我们将使用神经网络来学习优化井字棋(Tic Tac Toe).明确井字棋是一种决策性游戏,并且走棋步骤优化是确定的. 开始 为了训练神经网络模型,我们有一系列优化的不 ...

  9. python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例

    本文实例讲述了Python实现的井字棋(Tic Tac Toe)游戏.分享给大家供大家参考,具体如下: 说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码 ...

最新文章

  1. ubuntu下面搭建SolrCloud集群
  2. 子类重写父类虚函数_C/C++编程笔记:关于C++的虚函数和多态,你真的了解吗?...
  3. sed 中如何替换换行符
  4. 使用C语言进行面向对象的开发--GObject入门[5]
  5. 剑指Offer - 面试题13. 机器人的运动范围(BFS/DFS)
  6. android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...
  7. 关于bootstrap的modal弹出层嵌套子Modal所引发的血案(转)
  8. 作着玩:登录页(纯css,不支持ie9以下)
  9. TiDB 在摩拜单车的深度实践及应用
  10. 20165230 2017-2018-2 《Java程序设计》第8周学习总结
  11. 华为OJ 扑克牌大小
  12. TBSchedule源码学习笔记-启动过程
  13. 英语发音规则---ea字母组合发音规律
  14. 【机器学习线性代数】17 利用SVD进行彩色图片压缩
  15. JGG | EVenn: 3分钟在线轻松绘制5种Venn图和Venn网络
  16. 反种族主义算法的偏见与警务简介
  17. Uber的优劣势分析
  18. MosFET/FinFET/GAFET ——鳍式晶体管还能走多远
  19. 动软代码生成器 第一次使用出现附加数据库错误是否添加写入权限
  20. WGCNA:官方教程学习

热门文章

  1. spring项目链接RabbitMQ集群
  2. SpringBoot2.x整合Redis 分布式集群_01
  3. Intellij Idea 离线安装插件
  4. P标签如何取消上下间隔
  5. 系统架构设计师 - 23种设计模式(GOF)
  6. JavaScript从入门到放弃 - ES6中的对象和类
  7. deebot扫地机器人怎么清洁_扫地机器人清洁力拼杀,科沃斯机器人DEEBOT N3与小米1S对比评测...
  8. 静态成员函数与静态成员变量
  9. Python input 函数 - Python零基础入门教程
  10. jq之animate() left font