Permalänk

Hjälp med Pong AI

Hej,

Skulle behöva lite hjälp att komma igång med en pong ai som jag ska skapa.

Klasserna är static så man behöver inte skapa en instans av de.
Variabler:
Ball.getX();
Ball.getY();
Ball.getWidth();
Ball.getHeight();
Ball.getVelocityX();
Ball.getVelocityY();
PaddleHuman.getX();
PaddleHuman.getY();
PaddleHuman.getWidth();
PaddleHuman.getHeight();
PaddleHuman.getVelocityY();
PaddleComputer.getX();
PaddleComputer.getY();

public class AIeasy extends AI{ /// Kod här public double tick() { return Ball.getY(); } }

Tack på förhand

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Avstängd

Jag föreslår att du jobbar med en kompis när du ska göra läxor, det brukar funka bättre då.

Permalänk

Ok tack för tipset men den här gången blev jag utan labb partner.
Så jag skulle behöva lite hjälp med att komma igång.

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem

Känns som pong är en ganska vanlig labbuppgift. Har du provat google? Finns säkert tutorials där.

Visa signatur

i7 4770k @4.3GHz | Asus z87-pro | Asus 1080 | 16GB RAM | Samsung 840 Pro 256GB | 3TB HDD| Corsair RM850
Thinkpad x60 tablet | 3GB RAM | Crucial M4 128GB
Amiga 500+, Commodore 64/128D

Permalänk
Skrivet av Rickybobby:

Ok tack för tipset men den här gången blev jag utan labb partner.
Så jag skulle behöva lite hjälp med att komma igång.

Det enklaste är att börja med att låta datorspelaren följa bollen

Visa signatur

Silverstone TJ08-E | Seasonic X-750 | Asus ROG STRIX M450-I | AMD Ryzen 3700X | Noctua NH-U12P SE2 | Hyper X 32GB | ASUS Strix GeForce GTX 960 | Samsung 840 EVO 120GB

Permalänk
Medlem

AI är inte helt enkelt. Det finns många olika sätt att angripa det på.
Jag kan komma på två stycken på rak arm. Tänk dig hur en perfekt spelare skulle spela spelet. Tänk dig hur en dålig spelare skulle spela spelet. Då brukar det lossna. Oavsett hur du börjar så kan man alltid lägga på handikapp på en svår spelare eller göra responstiden snabbare för en dålig spelare.

Svår AI

Det absolut enklaste AI:t att koda till Pong är att Computer-spelaren följer bollen med exakt samma Y-koordinat (förutsatt att ditt Pong spelas vågrätt). Eftersom det är en helt perfekt spelare så borde du nog kalla den för AIflawlessVictory.

Dold text

Lätt AI

En vanlig enkel AI i Pong är att den följer Y-koordinaten men får en maxhastighet, vilket gör att den inte hinner parera alla gånger. Lite svårare att koda än den enklaste eftersom man måste ta hänsyn till hastighet och eventuellt acceleration.

Dold text
Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Skrivet av Leedow:

AI är inte helt enkelt. Det finns många olika sätt att angripa det på.
Jag kan komma på två stycken på rak arm. Tänk dig hur en perfekt spelare skulle spela spelet. Tänk dig hur en dålig spelare skulle spela spelet. Då brukar det lossna. Oavsett hur du börjar så kan man alltid lägga på handikapp på en svår spelare eller göra responstiden snabbare för en dålig spelare.

Svår AI

Det absolut enklaste AI:t att koda till Pong är att Computer-spelaren följer bollen med exakt samma Y-koordinat (förutsatt att ditt Pong spelas vågrätt). Eftersom det är en helt perfekt spelare så borde du nog kalla den för AIflawlessVictory.

Dold text

Lätt AI

En vanlig enkel AI i Pong är att den följer Y-koordinaten men får en maxhastighet, vilket gör att den inte hinner parera alla gånger. Lite svårare att koda än den enklaste eftersom man måste ta hänsyn till hastighet och eventuellt acceleration.

Dold text

Tack för hjälpen då vet jag iaf hur jag ska börja .
AI ska ha 3st olika svårighetsgrader.

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem

Den lättaste svårighetsgraden borde vara ett ai som bara yrar runt utan någon som helst hänsyn till bollens position

Permalänk
Hedersmedlem

Tips vore väl allmänt att göra faktiskt använda objekt så du kan ha klassarv. Annars kommer du ju ha en hel del upprepning med de där getters som du skrivit.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem

Beroende på hur ofta AI-koden tillåts köras så får du tillämpa olika strategier.
Du vet ju inte hur många gånger spel-motorn kommer att kalla på din AI-kod. Om AI-koden körs varje tick/loop så fungerar en y-positions-följare väldigt bra. Men om AI-koden bara kallas på låt säga var n:te loop så måste målet med koden vara att försöka estimera/uppskatta vart bollen kommer att befinna sig då den når din egen mållinje. Givet detta så försöker AI:n hela tiden att placera paddeln vid den positionen. AI:t blir inte lika känslig för hur ofta/när koden kallas.

Detta bör du kunna lösa genom att räkna ut vart på motståndarens mållinje bollen är på väg (bollens x,y samt hastigheten x,y) ger riktningen. Vid varje träff med en vägg så kan du med en enkel modell hantera hur bollen bör studsa och på så vis följa bollens bana som bara blir en sekvens av räta linjer. När du finner den linje som korsar AI:ts mållinje så vet du vilken position som paddeln "bör" befinna sig på. Så flytta paddeln dit och invänta nästa runda då AI:koden körs och upprepa samma sak. Om inte den förväntade positionen ändrats så behöver ju inte heller paddeln ändras ... fortsätt så tills någon får poäng.

Visa signatur

weeeee

Permalänk

Hur hade du tänkt komma vidare i livet om du behöver hjälp över pseudokod och hints för att skapa en pong-klon? Ett tips du kommer tacka mig för senare: försök att inte fråga förrän du verkligen sitter fast. Det är ofta viktigare att kunna tänka ut algoritmer själv än att memorera dem. Fast inte om man har tidspress förståss

Skickades från m.sweclockers.com

Permalänk
Skrivet av LeMisanthrope01:

Hur hade du tänkt komma vidare i livet om du behöver hjälp över pseudokod och hints för att skapa en pong-klon? Ett tips du kommer tacka mig för senare: försök att inte fråga förrän du verkligen sitter fast. Det är ofta viktigare att kunna tänka ut algoritmer själv än att memorera dem. Fast inte om man har tidspress förståss

Skickades från m.sweclockers.com

Ditt svar svarar inte på någon av mina frågor. Slöderi med tid.

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem

Ricky, hur har det gått för dig med implementeringen. Visa gärna upp något som du producerar och håll en levande dialog kring ditt project

[ot][/ot]

Skrivet av Rickybobby:

Ditt svar svarar inte på någon av mina frågor. Slöderi med tid.

[ot]Och ditt följdsvar blir inte annat än ytterligare vitt brus i etern precis som denna OT-text[/ot]

Visa signatur

weeeee

Permalänk
Medlem

Enklaste är väl

if (AiPos.Y < BallPos.Y) { AiPos.Y = AiPos.Y + Speed; }

Osv

Visa signatur

Motherboard: ASRock Z68 EXTREME3 GEN 3| GPU: XFX PCIe HD7970 BE 3GB GDDR5 CROSSFIRE | CPU: Core i7 2700K @ 3.8GHz | PSU: Corsair HX 850W| SSD: 120GB Corsair SATA Force 3 | HDD1: 1TB Samsung Spinpoint | HDD2: 640GB Western Digital | RAM: Corsair 16GB DDR3 VENGEANCE | Chassi: NZXT Phantom Black | DVD: DVD±RW Samsung 22X DL

Permalänk
Skrivet av Rickybobby:

Ditt svar svarar inte på någon av mina frågor. Slöderi med tid.

Au contraire, jag erbjuder ett bättre svar än alla andra och löser många kommande frågor. Jag sparar alltså både min och din tid. Dessutom bidrar jag till att världen blir en lite bättre plats för alla. Time well spent. Eller egentligen all form av nöje onödig så vidare jag inte själv lär mig av det.

Skickades från m.sweclockers.com