7 Commits

  1. 3
      BlazorSolution/MiniGames/Client/ViewModel/ITicTacToe.cs
  2. 30
      BlazorSolution/MiniGames/Client/ViewModel/TicTacToe.cs
  3. 35
      BlazorSolution/MiniGames/Shared/Models/TicTacToeBrett.cs
  4. 14
      BlazorSolution/MiniGames/Shared/Models/TicTacToeModel.cs
  5. 14
      BlazorSolution/MiniGamesTests/TicTacToeTest.cs

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

@ -2,6 +2,9 @@
{ {
public interface ITicTacToe public interface ITicTacToe
{ {
public bool Fertig();
void SpielerInput(int posIndex); void SpielerInput(int posIndex);
public void SpielerWechsel();
public void PunkteBerechnung();
} }
} }

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

@ -11,6 +11,12 @@ namespace MiniGames.Client.ViewModel
this.Model = model; this.Model = model;
} }
public SpielerModel[] Spieler
{
get { return Model.Spieler; }
set { Model.Spieler = value; }
}
public TicTacToeBrett Brett public TicTacToeBrett Brett
{ {
get { return Model.Brett; } get { return Model.Brett; }
@ -34,19 +40,43 @@ namespace MiniGames.Client.ViewModel
} }
} }
public SpielerModel GewinnerSpieler
{
get { return Model.GewinnerSpieler; }
set { Model.GewinnerSpieler = value; }
}
public bool Fertig()
{
return Model.Fertig();
}
public void SpielerInput(int posIndex) public void SpielerInput(int posIndex)
{ {
if (Fertig()) return;
if (Brett.Set(posIndex, AktiverSpielerIndex)) if (Brett.Set(posIndex, AktiverSpielerIndex))
{ {
SpielerWechsel(); SpielerWechsel();
} }
GewinnerIndex = Brett.Gewinner(); GewinnerIndex = Brett.Gewinner();
PunkteBerechnung();
} }
public void SpielerWechsel() public void SpielerWechsel()
{ {
AktiverSpielerIndex = 1 - AktiverSpielerIndex; AktiverSpielerIndex = 1 - AktiverSpielerIndex;
} }
public void PunkteBerechnung()
{
SpielerModel gewinner = GewinnerSpieler;
if (gewinner != null)
{
gewinner.Punkte++;
}
}
} }
} }

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

@ -1,8 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MiniGames.Shared.Models namespace MiniGames.Shared.Models
{ {
@ -12,6 +8,11 @@ namespace MiniGames.Shared.Models
int[,] Felder; int[,] Felder;
public int Groesse
{
get { return Felder.GetLength(0) * Felder.GetLength(1); }
}
public TicTacToeBrett() public TicTacToeBrett()
{ {
Felder = new[,] Felder = new[,]
@ -49,20 +50,25 @@ namespace MiniGames.Shared.Models
public bool Gleich(TicTacToeBrett anderes) public bool Gleich(TicTacToeBrett anderes)
{ {
for (int i = 0; i < 3; i++)
for (int i = 0; i < Groesse; i++)
{ {
for (int j = 0; j < 3; j++)
if (Get(i) != anderes.Get(i))
{ {
if (Felder[i, j] != anderes.Felder[i, j])
{
return false;
}
return false;
} }
} }
return true; return true;
} }
public int Get(int pos)
{
int x = pos % 3;
int y = pos / 3;
return Felder[x, y];
}
public bool Set(int pos, int wert) public bool Set(int pos, int wert)
{ {
int x = pos % 3; int x = pos % 3;
@ -86,14 +92,11 @@ namespace MiniGames.Shared.Models
public bool Voll() public bool Voll()
{ {
for (int i = 0; i < 3; i++)
for (int i = 0; i < Groesse; i++)
{ {
for (int j = 0; j < 3; j++)
if (Get(i) == LEER)
{ {
if (Felder[i, j] == LEER)
{
return false;
}
return false;
} }
} }

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

@ -1,8 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MiniGames.Shared.Models namespace MiniGames.Shared.Models
{ {
@ -12,5 +8,15 @@ namespace MiniGames.Shared.Models
public int AktiverSpielerIndex { get; set; } = 0; public int AktiverSpielerIndex { get; set; } = 0;
public int GewinnerIndex { get; set; } = -1; public int GewinnerIndex { get; set; } = -1;
public TicTacToeBrett Brett { get; set; } public TicTacToeBrett Brett { get; set; }
public SpielerModel GewinnerSpieler
{
get { return (GewinnerIndex >= 0) ? Spieler[GewinnerIndex] : null; }
set { GewinnerIndex = Array.IndexOf(Spieler, value); }
}
public bool Fertig()
{
return GewinnerIndex >= 0 || Brett.Voll();
}
} }
} }

14
BlazorSolution/MiniGamesTests/TicTacToeTest.cs

@ -105,10 +105,16 @@ namespace MiniGamesTests
[Theory] [Theory]
[InlineData(0, 0, 3, 1, 4, 2)] [InlineData(0, 0, 3, 1, 4, 2)]
[InlineData(0, 3, 0, 4, 1, 5, 2)] [InlineData(0, 3, 0, 4, 1, 5, 2)]
[InlineData(1, 0, 6, 3, 4, 6, 1, 2)]
public void SpielerInput_GewinnerTest(int gewinnerIndex, params int[] inputs) public void SpielerInput_GewinnerTest(int gewinnerIndex, params int[] inputs)
{ {
// arrange // arrange
TicTacToe spiel = StandardSpiel(); TicTacToe spiel = StandardSpiel();
spiel.AktiverSpielerIndex = 0;
spiel.Spieler[0].Punkte = 0;
spiel.Spieler[1].Punkte = 1;
int erwartetePunkteSpieler1 = (gewinnerIndex == 0) ? 1 : 0;
int erwartetePunkteSpieler2 = (gewinnerIndex == 1) ? 2 : 1;
int erwarteterGewinnerIndex = gewinnerIndex; int erwarteterGewinnerIndex = gewinnerIndex;
// act // act
@ -119,6 +125,8 @@ namespace MiniGamesTests
// assert // assert
Assert.Equal(spiel.GewinnerIndex, erwarteterGewinnerIndex); Assert.Equal(spiel.GewinnerIndex, erwarteterGewinnerIndex);
Assert.Equal(spiel.Spieler[0].Punkte, erwartetePunkteSpieler1);
Assert.Equal(spiel.Spieler[1].Punkte, erwartetePunkteSpieler2);
} }
[Fact] [Fact]
@ -127,6 +135,10 @@ namespace MiniGamesTests
// arrange // arrange
TicTacToe spiel = StandardSpiel(); TicTacToe spiel = StandardSpiel();
spiel.AktiverSpielerIndex = 0; spiel.AktiverSpielerIndex = 0;
spiel.Spieler[0].Punkte = 0;
spiel.Spieler[1].Punkte = 0;
int erwartetePunkteSpieler1 = 0;
int erwartetePunkteSpieler2 = 0;
int erwarteterGewinnerIndex = -1; int erwarteterGewinnerIndex = -1;
// act // act
@ -139,6 +151,8 @@ namespace MiniGamesTests
// assert // assert
Assert.Equal(spiel.GewinnerIndex, erwarteterGewinnerIndex); Assert.Equal(spiel.GewinnerIndex, erwarteterGewinnerIndex);
Assert.Equal(spiel.Spieler[0].Punkte, erwartetePunkteSpieler1);
Assert.Equal(spiel.Spieler[1].Punkte, erwartetePunkteSpieler2);
} }
} }
} }
Loading…
Cancel
Save