返回列表 回复 发帖

SokoPlayer

终于把SokoPlayer和Discuz!论坛结合起来了,自定义一个Discuz!代码即可。

自定义的Dicuz!代码最多支持三个参数。
现在定义的格式和MF8论坛完全一样,所以可以沿用YSokoban程序ctrl-M生成的Discuz!代码。



下一步准备支持静态推箱子图片,即


不过还不太清楚实现的原理了,mf8论坛是用自定义Discuz!代码把上面的
的Discuz!代码替换为下面的HTML代码。
但是HTML代码里面关键的soko.php文件是如何实现合并图片的呢?


<img src='http://bbs.mf8.com.cn/soko/soko.php?w=27&h=27&level=<br />
HHHHHHHHHHHHHHHHHHHHHHHHHHH<br />
H_*______._*_*_*_$________H<br />
H_HHHH_HHH$__H__.HHHH_HHH*H<br />
H_H__$_$___HHHHH____$_$_H_H<br />
H_H$..$._H_H____.H$..$._H_H<br />
H___$...$H*HH_HH$H_$...$H_H<br />
H_H$...$_H__*__H_H$...$___H<br />
H_H_.$..$H_H___H_H_.$..$H_H<br />
H_H_$_$____HHHHH___$_$__H_H<br />
H_H_HHHH_H___H__$H_HHHH_H*H<br />
H_$_.$___*_*_*_*_.___*____H<br />
H*_H_HHHH_*HHHHH*_HH_HHH_*H<br />
H__H_H__H__H___H__H_*H_H__H<br />
H*HH____HH*H___H*HH____HH*H<br />
H__H_H*aH__H___H__H__H_H__H<br />
H*_HHH_HH_*HHHHH*_HHHH_H_*H<br />
H____*_____*_*_*_*___$.___H<br />
H*H_HHHH_H.__H___H_HHHH_H*H<br />
H_H__$_$___HHHHH____$_$_H_H<br />
H_H$..$._H_H___H_H$..$._H_H<br />
H___$...$H_H__*__H_$...$H_H<br />
H_H$...$_H$HH_HH*H$...$___H<br />
H_H_.$..$H.____H_H_.$..$H_H<br />
H_H_$_$____HHHHH___$_$__H_H<br />
H*HHH_HHHH___H___HHH_HHHH_H<br />
H________*_*_*_*_*______*_H<br />
HHHHHHHHHHHHHHHHHHHHHHHHHHH<br />
'>
经过搜索,基本明白了。php代码经过服务器端运行之后,可以返回文本html文件,也可以返回一个图片。
参看:http://itshenxiaoxiang.blog.163. ... 156342010882487988/
静态推箱子关卡图片生成功能也完成了,编写了一个PHP推箱子图片合成程序sokoimage.php

也是支持和MF8论坛一模一样的[soko
代码。只是把此Discuz! 代码替换为
<img src="http://sokoban.ws/utility/sokoimage.php?w=?&h=?&lvl=?">


似乎Discuz!代码不支持嵌套另外一个Discuz!代码。只要出现了嵌套,系统一律不作替换。
哪怕嵌套的是一个并没有定义的[haha],如上所示。
终于搞定。采取了直接修改Discuz!论坛程序源程序 discuzcode.func.php 的方法。
参考  http://summerlight.name/?p=31

修改的地方有两处:
  1. $bbcodes = 'b|i|u|color|size|font|align|list|indent|url|email|hide|quote|code|free|table|tr|td|img|swf|attach|payto|float|sokojava'
复制代码
  1. preg_replace(array(
  2.                         "/\[color=([#\w]+?)\]/i",
  3.                         "/\[size=(\d+?)\]/i",
  4.                         "/\[size=(\d+(\.\d+)?(px|pt|in|cm|mm|pc|em|ex|%)+?)\]/i",
  5.                         "/\[font=([^\[\<]+?)\]/i",
  6.                         "/\[align=(left|center|right)\]/i",
  7.                         "/\[float=(left|right)\]/i",
  8.                         "/\[sokojava=(\d+?),(\d+?)\]\s*(.+?)\s*\[\/sokojava\]/i"

  9.                 ), array(
  10.                         "<font color=\"\\1\">",
  11.                         "<font size=\"\\1\">",
  12.                         "<font style=\"font-size: \\1\">",
  13.                         "<font face=\"\\1 \">",
  14.                         "<p align=\"\\1\">",
  15.                         "<span style=\"float: \\1;\">",
  16.                         "<applet code=\"SokoPlayer.class\" codebase=\"http://sokoban.ws/sokoplayer/\" width=\\1 height=\\2>
  17. <PARAM NAME=\"level\"    VALUE=\"\\3\">
  18. <PARAM NAME=\"skin\" VALUE=\"http://sokoban.ws/sokoplayer/skin.png\"></applet>"
  19.                 ), $message));
复制代码
返回列表