很久以前写的了。ajax有点乱。
看点在数组的保存和处理。欢迎大家排砖
<?
session_start();$_SESSION['step'] = !empty( $_SESSION['step'] ) ? $_SESSION['step'] : 1 ;$_SESSION['rNum'] = ( $_SESSION['step'] == 1 ) ? getNum() : $_SESSION['rNum'];$_SESSION['selectNum'] = ( $_SESSION['step'] == 1 ) ? makeAllNum() : $_SESSION['selectNum'];if ( $_GET['action'] == 'do' ) {
header( "content-Type: text/html; charset=gbk" );
if ( $_POST['gg'] == 'yes' ) {
echo implode( $_SESSION['rNum'] ) . '<BR>开始游戏 1';
session_destroy();
exit;
}
if ( $_POST['state'] == 'replay' ) {
echo '开始游戏 1';
session_destroy();
exit;
}
$tpSN = $_SESSION['selectNum'];
if ( $_POST['select'] == 'yes' ) {
if ( !is_numeric( $_POST['fnum'] ) ) {
echo '请输入一个数字';
exit;
}
for ( $u = 0; $u < count( $tpSN ); $u++ ) {
$key = key( $tpSN );
if ( $_POST['at'] != 'have' ) {
if ( $_POST['io'] == 'save' ) {
if ( $tpSN[$key][( $_POST['at'] - 1 )] == $_POST['fnum'] )
$saveList[] = $tpSN[$key];
} else {
if ( $tpSN[$key][( $_POST['at'] - 1 )] == $_POST['fnum'] )
$saveList[] = $tpSN[$key];;
}
} else {
$tdb = $tpSN[$key];
if ( $_POST['io'] == 'save' ) {
if ( in_array( $_POST['fnum'], $tdb ) )
$saveList[] = $tpSN[$key];
} else {
if ( !in_array( $_POST['fnum'], $tdb ) ) 
$saveList[] = $tpSN[$key];
}
}
next( $tpSN );
}
$_SESSION['selectNum'] = $saveList;
echo getAllNum();//print_r( makeAllNum() );//
exit;
}
$str = $_POST['Num'];
if ( is_numeric( $str ) and strlen( $str ) == 4 ) {
$strs[] = substr( $str, 0, 1 );
$strs[] = substr( $str, 1, 1 );
$strs[] = substr( $str, 2, 1 );
$strs[] = substr( $str, 3, 1 );
if ( in_array( 2, array_count_values( $strs ) ) or 
in_array( 3, array_count_values( $strs ) ) or 
in_array( 4, array_count_values( $strs ) ) ) {
echo '数字不能重复 ' . $_SESSION['step'];
exit;
}
$_SESSION['step'] ++;
$have = false;
$isA = 0;
$inNum = 0;
if ( $_SESSION['rNum'] == $strs ) {
echo $_SESSION['OutStrings'] . '<BR>' .implode( $_SESSION['rNum'] ) . '<BR>你真聪明,猜对了! 1';
session_destroy();
exit;
}
if ( $_SESSION['step'] == 10 ) {
echo implode( $_SESSION['rNum'] ) . '<BR>10次机会都猜错了,游戏结束! 1';
session_destroy();
exit;
}
if ( in_array( $strs[0], $_SESSION['rNum'] ) ) {
$inNum++;
if ( $strs[0] == $_SESSION['rNum'][0] ) $isA++;
}
if ( in_array( $strs[1], $_SESSION['rNum'] ) ) {
$inNum++;
if ( $strs[1] == $_SESSION['rNum'][1] ) $isA++;
}
if ( in_array( $strs[2], $_SESSION['rNum'] ) ) {
$inNum++;
if ( $strs[2] == $_SESSION['rNum'][2] ) $isA++;
}
if ( in_array( $strs[3], $_SESSION['rNum'] ) ) {
$inNum++;
if ( $strs[3] == $_SESSION['rNum'][3] ) $isA++;
}
$_SESSION['OutStrings'] .= $str . '/' . $isA . 'A' . ( $inNum - $isA ) . 'B<BR>';
echo $_SESSION['OutStrings'] . ' ' . $_SESSION['step'];
exit;
} else {
echo '必须输入4位非重复数字 ' . $_SESSION['step'];
exit;
}
}echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>猜数字游戏</title>
<script language="javascript" type="text/javascript" src="js/ajax.js"></script>
<link href="js/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<TABLE width="100%">
<TR>
<TD width="40%" valign="top"><TABLE width="100%">
<TR>
<TD id="topic" colspan="2">第1次,输入一个没有重复数字的4位数</TD>
</TR>
<TR>
<TD id="result" colspan="2" align="left">开始游戏</TD>
</TR>
<TR><INPUT TYPE="hidden" name="state" id="state">
<TD><INPUT TYPE="text" NAME="Num" size="4" id="num" maxLength="4"></TD>
<TD><INPUT TYPE="button" value="看看这个" id="submit" onclick="startRequest(1);document.all.Num.value=\'\';">
<INPUT TYPE="button" value="投降了" id="surrender" onclick="startRequest(3);">
<INPUT TYPE="button" value="从新再来" onclick="document.all.state.value=\'replay\';startRequest(0);"></TD>
</TR>
</TABLE></TD>
<TD width="60%" valign="top"><TABLE width="100%">
<TR>
<TD>数据赛选器</TD>
</TR>
<TR>
<TD><TABLE>
<TR>
<TD>在数据中,<SELECT NAME="" id="io"><option value="save">保留<option value="delete">剔除</SELECT>第:<SELECT NAME="" id="at"><option value="1">1<option value="2">2<option value="3">3<option value="4">4<option value="have">含有</SELECT>位数字为:<INPUT TYPE="text" NAME="" id="fnum" size="1" maxLength="1"> <INPUT TYPE="button" onclick="startRequest(2);" value="go!"></TD>
<TD></TD>
</TR>
</TABLE></TD>
</TR>
<TR>
<TD id="select">' . getAllNum() . '</TD>
</TR>
</TABLE></TD>
</TR>
</TABLE></body>
</html>';function getAllNum() {
reset( $_SESSION['selectNum'] );
$Result = '<table width="100%"><tr>';
for ( $i = 0; $i < 300; $i ++ ) {
$key = key( $_SESSION['selectNum'] );
if ( !is_array( $_SESSION['selectNum'][$key] ) ) continue;
$Result .= '<td>' . ( $key + 1 ) . ':' . @implode( $_SESSION['selectNum'][$key] ) . '</td>';
$Result .= ( ( $i + 1 ) % 10 == 0 ) ? '</tr><tr>' : '';
next( $_SESSION['selectNum'] );
}
$Result .= '</tr><tr><td colspan="10" align="left"> 共有数据:' . count( $_SESSION['selectNum'] ) . '条,只显示前300条 </td></tr></table>';
return $Result;
}function getNum() {
$Result = array();
for ( $i = 0; $i < 4; $i ++ ) {
$Result[] = getOneNum( $Result );
}
return $Result;
}function getOneNum( $BaseNum ) {
mt_srand();
$Result = mt_rand( 0, 9 );
if ( in_array( $Result, $BaseNum ) ) {
return getOneNum( $BaseNum );
} else return $Result;
}function makeAllNum() {
for ( $i = 0; $i < 10; $i ++ ) {
unset( $loopArray );
$loopArray[0] = $i;
for ( $j = 0; $j < 10; $j ++ ) {
unset( $loopArray[2] );
unset( $loopArray[3] );
if ( !in_array( $j, $loopArray ) ) {
$loopArray[1] = $j;
} else continue;
for ( $k = 0; $k < 10; $k ++ ) {
unset( $loopArray[3] );
if ( !in_array( $k, $loopArray ) ) {
$loopArray[2] = $k;
} else continue;
for ( $l = 0; $l < 10; $l ++ ) {
if ( !in_array( $l, $loopArray ) ) {
$loopArray[3] = $l;
} else continue;
if ( count( $loopArray ) == 4 ) {
$Result[] = $loopArray;
}
}
}
}
}
return $Result;
}
?> var xmlHttp;
var NCount = 1;
var Gstate;
function creatXMLHttpRequest() {
if(window.ActiveXObject) {
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
} else if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
} function startRequest(state) {
var queryString;
var num = document.getElementById('num').value;
var st = document.getElementById('state').value;
var io = document.getElementById('io').value;
var at = document.getElementById('at').value;
var fnum = document.getElementById('fnum').value;
Gstate = state;
switch (state)
{
case 2:
queryString = 'select=yes&io='+io+'&at='+at+'&fnum='+fnum;
break;
case 1:
queryString = "Num=" + num;
break;
case 0:
queryString = "state=" + st;
break;
case 3:
queryString = "gg=yes";
break;
}
creatXMLHttpRequest();
xmlHttp.open("POST","?action=do","true");
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
xmlHttp.send(queryString);
} function handleStateChange() {
if ( Gstate != 2 )
{
if(xmlHttp.readyState == 1) {
document.getElementById('result').style.cssText = "";
document.getElementById('result').innerText = "Loading...";
}
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
document.getElementById('result').style.cssText = "";
var allcon =  xmlHttp.responseText;
var strs = allcon.split(" ");
document.getElementById('result').innerHTML = strs[0];
document.getElementById('topic').innerHTML = '第' + strs[1] + '次,输入一个没有重复数字的4位数';
document.getElementById('num').focus();
}
}
} else {
if(xmlHttp.readyState == 1) {
document.getElementById('select').style.cssText = "";
document.getElementById('select').innerText = "Loading...";
}
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
document.getElementById('select').style.cssText = "";
var allcon =  xmlHttp.responseText;
document.getElementById('select').innerHTML = allcon;
document.getElementById('fnum').focus();
}
}
}
}

解决方案 »

  1.   

    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    ..........這段如果這樣寫可能更好些
    $content=<<<HTML
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    ..........HTML;
    echo $content;