Pong på XGS bild (34 / 36 steg)
Steg 34: Pong - Gamepad Input
Den teoretiska analysen av både spelare indata och AI lämnade ut en nyckel, men intuitivt, aningen: paddlar bör inte flytta utanför skärmen. Kollision upptäckt sett bollen inte skulle gå utanför skärmen av lek, men nästa steg är att se till att spelaren och AI inte kan flytta utanför denna samma gräns. Genom att hävda att paddlar bo innanför skärmen, spelare frustration hålls till ett minimum och det finns inga försök att rita objekt utanför skärmen synlig. Grafikdrivrutiner får uttryckligen inte kontrollera att platsen är ett giltigt värde, så funktionerna grafik kan försök att skriva till minnet utanför den video buffert.Lösningen är samma för både spelare och AI: innan du försöker flytta paddla, bara hävda att paddla inte är på en viss kanten av skärmen. Eftersom paddlar kan endast gå vertikalt, finns det endast två fall. Anta att paddla försöker flytta uppåt. Innan du ändrar den logisk platsen, kontrollera y-koordinaten. Om detta är 0, då paddeln är tangent till toppen av skärmen och bör inte flytta uppåt mer.
Som lämnar fallet där paddeln går nedåt. Sedan paddla höjden är en konstant, h, då den lägsta punkten för det övre vänstra hörnet måste vara (x, Y - h), där x är den horisontella fixpunkt för paddeln och Y är skärmhöjd. Att gå någon lägre skulle innebära paddeln inte är bara Tangerande, utan korsande, med nederkanten av skärmen.
Nu, för några fräschare innehåll. Spel indata måste vara inklämt mellan bollen rörelse och kollision upptäckt koden, men det finns inget samband mellan koden i AI och spelet in koden. Drivrutiner, ger igen, en trevlig funktion för hantering av gamepad input på XGS bild. Funktionen Gamepad_Read() tar en konstant som ett argument som bestämmer vilka gamepad att läsa (GAMEPAD_0 eller GAMEPAD_1) och returnerar ett tal som representerar vad knappen trycks. De enda knapparna som krävs för detta spel är upp och ner knappar på D-pad, företrädd av GAMEPAD_UP och GAMEPAD_DOWN, respektive.
Använder en switch-sats för att läsa indata, för varje fall, är det enda att göra att justera p1_y på rätt sätt, med en hitch. Som AI paddla, ska paddla inte rulla på skärmen. Lösningen är exakt samma, helt enkelt kontrollera att det finns fortfarande utrymme för att flytta paddeln innan du justerar p1_y. Spelet ingången koden ska se ut:
Switch (Gamepad_Read(GAMEPAD_0)) {
fall GAMEPAD_UP:
om (p1_y! = 0)
p1_y--;
bryta;
fall GAMEPAD_DOWN:
om (p1_y! = SCREEN_HEIGHT-PADDLE_HEIGHT)
p1_y ++;
bryta;
}