# 前言
首先对大家说声抱歉,接任板务近四年以来,
对于板上的活络或讨论风气一直没有帮上任何的忙,
虽然鲜少有板友说出来,
但看着原本就不甚活络的 PHP 板讨论日渐变少,
应该心里多少都觉得越来越无聊吧。
最近因为暂时回锅协助另一看板的缘故,
也好好思考了一下对于 PHP 板自己能做的事情。
自去年 PHP7 发布以来,感觉 PHP 又渐渐开始注入了新的活力,
如前几天板友分享的 Gameboy 模拟器也是,
PHP 身上依然有着无限多的可能。
总而言之,小弟希望可以渐渐拉抬 PHP 板的交流和活络,
而办些有趣的活动是我现在能想到的方法之一。
# 关于活动
PHP 板的活动当然前提是希望以 Code 会友,
核心思维是举办“有趣、好入门、可深究”这个方向的活动。
以目前小弟第一个拟想的,就是 PHP 井字游戏竞赛。
下面所提的内容都还只是初步规划阶段,欢迎有兴趣的板友一起讨论。
# 井字游戏竞赛
## 简述
众所皆知的井字游戏,由参与者撰写程式来相互竞赛,
除了最基本的 3x3 之外,还包括 5x5、7x7 选 5 等变形棋盘和规则。
## 规则
1. 每个参与者需撰写一个可被执行的函式,
输入参数和输出参数皆为一个符合规范的二维阵列(棋盘),
每次行动后由庄家程式检查资料是否正确,是否有人获胜。
2. 不限制档案数目、撰写方式,
但对于所有棋盘类型必须使用同一只(组)程式。
3. 以 Github 平台作为程式码报名方式,要报名请直接送 PR。
仅限 PTT 板友参加。
## 阶段
正式规则公布 -> 测试用 Code 公布 -> 接受 PR 阶段 ->
审理异议和测试阶段 -> 对战名单公布 -> 竞赛阶段 -> 竞赛结果公布
※ 审理异议 - 代表任何针对他人程式码的检举都必须于此阶段提出,
此后的检举一概不受理,所有进入竞赛阶段的 Code 皆视为有效。
## 竞赛进行方式
1. 挑选两位竞赛者
2. 透过庄家程式加载两位竞赛者的主要函式档案,并决定先后手
3. 庄家程式生成棋盘阵列变量,呼叫并输入到其中一位竞赛者的主要函式,
取得回传值(此竞赛者行动后的棋盘阵列)
4. 庄家程式检验棋盘阵列,输出棋谱阵列(供赛事转拨使用),
并轮替到另一位竞赛者再次执行步骤 3。
5. 以此轮替直到一方胜出或平局(无子可下)为止。
## 评分
1. 竞赛分为淘汰赛和总积分评比两种。
2. 分数来源:
a. 竞赛主体:至少分为输、和局、赢三种。
b. 缴交时间:Github 是公开平台,越早缴交(送 PR)越有程式码曝光风险,
但越早缴交也可获得越多的积分,目前规划为阶梯制。
c. 程式码长度:移除所有空白符号后的总字数,越少分数越高,
目前规划为阶梯制。
d. 程式码品质:例如有单元测试,或其他 PHP The Right Way 当中的部份建议。
此为加分项目。
e. 第三方套件:用越少加分加越多,到某个数量以上就不加分,规划为阶梯制。
我们不拒绝参赛者使用第三方套件,但更爱手刻。
## 竞赛
1. 参与人数够的话,取四人为一组进行竞赛,分数高的两名进入下一回合。
2. 如果同组内所有人积分相同,则四人一起进入下一回合(不连续一次为限),
也就是说你如果连续两次经历“同组内积分均相同”,就会被淘汰。
3. 竞赛主体以外的分数是算在积分制里。
## 奖励
还没有想法 (⊙ω⊙`) 看有没有什么好建议…
## 其他
1. 每位参与者请在自己的参赛资料夹内注明 License,
如未注明则以自动归范为默认 License。
2. 沟通平台预计使用 Github issue(非即时)和 Gitter(即时)两种。
3. 竞赛过程希望能使用直播,并在板上开图(棋盘图)。
# 总之
嗯,欢迎大家补充,或是看看有没有参与的意愿,
是说希望大家都能玩的开心,又能活络看板啊…