From 04ec0f8f47a0278ed0c7f208210e6b6d87ddee0a Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Wed, 13 Jul 2022 08:04:35 +1000 Subject: [PATCH] Add printing of bugs --- 16_Bug/csharp/Bug.cs | 8 ++++++++ 16_Bug/csharp/Parts/Body.cs | 14 ++++++++++++++ 16_Bug/csharp/Parts/Feelers.cs | 5 ++++- 16_Bug/csharp/Parts/Head.cs | 13 +++++++++++++ 16_Bug/csharp/Parts/IPart.cs | 1 - 16_Bug/csharp/Parts/Legs.cs | 5 ++++- 16_Bug/csharp/Parts/Neck.cs | 7 +++++++ 16_Bug/csharp/Parts/Part.cs | 2 +- 16_Bug/csharp/Parts/PartCollection.cs | 19 ++++++++++++++++++- 16_Bug/csharp/Parts/Tail.cs | 3 +++ 10 files changed, 72 insertions(+), 5 deletions(-) diff --git a/16_Bug/csharp/Bug.cs b/16_Bug/csharp/Bug.cs index e013d1b6..42e686d4 100644 --- a/16_Bug/csharp/Bug.cs +++ b/16_Bug/csharp/Bug.cs @@ -1,3 +1,4 @@ +using System.Text; using BugGame.Parts; using BugGame.Resources; @@ -10,4 +11,11 @@ internal class Bug public bool IsComplete => _body.IsComplete; public bool TryAdd(IPart part, out Message message) => _body.TryAdd(part, out message); + + public string ToString(string pronoun, char feelerCharacter) + { + var builder = new StringBuilder($"*****{pronoun} Bug*****").AppendLine().AppendLine().AppendLine(); + _body.AppendTo(builder, feelerCharacter); + return builder.ToString(); + } } \ No newline at end of file diff --git a/16_Bug/csharp/Parts/Body.cs b/16_Bug/csharp/Parts/Body.cs index 65fde374..2b7586dc 100644 --- a/16_Bug/csharp/Parts/Body.cs +++ b/16_Bug/csharp/Parts/Body.cs @@ -1,3 +1,4 @@ +using System.Text; using BugGame.Resources; namespace BugGame.Parts; @@ -24,4 +25,17 @@ internal class Body : ParentPart Leg => _legs.TryAddOne(out message), _ => throw new NotSupportedException($"Can't add a {part.Name} to a {Name}.") }; + + public void AppendTo(StringBuilder builder, char feelerCharacter) + { + _neck.AppendTo(builder, feelerCharacter); + builder + .AppendLine(" BBBBBBBBBBBB") + .AppendLine(" B B") + .AppendLine(" B B"); + _tail.AppendTo(builder); + builder + .AppendLine(" BBBBBBBBBBBB"); + _legs.AppendTo(builder); + } } diff --git a/16_Bug/csharp/Parts/Feelers.cs b/16_Bug/csharp/Parts/Feelers.cs index fca80c33..165a073d 100644 --- a/16_Bug/csharp/Parts/Feelers.cs +++ b/16_Bug/csharp/Parts/Feelers.cs @@ -1,3 +1,4 @@ +using System.Text; using BugGame.Resources; namespace BugGame.Parts; @@ -5,7 +6,9 @@ namespace BugGame.Parts; internal class Feelers : PartCollection { public Feelers() - : base(6, Message.FeelerAdded, Message.FeelersFull) + : base(2, Message.FeelerAdded, Message.FeelersFull) { } + + public void AppendTo(StringBuilder builder, char character) => AppendTo(builder, 10, 4, character); } diff --git a/16_Bug/csharp/Parts/Head.cs b/16_Bug/csharp/Parts/Head.cs index bafa172f..3bab7caa 100644 --- a/16_Bug/csharp/Parts/Head.cs +++ b/16_Bug/csharp/Parts/Head.cs @@ -1,3 +1,4 @@ +using System.Text; using BugGame.Resources; namespace BugGame.Parts; @@ -19,4 +20,16 @@ internal class Head : ParentPart Feeler => _feelers.TryAddOne(out message), _ => throw new NotSupportedException($"Can't add a {part.Name} to a {Name}.") }; + + public void AppendTo(StringBuilder builder, char feelerCharacter) + { + _feelers.AppendTo(builder, feelerCharacter); + builder + .AppendLine(" HHHHHHH") + .AppendLine(" H H") + .AppendLine(" H O O H") + .AppendLine(" H H") + .AppendLine(" H V H") + .AppendLine(" HHHHHHH"); + } } diff --git a/16_Bug/csharp/Parts/IPart.cs b/16_Bug/csharp/Parts/IPart.cs index 3d1a45c5..e325a7c1 100644 --- a/16_Bug/csharp/Parts/IPart.cs +++ b/16_Bug/csharp/Parts/IPart.cs @@ -3,5 +3,4 @@ namespace BugGame.Parts; internal interface IPart { string Name { get; } - bool IsComplete { get; } } diff --git a/16_Bug/csharp/Parts/Legs.cs b/16_Bug/csharp/Parts/Legs.cs index b108e2ea..0ed8d8fc 100644 --- a/16_Bug/csharp/Parts/Legs.cs +++ b/16_Bug/csharp/Parts/Legs.cs @@ -1,3 +1,4 @@ +using System.Text; using BugGame.Resources; namespace BugGame.Parts; @@ -5,7 +6,9 @@ namespace BugGame.Parts; internal class Legs : PartCollection { public Legs() - : base(2, Message.LegAdded, Message.LegsFull) + : base(6, Message.LegAdded, Message.LegsFull) { } + + public void AppendTo(StringBuilder builder) => AppendTo(builder, 6, 2, 'L'); } diff --git a/16_Bug/csharp/Parts/Neck.cs b/16_Bug/csharp/Parts/Neck.cs index ee5853e2..e8976c1c 100644 --- a/16_Bug/csharp/Parts/Neck.cs +++ b/16_Bug/csharp/Parts/Neck.cs @@ -1,3 +1,4 @@ +using System.Text; using BugGame.Resources; namespace BugGame.Parts; @@ -20,4 +21,10 @@ internal class Neck : ParentPart Feeler => _head.TryAdd(part, out message), _ => throw new NotSupportedException($"Can't add a {part.Name} to a {Name}.") }; + + public void AppendTo(StringBuilder builder, char feelerCharacter) + { + _head.AppendTo(builder, feelerCharacter); + builder.AppendLine(" N N").AppendLine(" N N"); + } } diff --git a/16_Bug/csharp/Parts/Part.cs b/16_Bug/csharp/Parts/Part.cs index ada12b8c..f29fbd81 100644 --- a/16_Bug/csharp/Parts/Part.cs +++ b/16_Bug/csharp/Parts/Part.cs @@ -2,7 +2,7 @@ using BugGame.Resources; namespace BugGame.Parts; -internal class Part +internal class Part : IPart { private readonly Message _addedMessage; private readonly Message _duplicateMessage; diff --git a/16_Bug/csharp/Parts/PartCollection.cs b/16_Bug/csharp/Parts/PartCollection.cs index aac0bbd2..6e6034de 100644 --- a/16_Bug/csharp/Parts/PartCollection.cs +++ b/16_Bug/csharp/Parts/PartCollection.cs @@ -1,3 +1,4 @@ +using System.Text; using BugGame.Resources; namespace BugGame.Parts; @@ -23,11 +24,27 @@ internal class PartCollection if (_count < _maxCount) { _count++; - message = _addedMessage.ForQuantity(_count); + message = _addedMessage.ForValue(_count); return true; } message = _fullMessage; return false; } + + protected void AppendTo(StringBuilder builder, int offset, int length, char character) + { + if (_count == 0) { return; } + + builder.Append(' ', offset); + + for (var i = 0; i < length; i++) + { + for (var j = 0; j < _count; j++) + { + builder.Append(character).Append(' '); + } + builder.AppendLine(); + } + } } diff --git a/16_Bug/csharp/Parts/Tail.cs b/16_Bug/csharp/Parts/Tail.cs index ad610d81..8c450f1d 100644 --- a/16_Bug/csharp/Parts/Tail.cs +++ b/16_Bug/csharp/Parts/Tail.cs @@ -1,3 +1,4 @@ +using System.Text; using BugGame.Resources; namespace BugGame.Parts; @@ -8,4 +9,6 @@ internal class Tail : Part : base(Message.TailAdded, Message.TailNotNeeded) { } + + public void AppendTo(StringBuilder builder) => builder.AppendLine("TTTTTB B"); } \ No newline at end of file