以下为引用的内容: <%@ 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>
<% '以下是服务器端脚本 '用到的函数和过程
'************************ '函数名 :SaveFile '功能 :将某类词汇保存到文件中 '输入 :1、iSenPart :表示词汇分类的数字。整型 ' 可能的值有: ' 0:主语 ' 1:程度状语 ' 2:地点状语 ' 3:谓语 '输出 :对文件操作后的状态值。整型 ' 可能的值有: ' 0:操作成功 ' 1:操作失败 '************************ Function SaveFile(iSenPart) Dim fsoMain, tsfWords Dim iCount, iWrdCnt Dim iOpStatus
'------------------------------------------ '常变量说明 'fsoMain :FSO对象 'tsfWords :TEXTSTREAM对象 'iCount :计数器。整型 'iWrdCnt :某类词汇单词的数目。整型 'iOpStatus :文件操作完毕后的状态。整型 '------------------------------------------
Set fsoMain = Server.CreateObject("SCRIPTING.FILESYSTEMOBJECT") Set tsfWords= fsoMain.CreateTextFile(m_strFilePath & m_astrFileName(iSenPart), True) tsfWords.WriteLine("[" & m_astrSenPart(iSenPart) & "部分]")
'如果该类别至少有一个单词 If IsEmpty(m_astrWords(iSenPart)) = False Then iWrdCnt = UBound(m_astrWords(iSenPart)) 1 For iCount = 0 To (iWrdCnt - 1) tsfWords.WriteLine(m_astrWords(iSenPart)(iCount)) Next End If
tsfWords.Close iOpStatus = 0
SaveFile = iOpStatus End Function
'************************ '函数名 :LoadFile '功能 :从文件中载入某类词汇 '输入 :1、iSenPart :表示词汇分类的数字。整型 ' 可能的值有: ' 0:主语 ' 1:程度状语 ' 2:地点状语 ' 3:谓语 '输出 :对文件操作后的状态值。整型 ' 可能的值有: ' 0:操作成功 ' 1:操作失败 '************************ Function LoadFile(iSenPart) Dim fsoMain, tsfWords Dim strLoaded Dim iOpStatus
'------------------------------------------ '常变量说明 'fsoMain :FSO对象 'tsfWords :TEXTSTREAM对象 'strLoaded :某类词汇所有单词构成的字符串。字符串型 'iOpStatus :文件操作完毕后的状态。整型 '------------------------------------------
Set fsoMain = Server.CreateObject("SCRIPTING.FILESYSTEMOBJECT") If fsoMain.FileExists(m_strFilePath & m_astrFileName(iSenPart)) = True Then '如果存在纪录文件 strLoaded = "" Set tsfWords= fsoMain.OpenTextFile(m_strFilePath & m_astrFileName(iSenPart), 1) tsfWords.SkipLine Do While tsfWords.AtEndOfStream = False strLoaded = strLoaded & tsfWords.ReadLine & "," Loop
If strLoaded <> "" Then strLoaded = Left(strLoaded, Len(strLoaded) - 1) m_astrWords(iSenPart) = Split(strLoaded, ",") Else m_astrWords(iSenPart) = Empty End If
tsfWords.Close iOpStatus = 0 Else '如果不存在纪录文件 iOpStatus = 1 End If
LoadFile = iOpStatus End Function %>
<% '以下是服务器端脚本 '用于测试的函数和过程
Sub Show(strDef) Response.Write strDef & ": " & Eval(strDef) & "<br>" End Sub
Sub ShowMethod() Response.Write "Request Method: " & Request.ServerVariables("REQUEST_METHOD") & "<br>" End Sub
Sub ShowForm() Dim iCount Dim strProp
iCount = 0 Response.Write "*********Form Information******<br>" For Each strProp In Request.Form iCount = iCount 1 Response.Write iCount & "." & strProp & ": " & Request.Form(strProp) & "<br>" Next Response.Write "*********Form End**************<br>" End Sub %>
|