7.7 KiB
Word Salad Game - Comprehensive TODO List
Project Overview
A word search puzzle game where words are randomly placed in a grid (horizontally or vertically), and players must find them by drawing lines over the letters. Built with C and Raylib graphics library.
📋 Core Implementation Tasks
🔴 CRITICAL - Must be implemented for basic functionality
1. input.c - Word Reading Function ⚠️ HIGH PRIORITY
Function: readWords()
Requirements:
- Read words from file (
words.txt) line by line - Handle multiple delimiters: comma (
,), semicolon (;), space (), newline (\n) - Convert all words to uppercase for consistency
- Store words in the provided
words[][]array - Return the total count of words read
- Handle empty files gracefully (return 0)
- Validate max word count limit (
maxWordCount) - Trim whitespace from words
- Skip empty words/lines
Implementation Notes:
- Use
fgets()to read lines (maxMAX_LINE_LEN) - Use
strtok()for tokenizing with multiple delimiters:", ;\n\t\r" - Use
toupper()to convert characters to uppercase - Use
isalpha()to validate word characters - Handle buffer overflow protection
Test Coverage:
test_readWords_simple()- Basic newline-separated wordstest_readWords_with_delimiters()- Multiple delimiter typestest_readWords_empty_file()- Empty file handling
2. game.c - Word Salad Creation ⚠️ HIGH PRIORITY
Function: createWordSalad()
Requirements:
- Initialize the grid with
EMPTY_CHAR(0) - Seed random number generator with
srand(time(NULL)) - For each word, attempt placement:
- Try random positions and orientations (horizontal/vertical)
- Max attempts:
MAX_RAND_TRIES_PER_WORD(10) - Check if word fits without overlapping incorrectly
- Place word character by character
- Fill remaining empty cells with random uppercase letters (A-Z)
- Return count of successfully placed words
Placement Algorithm:
- Random orientation: 0 = horizontal, 1 = vertical
- Random starting position within valid bounds
- Check if entire word fits
- Check for conflicts (can overwrite same letter, not different letters)
- Place word if valid
- Increment placed counter
Edge Cases:
- Words too long for grid size
- Grid too small for multiple words
- All positions occupied
Test Coverage:
test_createWordSalad_all_fit()- All words fit in large gridtest_createWordSalad_too_small()- Grid too small for some wordstest_createWordSalad_allWordsPlaced()- Verify words are actually in grid
3. game.c - Display Function 🟡 MEDIUM PRIORITY
Function: showWordSalad()
Requirements:
- Print grid to console in readable format
- Add spacing between characters for clarity
- Optional: Add row/column numbers for debugging
- Format: Each row on separate line
Example Output:
0 1 2 3 4
0 Y E T I X
1 N A B C D
2 M O N S T E R
3 O G H I J
4. main.c - Game Validation & Launch ⚠️ HIGH PRIORITY
Requirements:
- Compare
placedWordswithwordCount - If all words placed successfully:
- Call
startGame()with word salad and parameters - Pass
SALAD_SIZEas search field size - Use appropriate window size (e.g., 800)
- Call
- If some words couldn't be placed:
- Print error message to stderr
- Indicate how many words failed
- Set
exitCode = EXIT_FAILURE - Don't start the game
Implementation:
// TODO: Complete this section
if (placedWords == wordCount) {
// All words successfully placed - start the game
showWordSalad(wordSalad, SALAD_SIZE); // Optional: show in console
startGame(wordSalad, SALAD_SIZE, words, wordCount, 800);
} else {
// Error: Not all words could be placed
fprintf(stderr, "Error: Only %u out of %u words could be placed in the grid.\n",
placedWords, wordCount);
exitCode = EXIT_FAILURE;
}
🧪 Testing & Validation
Unit Tests
- Run all unit tests:
./unit_testsormake test - Ensure all 6 tests pass:
test_readWords_simpletest_readWords_with_delimiterstest_readWords_empty_filetest_createWordSalad_all_fittest_createWordSalad_too_smalltest_createWordSalad_allWordsPlaced
Integration Testing
- Test with provided
words.txtfile - Test with custom word lists
- Test with edge cases:
- Empty file
- Single word
- Very long words
- Maximum word count
- Special characters/numbers (should be filtered)
🔧 Build & Compilation
Prerequisites
- GCC compiler installed
- Make utility available
- Raylib library (already included in project)
- Unity test framework (already included)
Build Commands
# Build main executable
make
# Build and run unit tests
make test
# Clean build artifacts
make clean
Platform-Specific Notes
- Windows: Use
Start_Windows/directory - Linux: Use
Start_Linux/directory - macOS: Use
Start_Mac/directory
📦 Additional Enhancements (Optional)
Nice-to-Have Features
- Add diagonal word placement
- Add backward word placement (reverse strings)
- Difficulty levels (grid size, word count)
- Save/load game state
- High score tracking
- Time-based gameplay
- Hint system
- Multiple language support
Code Quality
- Add comprehensive comments
- Follow consistent naming conventions
- Memory leak detection with Valgrind
- Static analysis with cppcheck
- Code formatting with clang-format
Documentation
- Update README.md with:
- Build instructions
- How to play
- Screenshots
- System requirements
- Add inline code documentation
- Create developer guide
🐛 Known Issues & Debugging
Common Problems
- Segmentation fault: Check array bounds, null pointers
- Words not found: Ensure uppercase conversion in both placement and search
- Random seed: Call
srand(time(NULL))only once - File not found: Check relative paths, working directory
Debugging Tips
- Use
printf()to trace execution - Test functions individually
- Use debugger (gdb/lldb) for complex issues
- Enable compiler warnings:
-Wall -Wextra
✅ Definition of Done
A task is considered complete when:
- Code compiles without warnings
- All relevant unit tests pass
- Function meets specification requirements
- Edge cases are handled
- Code is properly commented
- No memory leaks (verified with Valgrind on Linux/Mac)
- Integrated and tested with other components
📅 Suggested Implementation Order
-
✅ Week 1: Implement
readWords()ininput.c- Start with simple parsing
- Add delimiter handling
- Test with unit tests
-
✅ Week 2: Implement
createWordSalad()ingame.c- Grid initialization
- Word placement algorithm
- Random fill
- Test with unit tests
-
✅ Week 3: Implement
showWordSalad()and completemain.c- Console display
- Game validation logic
- Integration testing
-
✅ Week 4: Testing, debugging, and polish
- Fix all unit test failures
- Test with various word lists
- Optimize performance
- Code cleanup
📝 Notes
- The graphical interface (
graphicalGame.c) is already implemented - Raylib library handles all graphics rendering
- Focus on the core game logic implementation
- Test frequently to catch bugs early
- Use the provided Unity test framework
Last Updated: November 5, 2025
Project: Word Salad Game (Wortsalat)
Course: Informatik 2 - Programmierung (3. Semester)