35 Commits

Author SHA1 Message Date
ADato88 688cefbfc5 Merge commit 'f71d96b739c1fe1dcfa3f47730df6a5206b431e0' into HEAD 3 years ago
Felix Detig f71d96b739 TicTacToeBrett.Gewinner-Test für nicht volle Reihen 3 years ago
Felix Detig 535b5db750 "TicTacToeBrettTest.Gewinner_VolleReihen" in "TicTacToeBrettTest.Gewinner_VolleReihenTest" umbenannt 3 years ago
Felix Detig 6197ce9640 TicTacToeBrett-Konstruktor erzeugt eigenes Array mit richtiger Größe und kopiert Werte des Parameters 3 years ago
Felix Detig ccdccd817b TicTacToeBrett.Gewinner-Tests zusammengefasst 3 years ago
Felix Detig e321adba03 Refactored TicTacToeBrett.Gewinner 3 years ago
Felix Detig d94ce408bd TicTacToeBrett.Gewinner erkennt diagonale Reihen 3 years ago
Felix Detig a991d260a0 TicTacToeBrett.Gewinner erkennt diagonale Reihen von oben links nach unten rechts 3 years ago
Felix Detig 4446ebd2b8 TicTacToeBrett.Gewinner-Test für dritte horizontale Reihe 3 years ago
Felix Detig 8e15fb5e7b Refactored TicTacToeBrett.Gewinner 3 years ago
Felix Detig 46ac8d83d3 TicTacToeBrett.Gewinner erkennt die zweite volle horizontale Reihe 3 years ago
Felix Detig c4193a01d7 TicTacToeBrett.Gewinner erkennt die erste volle horizontale Reihe 3 years ago
Felix Detig 6084f780e9 TicTacToeBrett.Gewinner-Test für dritte vertikale Reihe 3 years ago
Felix Detig cab4394752 Refactored TicTacToeBrett.Gewinner 3 years ago
Felix Detig 19fce551c0 TicTacToeBrett.Gewinner erkennt zweite volle vertikale Reihe 3 years ago
Felix Detig 018054276f Refactored TicTacToeBrett.Set 3 years ago
Felix Detig 6edb20d9e4 TicTacToeBrett.Gewinner erkennt erste volle vertikale Reihe 3 years ago
Felix Detig 85e8abfefe Naiver TicTacToeBrett.Gewinner-Test 3 years ago
Felix Detig f6680a70ee Konstante TicTacToeBrett.LEER als Wert für leere Felder angelegt 3 years ago
Felix Detig c9a41078bb Zusätzlicher Test für TicTacToeBrett.Voll 3 years ago
Felix Detig a1129e542d TicTacToeBrett.Voll erkennt volles Brett 3 years ago
Felix Detig 177a5f54d3 Naiver TicTacToeBrett.Voll-Test 3 years ago
Felix Detig aa58e556ce Überflüssige using-Statements entfernt 3 years ago
Felix Detig 6c9fc338d2 TicTacToeBrett.Set gibt bei ungültigem Index false zurück und verändert das Brett nicht 3 years ago
Felix Detig 2aaac393b7 TicTacToeBrett.Set auf ein belegtes Feld lässt das Feld unverändert und gibt false zurück 3 years ago
Felix Detig 1a1604118c "TicTacToeBrett.set" in "TicTacToeBrett.Set" umbenannt 3 years ago
Felix Detig 14b66f20b1 TicTacToeBrett.set setzt das richtige Feld auf den übergebenen Wert 3 years ago
Felix Detig 40ec6b8a6b Mehr Tests für TicTacToeBrett.Gleich erstellt 3 years ago
Felix Detig 3e56f2eaae TicTacToeBrett.Gleich erkennt Ungleichheit 3 years ago
Felix Detig c43c98debc Naiver TicTacToeBrett.Gleich-Test 3 years ago
Felix Detig 3aae2b53ce TicTacToeBrett-Konstruktor mit 2D-Array als Parameter hinzugefügt 3 years ago
Felix Detig c592a10e0f ersten SpielerInput-Test zu TicTacToeBrettTest übertragen 3 years ago
Felix Detig ba557643d5 Eigene Klasse TicTacToeBrett angelegt 3 years ago
Felix Detig bd36360e26 "Karte" in "Brett" umbenannt 3 years ago
Felix Detig 555c265fe1 Grundgerüst + naiver SpielerInput Test 3 years ago
  1. 7
      BlazorSolution/MiniGames/Client/ViewModel/ITicTacToe.cs
  2. 25
      BlazorSolution/MiniGames/Client/ViewModel/TicTacToe.cs
  3. 127
      BlazorSolution/MiniGames/Shared/Models/TicTacToeBrett.cs
  4. 14
      BlazorSolution/MiniGames/Shared/Models/TicTacToeModel.cs
  5. 305
      BlazorSolution/MiniGamesTests/TicTacToeBrettTest.cs
  6. 39
      BlazorSolution/MiniGamesTests/TicTacToeTest.cs

7
BlazorSolution/MiniGames/Client/ViewModel/ITicTacToe.cs

@ -0,0 +1,7 @@
namespace MiniGames.Client.ViewModel
{
public interface ITicTacToe
{
bool SpielerInput(int spielerIndex, int posIndex);
}
}

25
BlazorSolution/MiniGames/Client/ViewModel/TicTacToe.cs

@ -0,0 +1,25 @@
using MiniGames.Shared.Models;
namespace MiniGames.Client.ViewModel
{
public class TicTacToe : ITicTacToe
{
TicTacToeModel Model;
public TicTacToe(TicTacToeModel model)
{
this.Model = model;
}
public TicTacToeBrett Brett
{
get { return Model.Brett; }
set { Model.Brett = value; }
}
public bool SpielerInput(int spielerIndex, int posIndex)
{
return true;
}
}
}

127
BlazorSolution/MiniGames/Shared/Models/TicTacToeBrett.cs

@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MiniGames.Shared.Models
{
public class TicTacToeBrett
{
public const int LEER = -1;
int[,] Felder;
public TicTacToeBrett()
{
Felder = new[,]
{
{ LEER, LEER, LEER },
{ LEER, LEER, LEER },
{ LEER, LEER, LEER },
};
}
public TicTacToeBrett(int[,] werte)
{
Felder = new int[3, 3];
if (werte == null)
{
werte = new int[0, 0];
}
for (int i = 0; i < Felder.GetLength(0); i++)
{
for (int j = 0; j < Felder.GetLength(1); j++)
{
if (i < werte.GetLength(0) && j < werte.GetLength(1))
{
Felder[i, j] = werte[i, j];
}
else
{
Felder[i, j] = LEER;
}
}
}
}
public bool Gleich(TicTacToeBrett anderes)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (Felder[i, j] != anderes.Felder[i, j])
{
return false;
}
}
}
return true;
}
public bool Set(int pos, int wert)
{
int x = pos / 3;
int y = pos % 3;
try
{
if (Felder[x, y] == LEER)
{
Felder[x, y] = wert;
return true;
}
}
catch (IndexOutOfRangeException e)
{
// absichtlich leer
}
return false;
}
public bool Voll()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (Felder[i, j] == LEER)
{
return false;
}
}
}
return true;
}
protected bool dreiGleichGefuellt(int a, int b, int c)
{
return a != LEER && a == b && b == c;
}
public int Gewinner()
{
for (int i = 0; i < 3; i++)
{
if (dreiGleichGefuellt(Felder[i, 0], Felder[i, 1], Felder[i, 2])) return Felder[i, 0];
if (dreiGleichGefuellt(Felder[0, i], Felder[1, i], Felder[2, i])) return Felder[0, i];
}
if (
dreiGleichGefuellt(Felder[0, 0], Felder[1, 1], Felder[2, 2]) ||
dreiGleichGefuellt(Felder[2, 0], Felder[1, 1], Felder[0, 2])
)
{
return Felder[1, 1];
}
return LEER;
}
}
}

14
BlazorSolution/MiniGames/Shared/Models/TicTacToeModel.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MiniGames.Shared.Models
{
public class TicTacToeModel
{
public SpielerModel[] Spieler { get; set; }
public TicTacToeBrett Brett { get; set; }
}
}

305
BlazorSolution/MiniGamesTests/TicTacToeBrettTest.cs

@ -0,0 +1,305 @@
using MiniGames.Shared.Models;
using Xunit;
namespace MiniGamesTests
{
public class TicTacToeBrettTest
{
public TicTacToeBrett TestBrett(
int a = TicTacToeBrett.LEER, int b = TicTacToeBrett.LEER, int c = TicTacToeBrett.LEER,
int d = TicTacToeBrett.LEER, int e = TicTacToeBrett.LEER, int f = TicTacToeBrett.LEER,
int g = TicTacToeBrett.LEER, int h = TicTacToeBrett.LEER, int i = TicTacToeBrett.LEER
)
{
return new(
new int[,]
{
{ a, b, c, },
{ d, e, f, },
{ g, h, i, },
}
);
}
[Fact]
public void Set_FreiesFeldBelegenTest()
{
// arrange
TicTacToeBrett brett = new();
TicTacToeBrett erwartetesBrett = TestBrett(
TicTacToeBrett.LEER,
TicTacToeBrett.LEER,
TicTacToeBrett.LEER,
TicTacToeBrett.LEER,
0
);
int pos = 4;
int wert = 0;
bool erwartetGesetzt = true;
// act
bool erhaltenGesetzt = brett.Set(pos, wert);
// assert
Assert.Equal(erwartetGesetzt, erhaltenGesetzt);
Assert.True(brett.Gleich(erwartetesBrett));
}
[Fact]
public void Set_BelegtesFeldBelegenTest()
{
// arrange
TicTacToeBrett brett = TestBrett(1);
TicTacToeBrett erwartetesBrett = TestBrett(1);
int pos = 0;
int wert = 1;
bool erwartetGesetzt = false;
// act
bool erhaltenGesetzt = brett.Set(pos, wert);
// assert
Assert.Equal(erwartetGesetzt, erhaltenGesetzt);
Assert.True(brett.Gleich(erwartetesBrett));
}
[Theory]
[InlineData(-1)]
[InlineData(9)]
public void Set_OutOfBoundsTest(int pos)
{
// arrange
TicTacToeBrett brett = new();
TicTacToeBrett erwartetesBrett = new();
int wert = 0;
bool erwartetGesetzt = false;
// act
bool erhaltenGesetzt = brett.Set(pos, wert);
// assert
Assert.Equal(erwartetGesetzt, erhaltenGesetzt);
Assert.True(brett.Gleich(erwartetesBrett));
}
[Fact]
public void Gleich_LeereBretterGleichTest()
{
// arrange
TicTacToeBrett b1 = new();
TicTacToeBrett b2 = new();
bool erwartetGleich = true;
// act
bool erhaltenGleich = b1.Gleich(b2);
// assert
Assert.Equal(erwartetGleich, erhaltenGleich);
}
[Fact]
public void Gleich_NichtLeereBretterGleichTest()
{
// arrange
TicTacToeBrett b1 = TestBrett(1, 2, 3, 4, 5, 6, 7, 8, 9);
TicTacToeBrett b2 = TestBrett(1, 2, 3, 4, 5, 6, 7, 8, 9);
bool erwartetGleich = true;
// act
bool erhaltenGleich = b1.Gleich(b2);
// assert
Assert.Equal(erwartetGleich, erhaltenGleich);
}
[Fact]
public void Gleich_ErsteUngleichTest()
{
// arrange
TicTacToeBrett b1 = TestBrett(1);
TicTacToeBrett b2 = TestBrett(2);
bool erwartetGleich = false;
// act
bool erhaltenGleich = b1.Gleich(b2);
// assert
Assert.Equal(erwartetGleich, erhaltenGleich);
}
[Fact]
public void Gleich_LetzteUngleichTest()
{
// arrange
TicTacToeBrett b1 = TestBrett(1, 2, 3, 4, 5, 6, 7, 8, 9);
TicTacToeBrett b2 = TestBrett(1, 2, 3, 4, 5, 6, 7, 8, 10);
bool erwartetGleich = false;
// act
bool erhaltenGleich = b1.Gleich(b2);
// assert
Assert.Equal(erwartetGleich, erhaltenGleich);
}
[Fact]
public void Voll_LeeresBrettTest()
{
// arrange
TicTacToeBrett brett = TestBrett();
bool erwartetVoll = false;
// act
bool erhaltenVoll = brett.Voll();
// assert
Assert.Equal(erwartetVoll, erhaltenVoll);
}
[Fact]
public void Voll_VollesBrettTest()
{
// arrange
TicTacToeBrett brett = TestBrett(1, 2, 3, 4, 5, 6, 7, 8, 9);
bool erwartetVoll = true;
// act
bool erhaltenVoll = brett.Voll();
// assert
Assert.Equal(erwartetVoll, erhaltenVoll);
}
[Fact]
public void Voll_FastVollesBrettTest()
{
// arrange
TicTacToeBrett brett = TestBrett(1, 2, 3, 4, 5, 6, 7, 8);
bool erwartetVoll = false;
// act
bool erhaltenVoll = brett.Voll();
// assert
Assert.Equal(erwartetVoll, erhaltenVoll);
}
[Fact]
public void Gewinner_LeeresFeldTest()
{
// arrange
TicTacToeBrett brett = TestBrett();
int erwarteterGewinner = TicTacToeBrett.LEER;
// act
int erhaltenerGewinner = brett.Gewinner();
// assert
Assert.Equal(erwarteterGewinner, erhaltenerGewinner);
}
[Theory]
// Vertikale Reihe 1
[InlineData(0,
0, 0, 0,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, TicTacToeBrett.LEER
)]
// Vertikale Reihe 2
[InlineData(1,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
1, 1, 1,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, TicTacToeBrett.LEER
)]
// Vertikale Reihe 3
[InlineData(2,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
2, 2, 2
)]
// Horizontale Reihe 1
[InlineData(3,
3, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
3, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
3, TicTacToeBrett.LEER, TicTacToeBrett.LEER
)]
// Horizontale Reihe 2
[InlineData(4,
TicTacToeBrett.LEER, 4, TicTacToeBrett.LEER,
TicTacToeBrett.LEER, 4, TicTacToeBrett.LEER,
TicTacToeBrett.LEER, 4, TicTacToeBrett.LEER
)]
// Horizontale Reihe 3
[InlineData(5,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, 5,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, 5,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, 5
)]
// Diagonale Reihe links oben nach rechts unten
[InlineData(6,
6, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
TicTacToeBrett.LEER, 6, TicTacToeBrett.LEER,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, 6
)]
// Diagonale Reihe rechts oben nach links unten
[InlineData(7,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, 7,
TicTacToeBrett.LEER, 7, TicTacToeBrett.LEER,
7, TicTacToeBrett.LEER, TicTacToeBrett.LEER
)]
public void Gewinner_VolleReihenTest(int gewinner,
int a = TicTacToeBrett.LEER, int b = TicTacToeBrett.LEER, int c = TicTacToeBrett.LEER,
int d = TicTacToeBrett.LEER, int e = TicTacToeBrett.LEER, int f = TicTacToeBrett.LEER,
int g = TicTacToeBrett.LEER, int h = TicTacToeBrett.LEER, int i = TicTacToeBrett.LEER
)
{
// arrange
TicTacToeBrett brett = TestBrett(a, b, c, d, e, f, g, h, i);
int erwarteterGewinner = gewinner;
// act
int erhaltenerGewinner = brett.Gewinner();
// assert
Assert.Equal(erwarteterGewinner, erhaltenerGewinner);
}
[Theory]
[InlineData(
0, TicTacToeBrett.LEER, 0,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
0, TicTacToeBrett.LEER, 0
)]
[InlineData(
1, 1, TicTacToeBrett.LEER,
1, 1, TicTacToeBrett.LEER,
TicTacToeBrett.LEER, TicTacToeBrett.LEER, TicTacToeBrett.LEER
)]
[InlineData(
2, TicTacToeBrett.LEER, TicTacToeBrett.LEER,
2, TicTacToeBrett.LEER, 2,
TicTacToeBrett.LEER, 2, 2
)]
[InlineData(
1, 1, 2,
1, 3, 2,
2, 3, 3
)]
public void Gewinner_NichtVolleReihenTest(
int a = TicTacToeBrett.LEER, int b = TicTacToeBrett.LEER, int c = TicTacToeBrett.LEER,
int d = TicTacToeBrett.LEER, int e = TicTacToeBrett.LEER, int f = TicTacToeBrett.LEER,
int g = TicTacToeBrett.LEER, int h = TicTacToeBrett.LEER, int i = TicTacToeBrett.LEER
)
{
// arrange
TicTacToeBrett brett = TestBrett(a, b, c, d, e, f, g, h, i);
int erwarteterGewinner = TicTacToeBrett.LEER;
// act
int erhaltenerGewinner = brett.Gewinner();
// assert
Assert.Equal(erwarteterGewinner, erhaltenerGewinner);
}
}
}

39
BlazorSolution/MiniGamesTests/TicTacToeTest.cs

@ -0,0 +1,39 @@
using MiniGames.Shared.Models;
using Xunit;
namespace MiniGamesTests
{
public class TicTacToeTest
{
TicTacToeBrett StandardBrett()
{
return new TicTacToeBrett();
}
SpielerModel[] StandardSpieler()
{
return new SpielerModel[]
{
new SpielerModel
{
SpielerName = "Spieler 1",
Punkte = 0
},
new SpielerModel
{
SpielerName = "Spieler 2",
Punkte = 1
}
};
}
TicTacToeModel StandardModel()
{
return new TicTacToeModel
{
Spieler = StandardSpieler(),
Brett = StandardBrett(),
};
}
}
}
Loading…
Cancel
Save