initial commit
This commit is contained in:
commit
cdd51fdf5c
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
.idea/
|
||||||
|
cmake-build-debug/
|
||||||
13
CMakeLists.txt
Normal file
13
CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
cmake_minimum_required(VERSION 4.0)
|
||||||
|
project(cordle C)
|
||||||
|
|
||||||
|
set(CMAKE_C_STANDARD 90)
|
||||||
|
|
||||||
|
# Find the curses library
|
||||||
|
find_package(Curses REQUIRED)
|
||||||
|
|
||||||
|
add_executable(cordle cordle.c)
|
||||||
|
|
||||||
|
# Link against the curses library
|
||||||
|
target_link_libraries(cordle ${CURSES_LIBRARIES})
|
||||||
|
target_include_directories(cordle PRIVATE ${CURSES_INCLUDE_DIRS})
|
||||||
33
CordleDosBoxLauncher.bat
Normal file
33
CordleDosBoxLauncher.bat
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
@echo off
|
||||||
|
REM DOSBox Launcher for Cordle
|
||||||
|
REM Automatically starts DOSBox with correct configuration
|
||||||
|
|
||||||
|
echo ================================================
|
||||||
|
echo Starting DOSBox for Cordle Development
|
||||||
|
echo ================================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM Check if DOSBox is installed
|
||||||
|
where dosbox >nul 2>&1
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo ERROR: DOSBox not found in PATH
|
||||||
|
echo.
|
||||||
|
echo Please install DOSBox from: https://www.dosbox.com/
|
||||||
|
echo Or specify the full path to dosbox.exe below
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Check if config file exists
|
||||||
|
if not exist "dosbox-cordle.conf" (
|
||||||
|
echo ERROR: dosbox-cordle.conf not found
|
||||||
|
echo Please ensure the config file is in the current directory
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Launching DOSBox...
|
||||||
|
echo.
|
||||||
|
dosbox -conf dosbox-cordle.conf
|
||||||
|
|
||||||
|
pause
|
||||||
124
CordleDosMakefile.mk
Normal file
124
CordleDosMakefile.mk
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
# Makefile for Cordle - Cross-platform C90 Wordle Game
|
||||||
|
# Supports Unix/Linux/macOS and DOS (DJGPP)
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# Unix/Linux/macOS: make
|
||||||
|
# DOS (DJGPP): make
|
||||||
|
# Clean: make clean
|
||||||
|
|
||||||
|
# Compiler
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
# Compiler flags - strict C90 compliance
|
||||||
|
CFLAGS = -std=c90 -Wall -Wextra -pedantic -O2
|
||||||
|
|
||||||
|
# Source files
|
||||||
|
SRC = cordle.c
|
||||||
|
OBJ = cordle.o
|
||||||
|
|
||||||
|
# Platform detection and configuration
|
||||||
|
# Check for DOS/Windows environment
|
||||||
|
ifdef COMSPEC
|
||||||
|
# DOS/Windows detected
|
||||||
|
PLATFORM = DOS
|
||||||
|
TARGET = cordle.exe
|
||||||
|
CURSES_LIB = -lpdcurses
|
||||||
|
RM = del /Q
|
||||||
|
RMDIR = rmdir /S /Q
|
||||||
|
PATHSEP = \\
|
||||||
|
# DOS-specific flags
|
||||||
|
CFLAGS += -DMSDOS
|
||||||
|
else
|
||||||
|
ifdef ComSpec
|
||||||
|
# Alternative Windows detection
|
||||||
|
PLATFORM = DOS
|
||||||
|
TARGET = cordle.exe
|
||||||
|
CURSES_LIB = -lpdcurses
|
||||||
|
RM = del /Q
|
||||||
|
RMDIR = rmdir /S /Q
|
||||||
|
PATHSEP = \\
|
||||||
|
CFLAGS += -DMSDOS
|
||||||
|
else
|
||||||
|
# Unix/Linux/macOS
|
||||||
|
PLATFORM = UNIX
|
||||||
|
TARGET = cordle
|
||||||
|
CURSES_LIB = -lncurses
|
||||||
|
RM = rm -f
|
||||||
|
RMDIR = rm -rf
|
||||||
|
PATHSEP = /
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Additional libraries
|
||||||
|
LIBS = $(CURSES_LIB)
|
||||||
|
|
||||||
|
# Phony targets
|
||||||
|
.PHONY: all clean help info
|
||||||
|
|
||||||
|
# Default target
|
||||||
|
all: info $(TARGET)
|
||||||
|
|
||||||
|
# Display build information
|
||||||
|
info:
|
||||||
|
@echo ============================================
|
||||||
|
@echo Building Cordle for $(PLATFORM)
|
||||||
|
@echo Compiler: $(CC)
|
||||||
|
@echo Flags: $(CFLAGS)
|
||||||
|
@echo Libraries: $(LIBS)
|
||||||
|
@echo ============================================
|
||||||
|
@echo
|
||||||
|
|
||||||
|
# Build target
|
||||||
|
$(TARGET): $(SRC)
|
||||||
|
$(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LIBS)
|
||||||
|
@echo
|
||||||
|
@echo ============================================
|
||||||
|
@echo Build complete: $(TARGET)
|
||||||
|
@echo ============================================
|
||||||
|
@echo
|
||||||
|
@echo To run: ./$(TARGET) --help
|
||||||
|
@echo
|
||||||
|
|
||||||
|
# Object file (alternative build method)
|
||||||
|
$(OBJ): $(SRC)
|
||||||
|
$(CC) $(CFLAGS) -c $(SRC)
|
||||||
|
|
||||||
|
# Clean build artifacts
|
||||||
|
clean:
|
||||||
|
@echo Cleaning build artifacts...
|
||||||
|
$(RM) $(TARGET) $(OBJ)
|
||||||
|
@echo Clean complete.
|
||||||
|
|
||||||
|
# Help target
|
||||||
|
help:
|
||||||
|
@echo Cordle Makefile - Build Instructions
|
||||||
|
@echo =====================================
|
||||||
|
@echo
|
||||||
|
@echo Targets:
|
||||||
|
@echo make - Build the game
|
||||||
|
@echo make clean - Remove build artifacts
|
||||||
|
@echo make help - Show this help message
|
||||||
|
@echo make info - Show build configuration
|
||||||
|
@echo
|
||||||
|
@echo Platform Detection:
|
||||||
|
@echo Current: $(PLATFORM)
|
||||||
|
@echo
|
||||||
|
@echo DOS/DJGPP Requirements:
|
||||||
|
@echo - DJGPP compiler installed
|
||||||
|
@echo - PDCurses library installed
|
||||||
|
@echo - Make utility available
|
||||||
|
@echo
|
||||||
|
@echo Unix/Linux/macOS Requirements:
|
||||||
|
@echo - GCC compiler
|
||||||
|
@echo - ncurses library
|
||||||
|
@echo - Make utility
|
||||||
|
@echo
|
||||||
|
@echo Game Options:
|
||||||
|
@echo ./$(TARGET) --easy Easy difficulty
|
||||||
|
@echo ./$(TARGET) --medium Medium difficulty
|
||||||
|
@echo ./$(TARGET) --hard Hard difficulty
|
||||||
|
@echo ./$(TARGET) --techy Technical words
|
||||||
|
@echo ./$(TARGET) --literary Literary words
|
||||||
|
@echo ./$(TARGET) --cultural Cultural words
|
||||||
|
@echo ./$(TARGET) --full Full dictionary
|
||||||
|
@echo ./$(TARGET) --help Show game help
|
||||||
12
DosBoxCordleSetupGuide.md
Normal file
12
DosBoxCordleSetupGuide.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# DOSBox Setup for Cordle Development
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### 1. Install DOSBox
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
- Download from: https://www.dosbox.com/download.php?main=1
|
||||||
|
- Install using the installer
|
||||||
|
- Or use Chocolatey: `choco install dosbox`
|
||||||
|
|
||||||
|
**macOS:**
|
||||||
30
DosboxCordleLauncher.sh
Normal file
30
DosboxCordleLauncher.sh
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# DOSBox Launcher for Cordle
|
||||||
|
# Automatically starts DOSBox with correct configuration
|
||||||
|
|
||||||
|
echo "================================================"
|
||||||
|
echo "Starting DOSBox for Cordle Development"
|
||||||
|
echo "================================================"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Check if DOSBox is installed
|
||||||
|
if ! command -v dosbox &> /dev/null; then
|
||||||
|
echo "ERROR: DOSBox not found"
|
||||||
|
echo
|
||||||
|
echo "Install DOSBox:"
|
||||||
|
echo " macOS: brew install dosbox"
|
||||||
|
echo " Linux: sudo apt-get install dosbox"
|
||||||
|
echo " or sudo yum install dosbox"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if config file exists
|
||||||
|
if [ ! -f "dosbox-cordle.conf" ]; then
|
||||||
|
echo "ERROR: dosbox-cordle.conf not found"
|
||||||
|
echo "Please ensure the config file is in the current directory"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Launching DOSBox..."
|
||||||
|
echo
|
||||||
|
dosbox -conf dosbox-cordle.conf
|
||||||
612
cordle.c
Normal file
612
cordle.c
Normal file
@ -0,0 +1,612 @@
|
|||||||
|
/* pyrdle.c - Pure C90 implementation of the Wordle-like game */
|
||||||
|
/* Compile with: gcc -std=c90 -o pyrdle pyrdle.c -lncurses */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <curses.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#define MAX_WORDS 10000
|
||||||
|
#define WORD_LENGTH 5
|
||||||
|
#define MAX_GUESSES 6
|
||||||
|
#define MAX_FILENAME 256
|
||||||
|
#define MAX_MESSAGE 256
|
||||||
|
|
||||||
|
/* Color pair constants */
|
||||||
|
#define COLOR_DEFAULT 1
|
||||||
|
#define COLOR_CORRECT 2 /* Green - correct position */
|
||||||
|
#define COLOR_PRESENT 3 /* Yellow - wrong position */
|
||||||
|
#define COLOR_ABSENT 4 /* Red - not in word */
|
||||||
|
#define COLOR_WWHITE 7 /* White text */
|
||||||
|
#define COLOR_UNUSED 6 /* Gray - unused letters */
|
||||||
|
|
||||||
|
/* Letter status constants */
|
||||||
|
#define STATUS_UNUSED 0
|
||||||
|
#define STATUS_ABSENT 1
|
||||||
|
#define STATUS_PRESENT 2
|
||||||
|
#define STATUS_CORRECT 3
|
||||||
|
|
||||||
|
/* Keyboard layout */
|
||||||
|
static const char* keyboard_rows[3] = {
|
||||||
|
"QWERTYUIOP",
|
||||||
|
"ASDFGHJKL",
|
||||||
|
"ZXCVBNM"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Game state structure */
|
||||||
|
typedef struct {
|
||||||
|
char words[MAX_WORDS][WORD_LENGTH + 1];
|
||||||
|
int word_count;
|
||||||
|
char target_word[WORD_LENGTH + 1];
|
||||||
|
char guesses[MAX_GUESSES][WORD_LENGTH + 1];
|
||||||
|
int guess_colors[MAX_GUESSES][WORD_LENGTH];
|
||||||
|
int guess_count;
|
||||||
|
char current_guess[WORD_LENGTH + 1];
|
||||||
|
int current_guess_length;
|
||||||
|
int game_over;
|
||||||
|
int won;
|
||||||
|
int letter_status[26]; /* A-Z status */
|
||||||
|
} GameState;
|
||||||
|
|
||||||
|
/* Function declarations */
|
||||||
|
int load_words(GameState* game, const char* filename);
|
||||||
|
int is_valid_word(GameState* game, const char* word);
|
||||||
|
void check_guess(GameState* game, const char* guess, int* colors);
|
||||||
|
int make_guess(GameState* game, const char* guess);
|
||||||
|
void draw_title(WINDOW* win, int y, const char* difficulty);
|
||||||
|
void draw_board(WINDOW* win, GameState* game, int y);
|
||||||
|
void draw_keyboard(WINDOW* win, GameState* game, int y);
|
||||||
|
void draw_message(WINDOW* win, const char* message, int y, int color_pair);
|
||||||
|
void draw_instructions(WINDOW* win, int y);
|
||||||
|
void parse_arguments(int argc, char* argv[], char* filename, char* difficulty);
|
||||||
|
void init_game(GameState* game);
|
||||||
|
void to_upper(char* str);
|
||||||
|
int main_game_loop(int argc, char* argv[]);
|
||||||
|
|
||||||
|
/* Initialize game state */
|
||||||
|
void init_game(GameState* game) {
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
game->word_count = 0;
|
||||||
|
game->target_word[0] = '\0';
|
||||||
|
game->guess_count = 0;
|
||||||
|
game->current_guess[0] = '\0';
|
||||||
|
game->current_guess_length = 0;
|
||||||
|
game->game_over = 0;
|
||||||
|
game->won = 0;
|
||||||
|
|
||||||
|
/* Initialize letter status to unused */
|
||||||
|
for (i = 0; i < 26; i++) {
|
||||||
|
game->letter_status[i] = STATUS_UNUSED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear guesses */
|
||||||
|
for (i = 0; i < MAX_GUESSES; i++) {
|
||||||
|
game->guesses[i][0] = '\0';
|
||||||
|
for (j = 0; j < WORD_LENGTH; j++) {
|
||||||
|
game->guess_colors[i][j] = COLOR_DEFAULT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert string to uppercase */
|
||||||
|
void to_upper(char* str) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; str[i]; i++) {
|
||||||
|
str[i] = toupper(str[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Load words from file */
|
||||||
|
int load_words(GameState* game, const char* filename) {
|
||||||
|
FILE* file;
|
||||||
|
char filepath[MAX_FILENAME];
|
||||||
|
char line[32];
|
||||||
|
char word[WORD_LENGTH + 1];
|
||||||
|
int len;
|
||||||
|
|
||||||
|
/* Construct file path */
|
||||||
|
sprintf(filepath, "wordlists/%s", filename);
|
||||||
|
|
||||||
|
file = fopen(filepath, "r");
|
||||||
|
if (!file) {
|
||||||
|
/* Try without wordlists/ prefix */
|
||||||
|
file = fopen(filename, "r");
|
||||||
|
if (!file) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
game->word_count = 0;
|
||||||
|
while (fgets(line, sizeof(line), file) && game->word_count < MAX_WORDS) {
|
||||||
|
/* Remove newline and whitespace */
|
||||||
|
len = strlen(line);
|
||||||
|
while (len > 0 && (line[len-1] == '\n' || line[len-1] == '\r' || line[len-1] == ' ')) {
|
||||||
|
line[--len] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len == WORD_LENGTH) {
|
||||||
|
strcpy(word, line);
|
||||||
|
to_upper(word);
|
||||||
|
strcpy(game->words[game->word_count], word);
|
||||||
|
game->word_count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
if (game->word_count == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select random target word */
|
||||||
|
srand((unsigned int)time(NULL));
|
||||||
|
strcpy(game->target_word, game->words[rand() % game->word_count]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if word exists in word list */
|
||||||
|
int is_valid_word(GameState* game, const char* word) {
|
||||||
|
int i;
|
||||||
|
char upper_word[WORD_LENGTH + 1];
|
||||||
|
|
||||||
|
strcpy(upper_word, word);
|
||||||
|
to_upper(upper_word);
|
||||||
|
|
||||||
|
for (i = 0; i < game->word_count; i++) {
|
||||||
|
if (strcmp(game->words[i], upper_word) == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check guess against target word */
|
||||||
|
void check_guess(GameState* game, const char* guess, int* colors) {
|
||||||
|
char target_copy[WORD_LENGTH + 1];
|
||||||
|
char guess_copy[WORD_LENGTH + 1];
|
||||||
|
int i, j;
|
||||||
|
int target_used[WORD_LENGTH] = {0};
|
||||||
|
|
||||||
|
strcpy(target_copy, game->target_word);
|
||||||
|
strcpy(guess_copy, guess);
|
||||||
|
to_upper(guess_copy);
|
||||||
|
|
||||||
|
/* Initialize all as absent */
|
||||||
|
for (i = 0; i < WORD_LENGTH; i++) {
|
||||||
|
colors[i] = COLOR_ABSENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* First pass: mark correct positions */
|
||||||
|
for (i = 0; i < WORD_LENGTH; i++) {
|
||||||
|
if (guess_copy[i] == target_copy[i]) {
|
||||||
|
colors[i] = COLOR_CORRECT;
|
||||||
|
target_used[i] = 1;
|
||||||
|
game->letter_status[guess_copy[i] - 'A'] = STATUS_CORRECT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Second pass: mark present but wrong position */
|
||||||
|
for (i = 0; i < WORD_LENGTH; i++) {
|
||||||
|
if (colors[i] == COLOR_ABSENT) {
|
||||||
|
for (j = 0; j < WORD_LENGTH; j++) {
|
||||||
|
if (!target_used[j] && guess_copy[i] == target_copy[j]) {
|
||||||
|
colors[i] = COLOR_PRESENT;
|
||||||
|
target_used[j] = 1;
|
||||||
|
if (game->letter_status[guess_copy[i] - 'A'] != STATUS_CORRECT) {
|
||||||
|
game->letter_status[guess_copy[i] - 'A'] = STATUS_PRESENT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* If still absent, mark letter as not in word */
|
||||||
|
if (colors[i] == COLOR_ABSENT) {
|
||||||
|
if (game->letter_status[guess_copy[i] - 'A'] == STATUS_UNUSED) {
|
||||||
|
game->letter_status[guess_copy[i] - 'A'] = STATUS_ABSENT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process a guess */
|
||||||
|
int make_guess(GameState* game, const char* guess) {
|
||||||
|
/* int i; */
|
||||||
|
char upper_guess[WORD_LENGTH + 1];
|
||||||
|
|
||||||
|
if (strlen(guess) != WORD_LENGTH) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_valid_word(game, guess)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(upper_guess, guess);
|
||||||
|
to_upper(upper_guess);
|
||||||
|
|
||||||
|
strcpy(game->guesses[game->guess_count], upper_guess);
|
||||||
|
check_guess(game, guess, game->guess_colors[game->guess_count]);
|
||||||
|
game->guess_count++;
|
||||||
|
|
||||||
|
if (strcmp(upper_guess, game->target_word) == 0) {
|
||||||
|
game->game_over = 1;
|
||||||
|
game->won = 1;
|
||||||
|
} else if (game->guess_count >= MAX_GUESSES) {
|
||||||
|
game->game_over = 1;
|
||||||
|
game->won = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw game title */
|
||||||
|
void draw_title(WINDOW* win, int y, const char* difficulty) {
|
||||||
|
char title[256];
|
||||||
|
int height, width, x;
|
||||||
|
|
||||||
|
sprintf(title, "CORDLE - The C90 Wordle Game [%s]", difficulty);
|
||||||
|
|
||||||
|
getmaxyx(win, height, width);
|
||||||
|
x = (width - strlen(title)) / 2;
|
||||||
|
|
||||||
|
wattron(win, A_BOLD);
|
||||||
|
mvwaddstr(win, y, x, title);
|
||||||
|
wattroff(win, A_BOLD);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw the game board */
|
||||||
|
void draw_board(WINDOW* win, GameState* game, int y) {
|
||||||
|
int height, width, board_x;
|
||||||
|
int row, col, x_pos, y_pos;
|
||||||
|
char cell[4];
|
||||||
|
|
||||||
|
getmaxyx(win, height, width);
|
||||||
|
board_x = (width - (WORD_LENGTH * 4 - 1)) / 2;
|
||||||
|
|
||||||
|
for (row = 0; row < MAX_GUESSES; row++) {
|
||||||
|
y_pos = y + row * 2;
|
||||||
|
|
||||||
|
if (row < game->guess_count) {
|
||||||
|
/* Draw completed guess */
|
||||||
|
for (col = 0; col < WORD_LENGTH; col++) {
|
||||||
|
x_pos = board_x + col * 4;
|
||||||
|
sprintf(cell, "[%c]", game->guesses[row][col]);
|
||||||
|
|
||||||
|
wattron(win, COLOR_PAIR(game->guess_colors[row][col]));
|
||||||
|
mvwaddstr(win, y_pos, x_pos, cell);
|
||||||
|
wattroff(win, COLOR_PAIR(game->guess_colors[row][col]));
|
||||||
|
}
|
||||||
|
} else if (row == game->guess_count && !game->game_over) {
|
||||||
|
/* Draw current guess */
|
||||||
|
for (col = 0; col < WORD_LENGTH; col++) {
|
||||||
|
x_pos = board_x + col * 4;
|
||||||
|
if (col < game->current_guess_length) {
|
||||||
|
sprintf(cell, "[%c]", game->current_guess[col]);
|
||||||
|
} else {
|
||||||
|
strcpy(cell, "[ ]");
|
||||||
|
}
|
||||||
|
|
||||||
|
wattron(win, COLOR_PAIR(COLOR_WWHITE));
|
||||||
|
mvwaddstr(win, y_pos, x_pos, cell);
|
||||||
|
wattroff(win, COLOR_PAIR(COLOR_WWHITE));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Draw empty slots */
|
||||||
|
for (col = 0; col < WORD_LENGTH; col++) {
|
||||||
|
x_pos = board_x + col * 4;
|
||||||
|
mvwaddstr(win, y_pos, x_pos, "[ ]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw visual keyboard */
|
||||||
|
void draw_keyboard(WINDOW* win, GameState* game, int y) {
|
||||||
|
int height, width;
|
||||||
|
int row_idx, x, y_pos, i;
|
||||||
|
const char* row;
|
||||||
|
char letter;
|
||||||
|
int status, color;
|
||||||
|
|
||||||
|
getmaxyx(win, height, width);
|
||||||
|
|
||||||
|
for (row_idx = 0; row_idx < 3; row_idx++) {
|
||||||
|
row = keyboard_rows[row_idx];
|
||||||
|
x = (width - strlen(row) * 2 + 1) / 2;
|
||||||
|
y_pos = y + row_idx;
|
||||||
|
|
||||||
|
/* Add indentation for keyboard layout */
|
||||||
|
if (row_idx == 1) x += 1;
|
||||||
|
else if (row_idx == 2) x += 3;
|
||||||
|
|
||||||
|
for (i = 0; row[i]; i++) {
|
||||||
|
letter = row[i];
|
||||||
|
status = game->letter_status[letter - 'A'];
|
||||||
|
|
||||||
|
switch (status) {
|
||||||
|
case STATUS_CORRECT: color = COLOR_CORRECT; break;
|
||||||
|
case STATUS_PRESENT: color = COLOR_PRESENT; break;
|
||||||
|
case STATUS_ABSENT: color = COLOR_ABSENT; break;
|
||||||
|
default: color = COLOR_UNUSED; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (color == COLOR_UNUSED) {
|
||||||
|
wattron(win, A_DIM);
|
||||||
|
mvwaddch(win, y_pos, x, letter);
|
||||||
|
wattroff(win, A_DIM);
|
||||||
|
} else {
|
||||||
|
wattron(win, COLOR_PAIR(color));
|
||||||
|
mvwaddch(win, y_pos, x, letter);
|
||||||
|
wattroff(win, COLOR_PAIR(color));
|
||||||
|
}
|
||||||
|
x += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw centered message */
|
||||||
|
void draw_message(WINDOW* win, const char* message, int y, int color_pair) {
|
||||||
|
int height, width, x;
|
||||||
|
|
||||||
|
getmaxyx(win, height, width);
|
||||||
|
x = (width - strlen(message)) / 2;
|
||||||
|
|
||||||
|
wattron(win, COLOR_PAIR(color_pair));
|
||||||
|
mvwaddstr(win, y, x, message);
|
||||||
|
wattroff(win, COLOR_PAIR(color_pair));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw game instructions */
|
||||||
|
void draw_instructions(WINDOW* win, int y) {
|
||||||
|
const char* instructions[] = {
|
||||||
|
"Guess the 5-letter word in 6 tries!",
|
||||||
|
"",
|
||||||
|
"Colors: GREEN=Correct, YELLOW=Wrong position, RED=Not in word",
|
||||||
|
"",
|
||||||
|
"Type letters: A-Z",
|
||||||
|
"Enter: Submit guess",
|
||||||
|
"Backspace: Delete letter",
|
||||||
|
"Ctrl+C or ESC: Quit game"
|
||||||
|
};
|
||||||
|
int num_instructions = 8;
|
||||||
|
int height, width, x, i;
|
||||||
|
|
||||||
|
getmaxyx(win, height, width);
|
||||||
|
|
||||||
|
for (i = 0; i < num_instructions; i++) {
|
||||||
|
if (y + i < height - 1) {
|
||||||
|
x = (width - strlen(instructions[i])) / 2;
|
||||||
|
mvwaddstr(win, y + i, x, instructions[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse command line arguments */
|
||||||
|
void parse_arguments(const int argc, char* argv[], char* filename, char* difficulty) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Default values */
|
||||||
|
strcpy(filename, "pyrdle_words_easy.txt");
|
||||||
|
strcpy(difficulty, "EASY");
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
if (strcmp(argv[i], "--easy") == 0) {
|
||||||
|
strcpy(filename, "pyrdle_words_easy.txt");
|
||||||
|
strcpy(difficulty, "EASY");
|
||||||
|
} else if (strcmp(argv[i], "--medium") == 0) {
|
||||||
|
strcpy(filename, "pyrdle_words_medium.txt");
|
||||||
|
strcpy(difficulty, "MEDIUM");
|
||||||
|
} else if (strcmp(argv[i], "--hard") == 0) {
|
||||||
|
strcpy(filename, "pyrdle_words_hard.txt");
|
||||||
|
strcpy(difficulty, "HARD");
|
||||||
|
} else if (strcmp(argv[i], "--techy") == 0) {
|
||||||
|
strcpy(filename, "pyrdle_words_techy.txt");
|
||||||
|
strcpy(difficulty, "TECHNICAL");
|
||||||
|
} else if (strcmp(argv[i], "--literary") == 0) {
|
||||||
|
strcpy(filename, "pyrdle_words_literary.txt");
|
||||||
|
strcpy(difficulty, "LITERARY");
|
||||||
|
} else if (strcmp(argv[i], "--cultural") == 0) {
|
||||||
|
strcpy(filename, "pyrdle_words_cultural.txt");
|
||||||
|
strcpy(difficulty, "CULTURAL");
|
||||||
|
} else if (strcmp(argv[i], "--full") == 0) {
|
||||||
|
strcpy(filename, "pyrdle_words_full.txt");
|
||||||
|
strcpy(difficulty, "FULL");
|
||||||
|
} else if (strcmp(argv[i], "--wordlist") == 0 && i + 1 < argc) {
|
||||||
|
strcpy(filename, argv[i + 1]);
|
||||||
|
strcpy(difficulty, "CUSTOM");
|
||||||
|
i++; /* Skip next argument */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main game loop */
|
||||||
|
int main_game_loop(int argc, char* argv[]) {
|
||||||
|
WINDOW* stdscr;
|
||||||
|
GameState game;
|
||||||
|
char filename[MAX_FILENAME];
|
||||||
|
char difficulty[32];
|
||||||
|
char message[MAX_MESSAGE] = "";
|
||||||
|
int message_color = COLOR_DEFAULT;
|
||||||
|
int height, width, y_pos;
|
||||||
|
int key;
|
||||||
|
char temp_guess[WORD_LENGTH + 1];
|
||||||
|
char win_message[MAX_MESSAGE];
|
||||||
|
|
||||||
|
/* Get command line arguments */
|
||||||
|
parse_arguments(argc, argv, filename, difficulty);
|
||||||
|
|
||||||
|
/* Initialize ncurses */
|
||||||
|
stdscr = initscr();
|
||||||
|
curs_set(0); /* Hide cursor */
|
||||||
|
clear();
|
||||||
|
|
||||||
|
/* Initialize colors */
|
||||||
|
start_color();
|
||||||
|
init_pair(COLOR_DEFAULT, COLOR_WWHITE, COLOR_BLACK);
|
||||||
|
init_pair(COLOR_CORRECT, COLOR_BLACK, COLOR_GREEN);
|
||||||
|
init_pair(COLOR_PRESENT, COLOR_BLACK, COLOR_YELLOW);
|
||||||
|
init_pair(COLOR_ABSENT, COLOR_WWHITE, COLOR_RED);
|
||||||
|
init_pair(COLOR_WWHITE, COLOR_WWHITE, COLOR_BLACK);
|
||||||
|
init_pair(COLOR_UNUSED, COLOR_WWHITE, COLOR_BLACK);
|
||||||
|
|
||||||
|
/* Initialize game */
|
||||||
|
init_game(&game);
|
||||||
|
|
||||||
|
if (!load_words(&game, filename)) {
|
||||||
|
/* Try fallback */
|
||||||
|
if (strcmp(filename, "pyrdle_words.txt") != 0 &&
|
||||||
|
load_words(&game, "pyrdle_words.txt")) {
|
||||||
|
strcpy(difficulty, "DEFAULT");
|
||||||
|
} else {
|
||||||
|
mvaddstr(0, 0, "Error: Could not load word list");
|
||||||
|
mvaddstr(1, 0, "Press any key to exit...");
|
||||||
|
getch();
|
||||||
|
endwin();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main game loop */
|
||||||
|
while (1) {
|
||||||
|
clear();
|
||||||
|
getmaxyx(stdscr, height, width);
|
||||||
|
|
||||||
|
y_pos = 1;
|
||||||
|
|
||||||
|
/* Draw components */
|
||||||
|
draw_title(stdscr, y_pos, difficulty);
|
||||||
|
y_pos += 2;
|
||||||
|
|
||||||
|
draw_board(stdscr, &game, y_pos);
|
||||||
|
y_pos += MAX_GUESSES * 2 + 1;
|
||||||
|
|
||||||
|
draw_keyboard(stdscr, &game, y_pos);
|
||||||
|
y_pos += 4;
|
||||||
|
|
||||||
|
/* Draw message if exists */
|
||||||
|
if (strlen(message) > 0) {
|
||||||
|
draw_message(stdscr, message, y_pos, message_color);
|
||||||
|
y_pos += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw instructions */
|
||||||
|
if (y_pos + 6 < height) {
|
||||||
|
draw_instructions(stdscr, y_pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle game over */
|
||||||
|
if (game.game_over) {
|
||||||
|
y_pos = (height > 20) ? height - 3 : y_pos;
|
||||||
|
|
||||||
|
if (game.won) {
|
||||||
|
sprintf(win_message, "Congratulations! You won in %d guesses!",
|
||||||
|
game.guess_count);
|
||||||
|
draw_message(stdscr, win_message, y_pos, COLOR_CORRECT);
|
||||||
|
} else {
|
||||||
|
sprintf(win_message, "Game Over! The word was: %s",
|
||||||
|
game.target_word);
|
||||||
|
draw_message(stdscr, win_message, y_pos, COLOR_ABSENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_message(stdscr, "Press 'N' for new game or 'Q' to quit",
|
||||||
|
y_pos + 1, COLOR_DEFAULT);
|
||||||
|
|
||||||
|
refresh();
|
||||||
|
key = getch();
|
||||||
|
|
||||||
|
if (key == 'n' || key == 'N') {
|
||||||
|
/* Start new game */
|
||||||
|
init_game(&game);
|
||||||
|
load_words(&game, filename);
|
||||||
|
strcpy(message, "");
|
||||||
|
continue;
|
||||||
|
} else if (key == 'q' || key == 'Q' || key == 27) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
refresh();
|
||||||
|
|
||||||
|
/* Get input */
|
||||||
|
key = getch();
|
||||||
|
|
||||||
|
/* Handle input */
|
||||||
|
if (key == 27) { /* ESC */
|
||||||
|
break;
|
||||||
|
} else if (key == '\n' || key == '\r' || key == KEY_ENTER) {
|
||||||
|
if (game.current_guess_length == WORD_LENGTH) {
|
||||||
|
strcpy(temp_guess, game.current_guess);
|
||||||
|
if (make_guess(&game, temp_guess)) {
|
||||||
|
game.current_guess[0] = '\0';
|
||||||
|
game.current_guess_length = 0;
|
||||||
|
strcpy(message, "");
|
||||||
|
} else {
|
||||||
|
strcpy(message, "Not in word list!");
|
||||||
|
message_color = COLOR_ABSENT;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sprintf(message, "Word must be %d letters!", WORD_LENGTH);
|
||||||
|
message_color = COLOR_ABSENT;
|
||||||
|
}
|
||||||
|
} else if (key == KEY_BACKSPACE || key == 127 || key == '\b') {
|
||||||
|
if (game.current_guess_length > 0) {
|
||||||
|
game.current_guess_length--;
|
||||||
|
game.current_guess[game.current_guess_length] = '\0';
|
||||||
|
strcpy(message, "");
|
||||||
|
}
|
||||||
|
} else if ((key >= 'a' && key <= 'z') || (key >= 'A' && key <= 'Z')) {
|
||||||
|
if (game.current_guess_length < WORD_LENGTH) {
|
||||||
|
game.current_guess[game.current_guess_length] = toupper(key);
|
||||||
|
game.current_guess_length++;
|
||||||
|
game.current_guess[game.current_guess_length] = '\0';
|
||||||
|
strcpy(message, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
endwin();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Global variables for argc/argv (C90 limitation) */
|
||||||
|
static int __argc;
|
||||||
|
static char** __argv;
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Store argc/argv globally for use in game loop */
|
||||||
|
__argc = argc;
|
||||||
|
__argv = argv;
|
||||||
|
|
||||||
|
/* Handle help */
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
|
||||||
|
printf("pyrdle - C90 Wordle Game\n\n");
|
||||||
|
printf("Usage: %s [OPTIONS]\n\n", argv[0]);
|
||||||
|
printf("Difficulty Levels:\n");
|
||||||
|
printf(" --easy Common everyday words (default)\n");
|
||||||
|
printf(" --medium Standard vocabulary\n");
|
||||||
|
printf(" --hard Challenging words\n\n");
|
||||||
|
printf("Word Categories:\n");
|
||||||
|
printf(" --techy Technical and scientific terms\n");
|
||||||
|
printf(" --literary Literary and archaic terms\n");
|
||||||
|
printf(" --cultural Cultural and international terms\n");
|
||||||
|
printf(" --full Complete dictionary\n\n");
|
||||||
|
printf("Custom:\n");
|
||||||
|
printf(" --wordlist FILE Use custom word list\n\n");
|
||||||
|
printf("Examples:\n");
|
||||||
|
printf(" %s --easy\n", argv[0]);
|
||||||
|
printf(" %s --techy\n", argv[0]);
|
||||||
|
printf(" %s --wordlist mywords.txt\n", argv[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return main_game_loop(argc, argv);
|
||||||
|
}
|
||||||
129
cordle_dos_REAMDE.txt
Normal file
129
cordle_dos_REAMDE.txt
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
================================================================================
|
||||||
|
CORDLE - DOS BUILD INSTRUCTIONS
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Building Cordle on DOS requires DJGPP (DJ Delorie's GCC Port) and PDCurses.
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
1. INSTALL DJGPP
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Download and install DJGPP from: http://www.delorie.com/djgpp/
|
||||||
|
|
||||||
|
Required packages:
|
||||||
|
- djdev205.zip (DJGPP development kit)
|
||||||
|
- gcc930b.zip (GNU C Compiler)
|
||||||
|
- bnu234b.zip (GNU Binutils)
|
||||||
|
- mak43b.zip (GNU Make)
|
||||||
|
- fil41b.zip (GNU File utilities)
|
||||||
|
|
||||||
|
Unzip all packages to C:\DJGPP
|
||||||
|
|
||||||
|
Set environment variables in AUTOEXEC.BAT:
|
||||||
|
SET DJGPP=C:\DJGPP\DJGPP.ENV
|
||||||
|
SET PATH=C:\DJGPP\BIN;%PATH%
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
2. INSTALL PDCURSES
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Download PDCurses from: https://pdcurses.org/
|
||||||
|
|
||||||
|
Build PDCurses for DOS:
|
||||||
|
cd pdcurses\dos
|
||||||
|
make -f Makefile.dj
|
||||||
|
|
||||||
|
Copy files:
|
||||||
|
copy pdcurses.a C:\DJGPP\LIB\libpdcurses.a
|
||||||
|
copy curses.h C:\DJGPP\INCLUDE\
|
||||||
|
copy panel.h C:\DJGPP\INCLUDE\
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
3. BUILD CORDLE
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Copy the Cordle source files to your DOS system:
|
||||||
|
- cordle.c
|
||||||
|
- Makefile
|
||||||
|
- wordlists\ directory (with all word list files)
|
||||||
|
|
||||||
|
Build the game:
|
||||||
|
cd \CORDLE
|
||||||
|
make
|
||||||
|
|
||||||
|
This will create CORDLE.EXE
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
4. RUN THE GAME
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Run with default settings:
|
||||||
|
cordle
|
||||||
|
|
||||||
|
Run with specific difficulty:
|
||||||
|
cordle --easy
|
||||||
|
cordle --medium
|
||||||
|
cordle --hard
|
||||||
|
|
||||||
|
Show help:
|
||||||
|
cordle --help
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
5. MEMORY REQUIREMENTS
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Minimum:
|
||||||
|
- 2 MB RAM
|
||||||
|
- VGA compatible display (for colors)
|
||||||
|
- DOS 5.0 or higher
|
||||||
|
|
||||||
|
Recommended:
|
||||||
|
- 4 MB RAM
|
||||||
|
- 80x25 text mode or larger
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
6. TROUBLESHOOTING
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Error: "Out of memory"
|
||||||
|
- Increase DOS memory limit
|
||||||
|
- Try using CWSDPMI.EXE memory extender
|
||||||
|
|
||||||
|
Error: "libpdcurses.a not found"
|
||||||
|
- Ensure PDCurses is properly installed
|
||||||
|
- Check library path: C:\DJGPP\LIB\
|
||||||
|
|
||||||
|
Error: "curses.h not found"
|
||||||
|
- Copy curses.h to C:\DJGPP\INCLUDE\
|
||||||
|
|
||||||
|
Colors not working:
|
||||||
|
- Ensure display supports VGA colors
|
||||||
|
- Try different terminal emulator
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
7. TESTING
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Tested on:
|
||||||
|
- MS-DOS 6.22
|
||||||
|
- FreeDOS 1.3
|
||||||
|
- DOSBox (with DJGPP)
|
||||||
|
- DOSBox-X
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
8. FILE STRUCTURE
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Required files:
|
||||||
|
CORDLE.EXE Main executable
|
||||||
|
WORDLISTS\ Word list directory
|
||||||
|
PYRDLE_WORDS_EASY.TXT
|
||||||
|
PYRDLE_WORDS_MEDIUM.TXT
|
||||||
|
PYRDLE_WORDS_HARD.TXT
|
||||||
|
(... other word lists ...)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
For modern systems, use CMake build instead (see README.md)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
117
dosbox_config_cordle.ini
Normal file
117
dosbox_config_cordle.ini
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
# DOSBox Configuration File for Cordle
|
||||||
|
# =====================================
|
||||||
|
# This configuration is optimized for running and developing Cordle
|
||||||
|
#
|
||||||
|
# Usage: dosbox -conf dosbox-cordle.conf
|
||||||
|
|
||||||
|
[sdl]
|
||||||
|
# Display settings
|
||||||
|
fullscreen=false
|
||||||
|
fulldouble=false
|
||||||
|
fullresolution=original
|
||||||
|
windowresolution=original
|
||||||
|
output=opengl
|
||||||
|
autolock=true
|
||||||
|
|
||||||
|
[dosbox]
|
||||||
|
# DOSBox machine settings
|
||||||
|
machine=svga_s3
|
||||||
|
captures=capture
|
||||||
|
memsize=16
|
||||||
|
|
||||||
|
[render]
|
||||||
|
# Rendering and aspect ratio
|
||||||
|
frameskip=0
|
||||||
|
aspect=true
|
||||||
|
scaler=normal2x
|
||||||
|
|
||||||
|
[cpu]
|
||||||
|
# CPU settings - adjust if game runs too fast/slow
|
||||||
|
core=auto
|
||||||
|
cputype=auto
|
||||||
|
cycles=max
|
||||||
|
cycleup=10
|
||||||
|
cycledown=20
|
||||||
|
|
||||||
|
[mixer]
|
||||||
|
# Sound settings (not used by Cordle, but included for completeness)
|
||||||
|
nosound=false
|
||||||
|
rate=44100
|
||||||
|
blocksize=1024
|
||||||
|
prebuffer=25
|
||||||
|
|
||||||
|
[midi]
|
||||||
|
mpu401=intelligent
|
||||||
|
mididevice=default
|
||||||
|
midiconfig=
|
||||||
|
|
||||||
|
[sblaster]
|
||||||
|
sbtype=sb16
|
||||||
|
sbbase=220
|
||||||
|
irq=7
|
||||||
|
dma=1
|
||||||
|
hdma=5
|
||||||
|
sbmixer=true
|
||||||
|
oplmode=auto
|
||||||
|
oplemu=default
|
||||||
|
oplrate=44100
|
||||||
|
|
||||||
|
[gus]
|
||||||
|
gus=false
|
||||||
|
|
||||||
|
[speaker]
|
||||||
|
pcspeaker=true
|
||||||
|
pcrate=44100
|
||||||
|
tandy=auto
|
||||||
|
tandyrate=44100
|
||||||
|
disney=true
|
||||||
|
|
||||||
|
[joystick]
|
||||||
|
joysticktype=auto
|
||||||
|
|
||||||
|
[serial]
|
||||||
|
serial1=dummy
|
||||||
|
serial2=dummy
|
||||||
|
serial3=disabled
|
||||||
|
serial4=disabled
|
||||||
|
|
||||||
|
[dos]
|
||||||
|
# DOS settings
|
||||||
|
xms=true
|
||||||
|
ems=true
|
||||||
|
umb=true
|
||||||
|
keyboardlayout=auto
|
||||||
|
|
||||||
|
[ipx]
|
||||||
|
ipx=false
|
||||||
|
|
||||||
|
[autoexec]
|
||||||
|
# Auto-execute commands on DOSBox startup
|
||||||
|
@echo off
|
||||||
|
echo.
|
||||||
|
echo ===============================================
|
||||||
|
echo DOSBOX CONFIGURED FOR CORDLE DEVELOPMENT
|
||||||
|
echo ===============================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
# Mount the Cordle directory
|
||||||
|
# CHANGE THIS PATH TO YOUR ACTUAL CORDLE DIRECTORY
|
||||||
|
mount c: .
|
||||||
|
c:
|
||||||
|
|
||||||
|
# Set DJGPP environment if needed
|
||||||
|
# Uncomment and adjust paths if DJGPP is installed
|
||||||
|
# SET DJGPP=C:\DJGPP\DJGPP.ENV
|
||||||
|
# SET PATH=C:\DJGPP\BIN;%PATH%
|
||||||
|
|
||||||
|
echo Current directory mounted as C:
|
||||||
|
echo.
|
||||||
|
echo Available commands:
|
||||||
|
echo dir - List files
|
||||||
|
echo cd cordle - Change to cordle directory
|
||||||
|
echo make - Build the game
|
||||||
|
echo cordle --help - Show game help
|
||||||
|
echo cordle --easy - Play easy mode
|
||||||
|
echo exit - Exit DOSBox
|
||||||
|
echo.
|
||||||
|
echo ===============================================
|
||||||
86
dosbox_cordle_configuration.ini
Normal file
86
dosbox_cordle_configuration.ini
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# DOSBox-X Configuration for Cordle
|
||||||
|
# ==================================
|
||||||
|
# DOSBox-X provides better DOS compatibility and development features
|
||||||
|
# Download from: https://dosbox-x.com/
|
||||||
|
|
||||||
|
[sdl]
|
||||||
|
fullscreen=false
|
||||||
|
fulldouble=false
|
||||||
|
fullresolution=0x0
|
||||||
|
windowresolution=1024x768
|
||||||
|
output=opengl
|
||||||
|
autolock=true
|
||||||
|
sensitivity=100
|
||||||
|
waitonerror=true
|
||||||
|
priority=higher,normal
|
||||||
|
mapperfile=mapper-cordle.map
|
||||||
|
usescancodes=true
|
||||||
|
|
||||||
|
[dosbox]
|
||||||
|
language=
|
||||||
|
machine=svga_s3
|
||||||
|
captures=capture
|
||||||
|
memsize=32
|
||||||
|
startup_verbosity=high
|
||||||
|
|
||||||
|
[render]
|
||||||
|
frameskip=0
|
||||||
|
aspect=true
|
||||||
|
scaler=normal3x
|
||||||
|
glshader=default
|
||||||
|
|
||||||
|
[cpu]
|
||||||
|
core=auto
|
||||||
|
cputype=pentium_slow
|
||||||
|
cycles=max
|
||||||
|
cycleup=10
|
||||||
|
cycledown=20
|
||||||
|
|
||||||
|
[mixer]
|
||||||
|
nosound=false
|
||||||
|
rate=44100
|
||||||
|
blocksize=1024
|
||||||
|
prebuffer=25
|
||||||
|
|
||||||
|
[midi]
|
||||||
|
mpu401=intelligent
|
||||||
|
mididevice=default
|
||||||
|
|
||||||
|
[dos]
|
||||||
|
xms=true
|
||||||
|
ems=true
|
||||||
|
umb=true
|
||||||
|
ver=7.1
|
||||||
|
keyboardlayout=auto
|
||||||
|
|
||||||
|
[files]
|
||||||
|
nocachedir=false
|
||||||
|
|
||||||
|
[autoexec]
|
||||||
|
@echo off
|
||||||
|
cls
|
||||||
|
echo.
|
||||||
|
echo ===============================================
|
||||||
|
echo CORDLE - DOS DEVELOPMENT ENVIRONMENT
|
||||||
|
echo (DOSBox-X Enhanced)
|
||||||
|
echo ===============================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
# Mount current directory
|
||||||
|
mount c: .
|
||||||
|
c:
|
||||||
|
|
||||||
|
# Enhanced prompt
|
||||||
|
prompt $P$G
|
||||||
|
|
||||||
|
# Display useful info
|
||||||
|
echo DOSBox-X Version with enhanced DOS support
|
||||||
|
echo Memory: 32 MB configured
|
||||||
|
echo Display: SVGA S3 emulation
|
||||||
|
echo.
|
||||||
|
echo Quick Start:
|
||||||
|
echo make Build Cordle
|
||||||
|
echo cordle.exe Run the game
|
||||||
|
echo edit cordle.c Edit source (if edit is available)
|
||||||
|
echo.
|
||||||
|
echo ===============================================
|
||||||
2771
wordlists/pyrdle_words.txt
Normal file
2771
wordlists/pyrdle_words.txt
Normal file
File diff suppressed because it is too large
Load Diff
247
wordlists/pyrdle_words_cultural.txt
Normal file
247
wordlists/pyrdle_words_cultural.txt
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
ADOBE
|
||||||
|
ALOHA
|
||||||
|
ALTAR
|
||||||
|
AMIGO
|
||||||
|
AMISH
|
||||||
|
AORTA
|
||||||
|
ATOLL
|
||||||
|
BABEL
|
||||||
|
BAGEL
|
||||||
|
BAYOU
|
||||||
|
BIMBO
|
||||||
|
BINGO
|
||||||
|
BIOME
|
||||||
|
BISON
|
||||||
|
BLITZ
|
||||||
|
BONGO
|
||||||
|
BORAX
|
||||||
|
BRAVO
|
||||||
|
BREWS
|
||||||
|
BRIGS
|
||||||
|
BRINY
|
||||||
|
BUDGE
|
||||||
|
BUGLE
|
||||||
|
BULKS
|
||||||
|
BUNKS
|
||||||
|
BURRO
|
||||||
|
CACTI
|
||||||
|
CALMS
|
||||||
|
CALYX
|
||||||
|
CAMEL
|
||||||
|
CAMEO
|
||||||
|
CANAL
|
||||||
|
CANDY
|
||||||
|
CANOE
|
||||||
|
CANON
|
||||||
|
CANTO
|
||||||
|
CAPED
|
||||||
|
CAPER
|
||||||
|
CAPON
|
||||||
|
CARNY
|
||||||
|
CAROL
|
||||||
|
CARPS
|
||||||
|
CASTE
|
||||||
|
CAULK
|
||||||
|
CAVED
|
||||||
|
CAVER
|
||||||
|
CAVES
|
||||||
|
CAVIL
|
||||||
|
CEASE
|
||||||
|
CEDAR
|
||||||
|
CEDED
|
||||||
|
CELEB
|
||||||
|
CELLO
|
||||||
|
CENTS
|
||||||
|
CHAFE
|
||||||
|
CHAFF
|
||||||
|
CHAMP
|
||||||
|
CHANT
|
||||||
|
CHAOS
|
||||||
|
CHAPS
|
||||||
|
CHARD
|
||||||
|
CHARM
|
||||||
|
CHARS
|
||||||
|
CHARY
|
||||||
|
CHASM
|
||||||
|
CHATS
|
||||||
|
CHEAP
|
||||||
|
CHEAT
|
||||||
|
CHECK
|
||||||
|
CHEEK
|
||||||
|
CHEEP
|
||||||
|
CHEER
|
||||||
|
CHESS
|
||||||
|
CHEST
|
||||||
|
CHEWY
|
||||||
|
CHICK
|
||||||
|
CHIDE
|
||||||
|
CHIEF
|
||||||
|
CHILD
|
||||||
|
CHILE
|
||||||
|
CHILI
|
||||||
|
CHILL
|
||||||
|
CHIME
|
||||||
|
CHIMP
|
||||||
|
CHINA
|
||||||
|
CHINK
|
||||||
|
CHINO
|
||||||
|
CHIPS
|
||||||
|
CHIRP
|
||||||
|
CHIVE
|
||||||
|
CHOCK
|
||||||
|
CHOIR
|
||||||
|
CHOKE
|
||||||
|
CHOMP
|
||||||
|
CHOPS
|
||||||
|
CHORD
|
||||||
|
CHORE
|
||||||
|
CHOSE
|
||||||
|
CHOWS
|
||||||
|
CHUCK
|
||||||
|
CHUMP
|
||||||
|
CHUNK
|
||||||
|
CHURN
|
||||||
|
CHUTE
|
||||||
|
CIDER
|
||||||
|
CIGAR
|
||||||
|
CINCH
|
||||||
|
CIRCA
|
||||||
|
CISCO
|
||||||
|
CITED
|
||||||
|
CITES
|
||||||
|
CIVET
|
||||||
|
CIVIC
|
||||||
|
CIVIL
|
||||||
|
CLACK
|
||||||
|
CLAIM
|
||||||
|
CLAMP
|
||||||
|
CLAMS
|
||||||
|
CLANG
|
||||||
|
CLANK
|
||||||
|
CLAPS
|
||||||
|
CLASH
|
||||||
|
CLASP
|
||||||
|
CLASS
|
||||||
|
CLAWS
|
||||||
|
CLAYS
|
||||||
|
CLEAN
|
||||||
|
CLEAR
|
||||||
|
CLEAT
|
||||||
|
CLEFT
|
||||||
|
CLERK
|
||||||
|
CLICK
|
||||||
|
CLIFF
|
||||||
|
CLIMB
|
||||||
|
CLIME
|
||||||
|
CLING
|
||||||
|
CLINK
|
||||||
|
CLOAK
|
||||||
|
CLOCK
|
||||||
|
CLONE
|
||||||
|
CLOPS
|
||||||
|
CLOSE
|
||||||
|
CLOTH
|
||||||
|
CLOTS
|
||||||
|
CLOUD
|
||||||
|
CLOUT
|
||||||
|
CLOVE
|
||||||
|
CLOWN
|
||||||
|
CLUBS
|
||||||
|
CLUCK
|
||||||
|
CLUED
|
||||||
|
CLUES
|
||||||
|
CLUMP
|
||||||
|
CLUNG
|
||||||
|
CLUNK
|
||||||
|
COACH
|
||||||
|
COALS
|
||||||
|
COAST
|
||||||
|
COATS
|
||||||
|
COBRA
|
||||||
|
COCKY
|
||||||
|
COCOA
|
||||||
|
CODED
|
||||||
|
CODER
|
||||||
|
CODES
|
||||||
|
CODEX
|
||||||
|
CODON
|
||||||
|
COEDS
|
||||||
|
COILS
|
||||||
|
COINS
|
||||||
|
COKES
|
||||||
|
COLDS
|
||||||
|
COLON
|
||||||
|
COLOR
|
||||||
|
COLTS
|
||||||
|
COMBO
|
||||||
|
COMBS
|
||||||
|
COMER
|
||||||
|
COMES
|
||||||
|
COMET
|
||||||
|
COMFY
|
||||||
|
COMIC
|
||||||
|
COMMA
|
||||||
|
CONCH
|
||||||
|
CONDO
|
||||||
|
CONED
|
||||||
|
CONES
|
||||||
|
CONEY
|
||||||
|
CONGA
|
||||||
|
CONGO
|
||||||
|
CONKS
|
||||||
|
COOED
|
||||||
|
COOKS
|
||||||
|
COOLS
|
||||||
|
COOPS
|
||||||
|
COOPT
|
||||||
|
COPED
|
||||||
|
COPER
|
||||||
|
COPES
|
||||||
|
COPSE
|
||||||
|
CORAL
|
||||||
|
CORDS
|
||||||
|
CORED
|
||||||
|
CORER
|
||||||
|
CORES
|
||||||
|
CORGI
|
||||||
|
CORKS
|
||||||
|
CORKY
|
||||||
|
CORNY
|
||||||
|
CORPS
|
||||||
|
COSTS
|
||||||
|
COUCH
|
||||||
|
COUGH
|
||||||
|
COULD
|
||||||
|
COUPE
|
||||||
|
COUPS
|
||||||
|
COURT
|
||||||
|
COUTH
|
||||||
|
COVEN
|
||||||
|
COVER
|
||||||
|
COVES
|
||||||
|
COVET
|
||||||
|
COWED
|
||||||
|
COWER
|
||||||
|
COYLY
|
||||||
|
COZEN
|
||||||
|
CRABS
|
||||||
|
CRACK
|
||||||
|
CRAFT
|
||||||
|
CRAGS
|
||||||
|
DHOTI
|
||||||
|
DINGO
|
||||||
|
DIRGE
|
||||||
|
DODOS
|
||||||
|
DOGMA
|
||||||
|
DOILY
|
||||||
|
DONNA
|
||||||
|
DONOR
|
||||||
|
DONUT
|
||||||
|
DOOMS
|
||||||
|
DOOZY
|
||||||
|
DOPED
|
||||||
|
DOPER
|
||||||
|
DOPES
|
||||||
|
DOPEY
|
||||||
|
DORKS
|
||||||
|
DORKY
|
||||||
1024
wordlists/pyrdle_words_easy.txt
Normal file
1024
wordlists/pyrdle_words_easy.txt
Normal file
File diff suppressed because it is too large
Load Diff
2844
wordlists/pyrdle_words_full.txt
Normal file
2844
wordlists/pyrdle_words_full.txt
Normal file
File diff suppressed because it is too large
Load Diff
227
wordlists/pyrdle_words_literary.txt
Normal file
227
wordlists/pyrdle_words_literary.txt
Normal file
@ -0,0 +1,227 @@
|
|||||||
|
ADAGE
|
||||||
|
AGLOW
|
||||||
|
ALOFT
|
||||||
|
APACE
|
||||||
|
ARDOR
|
||||||
|
ASKEW
|
||||||
|
ASPEN
|
||||||
|
ATONE
|
||||||
|
AUGUR
|
||||||
|
AVIAN
|
||||||
|
AVION
|
||||||
|
AWASH
|
||||||
|
BALMY
|
||||||
|
BEGOT
|
||||||
|
BELIE
|
||||||
|
BERTH
|
||||||
|
BESET
|
||||||
|
BESOT
|
||||||
|
BIDED
|
||||||
|
BILGE
|
||||||
|
BOWER
|
||||||
|
BRACE
|
||||||
|
BRIAR
|
||||||
|
BRINE
|
||||||
|
BRINY
|
||||||
|
CAIRN
|
||||||
|
CHIDE
|
||||||
|
CLEFT
|
||||||
|
COUTH
|
||||||
|
CRAVE
|
||||||
|
CREST
|
||||||
|
DALLY
|
||||||
|
DEWED
|
||||||
|
DIRGE
|
||||||
|
DOTED
|
||||||
|
DOWER
|
||||||
|
DREAR
|
||||||
|
DUSKY
|
||||||
|
DWELT
|
||||||
|
EAVES
|
||||||
|
EBBED
|
||||||
|
EDIFY
|
||||||
|
ELEGY
|
||||||
|
EMBER
|
||||||
|
ENSUE
|
||||||
|
EPOCH
|
||||||
|
ERRED
|
||||||
|
ESTOP
|
||||||
|
ETUDE
|
||||||
|
EVADE
|
||||||
|
EXALT
|
||||||
|
EXULT
|
||||||
|
FABLE
|
||||||
|
FEIGN
|
||||||
|
FEINT
|
||||||
|
FERAL
|
||||||
|
FETID
|
||||||
|
FJORD
|
||||||
|
FLESH
|
||||||
|
FLORA
|
||||||
|
FOLLY
|
||||||
|
FORGE
|
||||||
|
FORTE
|
||||||
|
FOUNT
|
||||||
|
FRIAR
|
||||||
|
FROST
|
||||||
|
FROTH
|
||||||
|
GABLE
|
||||||
|
GAILY
|
||||||
|
GAVEL
|
||||||
|
GLADE
|
||||||
|
GLEAN
|
||||||
|
GLOAM
|
||||||
|
GNARL
|
||||||
|
GNASH
|
||||||
|
GNOME
|
||||||
|
GORGE
|
||||||
|
GOUGE
|
||||||
|
GRAVE
|
||||||
|
GREBE
|
||||||
|
GRIEF
|
||||||
|
GRIFT
|
||||||
|
GRIME
|
||||||
|
GROVE
|
||||||
|
GUILD
|
||||||
|
GUILE
|
||||||
|
GULCH
|
||||||
|
GULLY
|
||||||
|
GUSTS
|
||||||
|
GUSTY
|
||||||
|
HAPLY
|
||||||
|
HARDY
|
||||||
|
HASTE
|
||||||
|
HAUNT
|
||||||
|
HAVEN
|
||||||
|
HEADY
|
||||||
|
HEATH
|
||||||
|
HEDGE
|
||||||
|
HEIGH
|
||||||
|
HENCE
|
||||||
|
HERON
|
||||||
|
HOARD
|
||||||
|
HOARY
|
||||||
|
HOIST
|
||||||
|
HOLLY
|
||||||
|
HORDE
|
||||||
|
HOUND
|
||||||
|
HOVEL
|
||||||
|
HOVER
|
||||||
|
IDYLL
|
||||||
|
INANE
|
||||||
|
INLET
|
||||||
|
LEDGE
|
||||||
|
LOFTY
|
||||||
|
MELEE
|
||||||
|
OCEAN
|
||||||
|
ONSET
|
||||||
|
OUGHT
|
||||||
|
PERCH
|
||||||
|
PIOUS
|
||||||
|
PLAIN
|
||||||
|
PLUMB
|
||||||
|
PRIDE
|
||||||
|
PRIME
|
||||||
|
PRIVY
|
||||||
|
PROUD
|
||||||
|
PROVE
|
||||||
|
PSALM
|
||||||
|
QUEST
|
||||||
|
QUEUE
|
||||||
|
QUITE
|
||||||
|
RAPID
|
||||||
|
REALM
|
||||||
|
REBEL
|
||||||
|
REIGN
|
||||||
|
RIDGE
|
||||||
|
RIVAL
|
||||||
|
ROOST
|
||||||
|
ROUGE
|
||||||
|
ROUTE
|
||||||
|
ROVER
|
||||||
|
RUDDY
|
||||||
|
RUMOR
|
||||||
|
SALLY
|
||||||
|
SCALE
|
||||||
|
SCORN
|
||||||
|
SEVER
|
||||||
|
SHADE
|
||||||
|
SHARD
|
||||||
|
SHAWL
|
||||||
|
SHEAR
|
||||||
|
SHEEN
|
||||||
|
SHIED
|
||||||
|
SHIRE
|
||||||
|
SHONE
|
||||||
|
SHORN
|
||||||
|
SHOVE
|
||||||
|
SHOWN
|
||||||
|
SHREW
|
||||||
|
SHRUB
|
||||||
|
SHUCK
|
||||||
|
SHUNT
|
||||||
|
SIEGE
|
||||||
|
SINEW
|
||||||
|
SINGE
|
||||||
|
SIREN
|
||||||
|
SLATE
|
||||||
|
SLEEK
|
||||||
|
SLEET
|
||||||
|
SLICK
|
||||||
|
SLIME
|
||||||
|
SLIMY
|
||||||
|
SLING
|
||||||
|
SLOSH
|
||||||
|
SLOTH
|
||||||
|
SMALL
|
||||||
|
SMEAR
|
||||||
|
SMELT
|
||||||
|
SMILE
|
||||||
|
SMIRK
|
||||||
|
SMITE
|
||||||
|
SMITH
|
||||||
|
SMOKE
|
||||||
|
SNARE
|
||||||
|
SNARL
|
||||||
|
SNEER
|
||||||
|
SNIDE
|
||||||
|
SNIFF
|
||||||
|
SNORE
|
||||||
|
SNORT
|
||||||
|
SNOUT
|
||||||
|
SNOWY
|
||||||
|
SOBER
|
||||||
|
SOGGY
|
||||||
|
SOLAR
|
||||||
|
SOLVE
|
||||||
|
SONAR
|
||||||
|
SONIC
|
||||||
|
SOOTH
|
||||||
|
SOOTY
|
||||||
|
SORRY
|
||||||
|
SOUND
|
||||||
|
SOUTH
|
||||||
|
SPACE
|
||||||
|
SPADE
|
||||||
|
SPARE
|
||||||
|
SPARK
|
||||||
|
SPAWN
|
||||||
|
SPEAK
|
||||||
|
SPEAR
|
||||||
|
SPECK
|
||||||
|
SPEED
|
||||||
|
SPELL
|
||||||
|
SPELT
|
||||||
|
SPEND
|
||||||
|
SPENT
|
||||||
|
SPIED
|
||||||
|
SPIEL
|
||||||
|
SPIKE
|
||||||
|
SPIKY
|
||||||
|
SPILL
|
||||||
|
SPINE
|
||||||
|
SPINY
|
||||||
|
SPIRE
|
||||||
|
SPITE
|
||||||
|
SPLAT
|
||||||
|
SPLIT
|
||||||
1367
wordlists/pyrdle_words_medium.txt
Normal file
1367
wordlists/pyrdle_words_medium.txt
Normal file
File diff suppressed because it is too large
Load Diff
337
wordlists/pyrdle_words_techy.txt
Normal file
337
wordlists/pyrdle_words_techy.txt
Normal file
@ -0,0 +1,337 @@
|
|||||||
|
ALLOY
|
||||||
|
ALPHA
|
||||||
|
AMINO
|
||||||
|
ARRAY
|
||||||
|
ASSAY
|
||||||
|
AUDIO
|
||||||
|
AXIAL
|
||||||
|
AXIOM
|
||||||
|
AZURE
|
||||||
|
BATCH
|
||||||
|
BATON
|
||||||
|
BIOME
|
||||||
|
BIPED
|
||||||
|
CACHE
|
||||||
|
CALYX
|
||||||
|
CARET
|
||||||
|
CASES
|
||||||
|
CASTS
|
||||||
|
CELLS
|
||||||
|
CHIPS
|
||||||
|
CHORD
|
||||||
|
CHUNK
|
||||||
|
CIRCA
|
||||||
|
CITED
|
||||||
|
CLAMP
|
||||||
|
CLONE
|
||||||
|
CLOUD
|
||||||
|
CODON
|
||||||
|
COILS
|
||||||
|
COMET
|
||||||
|
CORAL
|
||||||
|
CORES
|
||||||
|
CRAMP
|
||||||
|
CRANK
|
||||||
|
CREST
|
||||||
|
CRUST
|
||||||
|
CRYPT
|
||||||
|
CUBIC
|
||||||
|
CUBIT
|
||||||
|
CURVE
|
||||||
|
CYCAD
|
||||||
|
CYCLE
|
||||||
|
CYNIC
|
||||||
|
CYSTS
|
||||||
|
DATUM
|
||||||
|
DEBUG
|
||||||
|
DECAF
|
||||||
|
DECAL
|
||||||
|
DECAY
|
||||||
|
DECOR
|
||||||
|
DECOY
|
||||||
|
DEFER
|
||||||
|
DEFOG
|
||||||
|
DELTA
|
||||||
|
DENSE
|
||||||
|
DEPOT
|
||||||
|
DEPTH
|
||||||
|
DETOX
|
||||||
|
DIODE
|
||||||
|
DIPPY
|
||||||
|
DISCO
|
||||||
|
DISCS
|
||||||
|
DISKS
|
||||||
|
DOPED
|
||||||
|
DOPER
|
||||||
|
DOSES
|
||||||
|
DRAFT
|
||||||
|
DRAIN
|
||||||
|
DRIFT
|
||||||
|
DRILL
|
||||||
|
DRONE
|
||||||
|
DRUPE
|
||||||
|
DUALS
|
||||||
|
DUREX
|
||||||
|
DWELL
|
||||||
|
EBOOK
|
||||||
|
EDEMA
|
||||||
|
ELUTE
|
||||||
|
EMAIL
|
||||||
|
EMCEE
|
||||||
|
EMEND
|
||||||
|
EMIRS
|
||||||
|
EMITS
|
||||||
|
EMOTE
|
||||||
|
EPOCH
|
||||||
|
EPOXY
|
||||||
|
ERGOT
|
||||||
|
ERUPT
|
||||||
|
ESTER
|
||||||
|
ETHER
|
||||||
|
ETHIC
|
||||||
|
ETHOS
|
||||||
|
EUROS
|
||||||
|
EVADE
|
||||||
|
EXACT
|
||||||
|
EXALT
|
||||||
|
EXECS
|
||||||
|
EXERT
|
||||||
|
EXILE
|
||||||
|
EXIST
|
||||||
|
EXITS
|
||||||
|
EXPAT
|
||||||
|
EXPEL
|
||||||
|
EXPOS
|
||||||
|
EXTRA
|
||||||
|
EXUDE
|
||||||
|
EXULT
|
||||||
|
EXURB
|
||||||
|
FECAL
|
||||||
|
FECES
|
||||||
|
FEMUR
|
||||||
|
FERMI
|
||||||
|
FETAL
|
||||||
|
FETUS
|
||||||
|
FIBER
|
||||||
|
FIBRE
|
||||||
|
FIELD
|
||||||
|
FILES
|
||||||
|
FILTH
|
||||||
|
FINAL
|
||||||
|
FINED
|
||||||
|
FINER
|
||||||
|
FINIS
|
||||||
|
FINNY
|
||||||
|
FIORD
|
||||||
|
FIXED
|
||||||
|
FIXER
|
||||||
|
FIZZY
|
||||||
|
FJORD
|
||||||
|
FLAGS
|
||||||
|
FLASK
|
||||||
|
FLECK
|
||||||
|
FLEXS
|
||||||
|
FLINT
|
||||||
|
FLOAT
|
||||||
|
FLORA
|
||||||
|
FLOUR
|
||||||
|
FLUKY
|
||||||
|
FLUME
|
||||||
|
FLUOR
|
||||||
|
FLUSH
|
||||||
|
FOCAL
|
||||||
|
FOCUS
|
||||||
|
FOILS
|
||||||
|
FONTS
|
||||||
|
FORCE
|
||||||
|
FORMS
|
||||||
|
FORTE
|
||||||
|
FORUM
|
||||||
|
FOSSE
|
||||||
|
FOXED
|
||||||
|
FRAME
|
||||||
|
FREED
|
||||||
|
FRESH
|
||||||
|
FRITS
|
||||||
|
FROND
|
||||||
|
FROST
|
||||||
|
FROTH
|
||||||
|
FUGAL
|
||||||
|
FUGUE
|
||||||
|
FUMED
|
||||||
|
FUMES
|
||||||
|
FUNGI
|
||||||
|
FUNGO
|
||||||
|
FURLS
|
||||||
|
FUROR
|
||||||
|
FURTH
|
||||||
|
FUSED
|
||||||
|
FUSEE
|
||||||
|
FUSEL
|
||||||
|
FUSES
|
||||||
|
FUTON
|
||||||
|
FUZED
|
||||||
|
FUZES
|
||||||
|
FUZZY
|
||||||
|
GAGES
|
||||||
|
GALES
|
||||||
|
GAMMA
|
||||||
|
GANGS
|
||||||
|
GASES
|
||||||
|
GATED
|
||||||
|
GATES
|
||||||
|
GAUGE
|
||||||
|
GAUNT
|
||||||
|
GAUSS
|
||||||
|
GAUZE
|
||||||
|
GAVEL
|
||||||
|
GEARS
|
||||||
|
GECKO
|
||||||
|
GEEKS
|
||||||
|
GEESE
|
||||||
|
GENES
|
||||||
|
GENIE
|
||||||
|
GENII
|
||||||
|
GENRE
|
||||||
|
GENUS
|
||||||
|
GEODE
|
||||||
|
GERMS
|
||||||
|
GESSO
|
||||||
|
GIDDY
|
||||||
|
GILDS
|
||||||
|
GILLS
|
||||||
|
GIMPS
|
||||||
|
GIRTH
|
||||||
|
GISMO
|
||||||
|
GIZMO
|
||||||
|
GLAND
|
||||||
|
GLASS
|
||||||
|
GLAZE
|
||||||
|
GLEAM
|
||||||
|
GLEAN
|
||||||
|
GLIDE
|
||||||
|
GLIMS
|
||||||
|
GLINT
|
||||||
|
GLITZ
|
||||||
|
GLOBE
|
||||||
|
GLOBS
|
||||||
|
GLOPS
|
||||||
|
GLOSS
|
||||||
|
GLOWS
|
||||||
|
GLOZE
|
||||||
|
GLUED
|
||||||
|
GLUES
|
||||||
|
GLUEY
|
||||||
|
GLUMS
|
||||||
|
GLUON
|
||||||
|
GLUTE
|
||||||
|
GLUTS
|
||||||
|
GLYPH
|
||||||
|
GNASH
|
||||||
|
GNOME
|
||||||
|
GONAD
|
||||||
|
GONGS
|
||||||
|
GOODS
|
||||||
|
GOUGE
|
||||||
|
GOURD
|
||||||
|
GOUTS
|
||||||
|
GRADE
|
||||||
|
GRADS
|
||||||
|
GRAFT
|
||||||
|
GRAIN
|
||||||
|
GRAMS
|
||||||
|
GRAPH
|
||||||
|
GRASP
|
||||||
|
GRATE
|
||||||
|
GRAVE
|
||||||
|
GRAYS
|
||||||
|
GRAZE
|
||||||
|
GREBE
|
||||||
|
GREED
|
||||||
|
GREYS
|
||||||
|
GRIDE
|
||||||
|
GRIDS
|
||||||
|
GRIFF
|
||||||
|
GRIFT
|
||||||
|
GRILL
|
||||||
|
GRIME
|
||||||
|
GRIMY
|
||||||
|
GRIND
|
||||||
|
GRINS
|
||||||
|
GRIPE
|
||||||
|
GRIPS
|
||||||
|
GRIST
|
||||||
|
GRITS
|
||||||
|
GROAN
|
||||||
|
GROAT
|
||||||
|
GROGS
|
||||||
|
GROIN
|
||||||
|
GROOM
|
||||||
|
GROPE
|
||||||
|
GROSS
|
||||||
|
GROTS
|
||||||
|
GROUP
|
||||||
|
GROUT
|
||||||
|
GROVE
|
||||||
|
GROWL
|
||||||
|
GROWN
|
||||||
|
GROWS
|
||||||
|
GRUBS
|
||||||
|
GRUEL
|
||||||
|
GRUFF
|
||||||
|
GRUMP
|
||||||
|
GRUNT
|
||||||
|
GUANO
|
||||||
|
GUARD
|
||||||
|
GUAVA
|
||||||
|
GUESS
|
||||||
|
GUEST
|
||||||
|
GUIDE
|
||||||
|
HELIX
|
||||||
|
HERTZ
|
||||||
|
HEXAD
|
||||||
|
HEXED
|
||||||
|
HEXES
|
||||||
|
HYENA
|
||||||
|
HYOID
|
||||||
|
HYPED
|
||||||
|
HYPER
|
||||||
|
HYPES
|
||||||
|
HYPHA
|
||||||
|
HYPOS
|
||||||
|
ICHOR
|
||||||
|
ICONS
|
||||||
|
IDEAL
|
||||||
|
IDEAS
|
||||||
|
IDOLS
|
||||||
|
IMAGE
|
||||||
|
IMBED
|
||||||
|
IMBUE
|
||||||
|
IMPEL
|
||||||
|
INANE
|
||||||
|
INBOX
|
||||||
|
INCUR
|
||||||
|
INDEX
|
||||||
|
INDIE
|
||||||
|
INERT
|
||||||
|
INFER
|
||||||
|
INFIX
|
||||||
|
INKLE
|
||||||
|
INLAY
|
||||||
|
INLET
|
||||||
|
INNER
|
||||||
|
INPUT
|
||||||
|
INRUN
|
||||||
|
INTER
|
||||||
|
INTRO
|
||||||
|
INURE
|
||||||
|
INURN
|
||||||
|
INVAR
|
||||||
|
IODIC
|
||||||
|
IODID
|
||||||
|
IODIN
|
||||||
|
IONIC
|
||||||
|
IOTAS
|
||||||
|
IRADE
|
||||||
|
IRATE
|
||||||
|
IRIDS
|
||||||
2767
wordlists/wordle_words_hard.txt
Normal file
2767
wordlists/wordle_words_hard.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user