# ๐ŸŽฎ PokรฉAzure โ€” Azure you ready? A Pokรฉmon-style Game Boy Advance browser game for **studying Microsoft Azure certification exams**! Journey through towns, each covering a different Azure exam. Play on your phone, tablet, or PC โ€” progress saves automatically. > *"Gotta cert 'em all!"* **Current towns:** | Town | Exam | Status | |---|---|---| | ๐Ÿ˜๏ธ AZ-900 Town | AZ-900: Azure Fundamentals | โœ… Available | | ๐Ÿ™๏ธ Administrator City | AZ-104: Azure Administrator | ๐Ÿ”œ Coming soon | | ๐Ÿ—๏ธ Developer District | AZ-204: Azure Developer | ๐Ÿ”œ Coming soon | | ๐Ÿ”’ Security Stronghold | AZ-500: Azure Security | ๐Ÿ”œ Coming soon | --- ## ๐Ÿš€ Play It Live ๐Ÿ‘‰ [Launch PokรฉAzure](https://justinoros.github.io/pokeazure) --- ## ๐Ÿ—‚๏ธ Files ``` pokeazure/ โ”œโ”€โ”€ index.html โ† Game screens & structure โ”œโ”€โ”€ style.css โ† GBA Pokรฉmon aesthetic, fully responsive โ”œโ”€โ”€ game.js โ† Game engine, controller, walking, save system โ”œโ”€โ”€ questions.json โ† Questions & answers (organised by town/exam) โ”œโ”€โ”€ music.mp3 โ† Overworld background music (looping) โ”œโ”€โ”€ music-rival.mp3 โ† Battle/question screen music (looping) โ”œโ”€โ”€ player.png โ† Player sprite sheet โ”œโ”€โ”€ oak.png โ† Professor Oak NPC sprite โ”œโ”€โ”€ gary.png โ† Rival Gary NPC sprite โ”œโ”€โ”€ joy.png โ† Nurse Joy NPC sprite โ”œโ”€โ”€ jenny.png โ† Officer Jenny NPC sprite โ”œโ”€โ”€ favicon.ico โ† Browser tab icon โ””โ”€โ”€ README.md ``` --- ## ๐Ÿ•น๏ธ Host on GitHub Pages (free) 1. Create a GitHub repo named **`pokeazure`** 2. Upload all files to the root of the repo 3. Go to **Settings โ†’ Pages โ†’ Source: `main` branch, `/ (root)` folder** 4. Hit **Save** โ€” live in ~60 seconds at `https://justinoros.github.io/pokeazure` No server, no database, no cost. --- ## ๐ŸŽฎ Controls ### Mobile Portrait A semi-transparent GBA-style controller overlays the bottom of the screen, split into two panels: - **Left panel**: D-pad + SELECT/START - **Right panel**: A and B buttons ### Mobile Landscape The controller moves to side panels flanking the game screen: - **Left panel**: D-pad + SELECT/START (stacked vertically) - **Right panel**: A and B buttons (diagonal layout) ### PC Keyboard | Key | Action | |---|---| | **WASD / Arrow keys** | Walk player on map | | **E / Enter** | Talk to NPC ยท Confirm answer ยท Advance dialog | | **X** | Talk to NPC ยท Advance dialog | | **1 / 2 / 3 / 4** | Quick-pick answer | | **Space** | Advance dialog | --- ## ๐Ÿ—บ๏ธ Map & Gameplay - Player walks freely in all 4 directions across a large 2D world - A directional arrow indicates where the next NPC is โ€” hides when the NPC is on screen - Walk up to an NPC and press E/A to start a question - After answering, the next NPC spawns in a random direction (never the opposite of the last) - Trees render above the player for depth - NPCs float with a gentle animation --- ## ๐ŸŽต Music - **Overworld** (`music.mp3`): plays while walking the map - **Battle** (`music-rival.mp3`): plays during question/answer screen - **Result screen**: silent - Toggle mute with the ๐ŸŽต button in the HUD --- ## ๐Ÿ’พ Save System - **Auto-saves** after every answered question - **Continue screen** on return visits showing trainer name, progress, and score - **Shuffled question order** is saved so continuing always resumes at the correct question - **New Game** option prompts confirmation before erasing --- ## ๐ŸŽฏ Features | Feature | Detail | |---|---| | Free 2D movement | Walk in any direction, camera follows player | | Random NPC directions | Next NPC spawns in a random direction each leg (no U-turns) | | PNG NPC sprites | NPCs use pixel art PNG files; emoji fallback for unassigned NPCs | | Mobile portrait & landscape | Fully optimised controller layout for both orientations | | Single & multi-select questions | "Choose two" shows CONFIRM button; single select is immediate | | Shuffled question order | Different order every new game | | Streak bonuses | 3ร— correct = +150 pts ๐Ÿ”ฅ, 5ร—+ = +200 pts ๐Ÿ”ฅ | | Milestone badges | Cloud Explorer (Q25), Azure Apprentice (Q50), Cloud Practitioner (Q75), AZ-900 Champion (Q100) | | Correct answer reveal | Wrong answers show the right answer + full explanation | | Tap anywhere to continue | Result screen advances on any tap/click, not just CONTINUE button | | Rival battle music | Separate music track plays during questions | | Player faces last direction | Idle sprite faces the last direction walked | --- ## ๐Ÿ“š AZ-900 Topics Covered (AZ-900 Town) | Domain | Topics | |---|---| | Cloud Concepts | IaaS / PaaS / SaaS, public / private / hybrid cloud, CapEx vs OpEx, elasticity, scalability, high availability, disaster recovery | | Core Azure Services | Regions, availability zones, resource groups, subscriptions, management groups, VMs, App Service, Azure Functions, Blob/File storage tiers, VNet, VPN Gateway, ExpressRoute, Load Balancer, Cosmos DB, Azure SQL | | Security & Identity | Microsoft Entra ID, RBAC, MFA, Conditional Access, SSO, Key Vault, NSGs, Azure Firewall, DDoS Protection, Microsoft Defender for Cloud, defence in depth, shared responsibility model | | Management & Governance | Azure Policy, Blueprints, Resource locks, Tags, ARM templates, Azure CLI, Azure PowerShell, Cloud Shell, Azure Portal, Azure Arc, Azure Migrate, Microsoft Purview | | Monitoring & Health | Azure Monitor, Azure Advisor, Azure Service Health, Application Insights, health advisories, RCA reports | | Pricing & Cost Management | Pricing Calculator, TCO Calculator, Azure Reservations, Spot VMs, Cost Management + Billing, budgets, pay-as-you-go | --- ## โž• Adding a New Town (Exam) Add a new level object to the `levels` array in `questions.json`: ```json { "levels": [ { "id": 1, "name": "AZ-900 Town", "exam": "AZ-900", "questions": [ ... ] }, { "id": 2, "name": "Administrator City", "exam": "AZ-104", "questions": [ ... ] } ] } ``` --- ## โž• Adding Questions **Single-answer:** ```json { "id": 101, "npc": "Professor Oak", "text": "Your question here?", "options": ["Option A", "Option B", "Option C", "Option D"], "answer": 0, "explanation": "Why Option A is correct." } ``` **Multi-select (choose two):** ```json { "id": 102, "npc": "Nurse Joy", "text": "Which two options are correct? (Choose two)", "options": ["Option A", "Option B", "Option C", "Option D"], "answers": [0, 2], "explanation": "Options A and C are correct because..." } ``` --- ## ๐Ÿง‘ Adding NPC Sprites In `game.js`, update the `NPC` object at the top: ```js const NPC = { 'Professor Oak': 'oak.png', // PNG file in repo root 'Nurse Joy': 'joy.png', 'Brock': '๐Ÿง—', // emoji fallback still works }; ``` - PNG filenames are relative to the repo root (no path needed) - Any NPC not in the object falls back to `๐Ÿง‘` --- ## ๐Ÿ”ง Rebranding (CONFIG object) To create a version for a different exam set, update the `CONFIG` object at the top of `game.js`: ```js const CONFIG = { gameName: 'PokรฉAzure', subject: 'Azure', examName: 'AZ-900', townName: 'AZ-900 Town', saveKey: 'pokeazure_save_v1', introLines: [ ... ], namePrompt: '...', }; ``` --- ## ๐Ÿ“ฑ Mobile Tips - Add to Home Screen on iOS/Android for a full-screen app-like experience - The game uses `100dvh` and `env(safe-area-inset-*)` for notched phones - Tap anywhere on the result screen to continue (no need to find the CONTINUE button) - Rotate to landscape for a wider game view with side-panel controls