Up, up and away in a Retro Rocket I have seen the Writings on the wall...


Retro Rocket ASCII Art
Nested for-loop art
Print the Retro Rocket
Maybe a golfed C# answer from me 


But I took this relatively serious and created a VerticalRocket class that I would like reviewed, kind of like a little "am I getting better at writing code" project/review experience (granted this was done while waiting for code to compile and queries to run).

What can I learn from this experience?

class VerticalRocket
{
    private int _FuselageSections = 2;
    public int FuselageSections
    {
        get
        {
            return _FuselageSections;
        }
        set
        {
            if (value &lt;= 100 &amp;&amp; value &gt; 0)
            {
                _FuselageSections = value;
            }
        }
    }

    public List&lt;string&gt; rocketPartsList = new List&lt;string&gt;();

    private string Divider = "+=*=*=*=*=*=*+";

    private List&lt;string&gt; upDesigns = new List&lt;string&gt;
    {
          @"|../\..../\..|"
        , @"|./\/\../\/\.|"
        , @"|/\/\/\/\/\/\|"
    };

    private List&lt;string&gt; downDesigns = new List&lt;string&gt;
    {
          @"|\/\/\/\/\/\/|"
        , @"|.\/\/..\/\/.|"
        , @"|..\/....\/..|"
    };
    private List&lt;string&gt; NoseParts = new List&lt;string&gt;
    {
          @"      /\"
        , @"     /**\"
        , @"    //**\\"
        , @"   ///**\\\"
        , @"  ////**\\\\"
        , @" /////**\\\\\"
    };

    private List&lt;string&gt; BoosterParts = new List&lt;string&gt;
    {
          @"    //**\\"
        , @"   ///**\\\"
        , @"  ////**\\\\"
        , @" /////**\\\\\"
    };
    /// &lt;summary&gt;
    /// Creates a Generic Rocket with 2 Fuselage Sections.
    /// &lt;/summary&gt;
    public VerticalRocket()
    {
        rocket(FuselageSections);
    }
    /// &lt;summary&gt;
    /// creates a rocket with specified number of Fuselage sections
    /// &lt;/summary&gt;
    /// &lt;param name="sections"&gt;Number of Fuselage Sections Desired&lt;/param&gt;
    public VerticalRocket(int sections)
    {
        FuselageSections = sections;
        rocket(FuselageSections);
    }

    public List&lt;string&gt; Fuselage(bool diamondShape)
    {
        List&lt;string&gt; fuselage = new List&lt;string&gt;();

        if (diamondShape)
        {
            foreach (string line in upDesigns)
            {
                fuselage.Add(line);
            }
            foreach (string line in downDesigns)
            {
                fuselage.Add(line);
            }
        }
        else
        {
            foreach (string line in downDesigns)
            {
                fuselage.Add(line);
            }
            foreach (string line in upDesigns)
            {
                fuselage.Add(line);
            }
        }
        return fuselage;
    }

    public List&lt;string&gt; Nose()
    {
        List&lt;string&gt; nose = new List&lt;string&gt;();
        foreach (string line in NoseParts)
        {
            nose.Add(line);
        }
        return nose;
    }

    public List&lt;string&gt; Booster()
    {
        List&lt;string&gt; booster = new List&lt;string&gt;();
        foreach (string line in BoosterParts)
        {
            booster.Add(line);
        }
        return booster;
    }

    public void rocket(int sections)
    {
        bool wantDiamond = sections % 2 == 0 ? true : false; //this will keep the X at the bottom

        rocketPartsList.AddRange(Nose());
        rocketPartsList.Add(Divider);
        for (int i = 0; i &lt; sections; i++)
        {
            rocketPartsList.AddRange(Fuselage(wantDiamond));
            wantDiamond = !wantDiamond;
            rocketPartsList.Add(Divider);
        }
        rocketPartsList.AddRange(Booster());
    }

    public override string ToString()
    {
        string output = "";
        foreach (string line in rocketPartsList)
        {
            output += line + Environment.NewLine;
        }
        return output;
    }

}


Note

Up-To-Date code can be found on my Github Repo
I don't like that the FuselageSections silently discards out of
bounds values, throwing an exception would be better.
Maybe there are shorter ways, but Fuselage can use AddRange as
well:

if (diamondShape)
{
    fuselage.AddRange(upDesigns);
    fuselage.AddRange(downDesigns);
}
else
{
    fuselage.AddRange(downDesigns);
    fuselage.AddRange(upDesigns);
}

wantDiamond can just be

bool wantDiamond = sections % 2 == 0;


and that (foo ? true : false or the reverse) is something I'll
always fix if I see it somewhere.
ToString can just be

return String.Join(Environment.NewLine, rocketPartsList);


instead.
Nose, Booster can all just create a copy with the List
constructor, i.e.

return new List&lt;string&gt;(BoosterParts);


and so on.


Otherwise looks fine; if it was actually part of a larger program I'd
move the parts itself into classes and have them output (ToString)
themselves instead.