2014-01-19 40 views
0

我正在爲使用Visual Basic 2008作爲學習練習的朋友的桌面RPG編寫角色創作者,所以如果我做出愚蠢的選擇,請善待他人。 :]在VB 2008中,一個子過程如何在不同的調用中接受不同結構的數組?

我有三個結構數組,一個叫做m_OwnedWeapons,它是從一個叫做Weapons的結構創建的,一個叫做m_OwnedArmor,由一個名爲Armor的結構創建,另一個叫做m_OwnedPotions,由名爲Potions的結構創建。他們有一些相似之處和一些差異,但很多時候我需要對他們每個人做相同的操作。例如,當列表框中的索引發生變化時,我的程序會搜索結構中的每個數組,以查找哪個包含該項目,然後更新顯示的值(成本,描述等)。

我的問題是,我想要一種方法,我只需要編寫一次搜索代碼。現在我必須寫三遍,因爲它必須按名稱搜索。我有相同的代碼貼三次,只有一次是指m_OwnedPotions,一旦它指的是m_OwnedArmor,一旦它指的是m_Owned武器:

LoopCountInteger = 0 
    If m_OwnedPotionsCounterInteger > 0 Then 
     Do Until LoopCountInteger >= m_OwnedPotionsCounterInteger Or ItemFoundBoolean = True 
      If InventoryListBox.SelectedItem.Equals(m_OwnedPotions(LoopCountInteger).NameString) Then 
       ItemFoundBoolean = True 
      End If 
      LoopCountInteger += 1 
     Loop 
    End If 

有沒有一種辦法,也許寫某種子過程與此接受結構名稱數組作爲參數的代碼?這是不可能的,因爲一個是武器結構,盔甲之一和物品之一的陣列?

也許我只需要一個名爲Items的結構數組,它可以容納所有項目類型所需的字段,但是如果我這樣做就會顯得不整齊,因爲那個結構有很多字段沒有用於大多數項目。我不知道。

感謝您的任何幫助和建議。

+0

除非你有特別需要學習vs2008的特殊需求,我推薦去vs2013,快遞版是免費的 – Segfault

回答

1

所以解決這類問題通常是通過繼承完成的。你有三種不同類型的對象,它們共享一些基本屬性,但也是不同的東西。爲了在代碼中表示這些對象,創建一個基類,該基類將爲每個更具體的類型保存它們的公共屬性(名稱,成本,描述等)和子類。

這裏是一個排序exammple的:

Public Class Equipment 
    Public Name As String 
    Public Desc As String 
    Public Cost As Integer 
    Public Weight As Integer 
End Class 

Public Class Weapon 
    Inherits Equipment 
    Public MinimumDamage As Integer 
    Public MaximumDamage As Integer 
    Public Speed As Integer 
End Class 

Public Class Potion 
    Inherits Equipment 
    Public Effect As String 
End Class 

Public Class Armor 
    Inherits Equipment 
    Public SpeedPenalty As Integer 
    Public ArmorClass As Integer 
End Class 

現在,使用polymorphism你可以寫,可以通過接受基本類型的參數上的任何這些項目的運作程序。你的程序也可以有一個容器來容納所有的設備,所以你只需要搜索一個列表來找到選中的對象。

+0

聽起來很完美!謝謝。想想,我以前想知道繼承的意義。具體的例子:檢查。 :d – Reagankm

相關問題