🧠 AI-Toega Mänguarendus
GitHub Copilot, ChatGPT, prompt engineering, AI-genereeritud sisu, koodi genereerimine ja refaktoreerimine.
🤖 Samm 1 — GitHub Copilot Efektiivne Kasutamine
- Kirjuta alati selge kommentaar enne koodi — Copilot kasutab seda kontekstina
- Lisa tüübi annotatsioone (TypeScript) — paremad soovitused
- Ava seotud failid kõrvaltabidesse — Copilot loeb neid
- Kasuta Tab aktseptimiseks, Esc tagasilükkamiseks, Alt+] alternatiivide vaatamiseks
// Loo partiklisüsteem mis emiteerib ringikujuliselt
// Partiklid liiguvad väljapoole, kaotavad läbipaistvust
// ja vähenevad suuruses. Max 200 partiklit.
class CircleEmitter {
particles: Particle[] = [];
maxParticles = 200;
emitRate = 30; // partiklit sekundis
// Copilot genereerib ülejäänud koodi...
emit(x: number, y: number, delta: number): void {
const count = Math.floor(this.emitRate * delta);
for (let i = 0; i < count && this.particles.length < this.maxParticles; i++) {
const angle = Math.random() * Math.PI * 2;
const speed = 50 + Math.random() * 100;
this.particles.push({
x, y,
vx: Math.cos(angle) * speed,
vy: Math.sin(angle) * speed,
life: 1,
size: 4 + Math.random() * 4,
});
}
}
update(delta: number): void {
for (let i = this.particles.length - 1; i >= 0; i--) {
const p = this.particles[i];
p.x += p.vx * delta;
p.y += p.vy * delta;
p.life -= delta;
p.size *= 0.99;
if (p.life <= 0) this.particles.splice(i, 1);
}
}
}
// 🔑 Oluline: Copilot pakkus kogu emit() ja update()
// põhinedes ainult kommentaarile!
💬 Samm 2 — Prompt Engineering Mänguarenduses
// ==========================================
// HALB PROMPT:
// "Tee mulle mäng"
//
// HEA PROMPT:
// "Loo TypeScript klass EnemySpawner:
// - Spawn'ib vaenlasi wave'idena (laine 1: 5 vaenlast, laine 2: 8, jne)
// - Iga wave vahel 10s paus
// - Vaenlaste tüübid: Grunt (HP:50), Tank (HP:150), Fast (HP:30, speed:2x)
// - Spawn positsioonid: ekraani servadest
// - Event: onWaveStart(waveNumber), onWaveComplete(), onAllWavesComplete()
// - Kasuta EventEmitter mustrit
// - Koodi kommentaarid eesti keeles"
// ==========================================
// KONTEKSTI ANDMINE:
// "Minu projektis on järgmine struktuur:
// - Entity klass (position, update, render)
// - GameLoop klass (entities[], addEntity, removeEntity)
// - Vector2 klass (add, sub, normalize, scale)
// Loo Projectile klass mis laiendab Entity-t..."
// ITERATIIVNE TÄIENDAMINE:
// 1. "Loo põhi Inventory klass"
// 2. "Lisa stackable items tugi (max stack: 99)"
// 3. "Lisa drag & drop HTML5 API-ga"
// 4. "Lisa tooltip mis näitab item stat'e"
// 5. "Optimeeri: kasuta Object Pool'i"
🎨 Samm 3 — AI Sisu Genereerimine
// Mängu dialogide genereerimine API kaudu
async function generateNPCDialog(
npcName: string,
personality: string,
context: string
): Promise<string> {
const response = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`,
},
body: JSON.stringify({
model: 'gpt-4o-mini',
messages: [
{
role: 'system',
content: `Sa oled NPC nimega ${npcName}.
Iseloom: ${personality}.
Räägi lühidalt (max 2 lauset).
Kontekst: fantaasia-RPG maailm.`,
},
{ role: 'user', content: context },
],
max_tokens: 100,
temperature: 0.8,
}),
});
const data = await response.json();
return data.choices[0].message.content;
}
// Item kirjelduste genereerimine
async function generateItemDescription(
itemName: string,
itemType: string,
rarity: string
): Promise<string> {
// Kasuta cache'i et mitte iga kord API-t kutsuda
const cacheKey = `item_${itemName}`;
const cached = localStorage.getItem(cacheKey);
if (cached) return cached;
const desc = await generateNPCDialog(
'Narrator',
'poeetiline jutustaja',
`Kirjelda eset: ${itemName} (${itemType}, ${rarity})`
);
localStorage.setItem(cacheKey, desc);
return desc;
}
// NB! Ära kasuta API kutseid reaalajas mängu ajal!
// Genereeri sisu eelnevalt ja cache'ita.
API kutsed maksavad raha! Strateegia: genereeri sisu arenduse ajal ja salvesta JSON-failidesse. Mängu käivitudes laadi staatiliselt.
🔧 Samm 4 — Copilot Chat Mänguarenduses
// VS Code'is: Ctrl+I (inline chat) või Ctrl+Shift+I (chat panel)
// ---- KOODISELETUS ----
// Vali kood → "Selgita seda koodi"
// → Copilot annab detailse selgituse
// ---- BUGIDE LEIDMINE ----
// Vali kood → "Leia bugid selles koodis"
// → Copilot tuvastab potentsiaalsed probleemid
// ---- REFAKTOREERIMINE ----
// Vali kood → "/fix optimeeri see game loop"
// → Copilot pakub refaktoreeritud versiooni
// ---- TESTID ----
// Vali kood → "/tests loo unit testid"
// → Copilot genereerib Vitest testid
// ---- DOKUMENTATSIOON ----
// Vali kood → "/doc lisa JSDoc kommentaarid"
// → Copilot lisab JSDoc annotatsioonid
// ---- MÄNGU-SPETSIIFILISED ----
// "Kuidas implementeerida A* pathfinding TypeScriptis?"
// "Optimeeri see collision detection O(n²) → O(n log n)"
// "Loo shader mis teeb water ripple efekti"
// "Kuidas lisada gamepad tugi HTML5 Gamepad API-ga?"
📝 Harjutused
-
Copilot kommentaar-juhtimine
Kirjuta 10 detailset kommentaari ja lase Copilotil genereerida kood. Hinda tulemusi: mitu oli kohe kasutatavad? Mis vajasid parandusi?
-
Prompt Engineering harjutus
Loo EnemySpawner wave-süsteem ainult promptidega. Alusta lihtsast → lisa keerukust iteratiivselt. Dokumenteeri iga prompt ja tulemus.
-
AI-genereeritud mängu sisu
Genereeri 20 item'i nimed, kirjeldused ja stat'id. Salvesta JSON-faili. Laadi JSON mängu ja kuva inventaris. Loo ka quest kirjeldused.
-
Koodiülevaatus AI-ga
Võta oma vana mängukood → lase AI-l analüüsida (bugid, optimeerimised, turvaaugud). Rakenda parandused. Enne/pärast FPS võrdlus.
-
Testide genereerimine
Vali 5 mängufunktsiooni → genereeri igale unit testid AI-ga. Käivita Vitest. Paranda testid mis ei lähe läbi. Saavuta 80%+ katvus.
-
AI + protseduurne genereerimine
Kombineeri AI-genereeritud JSON (seiklus-sündmused) + protseduurne dungeon. Iga ruum saab unikaalse AI-kirjelduse. Cache tulemused.