2011-10-18 229 views
0

我正在嘗試創建一個足球模擬程序。我有一個名爲「團隊」的主類和4個名爲「守門員」,「後衛」,「前鋒」和「中場球員」的派生類。從派生類到基類

我根據他們的位置創建球員。 例如:

team fb = new team("fb"); 
forward alex = new forward(fb.tName, "alex", 73, 77, 77, 69, 70); 

我的隊伍等級:

public class team 
{ 
    public string tName; 

    public team(string tName) 
    { 
     this.tName = tName; 

    } 
    public string teamInfo() 
    { 
     return tName; 
    } 
} 

正向類:

class forward:team 
{ 
    //özellikler 
    public string pName; 
    public string pPosName; 
    public int finishing; 
    public int longShots; 
    public int composure; 
    public int offTheBall; 
    public int firstTouch; 

    public forward(string tName, string pName, int finishing, int longShots, int composure, int offTheBall, int firstTouch) 
     : base(tName) 
    { 
     this.pName = pName; 
     this.pPosName = "Forward"; 
     this.finishing = finishing; 
     this.longShots = longShots; 
     this.composure = composure; 
     this.offTheBall = offTheBall; 
     this.firstTouch = firstTouch; 

    } 

    //etkiyi hesapla 
    public double influence 
    { 
     get 
     { 
      //calculations 

      return processed; 
     } 
    } 

    //futbolcunun genel bilgileri 
    public void playerInfo() 
    { 
     Console.WriteLine("\n##############################\n" + pName + "-" + tName + "-" + pPosName + "\n" + "Finishing= " + finishing + "\n" + "Long Shots= " + longShots + "\n" + "Composure= " + composure + "\n" + "Off the ball= " + offTheBall + "\n" + "Frist Touch= " + firstTouch + "\n##############################\n"); 
    } 
} 

,你能看到我的根據自己的技術屬性計算每個球員的影響力。

我想要的是自動化過程。例如,我創建了一支球隊......增加了球員,我希望所有球員的影響力都通過球隊名稱進行調用。我打算給出球隊名稱和陣地名稱,這會給我在球隊所選位置上的球員的平均影響力。

我該怎麼做?

在此先感謝...

注意:我的代碼可能看起來很愚蠢。我是一個新手:)

+3

你應該只使用繼承模型的是,有關係(和其他一些關係)一名球員是不是球隊因此它的通常不是一個好主意從一個團隊派生出一個球員 –

+1

你應該馬上改變一些東西。守門員/後衛/前鋒/中場球員不是**球隊,而是球員。調用你的基類玩家,並在某個地方可以有一個由一組玩家對象組成的團隊。 –

+0

只是一個想法 - 你不會考慮前鋒,守門員,中場和後衛是*球員類型*。然後一支球隊會成爲球員的一個*集合? – StuartLC

回答

1

球員是不是一個團隊,這將給你一個想法

public class Team 
{ 
    private IList<Player> _players 
    ... 
} 

public class Player 
{ 
    public string Name {get;set;} 

    public abstract Influence { get; } 
} 

public class Forward : Player 
{ 
    public override Influence 
    { 
    get { return //calculation } 
    } 
} 
+0

我正在嘗試這個。謝謝 – dum

2

前鋒是一個團隊? 一點都不......一支球隊有前鋒...

不要使用繼承...使用組合而不是。

0

我建議重新考慮你的繼承策略。
當一個類繼承另一個時,這意味着子類'是'基類。將這個應用到你的模型意味着一個前鋒'是'一個沒有多大意義的團隊。事實上,一支球隊'有'前鋒。
一個更準確的模型,你想要實現的是讓一個玩家類作爲你的基類,你的前級,後衛類等繼承。然後你的團隊類可以包含一系列玩家類。