diff --git a/BlazorSolution/MiniGames/Client/ViewModel/ITicTacToe.cs b/BlazorSolution/MiniGames/Client/ViewModel/ITicTacToe.cs index f4d6804..ac1119b 100644 --- a/BlazorSolution/MiniGames/Client/ViewModel/ITicTacToe.cs +++ b/BlazorSolution/MiniGames/Client/ViewModel/ITicTacToe.cs @@ -2,6 +2,9 @@ { public interface ITicTacToe { + public bool Fertig(); void SpielerInput(int posIndex); + public void SpielerWechsel(); + public void PunkteBerechnung(); } } diff --git a/BlazorSolution/MiniGames/Client/ViewModel/TicTacToe.cs b/BlazorSolution/MiniGames/Client/ViewModel/TicTacToe.cs index 514d129..f69cfa5 100644 --- a/BlazorSolution/MiniGames/Client/ViewModel/TicTacToe.cs +++ b/BlazorSolution/MiniGames/Client/ViewModel/TicTacToe.cs @@ -11,6 +11,12 @@ namespace MiniGames.Client.ViewModel this.Model = model; } + public SpielerModel[] Spieler + { + get { return Model.Spieler; } + set { Model.Spieler = value; } + } + public TicTacToeBrett 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) { + if (Fertig()) return; + if (Brett.Set(posIndex, AktiverSpielerIndex)) { SpielerWechsel(); } GewinnerIndex = Brett.Gewinner(); + PunkteBerechnung(); } public void SpielerWechsel() { AktiverSpielerIndex = 1 - AktiverSpielerIndex; } + + public void PunkteBerechnung() + { + SpielerModel gewinner = GewinnerSpieler; + + if (gewinner != null) + { + gewinner.Punkte++; + } + } } } diff --git a/BlazorSolution/MiniGames/Shared/Models/TicTacToeBrett.cs b/BlazorSolution/MiniGames/Shared/Models/TicTacToeBrett.cs index 68d1b0d..0fd3322 100644 --- a/BlazorSolution/MiniGames/Shared/Models/TicTacToeBrett.cs +++ b/BlazorSolution/MiniGames/Shared/Models/TicTacToeBrett.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace MiniGames.Shared.Models { @@ -12,6 +8,11 @@ namespace MiniGames.Shared.Models int[,] Felder; + public int Groesse + { + get { return Felder.GetLength(0) * Felder.GetLength(1); } + } + public TicTacToeBrett() { Felder = new[,] @@ -49,20 +50,25 @@ namespace MiniGames.Shared.Models 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; } + public int Get(int pos) + { + int x = pos % 3; + int y = pos / 3; + + return Felder[x, y]; + } + public bool Set(int pos, int wert) { int x = pos % 3; @@ -86,14 +92,11 @@ namespace MiniGames.Shared.Models 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; } } diff --git a/BlazorSolution/MiniGames/Shared/Models/TicTacToeModel.cs b/BlazorSolution/MiniGames/Shared/Models/TicTacToeModel.cs index 895e815..3476504 100644 --- a/BlazorSolution/MiniGames/Shared/Models/TicTacToeModel.cs +++ b/BlazorSolution/MiniGames/Shared/Models/TicTacToeModel.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace MiniGames.Shared.Models { @@ -12,5 +8,15 @@ namespace MiniGames.Shared.Models public int AktiverSpielerIndex { get; set; } = 0; public int GewinnerIndex { get; set; } = -1; 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(); + } } } diff --git a/BlazorSolution/MiniGamesTests/TicTacToeTest.cs b/BlazorSolution/MiniGamesTests/TicTacToeTest.cs index 9a43703..c9223b0 100644 --- a/BlazorSolution/MiniGamesTests/TicTacToeTest.cs +++ b/BlazorSolution/MiniGamesTests/TicTacToeTest.cs @@ -105,10 +105,16 @@ namespace MiniGamesTests [Theory] [InlineData(0, 0, 3, 1, 4, 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) { // arrange 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; // act @@ -119,6 +125,8 @@ namespace MiniGamesTests // assert Assert.Equal(spiel.GewinnerIndex, erwarteterGewinnerIndex); + Assert.Equal(spiel.Spieler[0].Punkte, erwartetePunkteSpieler1); + Assert.Equal(spiel.Spieler[1].Punkte, erwartetePunkteSpieler2); } [Fact] @@ -127,6 +135,10 @@ namespace MiniGamesTests // arrange TicTacToe spiel = StandardSpiel(); spiel.AktiverSpielerIndex = 0; + spiel.Spieler[0].Punkte = 0; + spiel.Spieler[1].Punkte = 0; + int erwartetePunkteSpieler1 = 0; + int erwartetePunkteSpieler2 = 0; int erwarteterGewinnerIndex = -1; // act @@ -139,6 +151,8 @@ namespace MiniGamesTests // assert Assert.Equal(spiel.GewinnerIndex, erwarteterGewinnerIndex); + Assert.Equal(spiel.Spieler[0].Punkte, erwartetePunkteSpieler1); + Assert.Equal(spiel.Spieler[1].Punkte, erwartetePunkteSpieler2); } } }