|  | 
| 技术资料  > ASP技术 > ASP应用 : 词语搭配游戏的制作(ASP)一 |  | 词语搭配游戏的制作(ASP)一March 25,2004
 |  | 说明: 这是个关于词语搭配的游戏,是用ASP、VBScript和JavaScript写的。
 在本机Win98 OEM2、PWS、IE5下测试下没发现大问题。
 
 使用方法:
 方法一:比方说你的3W服务的目录是C:Inetpubwwwroot,在下面建一个目录,如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();
 }
 
 |  |