From 8ccbb52a9a443fea1a8eae881684e8a57e4dd449 Mon Sep 17 00:00:00 2001 From: Alexander Hartung Date: Wed, 26 Jan 2022 18:13:42 +0100 Subject: [PATCH] Add Ruleset for startStack and Tests --- src/main/java/solitaer/StartStack.java | 35 +++++++++++++++--- src/test/java/solitaer/StartStackTest.java | 42 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 src/test/java/solitaer/StartStackTest.java diff --git a/src/main/java/solitaer/StartStack.java b/src/main/java/solitaer/StartStack.java index e2cf44c..6a001ea 100644 --- a/src/main/java/solitaer/StartStack.java +++ b/src/main/java/solitaer/StartStack.java @@ -12,7 +12,7 @@ public class StartStack extends JPanel { private static final long serialVersionUID = 1L; private Image im; private ArrayList stack = new ArrayList(); - + private int offset; public StartStack(int _x, int _y) { @@ -20,21 +20,44 @@ public class StartStack extends JPanel { super.setSize(72, 450); super.setOpaque(false); super.setLayout(null); - + offset = 0; } + public boolean cardCheck(Card _topStack, Card _playerCard) { + if(_topStack == null && _playerCard == null) { + return false; + } + if (_topStack == null) { + // Nur der König kann auf einen leeren Stapel gelegt werden + return _playerCard.getNr() == 13; + }else { + return (// Nummer nur aufsteigend + _topStack.getNr() == _playerCard.getNr() + 1) + && + // rot auf Schwarz + ( + ((_topStack.getSymbol() == Symbol.Herz || _topStack.getSymbol() == Symbol.Karo) + && (_playerCard.getSymbol() == Symbol.Pik || _playerCard.getSymbol() == Symbol.Kreuz)) + || + // schwarz auf rot + ((_topStack.getSymbol() == Symbol.Pik || _topStack.getSymbol() == Symbol.Kreuz) + && (_playerCard.getSymbol() == Symbol.Herz || _playerCard.getSymbol() == Symbol.Karo)) + ); + } + } + public void addCard(Card _card) { _card.setLocation(0, offset); stack.add(_card); addtoPanel(); offset += 20; } - + private void addtoPanel() { - + this.removeAll(); - for(int i = stack.size()-1; i>=0; i-- ) { + for (int i = stack.size() - 1; i >= 0; i--) { this.add(stack.get(i)); } } @@ -44,7 +67,9 @@ public class StartStack extends JPanel { // TODO Auto-generated method stub super.paintComponent(g); if (stack.size() == 0) { + //Arcade64\src\main\java\solitaer\images ImageIcon ii = new ImageIcon(getClass().getResource("images/empty.png")); + //ImageIcon ii = new ImageIcon("C:/Users/Alexander/eclipse-workspace/Arcade64/src/main/java/solitaer/images/empty.png"); im = ii.getImage(); g.drawImage(im, 0, 0, this.getWidth(), 96, this); } diff --git a/src/test/java/solitaer/StartStackTest.java b/src/test/java/solitaer/StartStackTest.java new file mode 100644 index 0000000..bf65ff1 --- /dev/null +++ b/src/test/java/solitaer/StartStackTest.java @@ -0,0 +1,42 @@ +package solitaer; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class StartStackTest { + + @ParameterizedTest + @MethodSource("testStartStackTestDaten") + //Jedes Symbol muss einmal vorhand sein + void testRulesetStartStack(String msg, Card _stapel, Card _spieler, boolean _expectedResult) { + StartStack stack = new StartStack(10, 10); + + + assertEquals(_expectedResult, stack.cardCheck(_stapel, _spieler), msg); + } + + + private static Stream testStartStackTestDaten(){ + return Stream.of( + Arguments.of("Ass-Kreuz auf 2-Herz", new Card(2, Symbol.Herz, true), new Card(1, Symbol.Kreuz, true), true), + Arguments.of("Ass-Herz auf 2Herz", new Card(1, Symbol.Herz, true), new Card(2, Symbol.Herz, true), false), + Arguments.of("Ass-Kreuz auf leeres Feld", null, new Card(1, Symbol.Kreuz, true), false), + Arguments.of("König auf leeres Feld", null, new Card(13, Symbol.Kreuz, true), true), + Arguments.of("5-Pik auf 6-Karo", new Card(6, Symbol.Karo, true), new Card(5, Symbol.Pik, true), true), + Arguments.of("König-Karo auf Ass-Kreuz", new Card(1, Symbol.Kreuz, true), new Card(13, Symbol.Karo, true), false), + Arguments.of("5-Karo auf 7-Kreuz", new Card(7, Symbol.Kreuz, true), new Card(5, Symbol.Karo, true), false), + Arguments.of("2-Herz auf Ass-Kreuz", new Card(2, Symbol.Herz, true), new Card(1, Symbol.Kreuz, true), true), + Arguments.of("null auf null", null, null, false) + + ); + + + } + +}