Second commit
This commit is contained in:
parent
5d267c1709
commit
0472094860
22
game.c
22
game.c
@ -22,19 +22,19 @@
|
|||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// Hàm tạo ngẫu nhiên một chữ cái in hoa
|
// Funktion, die einen zufälligen Großbuchstaben generiert
|
||||||
char randomLetter()
|
char randomLetter()
|
||||||
{
|
{
|
||||||
return 'A' + rand() % 26;
|
return 'A' + rand() % 26;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hàm chính: Tạo trò chơi word salad
|
// Hauptfunktion: Erstellt das Wortsalat-Spiel
|
||||||
int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],
|
int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],
|
||||||
unsigned int searchFieldLen,
|
unsigned int searchFieldLen,
|
||||||
const char words[][MAX_WORD_LEN],
|
const char words[][MAX_WORD_LEN],
|
||||||
unsigned int wordCount)
|
unsigned int wordCount)
|
||||||
{
|
{
|
||||||
// 1. Khởi tạo lưới trống
|
// 1. Leeres Spielfeld initialisieren
|
||||||
for (unsigned int i = 0; i < searchFieldLen; i++)
|
for (unsigned int i = 0; i < searchFieldLen; i++)
|
||||||
{
|
{
|
||||||
for (unsigned int j = 0; j < searchFieldLen; j++)
|
for (unsigned int j = 0; j < searchFieldLen; j++)
|
||||||
@ -45,25 +45,25 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],
|
|||||||
|
|
||||||
srand((unsigned int)time(NULL));
|
srand((unsigned int)time(NULL));
|
||||||
|
|
||||||
// 2. Đặt từng từ vào lưới
|
// 2. Jedes Wort zufällig im Spielfeld platzieren
|
||||||
for (unsigned int w = 0; w < wordCount; w++)
|
for (unsigned int w = 0; w < wordCount; w++)
|
||||||
{
|
{
|
||||||
const char *word = words[w];
|
const char *word = words[w];
|
||||||
size_t len = strlen(word);
|
size_t len = strlen(word);
|
||||||
if (len > searchFieldLen)
|
if (len > searchFieldLen)
|
||||||
continue; // Bỏ qua nếu từ quá dài
|
continue; // Überspringen, falls das Wort zu lang ist
|
||||||
|
|
||||||
int placed = 0;
|
int placed = 0;
|
||||||
for (int attempt = 0; attempt < MAX_RAND_TRIES_PER_WORD && !placed; attempt++)
|
for (int attempt = 0; attempt < MAX_RAND_TRIES_PER_WORD && !placed; attempt++)
|
||||||
{
|
{
|
||||||
int dir = rand() % 2; // 0 = ngang, 1 = dọc
|
int dir = rand() % 2; // 0 = horizontal, 1 = vertikal
|
||||||
int row = rand() % searchFieldLen;
|
int row = rand() % searchFieldLen;
|
||||||
int col = rand() % searchFieldLen;
|
int col = rand() % searchFieldLen;
|
||||||
|
|
||||||
// Kiểm tra xem từ có vừa vị trí không
|
// Prüfen, ob das Wort an die Position passt
|
||||||
if (dir == 0 && col + len <= searchFieldLen)
|
if (dir == 0 && col + len <= searchFieldLen)
|
||||||
{
|
{
|
||||||
// Kiểm tra xem có bị đè chữ khác không
|
// Prüfen, ob keine Überschneidungen mit anderen Buchstaben auftreten
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
for (size_t i = 0; i < len; i++)
|
for (size_t i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
@ -101,7 +101,7 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Điền ký tự ngẫu nhiên vào các ô trống
|
// 3. Leere Felder mit zufälligen Buchstaben füllen
|
||||||
for (unsigned int i = 0; i < searchFieldLen; i++)
|
for (unsigned int i = 0; i < searchFieldLen; i++)
|
||||||
{
|
{
|
||||||
for (unsigned int j = 0; j < searchFieldLen; j++)
|
for (unsigned int j = 0; j < searchFieldLen; j++)
|
||||||
@ -111,10 +111,10 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0; // 0 = thành công
|
return 0; // 0 = erfolgreich
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hàm in lưới ra màn hình
|
// Funktion zur Anzeige des Spielfelds in der Konsole
|
||||||
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],
|
||||||
unsigned int searchFieldLen)
|
unsigned int searchFieldLen)
|
||||||
{
|
{
|
||||||
|
|||||||
18
input.c
18
input.c
@ -11,8 +11,8 @@
|
|||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// Đọc danh sách các từ từ tệp và lưu vào mảng 'words'.
|
// Wörter aus einer Datei lesen und im Array 'words' speichern
|
||||||
// Trả về số lượng từ đã đọc được, hoặc -1 nếu lỗi.
|
// Gibt die Anzahl der gelesenen Wörter zurück oder -1 im Fehlerfall.
|
||||||
|
|
||||||
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
|
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
|
||||||
{
|
{
|
||||||
@ -23,19 +23,19 @@ int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
char line[MAX_WORD_LEN + 5]; // thêm chút dư để tránh tràn
|
char line[MAX_WORD_LEN + 5]; // etwas Puffer, um Überlauf zu vermeiden
|
||||||
|
|
||||||
// Đọc từng dòng cho đến khi hết file hoặc đạt giới hạn
|
// Zeilen einzeln lesen, bis EOF erreicht oder das Limit erreicht ist
|
||||||
while (fgets(line, sizeof(line), file) != NULL && count < maxWordCount)
|
while (fgets(line, sizeof(line), file) != NULL && count < maxWordCount)
|
||||||
{
|
{
|
||||||
// Xóa ký tự xuống dòng '\n' nếu có
|
// Zeilenumbruch '\n' oder '\r\n' entfernen
|
||||||
line[strcspn(line, "\r\n")] = '\0';
|
line[strcspn(line, "\r\n")] = '\0';
|
||||||
|
|
||||||
// Bỏ qua dòng trống
|
// Leere Zeilen überspringen
|
||||||
if (strlen(line) == 0)
|
if (strlen(line) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Loại bỏ khoảng trắng đầu/cuối (nếu có)
|
// Leerzeichen am Anfang und Ende entfernen
|
||||||
char *start = line;
|
char *start = line;
|
||||||
while (isspace((unsigned char)*start))
|
while (isspace((unsigned char)*start))
|
||||||
start++;
|
start++;
|
||||||
@ -47,9 +47,9 @@ int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
|
|||||||
end--;
|
end--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sao chép an toàn vào mảng words
|
// Sichere Kopie in das Array 'words'
|
||||||
strncpy(words[count], start, MAX_WORD_LEN - 1);
|
strncpy(words[count], start, MAX_WORD_LEN - 1);
|
||||||
words[count][MAX_WORD_LEN - 1] = '\0'; // đảm bảo kết thúc chuỗi
|
words[count][MAX_WORD_LEN - 1] = '\0'; // Nullterminierung sicherstellen
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|||||||
16
main.c
16
main.c
@ -12,7 +12,7 @@ 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)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: %s <path to file with search words>\n", argv[0]);
|
fprintf(stderr, "Usage: %s <path to file with search words>\n", argv[0]);
|
||||||
exitCode = EXIT_FAILURE;
|
exitCode = EXIT_FAILURE;
|
||||||
@ -24,7 +24,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
FILE *file = fopen(argv[1], "r");
|
FILE *file = fopen(argv[1], "r");
|
||||||
|
|
||||||
if(file != NULL)
|
if (file != NULL)
|
||||||
{
|
{
|
||||||
unsigned int placedWords = 0;
|
unsigned int placedWords = 0;
|
||||||
char wordSalad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]; // 2D array to store the word salad
|
char wordSalad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]; // 2D array to store the word salad
|
||||||
@ -38,9 +38,19 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
// TODO:
|
// TODO:
|
||||||
// Check if all words were successfully placed
|
// Check if all words were successfully placed
|
||||||
|
if (placedWords < wordCount)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Warning: Only %d out of %d words could be placed in the salad.\n",
|
||||||
|
placedWords, wordCount);
|
||||||
|
fprintf(stderr, "Some words could not be placed.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("All %u words placed successfully!\n", wordCount);
|
||||||
|
}
|
||||||
// Start the game if successful
|
// Start the game if successful
|
||||||
|
showWordSalad(wordSalad, SALAD_SIZE);
|
||||||
// error message if some words couldn't be placed
|
// error message if some words couldn't be placed
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user