UofTCG is a Pokémon inspired battle card game built following the clean architecture rules in Java. Players can build custom teams, select movesets, battle AI of different difficulties, battle friends, and obtain new Pokémon by opening packs.
UofTCG is a desktop-based card battle game that focuses on battling rather than collecting.
The game uses real Pokémon data retrieved from PokéAPI and applies Clean Architecture principles throughout.
Core gameplay:
- Open Packs to acquire Pokémon
- Build teams of your favourite Pokémon
- Select moves
- Battle AI or another player
- Open booster packs using in-game currency (1000)
- Reveal 5 random Pokémon (with 5% of obtaining shiny)
- Gain 50 extra currency for obtaining duplicates
- Automatic collection updating
- Visual grid view of available Pokémon
- Artwork, stats, moves, types
- Filter by collected and shiny collected
- Select up to 3 Pokémon to add to a team
- Teams saved for use in battle
- Choose up to 4 moves per Pokémon
- Move data sourced from PokéAPI
- Player vs Player
- Player vs AI (powered by Groq LLM API)
- Turn-based with implemented win conditions
This project uses Clean Architecture (CA).
AbilityAIPlayerBattleDamageCalculatorDeckItemMoveMoveTurnPackPlayerPokémonStatsSwitchTurnTurnUserUserPlayerAdapter
Contains all business logic and application rules.
BattleAIInteractorBattlePlayerInteractorBuildDeckInteractorViewCollectionInteractorOpenPackInteractorPickMovesetInteractor
Includes:
- Controllers
- Presenters
- ViewModels
- Data Access Interfaces
- Swing-based Views
- JSON file storage
- API fetch utilities
- Concrete Data Access classes (
JsonUserDataAccess)
All dependencies point inward as required by CA.
Used for:
- Pokémon data
- Stats, moves, types
- Sprites
Data is fetched once, then saved locally as JSON.
Used for AI move selection during Player vs AI battles.
- Run the
Mainwithin theapppackage - The main menu will appear with navigation options:
- View Collection
- Open Pack
- Build Deck
- Battle vs AI
- Battle vs Player
- Click on View Collection
- Browse through your Pokémon
- Starter Pokémon include Charizard, Blastoise, and Venusaur
- Select a Pokémon to view:
- Stats
- Types
- Moves
- You can filter to see your owned Pokémon
- Navigate to Build Deck
- Select Pokémon from your collection to add
- Teams must follow size constraints (up to 3 Pokémon)
- Save the team to use it in battle
- From Build Team, select a Pokémon in your team
- Choose up to 4 moves from the available move list
- Save the moveset for that Pokémon
- Moves are used directly in battles
- Select Battle vs Player from the main menu
- Each player chooses their saved team
- Players alternate turns selecting moves.
- A battle ends when one player defeats 3 opposing Pokémon.
- Select Battle vs AI.
- Choose your team and AI difficulty
- The AI selects moves
- Turns alternate between you and the AI
- Defeat three enemy Pokémon to win
- Winning results in earning 500 currency