易码技术论坛

 找回密码
 加入易码
搜索
查看: 218579|回复: 12

[编程]实现丰富的装备系统

[复制链接]
发表于 2006-10-3 21:44:55 | 显示全部楼层
本来是给17杂志的东西……不过17太慢了点……就发出来了。。。。
发表于 2006-10-3 21:51:29 | 显示全部楼层
好的,那些做RPG的会有用啊!
发表于 2006-10-3 21:53:29 | 显示全部楼层
假如可以支持游戏脚本的话,给装备加上一段脚本作为装备效果既可:)
发表于 2006-10-3 21:53:51 | 显示全部楼层
很好哦~
不过应该发到C语言区吧~~
 楼主| 发表于 2006-10-3 22:04:05 | 显示全部楼层
引用第3楼FantasyDR2006-10-03 21:53发表的“”:
假如可以支持游戏脚本的话,给装备加上一段脚本作为装备效果既可:)

哈哈,我只是写基本的做法啦,又不深刻,自我评价:简单能用吧~

脚本怎么做的我还在不清楚中……F前辈发发教程哇哈哈
发表于 2006-10-3 22:09:48 | 显示全部楼层
厉害啊!
发表于 2006-10-3 22:10:37 | 显示全部楼层
不错
再深入点就好了
发表于 2006-10-3 22:27:17 | 显示全部楼层
不是很了解,但是还是支持下
发表于 2006-10-3 22:29:09 | 显示全部楼层
那么。收藏到WW

over
发表于 2006-10-3 22:30:55 | 显示全部楼层
相当有启发性,支持LZ继续发相关的帖子哦^_^
发表于 2006-10-4 00:37:42 | 显示全部楼层
感觉上就是脚本,感觉还可以做大。
发表于 2006-10-4 07:55:14 | 显示全部楼层
越大越好
 楼主| 发表于 2006-10-3 21:31:58 | 显示全部楼层 |阅读模式
实现丰富的装备系统
其实龙之传说的装备系统是一个简化版的暗黑装备系统,他的实现并不困难。不知道大家喜不喜欢,喜欢和想自己做出类似的甚至超过他的就请往下看咯。
PS:本人也才学编程皮毛,有错误还请包涵。
首先,确定装备有些什么基本的属性。常见的游戏里,一个装备的基本属性有装备类型、名字、耐久、最小攻击力、最大攻击力、攻击速度等等,但是在自己的游戏里,装备要有什么属性就要由自己设定好,然后在用代码去实现。下面用结构来做个示范:
   先假定我这里的装备系统的基本属性有:名字、攻击力、装备类型3种,那么用结构去实现就如下:
  1. struct Equi
  2. {
  3.         char name[10];   //一般来说装备名为4个字符,10个char就够了
  4.         int atk;        //用来表示攻击力的变量
  5.         char kind;      //用来表示装备类型的变量
  6. };
  7. struct eq[30];      //定义30个Equi,也就是说主角能带30件装备
复制代码
   好了,基本属性就是这样实现的,如果想要创造一件装备“短剑”,只要如下就可以了
  1.       sprintf(eq[0].name,”短剑”);
  2.       eq[0].atk=10;
  3.       eq[0].kind=1;
复制代码
   不明白?我来解释一下,首先解释[0]吧,想象龙之传说里的装备栏,只能存放30个装备,我们这里也是如此,只能有30个装备,那么获得装备时,怎么确定放到第几个装备格里呢?[0]就是指放到第0号格子里。那么,放到第12号格子里就要用[12]代替上面的[0]就可以了。接着是kind有什么用呢?装备当然有很多种类,剑、棍、盾、装甲,为了区别他们,用kind变量。首先我们得另定义一个表,这个表告诉我们kind的某个值表示什么类型的装备。表示例如下:
      
Kind的值   装备类型
0   该装备格为空
1   剑
2   棍
3   布甲
4   皮甲
5   盾
……   ……
这个表不必用程序写,是我们自己知道就可以的东西。在程序里我们要用其他代码去实现装备类型的检测。
基本的装备系统构思就如同上面所说,那么,怎么样让装备有特殊的效果呢?
做任何事情都要系统化,为装备系统添加特殊效果首先要系统的想想有些什么特殊效果?相同特殊效果的特殊效果值一定相同吗?能同时有多种特殊效果吗?有的话有能同时有多少种呢?有没有不能同时出现的特殊效果?……
到底这个特殊效果有多少种等等问题就要自己思考,我在下面给出一个简单的实现:
假定装备的基本属性如开始列的例子一样,特殊效果包括20种,那么可以定义结构如下:
  1. struct Spe
  2. {
  3.    char kind;      //特殊效果的种类
  4.    int val1;        //特殊效果数值变量1
  5.    int val2;        //特殊效果数值变量2
  6. };
复制代码
   为了和Equi兼容我们也定义Spe有30个,分别对应每个装备有一个Spe。
  1. struct sp[30];
复制代码
   那么我们想为短剑添加特殊效果“提升最大生命值12%”时,可以这样做
  1. sp[0].kind=1;
  2. sp[0].val1=12;
  3. sp[0].val2=1;
复制代码
   解释一下:kind决定是什么类型的特殊效果,假定如下表(这个表不是写在程序里的哦~)
Kind的值   特殊效果类型
0   无特殊效果
1   提升生命值
2   提升法力值
3   提力量值
……   ……
Kind=1就是说特殊效果为提升生命值。Val1表示的是提升量为12,val2表示的是提升方式为方式1。显然,这样装备仍然只是有了几个数,这些数到底怎么才能真正实现特殊效果呢?
以上面为例,在程序某部分:
  1. if (sp[0].kind==1)              //判断特殊效果类型
  2. {
  3.   if (sp[0].val2==0)             //val2决定提升方式,=0是+val1的值
  4.   {
  5.    mhp=mhp+val1;             //最大生命值+12
  6.   }
  7.   else   if (sp[0].val2==0)      //val2 =1是+val1%的值
  8.   {
  9.     mhp=mhp*(val1+100)/100; //最大生命值+12%
  10.   }
  11. }
  12. if (sp[0].kind==2)
  13. {
  14.    ……
  15. }
复制代码
   上面的检测特殊效果类型的代码比较笨拙,应该用for循环而且不应该检测[0]上的装备应该检测的是装备在身上的装备,自于这些怎么实现大家自己去想想吧,我全说出来多没意思(不难的)。
   PS:具体代码的实现不必按我写的去写,我只是用来做例子而已,而且每个人的装备系统都是不同的,我的代码也不见得适合任何地方,而且我这里写的代码很简单+不好用,只是做例子。~^_^~
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-5-1 23:07 , Processed in 0.020159 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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