试炼 – 迷你WOW

作者: 段 志岩
二月 26, 2011

本文是 2011寒假进阶班 系列文章的第 2 部分,共 10 部分

这是2011年寒假进阶班的一个任务。如果你对这个任务感兴趣,欢迎参与,并与我们共享你的成果。或者你也可以报名参加我们的课程:报名:程序设计与实践2 – Web开发

一、我要下副本

考虑WOW中的一个情境,每个副本中都有几个boss,例如地狱火城墙中有巡视者加戈玛,无疤者奥摩尔,传令官瓦兹德;破碎大厅有 高阶术士奈瑟库斯,战争使者沃姆罗格,酋长卡加斯·刃拳。现在,需要构建用于存储副本信息和boss信息的数据库,假设副本和boss满足以下的条件:

  • 一个boss仅可能在一个副本中出现
  • 一个副本中可能有大量的boss,比如说100000个
  • 副本有名字,难度,简介三个属性
  • boss有名字,HP,MP,坐标四个属性

问题

  • 请给出能够存储上述信息的数据库的结构。
  • 请写一个PHP程序,显示副本及其中的boss,格式参考如下:(此程序只允许执行一次数据库查询,也就是说,你只能select一次)

地狱火城墙
巡视者加戈玛,无疤者奥摩尔,传令官瓦兹德

破碎大厅
高阶术士奈瑟库斯,战争使者沃姆罗格,酋长卡加斯·刃拳

二、我要拿装备

我们已经有了副本系统,下面我们开始下副本拿装备了。考虑,打死一个boss之后,可能出的装备有多种,例如巡视者加戈玛可能掉落的物品有:散兵的鳞片护腿,光触胸甲,奥术怒火护肩,影裂长剑,诡计护腕。看起来与问题一相似,但与问题一不同的地方在于,不同的boss可能爆出相同的装备,也就是说,一件装备可能由多个boss爆出。现在需要在问题一的数据库的基础上,对装备信息和掉落信息进行存储。

问题

  • 请在问题一的数据库的基础上进行扩展,增加对装备信息和掉落信息的存储,要求,同一个装备不能重复存储。
  • 修改问题一中的脚本,使之能够显示掉落信息和装备信息。(你依然可以仅用一条sql语句就完成这个任务,试试吧),输出的格式如下:

地狱火城墙
巡视者加戈玛
散兵的鳞片护腿,光触胸甲,奥术怒火护肩,影裂长剑,诡计护腕
无疤者奥摩尔
……
传令官瓦兹德
……

破碎大厅
高阶术士奈瑟库斯
……
战争使者沃姆罗格
……
酋长卡加斯·刃拳
……

提示

上述数据库的结构问题,是两个非常典型的问题,你们需要了解一下数据库设计的相关知识。

  • 问题一抽象出来就是:如何存储一个实体与多个实体的对应关系(一对多)
  • 问题二抽象出来就是:如何存储多个实体与多个实体的对应关系(多对多)

至于查询和显示,则涉及到同时查询多个数据表的操作(多表联查),你也许会用到“表连接”,“笛卡尔积”之类的操作。

还想听更多的提示?先看看google怎么说。
遇到问题了想发问?先回忆一下《提问的智慧》

啊!出装备了

一个boss被消灭了,会爆出一些装备,而每个装备的爆率是各不相同的,同一个装备在不同的boss身上爆出的几率也是不同的。请扩展问题二中的数据库结构,从而可以存储装备的爆率。并撰写一个php程序,访问者可以在页面上选择要下的副本和要打的boss,击败boss之后,将根据爆率,爆出相应的装备。

PS: 你也许可以使用一些图片,并对界面稍加设计,从而使这个小游戏的可玩性更强。

四、迷你WOW

如果上面三个问题都解决了,下面你就可以考虑再增加一个用户系统,允许用户注册和登录,然后,用户登录后可以通过击杀boss获得经验,并进行升级,当然,你得存储用户的属性和boss的属性,诸如攻击力防御力之类的,在交战时你得根据这些属性判定输赢。好了,一个迷你的WOW已经出现了。邀请你的好友一起来探索艾泽拉斯吧。

本文短网址:http://goo.gl/U9vbr

相关文章

  1. Mysql按条件计数的几种方法
  2. PHP include/require路径问题
  3. 浅谈程序开发过程以及代码风格
  4. 迷你WOW总结
  5. 项目 – Cybery Reader

Tags: , , ,

分类: 我要编程, 课程Online | RSS 2.0 | 我说两句 | Trackback

8 条评论