看来我的回复得罪了不少人,发个小游戏随便散点分

xuzuning 2005-11-28 04:46:14
<?php
set_time_limit(0);

define('MAXNUM', 81); //单元格数
define('SHOWWAIT', 200000); //显示停顿时间,单位微秒

/**
* 统计指定单元格所在行、列、块已添数字
* 如发现现违规输入则中断运行
* 参数
* $i 数值,单元格所在行
* $j 数值,单元格所在列
* 返回 数组,分别为单元格所在行、列、块已添数字
**/
function load($i, $j) {
global $dw;
$row = array();
$col = array();
$block = array();
foreach($dw[$i] as $v) {
if(! empty($v)) $row[] = $v;
}
if(count(array_count_values($row)) != count($row))
message("第 $i 行输入错误");
foreach($dw as $v) {
if(! empty($v[$j])) $col[] = $v[$j];
}
if(count(array_count_values($col)) != count($col))
message("第 $j 列输入错误");
$di = floor($i/3)*3;
$dj = floor($j/3)*3;
for($i=$di; $i<$di+3;$i++) {
for($j=$dj; $j<$dj+3;$j++) {
$v = $dw[$i][$j];
if(! empty($v)) $block[] = $v;
}
}
if(count(array_count_values($block)) != count($block))
message('第 '.($di/3).','.($dj/3).' 块输入错误');
$ar = array($row, $col, $block);
return $ar;
}

/**
* 记录成功排列的“九宫格”数据
* 参数 无
* 返回 无
**/
function save() {
global $dw;
$val = '';
foreach($dw as $v) {
$val .= join('', $v);
}
$val = str_replace(' ', '', $val);
if(strlen($val) != MAXNUM) return;
if(! search($val)) {
$fp = fopen('data.txt', 'a+');
fwrite($fp, "$val\r\n");
fclose($fp);
}
}

/**
* 检查传入的数据是否已被保存
* 参数
* $val 字符串,待检查的数据
* 返回 逻辑值,在 true,不在 false
**/
function search($val) {
if(! is_file('data.txt')) return false;
$fp = fopen('data.txt', 'r');
while(! feof($fp)) {
$s = trim(fgets($fp, 100));
if($s == $val) {
fclose($fp);
return true;
}
}
fclose($fp);
return false;
}

/**
* 暂停当前程序,等待若干时间后继续
* 参数
* $t 数值,等待的时间,单位 微秒
* 返回 无
**/
function wait($t=0) {
list($usec, $sec) = explode(" ",microtime());
$t1 = (float)$usec + (float)$sec;
do {
list($usec, $sec) = explode(" ",microtime());
$t2 = (float)$usec + (float)$sec;
}while($t2 - $t1 < $t/1000000);
}

/**
* 消息发布
* 参数
* $str 字符串,待发布的信息
* 返回 无
* 说明 执行后将终止当前程序的运行
**/
function message($str) {
echo "<script>document.getElementById('view').innerHTML = '$str'</script>\n";
exit;
}

/**
* 在记录文件中检索是否存在符合当前样本的记录
* 参数
* $ar 数组,输入的样本
* 返回 逻辑值,存在 true,不存在 false
* 说明 当检索成功时全局变量中将保存有成功的案例
**/
function find($ar) {
global $dw;
$type = false;
$p = '';
foreach($ar as $v) {
$p .= empty($v) ? '.' : $v;
}
if(! ($fp = fopen('data.txt', 'r'))) return false;
while(! feof($fp)) {
$buf = trim(fgets($fp, 100));
if(ereg($p, $buf)) {
$type = true;
break;
}
}
fclose($fp);
if($type) {
$dw = array_chunk(split(',', chunk_split($buf, 1, ',')),9);
}
return $type;
}

/**
* 填写“九宫格”函数
* 使用递归算法遍历单元格
* 参数
* $pos 数值,指定待处理的单元格编号
* 返回 逻辑值,成功 true,失败 false
**/
function check($pos) {
global $dw, $d;
if($pos == MAXNUM) return true;
while($pos < MAXNUM) {
$i = floor($pos/9);
$j = floor($pos%9);
$value = $dw[$i][$j];
list($row, $col, $block) = load($i, $j);
if(empty($value)) {
shuffle($d);
$t = array_diff($d, $row, $col, $block);
foreach($t as $v) {
$dw[$i][$j] = $v;
echo "<script>document.getElementById('j$i$j').value=$v</script>\n";
flush();
wait(SHOWWAIT);
if(check($pos+1)) return true;
$dw[$i][$j] = '';
echo "<script>document.getElementById('j$i$j').value=''</script>\n";
flush();
wait(SHOWWAIT);
}
return false;
}
$pos++;
}
return true;
}

$start = false;
if(!empty($_POST['submit'])) {
$_POST['dw'] = array_map('trim', $_POST['dw']);
$inp = $_POST['dw'];
if(!find($inp)) {
$dw = array_chunk($_POST['dw'], 9); //按行分割提交的数据
$start = true;
}
}else {
$dw = array_chunk(array_fill(0, 81, ''), 9);
}
?>
<html>
<head>
<title>九 宫 格</title>
</head>
<body>
<table align="center" width=80%>
<tr>
<td valign=top width=300>游戏规则:<br>
<ol type=1>
<li>将1到9填入此表格中</li>
<li>在9×9的格子每行每列,只能且必须填1到9这9个数字 (9个数字都必须出现)</li>
<li>在3×3的每个大格子中的9个数必须是1到9这9个数字(9个数字都必须出现)</li>
</ol>
<b>注意:当你发现在数字总是一个区间内重复时,可能预示按输入的样本将无法完成“九宫格”排列。
如不想等待,请单击“停止”(stop)终止当前的程序</b>
</td>
<td>
<h2 align="center">输入数字</h2>
<table width="225" border="2" align="center" cellpadding="1" cellspacing="0" >
<form method="POST">
<?php
$color = array(
array('red', 'orange', 'yellow'),
array('orange', 'yellow', 'green'),
array('yellow', 'green', 'blue'),
);
for($i=0; $i<9; $i++) {
echo "<tr>\n";
for($j=0,$p='A'; $j<9; $j++,$p++) {
$c = $color[floor($i/3)][floor($j/3)];
$cc = empty($inp[$i*9+$j]) ? '#000000' : '#FF0088';
$v = $dw[$i][$j];
echo "<td width=25 bgcolor=$c bordercolor=$c>";
echo "<input type=text name=dw[] size=1 maxlength=1 id='j$i$j' value='$v' style='color:$cc'></td>\n";
}
echo "</tr>\n";
}
?>
<tr>
<td align="center" colspan="9">
<input type="submit" name=submit value="提交">
<input type="submit" name=reset value="清空">
</td>
</tr>
</form>
</table>
</td></tr>
<tr><td></td><td id='view' align="center" style="color:red"></td></tr></table>
</body>
</html>
<?php
if($start) {
$d = array(1,2,3,4,5,6,7,8,9);
shuffle($d);
if(check(0)) {
save();
}else {
message('无法完成排列');
}
}
?>
...全文
298 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
luza 2005-11-29
  • 打赏
  • 举报
回复
接老大的分
mfzhao 2005-11-29
  • 打赏
  • 举报
回复
如果你能得罪我就好了,我感到荣幸!
patchclass 2005-11-29
  • 打赏
  • 举报
回复
老大得罪人没有关系的,呵呵,接分
lzkd 2005-11-29
  • 打赏
  • 举报
回复
和稻草人及楼上其他有同样的感觉.......

什么回复得罪人了????
ice_berg16 2005-11-29
  • 打赏
  • 举报
回复
什么回复?
helloyou0 2005-11-29
  • 打赏
  • 举报
回复
zunyir 2005-11-28
  • 打赏
  • 举报
回复
接分
qmark 2005-11-28
  • 打赏
  • 举报
回复
接分
afei0220 2005-11-28
  • 打赏
  • 举报
回复
我也来老大这捞点分!
不要只出不进撒!
jxufewbt 2005-11-28
  • 打赏
  • 举报
回复
接分
todayisbest 2005-11-28
  • 打赏
  • 举报
回复
不会啊,你是我的榜样啊
zhrn 2005-11-28
  • 打赏
  • 举报
回复
接分先。呵呵!!
xuzuning 2005-11-28
  • 打赏
  • 举报
回复
125行
if(! ($fp = fopen('data.txt', 'r'))) return false;

改为
if(! ($fp = @fopen('data.txt', 'r'))) return false;


Gdj 2005-11-28
  • 打赏
  • 举报
回复
不用发。那个data.txt是保存结果的。运行过一次再运行时就没了。
Gdj 2005-11-28
  • 打赏
  • 举报
回复
哈哈
fopen(data.txt) [function.fopen]: failed to open stream: No such file or directory in D:\work\test\game.php on line 125

zhangfeng1133 2005-11-28
  • 打赏
  • 举报
回复
Warning: fopen(data.txt): failed to open stream: No such file or directory in c:\apache\htdocs\frnd\test.php on line 125

老大吧这个data.txt也发上来啊
Croatia 2005-11-28
  • 打赏
  • 举报
回复
来接分的.
wuwenqiang2000 2005-11-28
  • 打赏
  • 举报
回复
接分
fhiesc 2005-11-28
  • 打赏
  • 举报
回复
我也来了
Gdj 2005-11-28
  • 打赏
  • 举报
回复
哪个回复?我要收藏。
加载更多回复(3)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧