赞 | 3 |
VIP | 333 |
好人卡 | 2 |
积分 | 1 |
经验 | 1450446 |
最后登录 | 2019-5-29 |
在线时间 | 615 小时 |
Lv1.梦旅人 66RPG站长
- 梦石
- 0
- 星屑
- 54
- 在线时间
- 615 小时
- 注册时间
- 2005-10-10
- 帖子
- 5734
  
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
还是简单说一下这次的友情测试制作方法吧。
范例下载:http://rpg.blue/web/shownews.asp?id=516
制作思路:
0、前提要求:至少需要一个数据库或者文件来存放排名,建议当然是数据库。此外至少需要一个支持asp+access的网上空间来保存数据库和查看信息。
0、看这个教学的前提要求:要不然懂数据库+ASP,要不然有比较深的钻研精神。比如我自己是不懂ASP的,也就是之前被逼得经常修改论坛功能,自己瞎试出来一些。之后花了很长时间编那个论坛监狱才算正式比较了解了数据库和ASP的构建。
网上放数据库的空间和域名请自己去购买。
1、建立数据库,用Office 2003里面的Access进行制作。以本题为范例,建立表 answers,内容包括id(自动编号)、score(得分)、answerID(回答问题的用户ID)、a1,a2,a3,a4,a5,a6,a7,a8,a9,a10(记录用户回答的10个答案)。
2、把数据库上传自己的空间。
3、建立查询功能,本范例命名为friends66.asp,可通过rpg.blue/friends66.asp访问,内容如下:
- <%
- dim yecaopath,indexlink,rs,i
- dim connlink1,connlinkstr
- dim what
- what=trim(Request.QueryString("what"))
- yecaopath="data/XXXX.mdb"
- Set connlink1=Server.CreateObject("ADODB.Connection")
- connlinkstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(yecaopath)
- connlink1.Open connlinkstr
- set rs=server.createobject("adodb.recordset")
- if what<>"" then
- sql="select answerID,score from answers order by id desc"
- else
- sql="select answerID,score from answers order by score desc"
- end if
- rs.open sql,connlink1,1,1
- for i=1 to 20%>
- <%=rs(0)%>;<%=rs(1)%>。<%
- rs.movenext
- if rs.eof then
- exit for
- end if
- next
- rs.close
- set rs=nothing
- set connlink1=Nothing
- %>
复制代码
前面第一部分是定义一些变量,what=trim...这个是记录what,来决定用什么方法查询。
yecaopath=这个是数据库的相对文件地址。
connlink1,connlinkstr是打开数据库用的,rs用来保存数据库记录。
if这段,就是如果what为空,则直接按积分反顺序查询,否则按id反顺序查询(近期答题记录)。所以可以通过rpg.blue/friends66.asp?what=new 来访问近期记录,而rpg.blue/friends66.asp 访问最高记录。
rs.open这个就是把数据库记录存到rs里面去。
for循环一段,按顺序取前20个记录,并且输出在屏幕上。<%=rs(0)%>是本行第一个记录(answerID),<%=rs(1)%>是本行第二个记录(score)
最后关闭数据库。这样就可以查询数据库了(网页功能)。
存入数据库。还是建立.asp文件,本例是friends66as.asp
- <!--#include file="forumconfig.asp"-->
- <!--#include file="forumFunctions.asp"-->
- <!--#include file="forumConn.asp"-->
- <%
- dim userid
- userid=replace(trim(Request.QueryString("id")),"%","")
- if userid="" then
- if u_name="" then
- Response.Redirect "userLogin.asp?url=" & Server.UrlEncode(selfname & "?ntime=" & ntime)
- else
- userid=u_name
- end if
- end if
- call opendb()
- call userCheck(0)
- call closedb()
- if u_name="" then
- set rs=nothing
- Response.Redirect "userLogin.asp?url=" & Server.UrlEncode("forumUserInfo.asp?id=" & userid & "&ntime=" & ntime)
- Response.End
- end if
- dim yecaopath,indexlink,i
- dim connlink1,connlinkstr
- yecaopath="data/XXXX.mdb"
- Set connlink1=Server.CreateObject("ADODB.Connection")
- connlinkstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(yecaopath)
- connlink1.Open connlinkstr
- set rs=server.createobject("adodb.recordset")
- sql="select answerID,score from answers where answerID='" & u_name & "'"
- rs.open sql,connlink1,1,1
- if rs.bof and rs.eof then
- dim a,b
- dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,ASscore
- a = Request.QueryString("a")
- b = Request.QueryString("b")
- a1 = right(a,1)
- a = left(a,4)
- a2 = right(a,1)
- a = left(a,3)
- a3 = right(a,1)
- a = left(a,2)
- a4 = right(a,1)
- a5 = left(a,1)
- a6 = right(b,1)
- b = left(b,4)
- a7 = right(b,1)
- b = left(b,3)
- a8 = right(b,1)
- b = left(b,2)
- a9 = right(b,1)
- a10 = left(b,1)
- ASscore = 0
- if a1="1" then
- ASscore = ASscore + 1
- end if
- if a2="2" then
- ASscore = ASscore + 1
- end if
- (下略,就是和答案比对,并且给予积分。如果添加为独立功能,最好把答案记录在数据库另一个表内,这里因为数据库只给自己用,就一切从简了)
- ASscore = ASscore * 10
- ASscore = cstr(ASscore)%>
- <p align=center>
- ID :<%=u_name%><br><br>
- 选项1 : <%=a1%><br>
- 选项2 : <%=a2%><br>
- 选项3 : <%=a3%><br>
- 选项4 : <%=a4%><br>
- 选项5 : <%=a5%><br>
- 选项6 : <%=a6%><br>
- 选项7 : <%=a7%><br>
- 选项8 : <%=a8%><br>
- 选项9 : <%=a9%><br>
- 选项10: <%=a10%><br><br>
- 总分: <%=ASscore%></p>
- <%
- sql = "insert into answers(answerID,score,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) values('" & u_name & "','" & ASscore & "','" & a1 & "','" & a2 & "','" & a3 & "','" & a4 & "','" & a5 & "','" & a6 & "','" & a7 & "','" & a8 & "','" & a9 & "','" & a10 & "')"
- connlink1.execute(sql)
- else
- %>你已经答过了,当时得分是:<%=rs(1)%><%
- end if
- rs.close
- set rs=nothing
- set connlink1=Nothing
- %>
复制代码
首先是SPD本论坛的功能,获取u_name,也就是66RPG论坛登陆名。如果论坛名为空,则返回登陆界面。如果不是使用论坛,则自己类似上面what那样让玩家传递自己的姓名即可。
然后看到游戏里面是传递了?a=54321&b=a9876这样,数字是题号的答案。所以a是1-5题答案,用right()方法一个一个获取答案,b也是,一个一个获取答案,最后和答案对比一下,并把玩家的答案和成绩显示在屏幕上。
sql那个就是把成绩输入到数据库,这么看可能很费劲,不过用UltraEdit打开的话看起来还是很简单的。最后关闭数据库。
做到这里已经完成90%,最后就是RMXP的客户端一点小功能。
一个是“谁在灌水”这个老工程,只是把获取的信息改为friends66.asp这里,然后用split(/。/)来分段成一个一个的信息,再split(/;/)来获取用户名和成绩。获取之后就是自己编一个小窗口来显示信息即可。这样获取的部分全部完成。
另一个是上传,用RMXP连接网站的功能(早在邓稼先传、三国凡人传的时候就用过了),然后在asp参数里面提供分数即可。
至此就OK了。自己编的时候,还是建议先做asp部分(服务端),最后做RMXP部分(客户端),这样比较简单。偶做的时候先从RMXP入手了,结果浪费了不少时间 - -。当然,如果分数只有一个“最终得分”,那么省略不少内容(判断成绩等),简单多了。
同时如果是纯粹的游戏得分排行榜,建议是传递数据的时候,简单加密(任意方法),防止玩家手动输入内容。至于答题类的则没有这个问题。
坚持看到这一行的不容易了。这个显然不是简单的插件脚本,用起来可能还要花钱购买虚拟主机的空间,就算有教学指导,恐怕最少得花个3-5个小时才能初步看到一点成果。加油吧。
[本贴由 叶舞枫 于 2007-4-28 13:06:36 进行了编辑] |
|