ASP实例:词语搭配游戏的制作

2009-05-12 14:38:20来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

这是个关于词语搭配的游戏,是用ASP、VBScript和JavaScript写的。

在本机Win98 OEM2、PWS、IE5下测试下没发现大问题。

使用方法:

方法一:比方说你的3W服务的目录是C:\Inetpub\wwwroot,在下面建一个目录,如wordAsb;将游戏文件(wordAsb.asp)拷入目录中;在IE的地址栏中键入http://+你的机器名+/wordAsb/wordAsb.asp或http://127.0.0.1/wordAsb/wordAsb.asp,回车,就可以开始游戏了

方法二:将游戏文件(wordAsb.asp)随便拷入一新建的目录。鼠标右键点击该目录,菜单中选“属性”,点“Web Sharing”属性页,点选“Share this folder”项,点“OK”就可以了。在IE的地址栏中键入http://+你的机器名+/新建目录的名称/wordAsb.asp或http://127.0.0.1/+新建目录的名称+/wordAsb.asp,回车,就可以开始游戏了。

注:您的机子OS应该是NT或Win2000 Server或其他OS但是装有PWS

游戏方法:

单击游戏中的“游戏说明”就知道了;如果有时页面一片空白,请按F5刷新一遍(这也是目前最大的bug吧)。

代码如下:

以下为引用的内容:
<%@ Language = VBScript%>
<%
Option Explicit
'Last Updated By Recon On 03/16/2001

Dim m_iPartCnt
Dim m_strPrompt
Dim m_astrSenPart(), m_astrFileName()
Dim m_astrWords(), m_aiOpStatus()

'------------------------------------------
'常变量说明
'm_iPartCnt :词汇分类的数目。整型
'm_strPrompt :对文件操作完毕后的提示。字符串型
'm_astrSenPart :词汇分类的名称。字符型数组
'm_astrFileName :记录各类词汇文件的文件名。字符型数组
'm_astrWords :纪录各类词汇。二维字符型数组
'm_aiOpStatus :纪录对各个文件操作后的状态。整型数组
'------------------------------------------

'ShowMethod
m_iPartCnt = 4
m_strPrompt = ""
ReDim m_astrSenPart(m_iPartCnt)
ReDim m_astrFileName(m_iPartCnt)
ReDim m_astrWords(m_iPartCnt)
ReDim m_aiOpStatus(m_iPartCnt)

'定义各种词汇分类的名称
m_astrSenPart(0) = "主语"
m_astrSenPart(1) = "程度状语"
m_astrSenPart(2) = "地点状语"
m_astrSenPart(3) = "谓语"

'定义记载各类词汇文件的名称
m_astrFileName(0) = "Who.txt"
m_astrFileName(1) = "How.txt"
m_astrFileName(2) = "Where.txt"
m_astrFileName(3) = "What.txt"

If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
'如果页面的请求方式是 POST

'************************
'获得客户端的信息
'************************
Dim m_iSenPart
Dim m_strOpWay
Dim m_bRptedData

'------------------------------------------
'常变量说明
'm_iSenPart :表示词汇分类的数字。整型
' 词汇的分类来自数组m_astrSenPart
' 可能的值有:
' 0:主语
' 1:程度状语
' 2:地点状语
' 3:谓语

'm_strOpWay :文件操作方式。字符串型
' 可能的值有:
' 1、SAVE :将某类词汇存入文件
' 2、SAVEALL :将所有类别的词汇存入文件
' 3、LOAD :从文件中载入某类词汇
' 4、LOADALL :从文件中载入所有类别的词汇

'm_bRptedData :表示本次提交的表单数据和上次是否相同。布尔型
' 可能的值有:
' 1、False :表单数据不重复
' 2、True :表单数据重复(即重复提交表单)
'------------------------------------------

'ShowForm
'获得用户请求的操作方式
m_strOpWay = Request.Form("txtOpWay")
'Show("m_strOpWay")

'获得各个类别的单词
For m_iCount = 0 To (m_iPartCnt - 1)
If Request.Form("txtWords" & m_iCount) <> "" Then
m_astrWords(m_iCount) = Split(Request.Form("txtWords" & m_iCount), ",")
End If
'Response.Write UBound(m_astrWords(m_iCount)) & "<br>"
Next

'检测是否重复提交表单
'If Session("FormInf") = Request.Form Then
' '表单是重复提交
' m_bRptedData = True
'Else
' '表单是非重复提交
' Session("FormInf") = Request.Form
' m_bRptedData = False
'End If
'Show("m_bRptedData")

'************************
'对单词文件进行操作
'************************
'If m_bRptedData = False Then

Dim m_iCount, m_iErrCnt
Dim m_strFilePath

'------------------------------------------
'常变量说明
'm_iCount :计数器。整型
'm_iErrCnt :发生操作失败的次数。整型
'm_strFilePath :记录各类词汇文件的路径。字符串型
'------------------------------------------

'获得放置词汇文件的路径
m_strFilePath = Request.ServerVariables("PATH_TRANSLATED")
m_strFilePath = Left(m_strFilePath, InStrRev(m_strFilePath, "\"))
'm_strFilePath = m_strFilePath & "Words\"
'Show("m_strFilePath")

'开始操作文件
'Response.Write "Begin to Operate Word Files<br>"
Select Case m_strOpWay
Case "SAVE"
'保存单词到文件中
m_iSenPart = CInt(Request.Form("txtSenPart"))
m_aiOpStatus(m_iSenPart) = SaveFile(m_iSenPart)

'根据操作状态,得到提示信息
Select Case m_aiOpStatus(m_iSenPart)
Case 0
m_strPrompt = "[" & m_astrSenPart(m_iSenPart) & "]部分单词已成功地被保存到文件中"

Case 1
m_strPrompt = "[" & m_astrSenPart(m_iSenPart) & "]部分文件保存失败"
End Select

Case "SAVEALL"
'保存所有类别的单词到文件中
m_iErrCnt = 0
For m_iCount = 0 To (m_iPartCnt - 1)
m_aiOpStatus(m_iCount) = SaveFile(m_iCount)
If m_aiOpStatus(m_iCount) = 1 Then
m_iErrCnt = m_iErrCnt + 1
End If
Next

'根据操作状态,得到提示信息
Select Case m_iErrCnt
Case 0
m_strPrompt = "所有类别的单词都已成功地被保存到文件中"

Case m_iPartCnt
m_strPrompt = "所有类别的单词文件都保存失败"

Case Else
m_strPrompt = "其中,"
For m_iCount = 0 To (m_iPartCnt - 1)
If m_aiOpStatus(m_iCount) = 1 Then
m_strPrompt = m_strPrompt & "[" & m_astrSenPart(m_iCount) & "]、"
End If
Next
m_strPrompt = Left(m_strPrompt, Len(m_strPrompt) - 1)
m_strPrompt = m_strPrompt & "部分文件保存失败"
End Select

Case "LOAD"
'从文件中载入单词
m_iSenPart = CInt(Request.Form("txtSenPart"))
m_aiOpStatus(m_iSenPart) = LoadFile(m_iSenPart)

'根据操作状态,得到提示信息
Select Case m_aiOpStatus(m_iSenPart)
Case 0
m_strPrompt = "[" & m_astrSenPart(m_iSenPart) & "]部分单词已成功地被载入"

Case 1
m_strPrompt = "[" & m_astrSenPart(m_iSenPart) & "]部分文件不存在,载入失败"
End Select

Case "LOADALL"
'从各个文件中载入单词
m_iErrCnt = 0
For m_iCount = 0 To (m_iPartCnt - 1)
m_aiOpStatus(m_iCount) = LoadFile(m_iCount)
If m_aiOpStatus(m_iCount) = 1 Then
m_iErrCnt = m_iErrCnt + 1
End If
Next

'根据操作状态,得到提示信息
Select Case m_iErrCnt
Case 0
m_strPrompt = "所有类别的单词都已成功地被载入"

Case m_iPartCnt
m_strPrompt = "所有类别的单词文件都不存在,载入完全失败"

Case Else
m_strPrompt = "其中,"
For m_iCount = 0 To (m_iPartCnt - 1)
If m_aiOpStatus(m_iCount) = 1 Then
m_strPrompt = m_strPrompt & "[" & m_astrSenPart(m_iCount) & "]、"
End If
Next
m_strPrompt = Left(m_strPrompt, Len(m_strPrompt) - 1)
m_strPrompt = m_strPrompt & "部分文件不存在,载入部分失败"
End Select
End Select

'End If
End If
'Response.Write "End to Operate Word Files<br>"
'Response.Write "Begin to Write Client Page<br>"
%>

<html>
<head>
<title> 词语搭配游戏 </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">

<!--风格表-->
<style>
<!--
/*英文字体1*/
.fontEng1
{
font-family: TIMES NEW ROMAN;
font-style: ;
}

/*英文字体2*/
.fontEng2
{
font-family: TIMES NEW ROMAN;
font-style: ITALIC;
}

/*强调字体*/
.fontEmp
{
color: RED;
}

/*链接*/
.link
{
font-family: TIMES NEW ROMAN;
font-style: ITALIC;
text-decoration: NONE;
}

/*被显示的单词列表*/
.listShown
{
position: ABSOLUTE;
width: 140px;
height: 200px;
display: INLINE;
border: LIGHTCORAL 1px SOLID;
background-color: GAINSBORO;
}

/*被隐藏的单词列表*/
.listHidden
{
position: ABSOLUTE;
width: 140px;
height: 200px;
display: NONE;
border: LIGHTCORAL 1px SOLID;
background-color: GAINSBORO;
}

/*被固定的单词列表*/
.listFixed
{
position: ABSOLUTE;
width: 140px;
height: 200px;
display: INLINE;
border: RED 1px SOLID;
background-color: GAINSBORO;
}

/*被显示的帮助列表*/
.helpShown
{
position: ABSOLUTE;
width: ;
height: ;
display: block;
border: LIGHTCORAL 1px SOLID;
background-color: GAINSBORO;
}

/*被隐藏的帮助列表*/
.helpHidden
{
position: ABSOLUTE;
width: ;
height: ;
display: NONE;
border: LIGHTCORAL 1px SOLID;
background-color: GAINSBORO;
}

/*被固定的帮助列表*/
.helpFixed
{
position: ABSOLUTE;
width: ;
height: ;
display: block;
border: RED 1px SOLID;
background-color: GAINSBORO;
}

/*被强调显示的标签*/
.lblMOver
{
text-decoration: NONE;
color: LIGHTCORAL;
background-color: ;
}

/*正常显示的标签*/
.lblMOut
{
text-decoration: NONE;
color: ;
background-color: ;
}

/*被点击过的标签*/
.lblClicked
{
text-decoration: UNDERLINE;
color: RED;
background-color: ;
}

/*高亮显示的按钮*/
.btnLighted
{
width: 105px;
color: BLUE;
background-color: ;
}

/*正常显示的按钮*/
.btnDelighted
{
width: 105px;
color: ;
background-color: ;
}

/*高亮显示的单词列表项*/
.optLighted
{
text-decoration: UNDERLINE;
color: BLUE;
background-color: ;
cursor: HAND;
}

/*正常显示的单词列表项*/
.optDelighted
{
text-decoration: NONE;
color: ;
background-color: ;
cursor: ;
}
-->
</style>

<!--客户端脚本-->
<script language="JavaScript">
<!--
//客户端公用及测试函数
//************************
//函数名 :lTrim
//功能 :去掉字串左边的空格
//输入 :1、strTemp :要规整的字串。字符串型
//输出 :规整后的字串。字符串型
//************************
function lTrim(strTemp)
{
var iCount, iLength;
//------------------------------------------
//常变量说明
//iCount :计数器。整型
//iLength :字串的长度。整型
//------------------------------------------

iLength = strTemp.length;
for (iCount = 0; iCount < iLength; iCount ++)
if (strTemp.charAt(iCount) != " ")
return strTemp.substring(iCount, iLength);

return "";
}

//************************
//函数名 :rTrim
//功能 :去掉字串右边的空格
//输入 :1、strTemp :要规整的字串。字符串型
//输出 :规整后的字串。字符串型
//************************
function rTrim(strTemp)
{
var iCount, iLength;
//------------------------------------------
//常变量说明
//iCount :计数器。整型
//iLength :字串的长度。整型
//------------------------------------------

iLength = strTemp.length;
for(iCount = iLength - 1; iCount >= 0; iCount --)
if (strTemp.charAt(iCount) != " ")
return strTemp.substring(0, iCount + 1);

return "";
}

//************************
//函数名 :trim
//功能 :去掉字串两边的空格
//输入 :1、strTemp :要规整的字串。字符串型
//输出 :规整后的字串。字符串型
//************************
function trim(strTemp)
{
return rTrim(lTrim(strTemp));
}

//将2位数字转换成2位数字字串
//************************
//函数名 :get2bNumStr
//功能 :转换2位的数字成2位的数字字串
//输入 :1、iNumber :要转换的数字。整型
//输出 :转换后得到的数字字串。整型
//************************
function get2bNumStr(iNumber)
{
var str2bNum;
//------------------------------------------
//常变量说明
//str2bNum :数字字串。字符串型
//------------------------------------------

if (parseInt(iNumber) < 10)
str2bNum = "0" + iNumber;
else
str2bNum = "" + iNumber;

return str2bNum;
}

//************************
//函数名 :assignFunc
//功能 :指定元素的事件处理函数
//输入 :1、ele :要指定事件处理函数的元素。对象型
// 2、func :事件处理函数。函数型
// 3、event :事件类型。字符串型
//输出 :无
//************************
function assignFunc(ele, func, event)
{
var iCount, iEleCount;
var strEvent;

//------------------------------------------
//常变量说明
//iCount :计数器。整型
//iEleCount :同名元素集合中元素的个数。整型
//strEvent :事件类型。字符串型
//------------------------------------------

if (event == null)
strEvent = "onclick";
else
strEvent = event;

iEleCount = ele.length;
if (iEleCount == undefined)
eval("ele." + strEvent + " = " + func);
else
for (iCount = 0; iCount < iEleCount; iCount ++)
eval("ele[iCount]." + strEvent + " = " + func);
}

//************************
//函数名 :getEleIndex
//功能 :得到发生事件的元素在同名集合中的索引
//输入 :1、eleSrc :发生事件的元素。对象型
//输出 :发生事件的元素在同名集合中的索引
//************************
function getEleIndex(eleSrc)
{
var colSrc;
var iCount, iEleCount;

//------------------------------------------
//常变量说明
//colSrc :同名元素集合。对象型数组
//iCount :计数器。整型
//iEleCount :同名元素集合中元素的个数。整型
//------------------------------------------

colSrc = eval(eleSrc.id);
iEleCount = colSrc.length;
for (iCount = 0; iCount < iEleCount; iCount ++)
{
if (colSrc[iCount] == eleSrc)
return iCount;
}

return -1;
}

//显示常变量的值(调试用)
//!准备删去
function show(strDef1, strDef2, strDef3, strDef4)
{
var iCount, iDefCnt;
var strShow, strTemp;

iDefCnt = 4;
strShow = "[常变量值]";
for (iCount = 1; iCount <= iDefCnt; iCount ++)
{
strTemp = eval("strDef" + iCount);
if (strTemp != undefined && strTemp != null)
strShow += "\n" + strTemp + ": " + eval(strTemp);
}

alert(strShow);
}

//************************
//函数名 :showArray
//功能 :显示一维数组的元素(调试用)
//输入 :1、array :要显示的一维数组。数组
//输出 :无
//************************
function showArray(array)
{
var iCount, iEleCount;
var strShow;

//------------------------------------------
//常变量说明
//iCount :计数器。整型
//iEleCount :数组元素的个数。整型
//strShow :数组元素值构成的字串。字符串型
//------------------------------------------

iEleCount = array.length;
strShow = "Array Length: " + iEleCount;
strShow += "\n---------------------------------\n";

for (iCount = 0; iCount < iEleCount; iCount ++)
{
if (typeof(array[iCount]) == "object")
strShow += array[iCount].id + " ";
else
strShow += array[iCount] + " ";
}

alert(strShow);
}

//************************
//函数名 :show2DArray
//功能 :显示二维数组的元素(调试用)
//输入 :1、array :要显示的二维数组。数组
//输出 :无
//************************
function show2DArray(array)
{
var iX, iY, iLen1, iLen2;
var strShow;

//------------------------------------------
//常变量说明
//iX :计数器。整型
//iY :计数器。整型
//iLen1 :数组一维的数目。整型
//iLen2 :数组二维的数目。整型
//strShow :数组元素值构成的字串。字符串型
//------------------------------------------

iLen1 = array.length;
strShow = "Array 1D Length: " + iLen1;
strShow += "\n---------------------------------";

for (iX = 0; iX < iLen1; iX ++)
{
strShow += "\n";
iLen2 = array[iX].length;
for (iY = 0; iY < iLen2; iY ++)
strShow += array[iX][iY] + " ";
}

alert(strShow);
}
//-->
</script>

<script language="JavaScript">
<!--
//--------------------函数列表--------------------------
//window_onload
//
//getWord
//reset
//save
//load
//
//showList
//hideList
//fixList
//valueList
//
//showHelp
//hideHelp
//fixHelp
//
//resetAll
//saveAll
//loadAll
//assemble
//
//lightBtn
//delightBtn
//lightOpt
//delightOpt
//
//makeOpt
//removeOpt
//-----------------------------------------------------------

var m_iPartCnt;
var m_astrSenPart, m_astrWords;
var m_strPrompt;
var m_iListFixed, m_iHelpFixed;

//------------------------------------------
//常变量说明
//m_iPartCnt :词汇分类的数目。整型
//m_astrSenPart :词汇分类的名称。字符型数组
//m_astrWords :纪录各类词汇。二维字符型数组
//m_strPrompt :文件操作完毕后的提示信息。字符串型
//m_iListFixed :代表被固定单词列表的数字。整型
// -1表示没有单词列表被固定
//m_iHelpFixed :表示帮助列表固定状态的数字。整型
// -1表示帮助列表没有被固定
//------------------------------------------

window.onload = window_onload;
//-----------------------------------------------------------
//初始化页面
function window_onload()
{
var iCount, iEleCnt;
var colButton;
var strHelp;

//------------------------------------------
//常变量说明
//iCount :计数器。整型
//iEleCnt :集合中元素的个数。整型
//colButton :BUTTON元素的集合。对象型数组
//strHelp :帮助文件内容。字符串型
//------------------------------------------

m_iPartCnt = <%= m_iPartCnt%>;
m_strPrompt = "<%= m_strPrompt%>";
m_iListFixed = -1;
m_iHelpFixed = -1;
m_astrSenPart = new Array();
m_astrWords = new Array();
//alert("m_iPartCnt: " + m_iPartCnt + "\nm_strPrompt: " + m_strPrompt);

//得到词汇分类的名称和已载入的各类词汇
<%For m_iCount = 0 To (m_iPartCnt - 1)%>
//得到已载入的各类词汇
<%If IsEmpty(m_astrWords(m_iCount)) = True Then%>
m_astrWords[<%= m_iCount%>] = new Array();
<%Else%>
m_astrWords[<%= m_iCount%>] = "<%= Join(m_astrWords(m_iCount), ",")%>".split(",");
<%End If%>

//得到词汇分类的名称
m_astrSenPart[<%= m_iCount%>] = "<%= m_astrSenPart(m_iCount)%>";
<%Next%>
//show2DArray(m_astrWords);
//showArray(m_astrSenPart);

//将已载入的各类词汇写入到页面中
for (iCount = 0; iCount < m_iPartCnt; iCount ++)
valueList(m_astrWords[iCount], iCount);

//载入帮助文件
//strHelp = tblHelp.outerHTML;
//strHelp = divHelp1.innerHTML;
//tblHelp.outerHTML = "";
//divHelp.innerHTML = strHelp;
//tblHelp.style.display = "";
//divHelp.style.display = "NONE";
//divHelp.style.left = divHelp1.style.left;
//alert("left: "+divHelp.style.left + "\nleft: " + divHelp1.style.left);
//alert("pixelleft: "+divHelp.style.pixelLeft + "\npixelleft: " + divHelp1.style.pixelLeft);
//alert("posLeft: "+divHelp.style.posLeft + "\nposLeft: " + divHelp1.style.posLeft);
//alert("offsetLeft : "+divHelp.offsetLeft + "\noffsetLeft : " + divHelp1.offsetLeft );
//alert("clientLeft : "+divHelp.clientLeft + "\nclientLeft : " + divHelp1.clientLeft );

//指定页面元素的事件处理函数
assignFunc(txtWord, getWord, "onkeypress");
assignFunc(btnGetWord, getWord);
assignFunc(btnReset, reset);
assignFunc(btnSave, save);
assignFunc(btnLoad, load);
assignFunc(lblWordList, showList, "onmouseover");
assignFunc(lblWordList, hideList, "onmouseout");
assignFunc(lblWordList, fixList);
assignFunc(lblHelp, showHelp, "onmouseover");
assignFunc(lblHelp, hideHelp, "onmouseout");
assignFunc(lblHelp, fixHelp);
assignFunc(btnResetAll, resetAll);
assignFunc(btnSaveAll, saveAll);
assignFunc(btnLoadAll, loadAll);
assignFunc(btnAsb, assemble);

colButton = document.all.tags("BUTTON");
iEleCnt = colButton.length;
//showArray(colButton);
//alert("iEleCnt: " + iEleCnt);
for (iCount = 0; iCount < iEleCnt; iCount ++)
{
assignFunc(colButton[iCount], lightBtn, "onmouseover");
assignFunc(colButton[iCount], delightBtn, "onmouseout");
}

//设置页面初始状态
if (m_strPrompt != "")
alert(m_strPrompt);
txtWord[0].focus();
}

//-----------------------------------------------------------
//得到用户输入的单词
function getWord()
{
//只有当在单词输入框中按回车或
//按“保存”按钮时才继续做下去
if (window.event.type != "keypress" && window.event.type != "click")
return;
else
if (window.event.type == "keypress" && window.event.keyCode != 13) return;

var eleSrc;
var iIndex, iNxtWrdIdx;
var strWord;

//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//iIndex :表示词汇分类的数字。整型
//iNxtWrdIdx :新单词在单词数组中的索引。整型
//strWord :用户输入的单词。字符串型
//------------------------------------------

eleSrc = window.event.srcElement;
iIndex = getEleIndex(eleSrc); //获得索引
strWord = trim(txtWord[iIndex].value); //获得用户输入的单词

//检测输入的单词是否合法
//若是非法的单词则退出
if (strWord == "")
{
//若输入的单词为空或空格字符串
alert("单词不能为空或空格字符串");
txtWord[iIndex].select();
return;
}

if (strWord.indexOf(",") != -1 || strWord.indexOf(" ") != -1)
{
//若输入的单词包含逗号或空格
alert("单词不能包含逗号或空格");
txtWord[iIndex].select();
return;
}

//将单词保存到词汇数组中
iNxtWrdIdx = m_astrWords[iIndex].length;
m_astrWords[iIndex][iNxtWrdIdx] = strWord;
//showArray(m_astrWords[iIndex]);

//将单词写入到页面中
valueList(m_astrWords[iIndex], iIndex);
txtWord[iIndex].value = "";
txtWord[iIndex].focus();
}

//-----------------------------------------------------------
//将当前类别所有的单词从内存中删去
function reset()
{
var eleSrc;
var iIndex, iCount;
var strPrompt;

//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//iIndex :表示词汇分类的数字。整型
//iCount :计数器。整型
//strPrompt :操作提示。字符串型
//------------------------------------------

eleSrc = window.event.srcElement;
iIndex = getEleIndex(eleSrc);
strPrompt = "您确定要从内存中清除[" + m_astrSenPart[iIndex] + "]部分所有的单词吗?";
if (window.confirm(strPrompt) == false) return;

m_astrWords[iIndex] = new Array();
valueList(m_astrWords[iIndex], iIndex);
//showArray(m_astrWords[iIndex]);

strPrompt = "单词清除完毕";
alert(strPrompt);
txtWord[iIndex].select();
}

//-----------------------------------------------------------
//将所选类别的当前词汇保存进文件中
function save()
{
var eleSrc;
var iIndex, iCount;

//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//iIndex :表示词汇分类的数字。整型
//iCount :计数器。整型
//------------------------------------------

eleSrc = window.event.srcElement;
iIndex = getEleIndex(eleSrc);

if (m_astrWords[iIndex].length == 0)
{
//如果所选类别的当前单词个数为零
var strPrompt;
strPrompt = "[" + m_astrSenPart[iIndex] + "]部分现在一个可选单词也没有,您确定要保存吗?";
strPrompt += "\n(这样将生成一个空的新文件)";
if (window.confirm(strPrompt) == false) return;
}

//保存当前内存中所有的单词
for (iCount = 0; iCount < m_iPartCnt; iCount ++)
eval("frmWords.txtWords" + iCount).value = m_astrWords[iCount].join(",");

frmWords.txtSenPart.value = iIndex;
frmWords.txtOpWay.value = "SAVE";
frmWords.submit();
}

//-----------------------------------------------------------
//从文件中读取所选类别的单词纪录
function load()
{
var eleSrc;
var iIndex, iCount;

//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//iIndex :表示词汇分类的数字。整型
//iCount :计数器。整型
//------------------------------------------

eleSrc = window.event.srcElement;
iIndex = getEleIndex(eleSrc);

//保存当前内存中所有的单词
for (iCount = 0; iCount < m_iPartCnt; iCount ++)
eval("frmWords.txtWords" + iCount).value = m_astrWords[iCount].join(",")

frmWords.txtSenPart.value = iIndex;
frmWords.txtOpWay.value = "LOAD";
frmWords.submit();
}

//-----------------------------------------------------------
//显示词汇列表
function showList(iIndex)
{
//如果未给定参数 iIndex
//获得 iIndex
if (iIndex == undefined)
{
//如果已有单词列表被固定,退出函数
if (m_iListFixed != -1) return;

var eleSrc;
var iIndex;

//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//iIndex :表示词汇分类的数字。整型
//------------------------------------------

eleSrc = window.event.srcElement;
iIndex = getEleIndex(eleSrc);
}
//alert("iIndex: "+iIndex);

//显示词汇列表
//lblWordList[iIndex].innerText = "[" + lblWordList[iIndex].innerText + "]";
//lblWordList[iIndex].innerText = lblWordList[iIndex].innerText + ">";
lblWordList[iIndex].className = "lblMOver";
divWordList[iIndex].className= "listShown";
}

//-----------------------------------------------------------
//隐藏词汇列表
function hideList(iIndex)
{
//如果未给定参数 iIndex
//获得 iIndex
if (iIndex == undefined)
{
//如果已有单词列表被固定,退出函数
if (m_iListFixed != -1) return;

var eleSrc;
var iIndex;

//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//iIndex :表示词汇分类的数字。整型
//------------------------------------------

eleSrc = window.event.srcElement;
iIndex = getEleIndex(eleSrc);
}
//alert("iIndex: "+iIndex);

//隐藏词汇列表
//lblWordList[iIndex].innerText = lblWordList[iIndex].innerText.slice(0, -1);
lblWordList[iIndex].className = "lblMOut";
divWordList[iIndex].className= "listHidden";
}

//-----------------------------------------------------------
//固定词汇列表
function fixList()
{
var eleSrc;
var iIndex;

//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//iIndex :表示词汇分类的数字。整型
//------------------------------------------

eleSrc = window.event.srcElement;
iIndex = getEleIndex(eleSrc);

switch (m_iListFixed)
{
case -1:
//如果还没有单词列表被固定
//固定当前列表
m_iListFixed = iIndex;
lblWordList[iIndex].className = "lblClicked";
divWordList[iIndex].className= "listFixed";
break;

case iIndex:
//如果被固定单词列表是当前列表
//解固当前列表
m_iListFixed = -1;
lblWordList[iIndex].className = "lblMOver";
divWordList[iIndex].className= "listShown";
break;

default:
//如果被固定单词列表不是当前列表
//解固被固定列表
hideList(m_iListFixed);
m_iListFixed = -1;
lblWordList[iIndex].className = "lblMOver";
showList(iIndex);
break;
}

//alert("m_iListFixed: " + m_iListFixed + "\niIndex: " + iIndex);
}

//-----------------------------------------------------------
//写入某类词汇已载入的单词
function valueList(aWords, iSenPart)
{
var iCount, iWrdCnt;
var strListPpt;

//------------------------------------------
//常变量说明
//iCount :计数器。整型
//iWrdCnt :某类词汇单词的数目。整型
//strListPpt :单词列表中的提示。字符串型
//------------------------------------------

//数据准备
iWrdCnt = aWords.length;
lblWordCount[iSenPart].innerText = iWrdCnt;
strListPpt = "<div><span style='color: RED; font-style: Italic; font-size: 10.5pt;'>";
strListPpt += "双击单词将其删除</span></div>";

//将单词写入列表
if (iWrdCnt != 0)
{
divWordList[iSenPart].innerHTML = strListPpt;
for (iCount = 0; iCount < iWrdCnt; iCount ++)
divWordList[iSenPart].innerHTML += makeOpt(aWords[iCount], iCount);
}
else
divWordList[iSenPart].innerHTML = strListPpt;
}

//-----------------------------------------------------------
//显示帮助列表
function showHelp()
{
//如果帮助列表已被固定,退出函数
if (m_iHelpFixed == 0) return;

//显示帮助
lblHelp.className = "lblMOver";
divHelp.className = "helpShown";
}

//-----------------------------------------------------------
//隐藏帮助列表
function hideHelp()
{
//如果帮助列表已被固定,退出函数
if (m_iHelpFixed == 0) return;

//隐藏帮助
lblHelp.className = "lblMOut";
divHelp.className = "helpHidden";
}

//-----------------------------------------------------------
//固定帮助列表
function fixHelp()
{
if (m_iHelpFixed == -1)
{
//如果帮助列表还未被固定
//固定它
m_iHelpFixed = 0;
lblHelp.className = "lblClicked";
divHelp.className = "helpFixed";
}
else
{
//如果帮助列表已被固定
//解固它
m_iHelpFixed = -1;
lblHelp.className = "lblMOver";
divHelp.className = "helpShown";
}
}

//-----------------------------------------------------------
//重置页面至初始状态
function resetAll()
{
var iCount;
//------------------------------------------
//常变量说明
//iCount :计数器。整型
//------------------------------------------

for (iCount = 0; iCount < m_iPartCnt; iCount ++)
{
txtWord[iCount].value= "";
m_astrWords[iCount] = new Array(); //将单词数组清空
valueList(m_astrWords[iCount], iCount);
}

txtSentence.value = "";
txtWord[0].focus();
}

//-----------------------------------------------------------
//把所有类别的单词都存入文件
function saveAll()
{
var iCount, iEmptyCnt;
var strPrompt;

//------------------------------------------
//常变量说明
//iCount :计数器。整型
//iEmptyCnt :单词数目为0的类别个数。整型
//strPrompt :操作提示。字符串型
//------------------------------------------

iEmptyCnt = 0;
for (iCount = 0; iCount < m_iPartCnt; iCount ++)
{
//保存当前内存中所有的单词
eval("frmWords.txtWords" + iCount).value = m_astrWords[iCount].join(",");
if (m_astrWords[iCount].length == 0)
iEmptyCnt ++;
}
//alert("iEmptyCnt: " + iEmptyCnt);

if (iEmptyCnt > 0)
{
switch (iEmptyCnt)
{
case m_iPartCnt:
strPrompt = "所有类别的词汇单词个数都为0,操作将会产生" + m_iPartCnt + "个空文件";
strPrompt += "\n您确定要这样做吗?";
break;

default:
strPrompt = "其中,";
for (iCount = 0; iCount < m_iPartCnt; iCount ++)
if (m_astrWords[iCount].length == 0)
strPrompt += "[" + m_astrSenPart[iCount] + "]、";
strPrompt = strPrompt.slice(0, -1);
strPrompt += "部分单词个数为0";
strPrompt += "\n操作将会产生" + iEmptyCnt + "个空文件";
strPrompt += ",您确定要这样做吗?";
}

if (window.confirm(strPrompt) == false) return;
}

frmWords.txtOpWay.value = "SAVEALL";
frmWords.submit();
}

//-----------------------------------------------------------
//从文件中载入所有类别的单词
function loadAll()
{
var iCount;
//------------------------------------------
//常变量说明
//iCount :计数器。整型
//------------------------------------------

//保存当前内存中所有的单词
for (iCount = 0; iCount < m_iPartCnt; iCount ++)
eval("frmWords.txtWords" + iCount).value = m_astrWords[iCount].join(",")

frmWords.txtOpWay.value = "LOADALL";
frmWords.submit();
}

//-----------------------------------------------------------
//进行词汇搭配,得到一个句子
function assemble()
{
var iCount, iWrdCnt, iRndIndex;
var strSentence;

//------------------------------------------
//常变量说明
//iCount :计数器。整型
//iWrdCnt :某类词汇单词的个数。整型
//iRndIndex :随机产生的单词索引。整型
//strSentence :由各个类别词汇中的随机单词组成的句子。字符串型
//------------------------------------------

strSentence = "";
for (iCount = 0; iCount < m_iPartCnt; iCount ++)
{
//如果当前类别词汇的个数为0
//给出提示,并中止搭配
iWrdCnt = m_astrWords[iCount].length;
if (iWrdCnt == 0)
{
var strPrompt;
//------------------------------------------
//常变量说明
//strPrompt :操作提示。字符串型
//------------------------------------------

strPrompt = "[" + m_astrSenPart[iCount] + "]部分一个可选单词也没有";
strPrompt += "\n请至少输入一个单词";
alert(strPrompt);
txtWord[iCount].select();
return;
}

//随机抽取当前类别词汇中的一个单词
//加入到句子中
iRndIndex = Math.floor(Math.random()*iWrdCnt);
strSentence += m_astrWords[iCount][iRndIndex];
//alert("iWrdCnt: " + iWrdCnt + "\niRndIndex: " + iRndIndex);
}

strSentence += "。";
txtSentence.value = strSentence;
}

//使鼠标移到之处的按钮
//产生“点亮”的效果
function lightBtn()
{
var eleSrc;
//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//------------------------------------------

eleSrc = window.event.srcElement;
while (eleSrc.tagName.toUpperCase() != "BUTTON")
eleSrc = eleSrc.parentElement;
eleSrc.className = "btnLighted";
}

//使鼠标离开的按钮
//还原为初始状态
function delightBtn()
{
var eleSrc;
//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//------------------------------------------

eleSrc = window.event.srcElement;
while (eleSrc.tagName.toUpperCase() != "BUTTON")
eleSrc = eleSrc.parentElement;
eleSrc.className = "btnDelighted";
}

//在列表中,使鼠标移到之处的单词
//产生“点亮”的效果
function lightOpt(ele)
{
var eleSrc;
//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//------------------------------------------
eleSrc = ele;
eleSrc.className = "optLighted";
}

//在列表中,使鼠标离开的单词
//还原为初始状态
function delightOpt(ele)
{
var eleSrc;
//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//------------------------------------------

eleSrc = ele;
eleSrc.className = "optDelighted";
}

//得到定义过的将加入列表的单词
function makeOpt(strWord, iWrdIdx)
{
var strOptHead, strOptFoot;
var strOptWord;

//------------------------------------------
//常变量说明
//strOptHead :重定义单词头。字符串型
//strOptFoot :重定义单词尾。字符串型
//strOptWord :重定义单词。字符串型
//------------------------------------------

strOptHead = "<div class='optDelighted' onmouseover='lightOpt(this);' onmouseout='delightOpt(this);' ondblclick='removeOpt(this);' wrdIdx='" + iWrdIdx + "'>";
strOptFoot = "</div>";
strOptWord = strOptHead + strWord + strOptFoot;
//alert(strOptWord);

return strOptWord;
}

//删除列表中的单词
function removeOpt(ele)
{
var eleSrc;
var iIndex, iWrdIdx;
var astrWords, astrHead, astrFoot;

//------------------------------------------
//常变量说明
//eleSrc :发生事件的元素
//iIndex :表示词汇分类的数字。整型
//iWrdIdx :单词在单词数组中的索引。整型
//astrWords :某类词汇单词数组。字符串型数组
//astrHead :某类词汇单词数组头部分。字符串型数组
//astrFoot :某类词汇单词数组尾部分。字符串型数组
//------------------------------------------

eleSrc = ele;
iIndex = getEleIndex(eleSrc.parentElement);
iWrdIdx = parseInt(eleSrc.wrdIdx);

//将单词从词汇数组中删去
//showArray(m_astrWords[iIndex]);
astrWords = m_astrWords[iIndex].concat();
astrHead = astrWords.slice(0, iWrdIdx);
astrFoot = astrWords.slice(iWrdIdx + 1);
m_astrWords[iIndex] = astrHead.concat(astrFoot);
//showArray(astrHead);
//showArray(astrFoot);
//showArray(m_astrWords[iIndex]);

//将剩余的单词重新写入到页面中
valueList(m_astrWords[iIndex], iIndex);
txtWord[iIndex].select();
}
//-->
</script>
</head>

<body>
<!--标题-->
<div align="CENTER">
<span style="font-size: 20pt; font-weight: BOLD">词语搭配游戏</span>
<span class="fontEng2">v1.0</span>
</div>

<hr style="visibility: HIDDEN">
<!--主表格1-->
<table border="0" align="CENTER" width="80%">

<colgroup></colgroup>
<colgroup></colgroup>
<colgroup></colgroup>
<colgroup></colgroup>
<colgroup></colgroup>
<colgroup></colgroup>
<colgroup align="CENTER"></colgroup>
<colgroup></colgroup>

<%For m_iCount = 0 To (m_iPartCnt - 1)%>
<tr>
<td><%= m_astrSenPart(m_iCount)%></td>
<td width="20%"><input type="text" id="txtWord" style="width: 100%"></td>
<td><button id="btnGetWord" style="width: 75px" title="将单词保存到内存中">保存</button></td>
<td><button id="btnReset" style="width: 75px" title="从内存中删去当前类别所有的单词">重置</button></td>
<td><button id="btnSave" style="width: 75px" title="将单词保存到文件中">存入</button></td>
<td><button id="btnLoad" style="width: 75px" title="从文件中载入单词">载入</button></td>
<td width="15%"><label id="lblWordList" title="单击固定我">单词列表</label></td>
<td>
<div id="divWordList" class="listHidden"></div>
个数:<label id="lblWordCount" class="fontEng1"><%= 0%></label>
</td>
</tr>
<%Next%>

</table>

<hr style="visibility: HIDDEN">
<hr style="color: BLUE">
<!--主表格2-->
<table border="0" align="CENTER" width="80%">
<colgroup width="16%"></colgroup>
<colgroup width="16%"></colgroup>
<colgroup width="16%"></colgroup>
<colgroup></colgroup>

<tr>
<td><button id="btnResetAll" accesskey="r" title="从内存中删去所有类别的单词" class="btnDelighted">全部重置 <u>R</u></button></td>
<td><button id="btnSaveAll" accesskey="s" title="将所有类别的单词保存到文件中" class="btnDelighted">全部存入 <u>S</u></button></td>
<td><button id="btnLoadAll" accesskey="l" title="从文件中载入所有类别的单词" class="btnDelighted">全部载入 <u>L</u></button></td>
<td>
<span style="font-size: 9pt; color: RED;">请单击</span> <label id="lblHelp" title="单击固定我">游戏说明</label>
<!--帮助说明表格-->
<div id="divHelp" class="helpHidden">
<table id="tblHelp" border="0" align="CENTER" width="300px" style="font-size: 9pt;">
<colgroup width="75px"></colgroup>
<colgroup></colgroup>

<tr><td colspan="2">
<a href="#1" style="color: BLUE;">游戏步骤</a>
<a href="#2" style="color: BLUE;">操作说明</a>
<a href="#3" style="color: BLUE;">游戏起源</a>
<a href="#4" style="color: BLUE;">制作原因</a>
<a href="#5" style="color: BLUE;">游戏功效</a>
<a name="0" style="display: NONE;">TOP</a>
</td></tr>

<!--游戏步骤-->
<tr><td colspan="2"></td></tr>
<tr><td colspan="2">
[<a name="1" style="color: BLUE;">游戏步骤</a>]
<a href="#0" class="link">TOP</a>
</td></tr>
<tr><td colspan="2">
<span class="fontEng1"><1></span>在每个部分的<span class="fontEmp">输入框</span>中输入单词, 按<span class="fontEmp">回车</span>或<span class="fontEmp">“保存”</span>按钮存入内存中;
或按<span class="fontEmp">“载入”</span>按钮调出以前保存的某类别单词纪录;
或按<span class="fontEmp">“全部载入”</span>按钮调出以前保存的所有类别单词纪录<br>
<span class="fontEng1"><2></span>按<span class="fontEmp">“开始搭配”</span>按钮,系统将从各类单词中随机抽取一个,组成一个句子
</td></tr>

<!--操作说明-->
<tr><td colspan="2"></td></tr>
<tr><td colspan="2">
[<a name="2" style="color: BLUE;">操作说明</a>]
<a href="#0" class="link">TOP</a>
</td></tr>
<tr>
<td>保存</td>
<td>得到用户输入的单词</td>
</tr>

<tr>
<td>重置</td>
<td>将当前类别所有的单词从内存中删去</td>
</tr>

<tr>
<td>存入</td>
<td>将所选类别的当前词汇保存进文件中</td>
</tr>

<tr>
<td>载入</td>
<td>从文件中读取所选类别的单词纪录</td>
</tr>

<tr>
<td>全部重置</td>
<td>重置页面至初始状态</td>
</tr>

<tr>
<td>全部保存</td>
<td>把所有类别的单词都存入文件</td>
</tr>

<tr>
<td>全部载入</td>
<td>从文件中载入所有类别的单词</td>
</tr>

<tr>
<td>开始搭配</td>
<td>进行词汇搭配,得到一个句子</td>
</tr>

<tr><td></td></tr>
<tr><td colspan="2">
<span class="fontEng1"><1></span>
<span class="fontEmp">将鼠标移至“单词列表”处</span>,会弹出该类词汇的单词列表;
<span class="fontEmp">将鼠标移开</span>,列表会自动隐藏;
<span class="fontEmp">点击“单词列表”</span>,会固定单词列表;
<span class="fontEmp">再次点击</span>,会取消固定<br>

<span class="fontEng1"><2></span>
在<span class="fontEmp">固定住一个单词列表</span>后,
<span class="fontEmp">双击</span>该列表中的某个单词,可以将该单词从内存中删去<br>

<span class="fontEng1"><3></span>
输完一个单词后,<span class="fontEmp">直接按回车</span>就可以保存了,这样比按“保存”保存单词更方便
</td></tr>

<!--游戏起源-->
<tr><td colspan="2"></td></tr>
<tr><td colspan="2">
[<a name="3" style="color: BLUE;">游戏起源</a>]
<a href="#0" class="link">TOP</a>
</td></tr>
<tr><td colspan="2">
这个游戏想法来自于小时候玩的纸团游戏。那时和姐姐在家里闲得无聊,就玩这个,哈哈。
玩法很简单,做一些纸片,分成四堆,分别写上<span class="fontEmp">亲朋好友的名字</span>、<span class="fontEmp">形容程度的词语</span>、<span class="fontEmp">关于地点的词语</span>和<span class="fontEmp">所做的事情</span>。
然后,将纸片捏成纸团,<span class="fontEng1">OK, Let's Start!</span> 现在从每堆中抽出一个纸团,就有四个词语,将它们组成一句话,因为是随便抽的,有时能组成很搞笑的句子。
如:陈楠兴奋地在大街上跳夏威夷草裙舞;万民悠闲地在公园里洗澡。^_+
</td></tr>

<!--制作原因-->
<tr><td colspan="2"></td></tr>
<tr><td colspan="2">
[<a name="4" style="color: BLUE;">制作原因</a>]
<a href="#0" class="link">TOP</a>
</td></tr>
<tr><td colspan="2">
主要是无聊,想做个游戏娱乐一下自己,当然也希望大家能从中得到笑声。
其次也想锻炼一下自己的技术,以前用<span class="fontEng1">VB</span>做过一个,不是很好,这次用的是<span class="fontEng1">ASP</span>,不知有没有进步,呵呵
这个版本我大概地测试了一下,没发现大的<span class="fontEng1">bug</span>。如果您在游戏中发现了问题或有什么建议,请一定告诉我,在此先谢谢了!
我的信箱是<a href="mailto: iamchn@21cn.com" class="link">iamchn@21cn.com</a>。不好你就说吗!不可能你说好我又说不好,你不说好我又说好的,^_+
</td></tr>

<!--游戏功效-->
<tr><td colspan="2"></td></tr>
<tr><td colspan="2">
[<a name="5" style="color: BLUE;">游戏功效</a>]
<a href="#0" class="link">TOP</a>
</td></tr>
<tr><td colspan="2">
因为是搞笑游戏,所以能使你心情愉快、青春焕发,间接增加找对象的成功率;
因为不用做纸团了,减少了浪费和污染,从而美化了世界环境;
相信还有很多功效,请大家帮我找。哈哈。
</td></tr>
</table>
</div>

</td>
</tr>

<tr>
<td><button id="btnAsb" accesskey="a" title="从每个类别词汇中随机抽取一个单词,组成一个句子"class="btnDelighted">开始搭配 <u>A</u></button></td>
<td colspan="3"><input type="text" id="txtSentence" style="width: 100%"></td>
</tr>
</table>
<hr style="color: BLUE">

<!--提交表单-->
<form id="frmWords" method="POST" action="" style="display: NONE;">
<%For m_iCount = 0 To (m_iPartCnt - 1)%>
<input type="text" name="txtWords<%= m_iCount%>">
<%Next%>
<input type="text" name="txtSenPart">
<input type="text" name="txtOpWay">
</form>

<!--版权-->
<div align="CENTER">
<div>
© <span class="fontEng2">2001 China Sentin Sci. & Tech. Co., Ltd.</span>
<span class="fontEng2">All Rights Reserved.</span>
</div>
<div>
<span class="fontEng2">Authored by</span> <a href="mailto: iamchn@21cn.com" class="link">Recon</a></span>
<a href="http://recon.top263.net/" class="link">http://recon.top263.net/</a>
</div>
</div>
</body>
</html>

<%

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:ASP实例:动态网页中常用的6个ASP程序

下一篇:ASP实例学习:随机生成文件名的函数