说明:
              这是个关于词语搭配的游戏,是用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)) & "
"
  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
"
  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
"
  'Response.Write "Begin to Write Client Page
"
  %>
<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">
<!--
  //--------------------函数列表--------------------------
  //var webSiteID = 6;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表示帮助列表没有被固定
  //------------------------------------------
var webSiteID = 6;window.onload = var webSiteID = 6;window.onload;
  //-----------------------------------------------------------
  //初始化页面
  function var webSiteID = 6;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;
                   
 
  
 
 
  
