A JavaFX 21 cross-platform desktop application for learning student names through gamified exercises. Features matching, multiple choice, and fill-in-the-blank games with statistics tracking and progress monitoring.
- Three Game Modes: Matching, Multiple Choice, and Fill-in-the-blank exercises
- Smart Photo Matching: Automatically matches student photos to roster names using fuzzy matching
- Excel Integration: Load student rosters from
.xlsor.xlsxfiles - Statistics Tracking: Monitor learning progress with detailed statistics
- Cross-Platform: Runs on Windows, macOS, and Linux
- Flexible Setup: Configurable photo directories and roster files
- Animation & Sound: Engaging feedback with animations and sound effects
- Export/Import: Save and share statistics and progress data
The PlantUML source for this diagram is in
design/use-case.puml.An ASCII rendering is available in
design/use-case.utxt.
- Operating System: Windows 10+, macOS 10.14+, or Linux (Ubuntu 18.04+)
- No additional software required - Java runtime is bundled with installers
- Data Directory - a directory containing pictures (preferably headshots) and an Excel spreadsheet containing a roster in lastname,firstname format with a header column that says Name.
- Go to the Releases page
- Download the appropriate installer for your platform:
- Windows:
student-name-game-windows-installer.exe - macOS:
student-name-game-macos-installer.pkg - Linux:
student-name-game-linux-installer.deborstudent-name-game-linux-installer.rpm
- Windows:
- Run the installer and follow the setup wizard
- Launch from your applications menu or desktop shortcut
- Download
student-name-game-portable.zipfrom Releases - Extract to any folder on your computer
- Run the appropriate launcher:
- Windows: Double-click
run.bat - macOS/Linux: Run
./run.shin terminal
- Windows: Double-click
- Create a folder for student photos (e.g.,
C:\Students\Photos\) - Add student photos to this folder:
- Supported formats:
.jpg,.jpeg,.png - Naming convention:
LastnameFirstname.jpg(e.g.,SmithJohn.jpg)
- Supported formats:
- Create a roster file (Excel
.xlsor.xlsx):- Must have a "Name" column with entries in "Last, First" format
- Save as
roster.xlsxin the same folder as photos
- Launch the application and configure the photo directory path
- Photo Naming: Name files to match student names for automatic matching
- Manual Mapping: Use the unmatched dialog to manually assign photos to names
- Game Selection: Choose from Matching, Multiple Choice, or Fill-in-the-blank modes
- Statistics: Track progress and identify students needing more practice
- Keyboard Shortcuts: Use
Ctrl+Sfor settings,Ctrl+?for help
- Java 21 LTS (OpenJDK or Oracle JDK)
- Maven 3.8+ (or use included Maven Wrapper)
- Git for version control
- IDE (IntelliJ IDEA, Eclipse, VS Code recommended)
Windows (Chocolatey):
choco install openjdk21Windows (Manual):
- Download from Microsoft OpenJDK
- Set
JAVA_HOMEenvironment variable
macOS (Homebrew):
brew install openjdk@21Linux (Ubuntu/Debian):
sudo apt update
sudo apt install openjdk-21-jdkjava -version
# Should show: openjdk version "21.x.x"git clone https://github.com/mrobbeloth/student-name-game.git
cd student-name-game# Run in development mode
./mvnw javafx:run
# Build portable version
./mvnw clean package -DskipNativePackage
# Build with platform installers (requires additional setup)
./mvnw clean package
# Clean build artifacts
./mvnw clean# Run tests (when implemented)
./mvnw test
# Run with specific test profile
./mvnw test -Dtest=SpecificTestClasssrc/main/
├── java/com/example/namegame/
│ ├── controller/ # FXML controllers
│ ├── model/ # Data models (records)
│ ├── service/ # Business logic
│ └── util/ # Utilities and helpers
├── resources/
│ ├── com/example/namegame/
│ │ ├── css/ # Stylesheets
│ │ └── views/ # FXML files
│ └── sounds/ # Audio files
└── assembly/ # Build configuration
- Model: Java 21 records for immutable data (
Student,GameSession, etc.) - Service: Business logic layer (
ConfigService,RosterService,ImageService) - Controller: JavaFX FXML controllers for UI interaction
- Util: Shared utilities (
AnimationFactory, helpers)
- Java 21 LTS - Latest Java features (records, pattern matching, virtual threads)
- JavaFX 21 - Modern desktop UI framework
- Apache POI 5.5.1 - Excel file processing (
.xls/.xlsx) - Apache Commons Text 1.15.0 - String utilities (Levenshtein distance)
- Gson 2.13.2 - JSON serialization
- Maven - Build system and dependency management
- Import as Maven project
- Set Project SDK to Java 21
- Enable preview features:
--enable-preview - Install JavaFX plugin (if needed)
- Import as "Existing Maven Projects"
- Configure Java Build Path to use Java 21
- Add VM arguments:
--enable-preview
- Install "Extension Pack for Java"
- Set
java.configuration.runtimesto Java 21 - Configure launch.json with
--enable-preview
- Installed:
~/.namegame/(user home directory) - Portable:
./data/(relative to application)
Contains:
config.ini- Application settingsmappings.json- Manual image-to-name mappingsstatistics.json- Game statistics and progressexports/- Exported statistics files
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Create a Pull Request
- Use Java 21 features: records, pattern matching, virtual threads
- Follow JavaFX best practices: properties, bindings, Platform.runLater()
- All UI updates must be on JavaFX Application Thread
- Use meaningful variable names and add JavaDoc for public methods
- Format code consistently (use IDE auto-formatting)
The project uses Maven with the following key plugins:
- maven-compiler-plugin - Java 21 compilation with preview features
- javafx-maven-plugin - JavaFX application execution
- maven-shade-plugin - Creates fat JAR with all dependencies
- maven-assembly-plugin - Builds portable ZIP distributions
"Module not found" errors:
- Ensure Java 21 is installed and
JAVA_HOMEis set correctly - Verify JavaFX modules are on the module path
Build failures:
- Run
./mvnw cleanto clear old build artifacts - Check Java version:
java -version - Ensure Maven Wrapper has execute permissions (Linux/macOS):
chmod +x mvnw
Runtime issues:
- Verify photo directory exists and contains valid image files
- Check roster Excel file has a "Name" column
- Review application logs in data directory
This project is licensed under the MIT License - see the LICENSE file for details.
Amazon Q Analysis of Architecture
- Apache POI - Excel file processing
- OpenJFX - JavaFX framework
- Apache Commons - String utilities
- Microsoft OpenJDK - Java 21 LTS runtime
