Pong op de PIC XGS (6 / 36 stap)

Stap 6: Spel constructies - spel Logic - botsingdetectie


Dit is veruit de meest moeilijk concept te overwegen bij het schrijven van Pong. Botsingdetectie is inherent geometrische en daarom wiskundige, in de natuur.

De bal heeft nu een manier om te bewegen op een voorspelbare wijze, maar hoe de bal de overgang tussen de verschillende lidstaten? Logischerwijs, bepaalde spel gebeurtenissen zal dicteren de overgangen, maar de volgende stap is om te bepalen wanneer de veranderingen gebeuren en aan precies welke staat. Met dit ontwerp van Pong, wat er moet gebeuren wanneer de bal de boven,- en, naar analogie, onderin het scherm spelen raakt? Breken dit verder te raken van de bovenkant van het scherm, moet de bal omhoog verplaatst worden. Om te simuleren een stuiterende effect, moet de bal worden verschoven naar de neerwaartse richting. Wanneer de verschillende bal-Staten hierboven beschreven werden, de bal heeft twee neerwaartse Staten: hetzij links of rechts.

Analyse moet Ga nu verder in een geval per geval. Daarom nemen de bal gaat naar boven en links net voor de botsing. Verplaatsen naar beneden is de volgende logische stap, maar moet het bewegende links blijven of overschakelen naar rechts verplaatsen? Mochten de bal om de overgang naar een staat van recht voortbewegende, zou de bal omkeren de richting langs de diagonaal die het vandaan kwam, nooit verhuizen naar de andere kant van het scherm. De enige manier voor het bereiken van de andere kant van het scherm van het spel is te blijven bewegen in een linkse richting. Een soortgelijke situatie geldt wanneer de bal naar boven gaat en rechts: verder naar rechts verplaatst en schakel over naar een neerwaartse richting. De neerwaartse gevallen worden symmetrisch behandeld.

Precies wanneer deze overgang wijzigingen gebeuren? Dit houdt onder meer de definitie van een botsing: twee objecten op sommige staat snijpunt zouden botsen. In geval van dit spel zal met de objecten daadwerkelijk elkaar snijden met elkaar leiden tot grafische afwijkingen; de exacte status van snijpunt zal dus wanneer de objecten zijn raaklijn aan elkaar, of gewoon aanraken maar niet overlappen.

Een bespreking van het coördinaat vliegtuig is nu in orde. In vele talen, plotten pixels werkt op een soortgelijke manier. Elke eenheid in een geordend paar is een pixel met de x-coördinaat meten de hoeveelheid pixels vanaf de linker begrenzing van het scherm en afhankelijk van de y-coördinaat meten van de afstand van de bovenkant van het scherm. Laat de huidige resolutie x x Y, waarbij X, Y > = 0. X beschrijft de maximale breedte van het scherm terwijl Y de hoogte van het scherm geeft. De linker bovenhoek van het scherm is (0, 0), terwijl de onderst-juiste hoek is (X, Y). Wanneer u wilt uitzetten een punt 40 pixels links en 20 pixels naar beneden, gebruiken het geordend paar (40, 20). Dus de bovenste regel van het scherm kan worden omschreven als (x, 0), terwijl de lijn van het scherm kan worden aangeduid met (x, Y), waarbij 0 < = x < = X (Zie Figuur 1).

Het blijkt dat (x, 0) en (x, Y) zijn de punten van de botsing binnen het scherm van het spel. Voor de voormalige, het bovenste gedeelte van de bal raakt aan de bovenrand van het scherm van het spel, en de bal moet omzetten in de juiste staat voordat daadwerkelijk elkaar kruisen met de bovenrand. Aangezien alle onze spel-objecten worden beschreven met top links hoeken, zal elk doel van het spel in gegevens met een soort van coördinaten worden vertegenwoordigd. De onderste rand geval werkt dan ook maar met één klein probleem. Als de bal de locatie ooit gelijk is aan (x, Y), dan het moet al worden de doorsnede van de onderste rand van het scherm spel. Aangezien de bal een plein met een constante lengte s is, kan de exacte tangent punt nu gemakkelijk worden berekend. Door af te trekken s van Y, geeft de hoogte van het scherm het punt waar de bal de onderrand raaklijn aan de onderkant van het scherm spel is. Die dit in de vorm van coördinaten, elk punt van de mogelijke botsing kan worden vertegenwoordigd door (x, Y - s).

Een soortgelijke set van botsingen vloeit voort uit het geval wanneer de bal en paddle niet botsen; Kortom, het scoren voorwaarde. Met behulp van de definitie van het coördinaat vliegtuig (0, y) en (X, y) moet de grenzen van het linker- en rechterkant van het scherm van het spel, waarbij 0 < = y < = Y. Aangezien linksboven hoeken van objecten worden gebruikt voor het definiëren van hun locatie, de definitie van de linkerrand, (0, y), kan worden gebruikt voor het vinden van de raakpunten. Net als bij het vinden van botsing punten voor de boven- en onderkant randen, één geval gebruikt de definitie van een rand maar een offset moest worden gebruikt om te zoeken naar de exacte tangent oriëntatiepunt. Als de bal de locatie moest gelijk (X, y), de bal zou hebben al doorsneden met de rechterrand. Aangezien de bal een breedte van s heeft, levert (X - s, y) alle van de raakpunten met de rechterkant van het scherm spel.

Alle van de botsingen van de rand scherm hebben nu expliciet behandeld. De laatste twee gevallen zijn iets moeilijker, zoals dit is wanneer de bal met de paddles aan de linker- en rechterkant van het scherm botst. De berekening is vergelijkbaar met wanneer u werkt met de muur-achtige bovenste en onderste randen van het scherm van het spel, maar de muur wordt nu begrensd, of heeft een zeer specifieke lengte. Waar kan de bal met een peddel eigenlijk botsen?

Eerst, overwegen de linker peddel. Laat h aanduiding van de hoogte van de peddel en w beschrijven de breedte in pixels. Stel dat (pxpy) is de locatie van de peddel en (bx, b,y) beschrijven de locatie van de bal. (Vergeet niet, dit zijn de top links hoeken.) Om te zoeken naar het punt van de botsing, moet de rechterrand van de peddel worden gebruikt. Aangezien de breedte van de peddel is een constante, (px + w, py) de hoogste-juiste hoek van de peddel zal opleveren. Dit is nu de bovengrens van de mogelijke botsing punten met de peddel. Vinden van de lagere juiste hoek zal opleveren van de ondergrens, en dus maken alle mogelijke punten waar de bal kan botsen met de peddel. Aangezien de hoogte van de peddel een constante is, kan de rechterbenedenhoek worden gevonden door het combineren van de berekening van de rechterrand en h, opbrengst (px + w, py + h). Eigenlijk om te controleren of de botsing, vergelijk de locatie (bx, b,y) met (px + w, py + h). Dus wanneer bx = px + w en py < by = < = py + h, een botsing optreedt (Zie Figuur 2).

De juiste peddel heeft een symmetrische probleem met de berekeningen. Aangezien de linker bovenhoek wordt gebruikt voor het vertegenwoordigen van de locaties, de linker rand is praktisch gezien, dus alle punten tussen (pxpy) en (px, py + h) zijn de mogelijke raakpunten. Maar nu de rechterrand van de bal is nodig om te vinden van de botsing. Aangezien s is de lengte van een zijde van de bal, levert bx+ s de hoogste juiste hoek van de bal. De bovenstaande redenering kan nu werken, zodat de botsing precies plaatsvindt wanneer bx + s = px en py < by = < = py + h.

Een laatste ding verlaten om te bespreken: wat er moet gebeuren wanneer de bal met de peddels botst? Als de bal botst met de peddel, dan de horizontale staat moet om over te schakelen, anders zou de bal gaan via de peddel. De volgende duidelijke vraag betreft de verticale stand van de bal. Stel dat de bal gaat omhoog; vervolgens mochten de bal spiegelen de verticale staat, of naar beneden gaan, zou vervolgens de bal terugkeren zijn dezelfde diagonale weg omdat de bal de horizontale staat draait. Daarom is de verticale staat hetzelfde moet.

Een interessante tendens kan nu worden opgemerkt tussen de relaties met de botsingen en de Staten van de bal. Als de bal met de bovenste of onderste rand botst, spiegelen de verticale staat. Als de bal alsof het met een van de peddels, een linker- of rechterrand botst, spiegelen de horizontale stand.

Gerelateerde Artikelen

Interactieve LED Beer Pong tafel

Interactieve LED Beer Pong tafel

Maak uw eigen interactieve LED Beer Pong tafel!Dit instructable zal u door alle stappen te begeleiden om het maken van een one-of-a-kind bier pong tafel compleet met kopje opsporen van RGB peulen, automatische bal sluitringen, een 32 x 12 ping pong b
Handheld Pong & Invaders op de goedkope (Arduino compatibel)

Handheld Pong & Invaders op de goedkope (Arduino compatibel)

Een retro hand-held gaming systeem goedkoop genoeg voor een kids' project. Mogelijk? Absoluut! Breng enkel op de kracht van Arduino en goedkope Chinese onderdelen!Dit project werd ontworpen als een soldeer project voor een groep van half-een-dozijn 9
Hoe maak je een ping pong ball gun

Hoe maak je een ping pong ball gun

ben je moe van office/klas/achtertuin oorlogen zonder stijlvolle of efficiënte wapens?Moe van het krijgen schot met een goedkoop plastic bb gun dat doet pijn als hel en pauzes na 5 schoten?Wilt u uw collega's / vrienden zonder zorgen over het gevaar
Pong Watch

Pong Watch

tijd voor een ander retro project, ditmaal een draagbaar - altijd op - Pong Watch. Geïnspireerd door de klassieke video game, Pong.Hier is de video van het in actie.https://Youtu.be/E3OZoS39RkkStap 1: Onderdelenlijst Horloge behuizing - goedkope 99p
De vier spelers koffietafel Pong Video Game.

De vier spelers koffietafel Pong Video Game.

UPDATE 12 APRIL 2011Belangrijk! Ik heb in kennis gesteld van een probleem met de printplaat ontwerp met betrekking tot de twee drukknoppen. Om de knoppen goed te laten werken moet u hen verbinden met de haven uitbreiding in plaats van de aansluitinge
Pimp mijn Pong

Pimp mijn Pong

maandag 9 maart:Ik krijg wind van dit Think Geek hacks contest, een week laat, franticly, ik raakte thinkgeek.com op zoek naar een gemakkelijk doden, budget en ideeën die zowel lege opdagen.Hoe zit het met die pong kit ~ 2 jaar geleden kocht ik van h
Ping-Pong Blinky

Ping-Pong Blinky

Ok, ik kocht de TI MSP-EXP430G2 Dev-bestuur een tijdje geleden, en het was over de keer dat ik het uit, zoals altijd, met LED's en Ping-Pong balletjes probeerde.Het verdwijnt tussen de kleuren.U moet:Een 2xAA batery houder, met 2 AA-batterijenEen 9v
Gemakkelijke opklapbare Ping-pong tafel

Gemakkelijke opklapbare Ping-pong tafel

Laten we een opklapbare ping pong tafel als mijn eerste DIY-project gepubliceerd in instrucables.com. De werkelijke afmetingen van een een ping pong tafel zijn 274 x 152 cm, als gevolg van de moeilijkheid van vervoer, onze tafel zal hebben de volgend
Ping Pong Ball Full colour Binary Clock

Ping Pong Ball Full colour Binary Clock

Kleur veranderende binaire klok 24 uur met behulp van ping pong ballen en full-colour LED's en een Funduino 8 * 8 matrix bord.Ik heb al een kleine 12Hr binaire klok gebouwd en het voorzien in een computer, dit werkte heel goed, maar was slechts echt
Een ping pong bal bij zal drijven!

Een ping pong bal bij zal drijven!

Hallo!Ik heb altijd gefascineerd door dingen die draadloos worden gecontroleerd door bewegingen van de hand die waarschijnlijk waarom ik een Wii eigen nu dat ik ben te denken over het. Maar ik heb niet echt gekregen om controle van de beweging van mi
PIC 12F675 programmeur/OscCal herstellen/Tester

PIC 12F675 programmeur/OscCal herstellen/Tester

Een van mijn circuits dat ik heel vaak (20-40 tegelijk), gebruik een PIC 12F675 bouwen. Ik had de volgende problemen:De planken die ik maak, heeft geen in-circuit programming mogelijkheden. Dit is om voor de lay-out van een klein PC-bestuur. Foto's m
Laat een PIC microprocessor program

Laat een PIC microprocessor program

OK hoe hard kan een PIC microprocessor programmering worden?Nou het hangt ervan af, sommige zijn harder dan anderen voor verschillende redenen, de programmeertaal, het type microprocessor, het gebruiksgemak van de software voor het bewerken en vooral
Low-Cost IC Test Clip voor PIC ICSP

Low-Cost IC Test Clip voor PIC ICSP

Ik maakte de Low Cost IC Test Clip voor ICSP voor PIC Microcontrollers.http://Neo-Sahara.com/wp/ic_test_clipStap 1: Koperen band en doek peg gebruiken.Stap 2: De koperen tape zetten op de doek peg en snijd de tapes als 2,54 mm pitch.Stap 3: Soldeer k
Ping Pong Ball Sparkler

Ping Pong Ball Sparkler

Ik vonk beetje.Stap 1: verzamelen Verzamelen een ping pong bal en een doos of twee van de Sprite bommenStap 2: Maak een gat Maakt een klein gaatje in de balStap 3: Plaats ballen In Plaats van de kleine bommen binnenStap 4: gooien Kunt u over 5-6 grot