# ๐ŸŽฎ PokรฉAzure โ€” Azure you ready? A Pokรฉmon-style web-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 | |---|---|---| | ๐Ÿ˜๏ธ Fundamentals 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) โ””โ”€โ”€ README.md ``` --- ## ๐Ÿ•น๏ธ Host on GitHub Pages (free) 1. Create a GitHub repo named **`pokeazure`** 2. Upload all **4 files**: `index.html`, `style.css`, `game.js`, `questions.json` 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. --- ## ๐ŸŽฎ GBA Controller Overlay On mobile, a semi-transparent Game Boy Advance-style controller overlays the bottom of the screen: | Control | Action | |---|---| | **D-pad** | Walk the player around the map | | **A button** (red) | Talk to NPC on map ยท Confirm answer in battle ยท Advance dialog | | **B button** (blue) | Talk to NPC on map ยท Advance dialog | | **SELECT / START** | Decorative โ€” reserved for future use | The controller is hidden on desktop (โ‰ฅ900px wide) โ€” use the keyboard instead. --- ## โŒจ๏ธ PC Keyboard Controls | 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 directly | | **Space** | Advance dialog | --- ## ๐Ÿ—บ๏ธ Map & Walking - The player sprite walks freely around the overworld map using the D-pad or WASD - Walking animations change based on direction (left, right, up, down) - Press **A**, **B**, **E**, or **Enter** at any time to talk to the NPC and start the question - Tapping the NPC sprite directly also triggers the conversation --- ## ๐Ÿ’พ Save System Progress is stored in the player's browser (`localStorage`) automatically: - **Auto-saves** after every answered question and on map return โ€” a ๐Ÿ’พ icon flashes to confirm - **Continue screen** appears on next visit showing trainer name, progress %, and score - **New Game** option always available โ€” prompts confirmation before erasing save - Save clears automatically on completion so the next run starts fresh --- ## ๐ŸŽฏ Features | Feature | Detail | |---|---| | GBA controller overlay | D-pad + A/B buttons, semi-transparent, mobile only | | Walking player | Moves freely on map, directional walk animations | | Mobile-first design | Full-screen on phones with safe-area support, framed on desktop | | localStorage save | Auto-save with continue screen on return visits | | Multi-exam structure | Each town covers a different Azure certification exam | | Single & multi-select | "Choose two" questions require selecting both correct answers before confirming | | Randomised answer positions | Correct answer shuffled to a random slot โ€” no pattern to exploit | | Numbered answers | Options labelled 1/2/3/4 (not A/B/C/D) | | Name entry | On-screen pixel keyboard, just like the real game | | Typewriter text | Authentic dialog effect, tap/press to skip | | 22 NPC characters | Professor Oak, Misty, Brock, Giovanni, Lanceโ€ฆ | | Streak bonuses | 3ร— correct = +150 pts ๐Ÿ”ฅ, 5ร—+ = +200 pts ๐Ÿ”ฅ | | Milestone badges | Earned at Q25, Q50, Q75, Q100 per town | | Correct answer reveal | Wrong answers show the right answer + full explanation | | Scanline overlay | Authentic CRT/GBA screen effect | --- ## ๐Ÿ“š AZ-900 Topics Covered (Fundamentals 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) To add a new exam, add a new level object to the `levels` array in `questions.json`: ```json { "levels": [ { "id": 1, "name": "Fundamentals Town", "exam": "AZ-900", "questions": [ ... ] }, { "id": 2, "name": "Administrator City", "exam": "AZ-104", "questions": [ ... ] } ] } ``` --- ## โž• Adding Questions **Single-answer question:** ```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 question (choose two):** ```json { "id": 102, "npc": "Misty", "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..." } ``` - `answer` (single integer) = 0-based index of the one correct option - `answers` (array of two integers) = 0-based indices of both correct options - The game detects which mode to use automatically and shows a CONFIRM button for multi-select --- ## ๐Ÿง‘ Adding NPCs In `game.js`, add to the `NPC` object at the top: ```js const NPC = { 'Your NPC Name': '๐Ÿง‘', ... }; ``` Then reference `"npc": "Your NPC Name"` in `questions.json`. --- ## ๐Ÿ“ฑ 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-bottom)` for notched phones (iPhone X+) - Tap anywhere on the dialog box during the intro to skip the typewriter and advance - Tap the NPC sprite directly on the map as an alternative to pressing A/B