深圳升蓝软件
数据库开发 .Net技术  |  ASP技术 PHP技术 JSP技术 应用技术类   
Hiblue Software

词语搭配游戏的制作(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();
}
       
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved