generated from freudenreichan/info2Praktikum-Wortsalat
Fertig
This commit is contained in:
parent
0da01c3a15
commit
719f4942ed
@ -13,11 +13,138 @@
|
|||||||
// Creates the word salad by placing words randomly and filling empty spaces
|
// 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)
|
||||||
{
|
{
|
||||||
|
srand(time(NULL));
|
||||||
|
|
||||||
|
int wortrest = wordCount;
|
||||||
|
int akt_word;
|
||||||
|
int belegtcounter;
|
||||||
|
int lage;
|
||||||
|
int spalte_zeile;
|
||||||
|
int fehlende_woerter;
|
||||||
|
char saladcpy[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN];
|
||||||
|
char demostring[MAX_WORD_LEN];
|
||||||
|
char comp_string[MAX_WORD_LEN];
|
||||||
|
int zerocounter;
|
||||||
|
int maxzero[2];
|
||||||
|
int ersterbuchstabe;
|
||||||
|
int erledigt;
|
||||||
|
|
||||||
|
//salad befuellen mit "0"
|
||||||
|
for (int i=0;i<searchFieldLen; i++){
|
||||||
|
for (int ii=0;ii<searchFieldLen; ii++){
|
||||||
|
salad[i][ii]= '0';
|
||||||
|
saladcpy[i][ii]= '0';
|
||||||
|
}
|
||||||
|
salad[i][searchFieldLen] = '\0';
|
||||||
|
saladcpy[i][searchFieldLen] = '\0';
|
||||||
|
demostring[i]='0';
|
||||||
|
}
|
||||||
|
demostring[searchFieldLen-1]='\0';
|
||||||
|
|
||||||
|
|
||||||
|
while(wortrest>0){
|
||||||
|
akt_word = wordCount - wortrest;
|
||||||
|
lage = rand()%2;
|
||||||
|
erledigt = 0;
|
||||||
|
belegtcounter = MAX_RAND_TRIES_PER_WORD;
|
||||||
|
while(belegtcounter>0){
|
||||||
|
|
||||||
|
strncpy(comp_string,demostring,MAX_WORD_LEN);
|
||||||
|
strncpy(comp_string,words[akt_word],strlen(words[akt_word]));
|
||||||
|
|
||||||
|
zerocounter = 1;
|
||||||
|
maxzero[0] = 1;
|
||||||
|
spalte_zeile=rand()%searchFieldLen;
|
||||||
|
switch (lage){
|
||||||
|
|
||||||
|
case 0://Waagerecht
|
||||||
|
|
||||||
|
for(int i=1;i<searchFieldLen;i++){
|
||||||
|
if(salad[spalte_zeile][i-1]=='0' && salad[spalte_zeile][i]=='0'){
|
||||||
|
zerocounter++;
|
||||||
|
if(zerocounter>maxzero[0]){
|
||||||
|
maxzero[0] = zerocounter; //Menge an Nullen
|
||||||
|
maxzero[1] = i; //Pos der letzten Null
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
zerocounter = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(maxzero[0]>=strlen(words[akt_word])){
|
||||||
|
ersterbuchstabe = maxzero[1]-(maxzero[0])+1+rand()%(maxzero[0]-strlen(words[akt_word])+1); //Start = letzter freier Platz - anzahl Platz + 1 + rand()%(freierPlatz-benötigterPlatz +1)
|
||||||
|
for(int i=0;i<strlen(words[akt_word]);i++){ // (teoretischer erster Startpunkt) (für richtigen Startwert) freieLücken + 1 wegen Startpunkt
|
||||||
|
salad[spalte_zeile][ersterbuchstabe+i]=words[akt_word][i];
|
||||||
|
}
|
||||||
|
for(int i=0;i<searchFieldLen;i++){
|
||||||
|
for(int ii=0;ii<searchFieldLen;ii++){
|
||||||
|
saladcpy[ii][i]=salad[i][ii];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
erledigt =1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1://Senkrecht
|
||||||
|
|
||||||
|
for(int i=1;i<searchFieldLen;i++){
|
||||||
|
if(saladcpy[spalte_zeile][i-1]=='0' && saladcpy[spalte_zeile][i]=='0'){
|
||||||
|
zerocounter++;
|
||||||
|
if(zerocounter>maxzero[0]){
|
||||||
|
maxzero[0] = zerocounter; //Menge an Nullen
|
||||||
|
maxzero[1] = i; //Pos der letzten Null
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
zerocounter = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(maxzero[0]>=strlen(words[akt_word])){
|
||||||
|
ersterbuchstabe = maxzero[1]-(maxzero[0])+1+rand()%(maxzero[0]-strlen(words[akt_word])+1); //Start = letzter freier Platz - anzahl Platz + 1 + rand()%(freierPlatz-benötigterPlatz +1)
|
||||||
|
for(int i=0;i<strlen(words[akt_word]);i++){ // (teoretischer erster Startpunkt) (für richtigen Startwert) freieLücken + 1 wegen Startpunkt
|
||||||
|
saladcpy[spalte_zeile][ersterbuchstabe+i]=words[akt_word][i];
|
||||||
|
}
|
||||||
|
for(int i=0;i<searchFieldLen;i++){
|
||||||
|
for(int ii=0;ii<searchFieldLen;ii++){
|
||||||
|
salad[ii][i]=saladcpy[i][ii];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
erledigt = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Fehler: game.c: lage-switch");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(erledigt==1){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
belegtcounter--;
|
||||||
|
}
|
||||||
|
if (belegtcounter==0){
|
||||||
|
fehlende_woerter++;
|
||||||
|
}
|
||||||
|
wortrest--;
|
||||||
|
}
|
||||||
|
for(int i=0;i<searchFieldLen;i++){ //Rest vom Feld füllen
|
||||||
|
for(int ii=0;ii<searchFieldLen;ii++){
|
||||||
|
if(salad[i][ii]=='0'){
|
||||||
|
salad[i][ii] = 'A' + rand()%26;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return wordCount-fehlende_woerter;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prints the word salad to console
|
// Prints the word salad to console
|
||||||
void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen)
|
void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen)
|
||||||
{
|
{
|
||||||
|
for(int i=0;i<searchFieldLen;i++){
|
||||||
|
printf("%s",salad[i]);
|
||||||
|
//for(int ii=0;ii<searchFieldLen+1; ii++){
|
||||||
|
// putchar(salad[i][ii]);
|
||||||
|
//}
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Binary file not shown.
125
Start_Windows/game_old.c
Normal file
125
Start_Windows/game_old.c
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
#include "game.h"
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define MAX_RAND_TRIES_PER_WORD 10
|
||||||
|
#define EMPTY_CHAR 0
|
||||||
|
|
||||||
|
//TODO: Spiellogik implementieren:
|
||||||
|
/* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren
|
||||||
|
* restliche Felder mit zufälligen Buchstaben füllen */
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
{
|
||||||
|
srand(time(NULL));
|
||||||
|
|
||||||
|
int wortrest = wordCount;
|
||||||
|
int akt_word;
|
||||||
|
int lage;
|
||||||
|
int pos_x;
|
||||||
|
int pos_y;
|
||||||
|
int belegt = 2;
|
||||||
|
int belegt_counter;
|
||||||
|
int fehlende_woerter=0;
|
||||||
|
int startwechsel = 0;
|
||||||
|
char demostring[searchFieldLen];
|
||||||
|
char vergleichstring[searchFieldLen];
|
||||||
|
|
||||||
|
//salad befuellen mit "0"
|
||||||
|
for (int i=0;i<searchFieldLen; i++){
|
||||||
|
for (int ii=0;ii<searchFieldLen; ii++){
|
||||||
|
salad[i][ii]= '0';
|
||||||
|
}
|
||||||
|
salad[i][searchFieldLen] = '\0';
|
||||||
|
demostring[i]='0';
|
||||||
|
}
|
||||||
|
demostring[searchFieldLen-1]='\0';
|
||||||
|
|
||||||
|
while (wortrest>0){
|
||||||
|
belegt_counter = MAX_RAND_TRIES_PER_WORD;
|
||||||
|
while (belegt_counter > 0){
|
||||||
|
akt_word = (wordCount-wortrest);
|
||||||
|
|
||||||
|
if(belegt_counter<(MAX_RAND_TRIES_PER_WORD/2)){
|
||||||
|
|
||||||
|
}
|
||||||
|
//horizontal/vertikal
|
||||||
|
lage = rand()%2;
|
||||||
|
switch (lage){
|
||||||
|
|
||||||
|
case 0://Waagerecht
|
||||||
|
|
||||||
|
pos_x = rand()%(searchFieldLen-strlen(words[akt_word]));
|
||||||
|
pos_y = rand()%(searchFieldLen);
|
||||||
|
|
||||||
|
for (int leange_counter = 0;leange_counter<strlen(words[akt_word]);leange_counter++){
|
||||||
|
if (salad[pos_x+leange_counter][pos_y] != '0'){ //checken ob alle Felder frei sind
|
||||||
|
belegt = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (belegt == 2){
|
||||||
|
for(int i = 0; i < strlen(words[akt_word]); i++){ //Inhalte reinschreiben
|
||||||
|
salad[pos_x+i][pos_y] = words[akt_word][i];
|
||||||
|
}
|
||||||
|
belegt = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1://Senkrecht
|
||||||
|
|
||||||
|
pos_x = rand()%(searchFieldLen);
|
||||||
|
pos_y = rand()%(searchFieldLen-strlen(words[akt_word]));
|
||||||
|
|
||||||
|
for (int leange_counter = 0;leange_counter<strlen(words[akt_word]);leange_counter++){
|
||||||
|
if (salad[pos_x][pos_y+leange_counter] != '0'){ //checken ob alle Felder frei sind
|
||||||
|
belegt = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (belegt == 2){
|
||||||
|
for(int i = 0; i < strlen(words[akt_word]); i++){ //Inhalte reinschreiben
|
||||||
|
salad[pos_x][pos_y+i] = words[akt_word][i];
|
||||||
|
}
|
||||||
|
belegt = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Fehler: game.c: lage-switch");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(belegt==0){
|
||||||
|
break;
|
||||||
|
} //Auslesen Belegtstatus
|
||||||
|
else if(belegt == 1){
|
||||||
|
belegt_counter --;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(belegt_counter==0){
|
||||||
|
fehlende_woerter++;
|
||||||
|
}else if(belegt ==2){
|
||||||
|
printf("Fehler: game.c: Beschreiben des Salats");
|
||||||
|
}
|
||||||
|
belegt = 2;
|
||||||
|
wortrest--;
|
||||||
|
startwechsel = 0;
|
||||||
|
}
|
||||||
|
return wordCount-fehlende_woerter;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prints the word salad to console
|
||||||
|
void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen)
|
||||||
|
{
|
||||||
|
for(int i=0;i<searchFieldLen;i++){
|
||||||
|
printf("%s",salad[i]);
|
||||||
|
//for(int ii=0;ii<searchFieldLen+1; ii++){
|
||||||
|
// putchar(salad[i][ii]);
|
||||||
|
//}
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Start_Windows/graphicalGame.o
Normal file
BIN
Start_Windows/graphicalGame.o
Normal file
Binary file not shown.
@ -15,6 +15,8 @@ int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
|
|||||||
char *trenner = " .;,";
|
char *trenner = " .;,";
|
||||||
char *token;
|
char *token;
|
||||||
char *enter = "\n";
|
char *enter = "\n";
|
||||||
|
char sorter[MAX_WORD_LEN];
|
||||||
|
|
||||||
//Zeilen auslesen und als ein String speichern
|
//Zeilen auslesen und als ein String speichern
|
||||||
while(fgets(zeile,MAX_LINE_LEN, file) != NULL){
|
while(fgets(zeile,MAX_LINE_LEN, file) != NULL){
|
||||||
if (strstr(zeile, enter) != NULL){
|
if (strstr(zeile, enter) != NULL){
|
||||||
@ -35,13 +37,31 @@ int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
|
|||||||
counter ++;
|
counter ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Datei schliessen
|
for(int i=0;i<counter;i++){ //Schleife für nur Großbuchstaben
|
||||||
fclose(file);
|
for(int ii=0;ii<strlen(words[i]);ii++){
|
||||||
|
words[i][ii] = toupper(words[i][ii]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=0;i<counter-1;i++){ //nach Groesse sortieren
|
||||||
|
for(int ii=0;ii<counter-1-i;ii++){
|
||||||
|
if(strlen(words[ii]) < strlen(words[ii+1])) {
|
||||||
|
strncpy(sorter,words[ii],MAX_WORD_LEN);
|
||||||
|
strncpy(words[ii],words[ii+1], MAX_WORD_LEN);
|
||||||
|
strncpy(words[ii+1],sorter, MAX_WORD_LEN);
|
||||||
|
}
|
||||||
|
strcpy(sorter,"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Test
|
//Test
|
||||||
//for(int i =0;i<counter;i++){
|
for(int i =0;i<counter;i++){
|
||||||
// printf("%s\n", words[i]);
|
printf("%s\n", words[i]);
|
||||||
//}
|
}
|
||||||
|
|
||||||
return counter;
|
return counter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Wörter von lang nach kurz sortieren
|
||||||
Binary file not shown.
@ -10,7 +10,6 @@
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int exitCode = EXIT_SUCCESS;
|
int exitCode = EXIT_SUCCESS;
|
||||||
|
|
||||||
// Check if the correct number of arguments is provided
|
// Check if the correct number of arguments is provided
|
||||||
if(argc != 2)
|
if(argc != 2)
|
||||||
{
|
{
|
||||||
@ -32,7 +31,6 @@ int main(int argc, char *argv[])
|
|||||||
// Read words from file and store in 'words' array
|
// Read words from file and store in 'words' array
|
||||||
wordCount = readWords(file, words, MAX_NUMBER_OF_WORDS);
|
wordCount = readWords(file, words, MAX_NUMBER_OF_WORDS);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
// 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);
|
||||||
|
|
||||||
@ -41,6 +39,13 @@ int main(int argc, char *argv[])
|
|||||||
// Start the game if successful
|
// Start the game if successful
|
||||||
// error message if some words couldn't be placed
|
// error message if some words couldn't be placed
|
||||||
|
|
||||||
|
showWordSalad(wordSalad,MAX_SEARCH_FIELD_LEN);
|
||||||
|
if(placedWords == wordCount){
|
||||||
|
startGame(wordSalad,SALAD_SIZE,words, wordCount, 1000);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printf("Es konnten nicht alle Woerter plaziert werden: %d\n", (wordCount-placedWords));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Binary file not shown.
@ -15,8 +15,8 @@ wordsalad_initial:
|
|||||||
# --------------------------
|
# --------------------------
|
||||||
# Normales Spiel bauen
|
# Normales Spiel bauen
|
||||||
# --------------------------
|
# --------------------------
|
||||||
wordsalad_myversion: main.o input.o game.o
|
wordsalad_myversion: main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a
|
||||||
$(CC) -o wordsalad_myversion $(BINARIES)/libwordsalad.a main.o input.o game.o
|
$(CC) -o wordsalad_myversion main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a $(LDFLAGS)
|
||||||
|
|
||||||
all: main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a
|
all: main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a
|
||||||
$(CC) $(CFLAGS) -o wordsalad main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a $(LDFLAGS)
|
$(CC) $(CFLAGS) -o wordsalad main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a $(LDFLAGS)
|
||||||
|
|||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user