游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: zodane

向大家请教一个类模块编程设计的问题

[复制链接]

73

主题

612

帖子

618

积分

高级会员

Rank: 4

积分
618
发表于 2006-4-6 17:47:00 | 显示全部楼层

Re:向大家请教一个类模块编程设计的问题

类创建对象之间可以相互引用,但应该注意不要形成循环引用,这样会导致使用Nothing也因为引用树没有归零而无法释放对象。

Parent 是ClsShots类,是Shot类中的一个对象引用变量,
如果要封装各自的类,应该在Shot类中声明为Private mParent as clsShots,然后按照属性读取
为了简单你可以直接使用Public Parent as clsShots,这样就可以直接在Shot类外部用set Shot.Parent=Shots 设置Parent的值。

集合也是对象,集合中可以包含集合
clsUser 用户类=> User 对象=> 包含技能对象集合(useobjs对象)
clsUseobj技能类=>useobj 对象=>包含技能名称变量Name)

i=user.userobjs.findIdx(Name)'根据物品的名称找在集合中的位置
set myUserobj=user.userobjs.find(Name)'根据物品的名称找到对象

其实在用户外部不需要找某名称的技能在集合中的位置,只需要直接找出这个符合条件的技能对象。





88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
 楼主| 发表于 2006-4-7 12:02:00 | 显示全部楼层

Re:向大家请教一个类模块编程设计的问题

写了一天终于写出了一点东西。 然‘而刚刚测试 ,即遭重创  。首先创建 Estate(能力)  Nskill(技能)  ill(疾病)  三个类  .  最后创建顶层类  human (角色 )

   其中human 代码如下 .
'保持属性值的局部变量
Private mvarHp As Estate '局部复制
'保持属性值的局部变量
Private mvarLogist As Nskill '局部复制
'保持属性值的局部变量
Private mvarDkangL As Nskill '局部复制
'保持属性值的局部变量
Private mvarEP As Estate '局部复制
Private mvarBP As Estate '局部复制
'保持属性值的局部变量
Private mvarZhs As Nskill '局部复制
Private mvarAmbition As Nskill '局部复制
'保持属性值的局部变量
Private mvartactics As Nskill '局部复制
Private mvarhardiness As Nskill '局部复制
Private mvarregimen As Nskill '局部复制
Private mvarStudy As Nskill '局部复制
'保持属性值的局部变量
Private mvarillness As ill '局部复制
Public Sub Checkill()
  Dim a, b, c, d
  a = mvarHp.Value < mvarHp.Max * 0.2
  b = mvarEP.Value < mvarEP.Max * 0.2
  c = mvarBP.Value < mvarBP.Max * 0.2
  d = Rnd < (0.5 - 0.15 * mvarDkangL.Grade) * (1 - mvarLogist.Grade)
  If ((a Or b Or c) And d) Then
   
   
  
End Sub

Private Sub AdvanceChk()
Randomize
Dim X As Integer
X = CInt(100 * Rnd)
Select Case X
   Case 50 To 100  '45%得A类病
     mvarillness.Grade = 1
   Case 20 To 49  '30%得B类病
     mvarillness.Grade = 2
   Case 0 To 19 '
     mvarillness.Grade = 3
   End Select
   mvarillness.Start = Now
   mvarHp.Value = mvarHp.Value - mvarillness.Thp
   mvarBP.Value = mvarBP.Value - mvarillness.Tbp
   mvarEP.Value = mvarEP.Value - mvarillness.Tep
   mvarillness.CheckDone = True
End Sub



Public Property Set illness(ByVal vData As ill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.illness = Form1
    Set mvarillness = vData
End Property


Public Property Get illness() As ill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.illness
    Set illness = mvarillness
End Property



Public Property Set Study(ByVal vData As Nskill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.Study = Form1
    Set mvarStudy = vData
End Property


Public Property Get Study() As Nskill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.Study
    Set Study = mvarStudy
End Property



Public Property Set regimen(ByVal vData As Nskill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.regimen = Form1
    Set mvarregimen = vData
End Property


Public Property Get regimen() As Nskill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.regimen
    Set regimen = mvarregimen
End Property



Public Property Set hardiness(ByVal vData As Nskill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.hardiness = Form1
    Set mvarhardiness = vData
End Property


Public Property Get hardiness() As Nskill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.hardiness
    Set hardiness = mvarhardiness
End Property



Public Property Set tactics(ByVal vData As Nskill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.tactics = Form1
    Set mvartactics = vData
End Property


Public Property Get tactics() As Nskill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.tactics
    Set tactics = mvartactics
End Property



Public Property Set Ambition(ByVal vData As Nskill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.Ambition = Form1
    Set mvarAmbition = vData
End Property


Public Property Get Ambition() As Nskill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.Ambition
    Set Ambition = mvarAmbition
End Property



Public Property Set Zhs(ByVal vData As Nskill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.Zhs = Form1
    Set mvarZhs = vData
End Property


Public Property Get Zhs() As Nskill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.Zhs
    Set Zhs = mvarZhs
End Property



Public Property Set BP(ByVal vData As Estate)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.BP = Form1
    Set mvarBP = vData
End Property


Public Property Get BP() As Estate
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.BP
    Set BP = mvarBP
End Property



Public Property Set EP(ByVal vData As Estate)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.EP = Form1
    Set mvarEP = vData
End Property


Public Property Get EP() As Estate
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.EP
    Set EP = mvarEP
End Property



Public Property Set DkangL(ByVal vData As Nskill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.DkangL = Form1
    Set mvarDkangL = vData
End Property


Public Property Get DkangL() As Nskill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.DkangL
    Set DkangL = mvarDkangL
End Property



Public Property Set Logist(ByVal vData As Nskill)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.Logist = Form1
    Set mvarLogist = vData
   
End Property


Public Property Get Logist() As Nskill
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.Logist
    Set Logist = mvarLogist
End Property



Public Property Set Hp(ByVal vData As Estate)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.HP = Form1
    Set mvarHp = vData
    mvarHp.Ename = Hp
    If mvarHp.Value < 0.2 * mvarHp.Max And Rnd < (0.5 - 0.15 * DkangL.Grade) * (1 - Logist.Grade) Then
      mvarillness.Check = True
      mvarillness.Start = Now
    End If
End Property

Public Property Get Hp() As Estate
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.HP
    Set Hp = mvarHp
End Property

测试窗体
dim  tiexue As human

Private Sub Form_Load()
Set tiexue = New human
tiexue.Hp.Value = 100
tiexue.BP.Value = 100
tiexue.EP.Value = 100
End Sub
运行就开始显示 对象变量未设置或with 块变量未设置 . 这是怎么回事啊 ?
难道嵌套类里的属性是不允许外部赋值的 ?????
那我做这些还有什么用 ?  真郁闷啊.   

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2006-4-7 18:40:00 | 显示全部楼层

Re:向大家请教一个类模块编程设计的问题

似乎你这个human类没有构造函数

tiexue.Hp这个对象还没有创建
你就引用tiexue.Hp.value当然就出错了……

73

主题

612

帖子

618

积分

高级会员

Rank: 4

积分
618
发表于 2006-4-7 20:38:00 | 显示全部楼层

Re:向大家请教一个类模块编程设计的问题

因为你用到了其它类,给出完整一点的代码可能更好判断
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 04:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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