Browse Source

Merge pull request #12 from Mac10goesBRRRT/Labyrinth

Labyrinth
remotes/origin/orga
Mac10goesBRRRT 2 years ago
committed by GitHub
parent
commit
091a50786e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 105
      src/c/labyrinth.c
  2. 16
      src/c/labyrinth.h
  3. 313
      test/c/test_labyrinth.c

105
src/c/labyrinth.c

@ -0,0 +1,105 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdbool.h>
#include "labyrinth.h"
#include "userinput.h"
int printlabyrinth(lab laby, int hoehe, int breite){
for(int i = 0; i < hoehe; i++){
for(int j = 0; j < breite; j++){
printf("%c ", laby[i][j]);
}
printf("\n");
}
printf("\n");
printf("How many steps do you need to reach your goal?\n");
printf("\n");
return 0;
}
void wegsuchen(lab laby, bool* done, int y, int x, int ziely, int zielx){
laby[y][x] = MARKIERT;
if(x == zielx && y == ziely){
*done = true;
}
else{
if (!*done && y + 1 <= ziely && laby[y+1][x] == WEG){
wegsuchen(laby, done, y + 1, x, ziely, zielx);
}
if (!*done && x + 1 <= zielx && laby[y][x+1] == WEG){
wegsuchen(laby, done, y, x + 1, ziely, zielx);
}
if (!*done && y - 1 >= 0 && laby[y-1][x] == WEG){ // oben
wegsuchen(laby, done, y - 1, x, ziely, zielx);
}
if (!*done && x - 1 >= 0 && laby[y][x-1] == WEG){ // links
wegsuchen(laby, done, y, x - 1, ziely, zielx);
}
if (!*done){
laby[y][x] = WEG;
}
}
}
void labyrinthschritte(lab laby, int hoehe, int breite, int schritte, int versuche){
int antwort = 0;
antwort = userInput();
if(antwort == schritte){
printf("Correct you need %d steps.\n", schritte);
for(int i = 0; i < hoehe; i++){
for(int j = 0; j < breite; j++){
printf("%c ", laby[i][j]);
}
printf("\n");
}
printf("\n");
}
else{
if(versuche != 3){
printf("Your answer is wrong. Try again.\n");
versuche = versuche + 1;
labyrinthschritte(laby, hoehe, breite, schritte, versuche); //if schleife für 3 versuche
}
else{
printf("You lost.\n");
}
}
}
void labyrinthauswahl(int auswahl){
printf("Bitte wählen Sie ein Labyrinth aus\n");
switch (auswahl){
case 1:
lab laby = {
{'0', '1', '0', '0', '0', '0'},
{'0', '1', '0', '1', '1', '0'},
{'0', '0', '0', '0', '1', '0'},
{'0', '1', '1', '0', '1', '0'},
{'0', '1', '0', '0', '1', '0'},
};
int hoehe = 5;
int breite = 6;
printlabyrinth(laby, hoehe, breite);
break;
default:
break;
}
}

16
src/c/labyrinth.h

@ -0,0 +1,16 @@
#ifndef LABYRINTH_H
#define LABYRINTH_H
#include <stdbool.h>
#define MAXZEILEN 10
#define MAXSPALTEN 10
#define WEG '0'
#define MARKIERT 'X'
typedef char lab[MAXZEILEN][MAXSPALTEN];
int printlabyrinth(lab laby, int hoehe, int breite);
void wegsuchen(lab laby, bool* done, int y, int x, int ziely, int zielx);
void labyrinthschritte(lab laby, int hoehe, int breite, int schritte, int versuche);
void labyrinthauswahl(int auswahl);
#endif

313
test/c/test_labyrinth.c

@ -0,0 +1,313 @@
#ifdef TEST
#include "unity.h"
//in example.h wird die Funktion deklariert
#include "labyrinth.h"
#include <stdbool.h>
#include "userinput.h"
#include "mock_userinput.h"
//Vor- bzw. Nachbereitung
void setUp(void)
{
}
void tearDown(void)
{
}
void test_runExampleTest(void)
{
int result;
int input = 1;
int hoehe = 3;
int breite = 3;
lab laby = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
};
result = printlabyrinth(laby, hoehe, breite);
TEST_ASSERT_EQUAL_INT(0, result);
}
void test_LabyrinthAmZielAngekommen(void){
bool result;
int input = 1;
int hoehe = 3;
int breite = 3;
lab laby = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
};
wegsuchen(laby, &result, 0, 0, 0, 0);
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthAmZielNichtAngekommen(void){
bool result = 0;
int input = 1;
int hoehe = 3;
int breite = 3;
lab laby = {
{'0', '1', '1'},
{'1', '0', '1'},
{'1', '1', '1'},
};
wegsuchen(laby, &result, 1, 1, 0, 0);
TEST_ASSERT_EQUAL_INT(0, result);
}
void test_LabyrinthMarkiert(void){
char result;
bool fertig;
int input = 1;
int hoehe = 3;
int breite = 3;
lab laby = {
{'0', '1', '1'},
{'1', '1', '1'},
{'1', '1', '1'},
};
wegsuchen(laby, &fertig, 0, 0, 0, 0);
result = laby[0][0];
printlabyrinth(laby, hoehe, breite);
TEST_ASSERT_EQUAL_CHAR('X', result);
}
void test_LabyrinthUnten(void){
bool result;
int input = 1;
int hoehe = 3;
int breite = 3;
lab laby = {
{'0', '1', '1'},
{'0', '1', '1'},
{'0', '1', '1'},
};
wegsuchen(laby, &result, 0, 0, 2, 0);
printlabyrinth(laby, hoehe, breite);
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthRechts(void){
bool result;
int input = 1;
int hoehe = 3;
int breite = 3;
lab laby = {
{'0', '0', '0'},
{'1', '1', '1'},
{'1', '1', '1'},
};
wegsuchen(laby, &result, 0, 0, 0, 2);
printlabyrinth(laby, hoehe, breite);
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthOben(void){
bool result;
int input = 1;
int hoehe = 5;
int breite = 5;
lab laby = {
{'0', '1', '0', '0', '0'},
{'0', '1', '0', '1', '0'},
{'0', '1', '0', '1', '0'},
{'0', '1', '0', '1', '0'},
{'0', '0', '0', '1', '0'},
};
wegsuchen(laby, &result, 0, 0, 4, 4);
printlabyrinth(laby, hoehe, breite);
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthLinks(void){
bool result;
int input = 1;
int hoehe = 5;
int breite = 6;
lab laby = {
{'0', '1', '0', '0', '0', '0'},
{'0', '1', '0', '1', '1', '0'},
{'0', '1', '0', '0', '1', '0'},
{'0', '1', '1', '0', '1', '0'},
{'0', '0', '0', '0', '1', '0'},
};
wegsuchen(laby, &result, 0, 0, 4, 5);
printlabyrinth(laby, hoehe, breite);
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthVerzweigung(void){
bool result;
int input = 1;
int hoehe = 5;
int breite = 6;
lab laby = {
{'0', '1', '0', '0', '0', '0'},
{'0', '1', '0', '1', '1', '0'},
{'0', '0', '0', '0', '1', '0'},
{'0', '1', '1', '0', '1', '0'},
{'0', '1', '0', '0', '1', '0'},
};
wegsuchen(laby, &result, 0, 0, 4, 5);
printlabyrinth(laby, hoehe, breite);
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthSchritte(void){
bool result;
int input = 1;
int hoehe = 5;
int breite = 6;
int schritte = 14;
int versuche = 0;
lab laby = {
{'0', '1', '0', '0', '0', '0'},
{'0', '1', '0', '1', '1', '0'},
{'0', '0', '0', '0', '1', '0'},
{'0', '1', '1', '0', '1', '0'},
{'0', '1', '0', '0', '1', '0'},
};
printlabyrinth(laby, hoehe, breite); //hier in die funktion die print frage machen
wegsuchen(laby, &result, 0, 0, 4, 5);
userInput_ExpectAndReturn(14);
labyrinthschritte(laby, hoehe, breite, schritte, versuche); //die geliche funktion nur mit dem if vergleich und userinput
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthSchritteVerloren(void){
bool result;
int input = 1;
int hoehe = 5;
int breite = 6;
int schritte = 14;
int versuche = 0;
lab laby = {
{'0', '1', '0', '0', '0', '0'},
{'0', '1', '0', '1', '1', '0'},
{'0', '0', '0', '0', '1', '0'},
{'0', '1', '1', '0', '1', '0'},
{'0', '1', '0', '0', '1', '0'},
};
printlabyrinth(laby, hoehe, breite); //hier in die funktion die print frage machen
wegsuchen(laby, &result, 0, 0, 4, 5);
userInput_ExpectAndReturn(5);
userInput_ExpectAndReturn(8);
userInput_ExpectAndReturn(10);
userInput_ExpectAndReturn(9);
labyrinthschritte(laby, hoehe, breite, schritte, versuche); //die geliche funktion nur mit dem if vergleich und userinput
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthSchritteBeiDreiGewonnen(void){
bool result;
int input = 1;
int hoehe = 5;
int breite = 6;
int schritte = 14;
int versuche = 0;
lab laby = {
{'0', '1', '0', '0', '0', '0'},
{'0', '1', '0', '1', '1', '0'},
{'0', '0', '0', '0', '1', '0'},
{'0', '1', '1', '0', '1', '0'},
{'0', '1', '0', '0', '1', '0'},
};
printlabyrinth(laby, hoehe, breite); //hier in die funktion die print frage machen
wegsuchen(laby, &result, 0, 0, 4, 5);
userInput_ExpectAndReturn(5);
userInput_ExpectAndReturn(8);
userInput_ExpectAndReturn(10);
userInput_ExpectAndReturn(14);
labyrinthschritte(laby, hoehe, breite, schritte, versuche); //die geliche funktion nur mit dem if vergleich und userinput
TEST_ASSERT_EQUAL_INT(1, result);
}
void test_LabyrinthAuswahl(void){
bool result;
int input = 1;
int hoehe = 5;
int breite = 6;
int schritte = 14;
int versuche = 0;
int auswahl = 1;
lab laby = {
{'0', '1', '0', '0', '0', '0'},
{'0', '1', '0', '1', '1', '0'},
{'0', '0', '0', '0', '1', '0'},
{'0', '1', '1', '0', '1', '0'},
{'0', '1', '0', '0', '1', '0'},
};
labyrinthauswahl(auswahl);
//printlabyrinth(laby, hoehe, breite); //hier in die funktion die print frage machen
wegsuchen(laby, &result, 0, 0, 4, 5);
userInput_ExpectAndReturn(5);
userInput_ExpectAndReturn(8);
userInput_ExpectAndReturn(10);
userInput_ExpectAndReturn(14);
labyrinthschritte(laby, hoehe, breite, schritte, versuche); //die geliche funktion nur mit dem if vergleich und userinput
TEST_ASSERT_EQUAL_INT(1, result);
}
#endif // TEST
Loading…
Cancel
Save