推荐:ASP 3.0高级编程(四十一)9.2.3 存储过程存储过程的使用是Command对象得到应用的一个领域。存储过程(有时也称存储查询)是存储在数据库中预先定义的SQL查询语句。为什么应该创建和使用存储过程而不是在代码中直接使用
这是个关于词语搭配的游戏,是用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: [email protected] class=link>[email protected]</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: [email protected] 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 %> |
分享:ASP 3.0高级编程(十二)4.2.3 服务器端包含指令的例子本节提供了一些示例页面,可以用来对各种服务器端包含语句进行实验。打开示例网页的子目录Chapter04,显示SSI Directives and the ASP Server Object&rdqu