设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 6113|回复: 14
打印 上一主题 下一主题

[原创发布] 在线排行榜制作方法详解 (解禁)

 关闭 [复制链接]

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

跳转到指定楼层
1
发表于 2006-5-23 04:20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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访问,内容如下:
  1. <%
  2.   dim yecaopath,indexlink,rs,i
  3.   dim connlink1,connlinkstr
  4.   dim what
  5.   what=trim(Request.QueryString("what"))

  6.   yecaopath="data/XXXX.mdb"
  7.   Set connlink1=Server.CreateObject("ADODB.Connection")
  8.   connlinkstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(yecaopath)
  9.   connlink1.Open connlinkstr
  10. set rs=server.createobject("adodb.recordset")

  11. if what<>"" then
  12.         sql="select answerID,score from answers order by id desc"
  13. else
  14.         sql="select answerID,score from answers order by score desc"
  15. end if
  16. rs.open sql,connlink1,1,1
  17. for i=1 to 20%>       
  18. <%=rs(0)%>;<%=rs(1)%>。<%
  19.         rs.movenext
  20.         if rs.eof then
  21.                 exit for
  22.         end if
  23. next
  24.         rs.close
  25.         set rs=nothing
  26.         set connlink1=Nothing
  27. %>
复制代码


前面第一部分是定义一些变量,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
  1. <!--#include file="forumconfig.asp"-->
  2. <!--#include file="forumFunctions.asp"-->
  3. <!--#include file="forumConn.asp"-->
  4. <%
  5. dim userid
  6. userid=replace(trim(Request.QueryString("id")),"%","")
  7. if userid="" then
  8.         if u_name="" then
  9.                 Response.Redirect "userLogin.asp?url=" & Server.UrlEncode(selfname & "?ntime=" & ntime)
  10.         else
  11.                 userid=u_name
  12.         end if
  13. end if
  14. call opendb()
  15. call userCheck(0)
  16. call closedb()
  17. if u_name="" then
  18.         set rs=nothing
  19.         Response.Redirect "userLogin.asp?url=" & Server.UrlEncode("forumUserInfo.asp?id=" & userid & "&ntime=" & ntime)
  20.         Response.End
  21. end if

  22.   dim yecaopath,indexlink,i
  23.   dim connlink1,connlinkstr

  24.   yecaopath="data/XXXX.mdb"
  25.   Set connlink1=Server.CreateObject("ADODB.Connection")
  26.   connlinkstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(yecaopath)
  27.   connlink1.Open connlinkstr
  28. set rs=server.createobject("adodb.recordset")

  29. sql="select answerID,score from answers where answerID='" & u_name & "'"
  30. rs.open sql,connlink1,1,1
  31. if rs.bof and rs.eof then
  32.         dim a,b
  33.         dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,ASscore
  34.         a = Request.QueryString("a")
  35.         b = Request.QueryString("b")
  36.         a1 = right(a,1)
  37.         a = left(a,4)
  38.         a2 = right(a,1)
  39.         a = left(a,3)
  40.         a3 = right(a,1)
  41.         a = left(a,2)
  42.         a4 = right(a,1)
  43.         a5 = left(a,1)
  44.         a6 = right(b,1)
  45.         b = left(b,4)
  46.         a7 = right(b,1)
  47.         b = left(b,3)
  48.         a8 = right(b,1)
  49.         b = left(b,2)
  50.         a9 = right(b,1)
  51.         a10 = left(b,1)
  52.         ASscore = 0
  53.         if a1="1" then
  54.                 ASscore = ASscore + 1
  55.         end if
  56.         if a2="2" then
  57.                 ASscore = ASscore + 1
  58.         end if
  59.         (下略,就是和答案比对,并且给予积分。如果添加为独立功能,最好把答案记录在数据库另一个表内,这里因为数据库只给自己用,就一切从简了)
  60.         ASscore = ASscore * 10
  61.         ASscore = cstr(ASscore)%>

  62. <p align=center>

  63. ID   :<%=u_name%><br><br>

  64. 选项1 : <%=a1%><br>
  65. 选项2 : <%=a2%><br>
  66. 选项3 : <%=a3%><br>
  67. 选项4 : <%=a4%><br>
  68. 选项5 : <%=a5%><br>
  69. 选项6 : <%=a6%><br>
  70. 选项7 : <%=a7%><br>
  71. 选项8 : <%=a8%><br>
  72. 选项9 : <%=a9%><br>
  73. 选项10: <%=a10%><br><br>
  74. 总分: <%=ASscore%></p>
  75.         <%


  76.         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 & "')"
  77.         connlink1.execute(sql)
  78. else
  79. %>你已经答过了,当时得分是:<%=rs(1)%><%
  80. end if

  81.         rs.close
  82.         set rs=nothing
  83.         set connlink1=Nothing
  84. %>
复制代码


首先是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 进行了编辑]

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

2
 楼主| 发表于 2006-5-23 04:20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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访问,内容如下:
  1. <%
  2.   dim yecaopath,indexlink,rs,i
  3.   dim connlink1,connlinkstr
  4.   dim what
  5.   what=trim(Request.QueryString("what"))

  6.   yecaopath="data/XXXX.mdb"
  7.   Set connlink1=Server.CreateObject("ADODB.Connection")
  8.   connlinkstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(yecaopath)
  9.   connlink1.Open connlinkstr
  10. set rs=server.createobject("adodb.recordset")

  11. if what<>"" then
  12.         sql="select answerID,score from answers order by id desc"
  13. else
  14.         sql="select answerID,score from answers order by score desc"
  15. end if
  16. rs.open sql,connlink1,1,1
  17. for i=1 to 20%>       
  18. <%=rs(0)%>;<%=rs(1)%>。<%
  19.         rs.movenext
  20.         if rs.eof then
  21.                 exit for
  22.         end if
  23. next
  24.         rs.close
  25.         set rs=nothing
  26.         set connlink1=Nothing
  27. %>
复制代码


前面第一部分是定义一些变量,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
  1. <!--#include file="forumconfig.asp"-->
  2. <!--#include file="forumFunctions.asp"-->
  3. <!--#include file="forumConn.asp"-->
  4. <%
  5. dim userid
  6. userid=replace(trim(Request.QueryString("id")),"%","")
  7. if userid="" then
  8.         if u_name="" then
  9.                 Response.Redirect "userLogin.asp?url=" & Server.UrlEncode(selfname & "?ntime=" & ntime)
  10.         else
  11.                 userid=u_name
  12.         end if
  13. end if
  14. call opendb()
  15. call userCheck(0)
  16. call closedb()
  17. if u_name="" then
  18.         set rs=nothing
  19.         Response.Redirect "userLogin.asp?url=" & Server.UrlEncode("forumUserInfo.asp?id=" & userid & "&ntime=" & ntime)
  20.         Response.End
  21. end if

  22.   dim yecaopath,indexlink,i
  23.   dim connlink1,connlinkstr

  24.   yecaopath="data/XXXX.mdb"
  25.   Set connlink1=Server.CreateObject("ADODB.Connection")
  26.   connlinkstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(yecaopath)
  27.   connlink1.Open connlinkstr
  28. set rs=server.createobject("adodb.recordset")

  29. sql="select answerID,score from answers where answerID='" & u_name & "'"
  30. rs.open sql,connlink1,1,1
  31. if rs.bof and rs.eof then
  32.         dim a,b
  33.         dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,ASscore
  34.         a = Request.QueryString("a")
  35.         b = Request.QueryString("b")
  36.         a1 = right(a,1)
  37.         a = left(a,4)
  38.         a2 = right(a,1)
  39.         a = left(a,3)
  40.         a3 = right(a,1)
  41.         a = left(a,2)
  42.         a4 = right(a,1)
  43.         a5 = left(a,1)
  44.         a6 = right(b,1)
  45.         b = left(b,4)
  46.         a7 = right(b,1)
  47.         b = left(b,3)
  48.         a8 = right(b,1)
  49.         b = left(b,2)
  50.         a9 = right(b,1)
  51.         a10 = left(b,1)
  52.         ASscore = 0
  53.         if a1="1" then
  54.                 ASscore = ASscore + 1
  55.         end if
  56.         if a2="2" then
  57.                 ASscore = ASscore + 1
  58.         end if
  59.         (下略,就是和答案比对,并且给予积分。如果添加为独立功能,最好把答案记录在数据库另一个表内,这里因为数据库只给自己用,就一切从简了)
  60.         ASscore = ASscore * 10
  61.         ASscore = cstr(ASscore)%>

  62. <p align=center>

  63. ID   :<%=u_name%><br><br>

  64. 选项1 : <%=a1%><br>
  65. 选项2 : <%=a2%><br>
  66. 选项3 : <%=a3%><br>
  67. 选项4 : <%=a4%><br>
  68. 选项5 : <%=a5%><br>
  69. 选项6 : <%=a6%><br>
  70. 选项7 : <%=a7%><br>
  71. 选项8 : <%=a8%><br>
  72. 选项9 : <%=a9%><br>
  73. 选项10: <%=a10%><br><br>
  74. 总分: <%=ASscore%></p>
  75.         <%


  76.         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 & "')"
  77.         connlink1.execute(sql)
  78. else
  79. %>你已经答过了,当时得分是:<%=rs(1)%><%
  80. end if

  81.         rs.close
  82.         set rs=nothing
  83.         set connlink1=Nothing
  84. %>
复制代码


首先是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 进行了编辑]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
2 小时
注册时间
2006-11-2
帖子
38
3
发表于 2006-11-19 00:54:52 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Dancer-

梦石
0
星屑
50
在线时间
61 小时
注册时间
2006-9-14
帖子
2761

贵宾

4
发表于 2006-11-19 00:57:04 | 只看该作者
以下引用comprobe于2006-11-18 16:54:52的发言:

顶一下,我就是需要这个,请问如何成为VIP,我很着急,回复!QQ:368933073

请看http://rpg.blue/viewthread.php?tid=16468
回复 支持 反对

使用道具 举报

Lv1.梦旅人

逃兵

5
发表于 2006-11-19 01:22:11 | 只看该作者
看不到,但也不着急{/dy}
「If you judge people, you have no time to love them.」—— Mother Teresa
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
2 小时
注册时间
2006-11-2
帖子
38
6
发表于 2006-11-19 01:42:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
2 小时
注册时间
2006-11-2
帖子
38
7
发表于 2006-11-19 01:43:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
25665
在线时间
1535 小时
注册时间
2006-1-10
帖子
2063

开拓者第一届地图绘制大赛RTP组第四名

8
发表于 2006-11-19 02:02:54 | 只看该作者
以下引用comprobe于2006-11-18 17:42:37的发言:

我很着急椰,期待快速升级为可以看到此铁的VIP,哎88点……,折合人民币也要264元呢,哪里那么容易么……

不是有VIP赏金贴吗?一点一点的下来,就多了
还差8点,到VIP赏金区转转去~~
MV帮助 http://miaowm5.github.io/RMMV-F1/日复一日,年复一年人还是保留一点自我兴趣的好啊~~~忘记过去 ,这样我就可以  放弃未来了……哭~~终于找回以前的头像了,哎~~原来我是那么的想念阿……
画地图没灵感?很烦?很无聊 【 戳 我 】一 大 波 地 图 在 等 你  \^0^/
我的游戏
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

9
 楼主| 发表于 2006-11-19 02:50:57 | 只看该作者
哦,解禁了也行。无所谓的。
这个老东西了,都快半年了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
10
发表于 2006-11-19 03:21:41 | 只看该作者
省下88vip…………


不过好像是asp的东西啊?(我还以为是rmxp的,想想rmxp要动态排名的干什么?只有一个玩家啊)
略略看了一下,似乎基本上是asp+数据库的基础吧,这………………



asp其实很简单的啊,基本上学过vb的看几个人家的页面就会了啊,而且不会的可以去baidu搜(我学javascript、asp、php、jsp,都是直接在baidu搜,其次是在csdn问,很少买书,毕竟这个东西比ruby通用,会的人和用的人都比ruby多的多啊)。

大上周加了1周的班,一个asp的统计、计算的程序(主要是数据库的东西)和一个php的做考题的程序同时压在头上,两个程序交替着写,人差点疯了。




其实自己写这种东西很容易,难的是改人家论坛等等现成做好的,现在动网、vbb等等的论坛都是写好的模块,随随便便一个功能要走几个页面,走N多require(php里面)才能找到最基本的引用的地方。
我本来写那个答题的就准备用人家现成的,后来看了半天代码,还是觉得从空白的自己写吧…………反正又就这么几个功能不复杂的………………
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-15 05:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表