Stap 28: AI Paddle Demo - uitvoering van AI
Nu voor de interessante deel: het AI-algoritme. De voor de hand liggende aanpak om het middelpunt van de peddel Volg altijd de bal biedt een uiterst brutale tegenstander en weinig kans voor de speler om te scoren. Een meer vergevingsgezind algoritme volgt de bal als het in de juiste staat en voorbij een bepaald gedeelte van het scherm. Aangezien de AI-gecontroleerde peddel aan de rechterkant van het scherm is, moet de bal in een recht voortbewegende staat voor een botsing te voorkomen. Wanneer het kiezen van een x-locatie om te beginnen de AI-control, hoe dichter de keuze aan 0, hoe moeilijker de AI is, als de AI zal hebben meer tijd om te halen om de bal de huidige y-coördinaat. Met behulp van een derde van het scherm als een dode zone biedt een uitdagende tegenstander.Dus, als de bal in een staat van recht voortbewegende en voorbij het middelpunt van het scherm is, moet de AI proberen om overeenkomen met het middelpunt van de peddel met het middelpunt van de bal naar het maximaliseren van de mogelijkheid van een botsing. Vandaar, als de bal zich momenteel boven het middelpunt van de peddel, de peddel moet omhoog verplaatsen of verlagen van de y-coördinaat van de locatie. Ook als de bal op dit moment onder het middelpunt van de peddel, moet de peddel verplaatsen naar beneden, of ophogen van de y-coördinaat van de locatie.
Een laatste overweging: de AI peddel rollen moet niet vandoor naar de zeef. Dit kan gebeuren als de peddel is afhankelijk van de raaklijn aan de bovenkant van het scherm en de bal is nog steeds omhoog. Een ander geval bestaat symmetrisch als de bal naar beneden beweegt. De eenvoudigste oplossing is het controleren van de locatie van de peddel alvorens de peddel in de respectieve richting. Een soortgelijke bezorgdheid ontstaat voor speler inbreng in de volgende fase. De volledige AI algoritme zal als volgt uitzien:
if (state_x == BALL_RIGHT && ball_x >= SCREEN_WIDTH/3) if (ball_y+BALL/2 > p2_y+PADDLE_HEIGHT/2) { if (p2_y < SCREEN_HEIGHT-PADDLE_HEIGHT) p2_y++; } else if (p2_y > 0) p2_y--;