generated from freudenreichan/info2Praktikum-Wortsalat
Compare commits
8
Commits
80fd4e832a
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd75457f10 | ||
|
|
918d049e14 | ||
|
|
ceb9262589 | ||
|
|
6b30eb3145 | ||
|
|
9624270bc3 | ||
|
|
e2de303489 | ||
|
|
27dc4dd02b | ||
|
|
1ed6c27d72 |
No files matched your search
+26
-125
@@ -8,24 +8,13 @@
|
|||||||
#define EMPTY_CHAR 0
|
#define EMPTY_CHAR 0
|
||||||
#define MAX_NUMBER_OF_WORDS 100
|
#define MAX_NUMBER_OF_WORDS 100
|
||||||
|
|
||||||
//TODO: Spiellogik implementieren:
|
|
||||||
/* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren
|
|
||||||
* restliche Felder mit zufälligen Buchstaben füllen */
|
|
||||||
|
|
||||||
//words und salad sind char arrays --> laengstes wort sind 100 zeichen
|
|
||||||
|
|
||||||
// Creates the word salad by placing words randomly and filling empty spaces
|
|
||||||
int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount)
|
int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount)
|
||||||
{
|
{
|
||||||
int placedWords = 0;
|
int placedWords = 0;
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
int usedWords[MAX_NUMBER_OF_WORDS];
|
|
||||||
for(int i=0; i< MAX_NUMBER_OF_WORDS; i++){
|
|
||||||
usedWords[i] = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
placedWords = fillSalad(salad, searchFieldLen, words, wordCount, usedWords);
|
placedWords = fillSalad(salad, searchFieldLen, words, wordCount);
|
||||||
showWordSalad(salad);
|
showWordSalad(salad);
|
||||||
printf("\nPlacedWords: %d\n", placedWords);
|
printf("\nPlacedWords: %d\n", placedWords);
|
||||||
return placedWords;
|
return placedWords;
|
||||||
@@ -65,10 +54,10 @@ int emptyPlaces(unsigned int wordCount)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// fills salad array with max. words from word array either horizontally or vertically
|
int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount)
|
||||||
int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS])
|
|
||||||
{
|
{
|
||||||
int addedWords = 0;
|
int addedWords = 0;
|
||||||
|
|
||||||
// empties salad
|
// empties salad
|
||||||
for(unsigned int i = 0; i < MAX_SEARCH_FIELD_LEN; i++) {
|
for(unsigned int i = 0; i < MAX_SEARCH_FIELD_LEN; i++) {
|
||||||
for(unsigned int j = 0; j < MAX_SEARCH_FIELD_LEN; j++) {
|
for(unsigned int j = 0; j < MAX_SEARCH_FIELD_LEN; j++) {
|
||||||
@@ -77,35 +66,30 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i
|
|||||||
}
|
}
|
||||||
|
|
||||||
// inserts words
|
// inserts words
|
||||||
for(unsigned int w = 0; w < wordCount; w++) {
|
for(unsigned int w = 0; w < wordCount; w++) { //geht words array linear durch, damit jedes Wort ueberprueft wird
|
||||||
int tries = 0;
|
int tries = 0;
|
||||||
int placed = 0;
|
int placed = 0;
|
||||||
|
|
||||||
while(tries < MAX_RAND_TRIES_PER_WORD && !placed) {
|
while(tries < MAX_RAND_TRIES_PER_WORD && !placed) { //solange die max. Anzahl an Versuchen pro Wort nicht ueberschritten wird und das Wort nicht plaziert wurde:
|
||||||
int numWord = whichWord(wordCount, usedWords);
|
int horizontal = printHorizontal(); //horozontal oder vertikal?
|
||||||
if(numWord == -5) {
|
|
||||||
// found no unused word
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
int horizontal = printHorizontal();
|
|
||||||
|
|
||||||
if(horizontal) {
|
if(horizontal) {
|
||||||
int row = rand() % searchFieldLen;
|
int row = rand() % searchFieldLen; //sucht random row aus
|
||||||
// checks if words fits
|
unsigned int wordLen = strlen(words[w]);
|
||||||
unsigned int wordLen = strlen(words[numWord]);
|
if(wordLen <= searchFieldLen) { //wenn wort von der Laenge her in Zeile passt
|
||||||
if(wordLen <= searchFieldLen) {
|
int startCol = rand() % (searchFieldLen - wordLen + 1); //bestimmt einen zufaelligen Startpunkt in der row zhwischen 0 und max. Index, damit das WOrt noch passt
|
||||||
int startCol = rand() % (searchFieldLen - wordLen + 1);
|
|
||||||
int canPlace = 1;
|
int canPlace = 1;
|
||||||
for(unsigned int i = 0; i < wordLen; i++) { //checks if word fits
|
for(unsigned int i = 0; i < wordLen; i++) { //schaut, ob der Platz in jeder Zelle in salad frei ist oder ob Ueberlappung zweier Woerter moeglich ist
|
||||||
if(salad[row][startCol + i] != '\0') {
|
if(salad[row][startCol + i] != '\0') {
|
||||||
canPlace = 0;
|
if(salad[row][startCol + i] != words[w][i]) {
|
||||||
break;
|
canPlace = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(canPlace) { //word fits and is inserted
|
if(canPlace) { //Wort kann plaziert werden -> fuellt Wort in random row ab random Zelle mit Wort und addiert erfolgreich plazierte Woerter
|
||||||
for(unsigned int i = 0; i < wordLen; i++) {
|
for(unsigned int i = 0; i < wordLen; i++) {
|
||||||
salad[row][startCol + i] = words[numWord][i];
|
salad[row][startCol + i] = words[w][i];
|
||||||
}
|
}
|
||||||
placed = 1;
|
placed = 1;
|
||||||
addedWords++;
|
addedWords++;
|
||||||
@@ -114,19 +98,21 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i
|
|||||||
} else {
|
} else {
|
||||||
// vertically
|
// vertically
|
||||||
int col = rand() % searchFieldLen;
|
int col = rand() % searchFieldLen;
|
||||||
unsigned int wordLen = strlen(words[numWord]);
|
unsigned int wordLen = strlen(words[w]);
|
||||||
if(wordLen <= searchFieldLen) {
|
if(wordLen <= searchFieldLen) {
|
||||||
int startRow = rand() % (searchFieldLen - wordLen + 1);
|
int startRow = rand() % (searchFieldLen - wordLen + 1);
|
||||||
int canPlace = 1;
|
int canPlace = 1;
|
||||||
for(unsigned int i = 0; i < wordLen; i++) {
|
for(unsigned int i = 0; i < wordLen; i++) {
|
||||||
if(salad[startRow + i][col] != '\0') {
|
if(salad[startRow + i][col] != '\0') {
|
||||||
canPlace = 0;
|
if(salad[startRow + i][col] != words[w][i]) {
|
||||||
break;
|
canPlace = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(canPlace) {
|
if(canPlace) {
|
||||||
for(unsigned int i = 0; i < wordLen; i++) {
|
for(unsigned int i = 0; i < wordLen; i++) {
|
||||||
salad[startRow + i][col] = words[numWord][i];
|
salad[startRow + i][col] = words[w][i];
|
||||||
}
|
}
|
||||||
placed = 1;
|
placed = 1;
|
||||||
addedWords++;
|
addedWords++;
|
||||||
@@ -137,98 +123,12 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i
|
|||||||
tries++;
|
tries++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fillRandom(salad);
|
fillRandom(salad);
|
||||||
return addedWords;
|
return addedWords;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int whichWord(unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS])
|
|
||||||
{
|
|
||||||
int tries = 0;
|
|
||||||
|
|
||||||
while(tries < MAX_RAND_TRIES_PER_WORD) {
|
|
||||||
int numWord = rand() % wordCount; // 0..wordCount-1
|
|
||||||
|
|
||||||
int alreadyUsed = 0;
|
|
||||||
for(int f = 0; f < MAX_NUMBER_OF_WORDS; f++){
|
|
||||||
if(usedWords[f] == numWord){
|
|
||||||
alreadyUsed = 1;
|
|
||||||
break; // word already used
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!alreadyUsed){
|
|
||||||
// Eintragen in usedWords
|
|
||||||
for(int f = 0; f < MAX_NUMBER_OF_WORDS; f++){
|
|
||||||
if(usedWords[f] == -1){ // unused
|
|
||||||
usedWords[f] = numWord;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return numWord; // unused row found
|
|
||||||
}
|
|
||||||
|
|
||||||
tries++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -5;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Fills word in salad and deletes row of words of the used word
|
|
||||||
void fillWordinRow(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],unsigned int searchFieldLen,const char words[][MAX_WORD_LEN], int numWord,int row)
|
|
||||||
{
|
|
||||||
unsigned int wordLen = strlen(words[numWord]);
|
|
||||||
|
|
||||||
// Returns if word longer than game field
|
|
||||||
if (wordLen > searchFieldLen || wordLen == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Determines random starting point in the row to place word
|
|
||||||
int startCol = rand() % (searchFieldLen - wordLen + 1);
|
|
||||||
|
|
||||||
// Determines wether word fits
|
|
||||||
for (unsigned int i = 0; i < wordLen; i++)
|
|
||||||
{
|
|
||||||
if (salad[row][startCol + i] != '\0')
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (unsigned int i = 0; i < wordLen; i++)
|
|
||||||
{
|
|
||||||
salad[row][startCol + i] = words[numWord][i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//Fills word in salad and deletes row of words of the used word, vertical from top to bottom
|
|
||||||
void fillWordinColumn(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], int numWord, int column)
|
|
||||||
{
|
|
||||||
unsigned int wordLen = strlen(words[numWord]);
|
|
||||||
|
|
||||||
if (wordLen > searchFieldLen || wordLen == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
int startRow = rand() % (searchFieldLen - wordLen + 1);
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < wordLen; i++)
|
|
||||||
{
|
|
||||||
if (salad[startRow + i][column] != '\0')
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < wordLen; i++)
|
|
||||||
{
|
|
||||||
salad[startRow + i][column] = words[numWord][i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// if emptyPlaces, fill these with random letters
|
// if emptyPlaces, fill these with random letters
|
||||||
void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]) {
|
void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]) {
|
||||||
for (int j = 0; j < MAX_SEARCH_FIELD_LEN; j++) {
|
for (int j = 0; j < MAX_SEARCH_FIELD_LEN; j++) {
|
||||||
@@ -240,3 +140,4 @@ void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10,10 +10,7 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi
|
|||||||
void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]);
|
void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]);
|
||||||
int printHorizontal();
|
int printHorizontal();
|
||||||
int emptyPlaces(unsigned int wordCount);
|
int emptyPlaces(unsigned int wordCount);
|
||||||
int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]);
|
int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount);
|
||||||
int whichWord(unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]);
|
|
||||||
void fillWordinRow(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], int numWord, int row);
|
|
||||||
void fillWordinColumn(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], int numWord, int column);
|
|
||||||
void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]);
|
void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
+9
-10
@@ -36,17 +36,16 @@ int main(int argc, char *argv[])
|
|||||||
// Create the word salad by placing words into grid
|
// Create the word salad by placing words into grid
|
||||||
placedWords = createWordSalad(wordSalad, SALAD_SIZE, words, wordCount);
|
placedWords = createWordSalad(wordSalad, SALAD_SIZE, words, wordCount);
|
||||||
|
|
||||||
// TODO:
|
|
||||||
// Check if all words were successfully placed
|
// Check if all words were successfully placed
|
||||||
// Start the game if successful
|
if (placedWords != 0)
|
||||||
// error message if some words couldn't be placed
|
{
|
||||||
|
// Start the game if successful
|
||||||
}
|
startGame(wordSalad, SALAD_SIZE, words, wordCount,800);
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
// Print error message if file couldn't be opened
|
{
|
||||||
fprintf(stderr, "Could not open file %s for reading ...\n", argv[1]);
|
fprintf(stderr, "Warning: Only %u out of %u words could be placed.\n", placedWords, wordCount);
|
||||||
exitCode = EXIT_FAILURE;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
-6
@@ -1,18 +1,20 @@
|
|||||||
|
# --------------------------
|
||||||
|
# Compiler und Flags
|
||||||
|
# --------------------------
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS = -g -Wall $(raylibfolder)
|
CFLAGS = -g -Wall -I$(raylibfolder)
|
||||||
LDFLAGS = -lopengl32 -lgdi32 -lwinmm
|
LDFLAGS = -lopengl32 -lgdi32 -lwinmm
|
||||||
BINARIES = ./windows
|
BINARIES = ./windows
|
||||||
|
|
||||||
raylib_folder = ./raylib
|
raylibfolder = ./raylib
|
||||||
unityfolder = ./unity
|
unityfolder = ./unity
|
||||||
|
|
||||||
# --------------------------
|
# --------------------------
|
||||||
# initiales Spiel bauen
|
# Initiales Spiel bauen
|
||||||
# --------------------------
|
# --------------------------
|
||||||
wordsalad_initial:
|
wordsalad_initial:
|
||||||
$(CC) -o wordsalad_initial $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a $(LDFLAGS)
|
$(CC) -o wordsalad_initial $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a $(LDFLAGS)
|
||||||
|
|
||||||
|
|
||||||
# --------------------------
|
# --------------------------
|
||||||
# Normales Spiel bauen
|
# Normales Spiel bauen
|
||||||
# --------------------------
|
# --------------------------
|
||||||
@@ -23,13 +25,19 @@ main.o: main.c
|
|||||||
$(CC) -c $(CFLAGS) main.c
|
$(CC) -c $(CFLAGS) main.c
|
||||||
|
|
||||||
input.o: input.c
|
input.o: input.c
|
||||||
$(CC) -c $(CFLAGS)input.c
|
$(CC) -c $(CFLAGS) input.c
|
||||||
|
|
||||||
game.o: game.c
|
game.o: game.c
|
||||||
$(CC) -c $(CFLAGS) game.c
|
$(CC) -c $(CFLAGS) game.c
|
||||||
|
|
||||||
graphicalGame.o: graphicalGame.c
|
graphicalGame.o: graphicalGame.c
|
||||||
$(CC) -I$(raylib_folder) -c $(CFLAGS) graphicalGame.c
|
$(CC) $(CFLAGS) -c graphicalGame.c
|
||||||
|
|
||||||
|
# --------------------------
|
||||||
|
# Eigene Version bauen
|
||||||
|
# --------------------------
|
||||||
|
wordsalad_myversion: main.c
|
||||||
|
$(CC) $(CFLAGS) -o wordsalad_myversion main.c $(BINARIES)/libwordsalad.a $(LDFLAGS)
|
||||||
|
|
||||||
# --------------------------
|
# --------------------------
|
||||||
# Unit Tests
|
# Unit Tests
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user