Skip to content

Commit 300021b

Browse files
committed
Added preprocessor to enable undo or not
Refactored to use HangmanMemento with internal property
1 parent 3823580 commit 300021b

File tree

5 files changed

+31
-21
lines changed

5 files changed

+31
-21
lines changed

DesignPatternsInCSharp/Memento/HangmanGameWithUndo.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,18 @@
22
{
33
public class HangmanGameWithUndo : HangmanGame
44
{
5-
public IMemento CreateSetPoint()
5+
public HangmanMemento CreateSetPoint()
66
{
77
var guesses = PreviousGuesses.ToArray();
8-
return new HangmanState() { State = guesses };
8+
return new HangmanMemento() { Guesses = guesses };
99
}
1010

11-
public void ResumeFrom(IMemento memento)
11+
public void ResumeFrom(HangmanMemento memento)
1212
{
13-
var guesses = (char[])memento.State;
13+
var guesses = memento.Guesses;
1414
PreviousGuesses.Clear();
1515
PreviousGuesses.AddRange(guesses);
1616
}
17-
18-
public class HangmanState : IMemento
19-
{
20-
public object State { get; set; }
21-
}
2217
}
18+
2319
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace DesignPatternsInCSharp.Memento
2+
{
3+
public sealed class HangmanMemento
4+
{
5+
internal char[] Guesses { get; set; }
6+
}
7+
}

DesignPatternsInCSharp/Memento/IMemento.cs

Lines changed: 0 additions & 7 deletions
This file was deleted.

DesignPatternsInCSharp/Memento/Tests/HangmaneGameConstructor.cs renamed to DesignPatternsInCSharp/Memento/Tests/HangmanGameConstructor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace DesignPatternsInCSharp.Memento.Tests
44
{
5-
public class HangmaneGameConstructor
5+
public class HangmaneGamConstructor
66
{
77
private const string TEST_SECRET_WORD = "TEST";
88

HangmanGame/Program.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using DesignPatternsInCSharp.Memento;
1+
#define SupportUndo
2+
3+
using DesignPatternsInCSharp.Memento;
24
using System;
35
using System.Collections.Generic;
46

@@ -11,11 +13,14 @@ class Program
1113
{
1214
static void Main(string[] args)
1315
{
14-
//var game = new HangmanGame();
16+
17+
#if SupportUndo
1518
var game = new HangmanGameWithUndo();
16-
var gameHistory = new Stack<IMemento>();
19+
var gameHistory = new Stack<HangmanMemento>();
1720
gameHistory.Push(game.CreateSetPoint());
18-
21+
#else
22+
var game = new HangmanGame();
23+
#endif
1924

2025
while (!game.IsOver)
2126
{
@@ -26,10 +31,16 @@ static void Main(string[] args)
2631
Console.WriteLine(game.CurrentMaskedWord);
2732
Console.WriteLine($"Previous Guesses: {String.Join(',', game.PreviousGuesses.ToArray())}");
2833
Console.WriteLine($"Guesses Left: {game.GuessesRemaining}");
34+
35+
#if SupportUndo
2936
Console.WriteLine("Guess (a-z or '-' to undo last guess): ");
37+
#else
38+
Console.WriteLine("Guess (a-z): ");
39+
#endif
3040

3141
var entry = char.ToUpperInvariant(Console.ReadKey().KeyChar);
3242

43+
#if SupportUndo
3344
if(entry == '-')
3445
{
3546
if(gameHistory.Count > 1)
@@ -40,8 +51,11 @@ static void Main(string[] args)
4051
continue;
4152
}
4253
}
54+
#endif
4355
game.Guess(entry);
56+
#if SupportUndo
4457
gameHistory.Push(game.CreateSetPoint());
58+
#endif
4559
Console.WriteLine();
4660
}
4761

0 commit comments

Comments
 (0)