Verfasste Forenbeiträge
-
AutorBeiträge
-
Fabian
VerwalterUnsere erste Version vom Racing-Spiel findet ihr hier 🙂
Das wären die Schritte, um mit dem Spiel anzufangen, und ein paar Tipps, um zu einen coolen Racing-Spiel zu gelangen:
- Hintergrund erstellen
- Fahrzeuge zeichnen oder als Bilder importieren
- Bei Tastendruck beschleunigen und lenken
- Abbremsen wenn man auf den Rasen fährt -> Überprüfen, ob grüne Farbe berührt wird
- Ziellinie zeichnen
- Rundenzähler erhöhen, wenn man über Start-Ziel fährt –> auch mit Farbe erkennen
- Zeit stoppen, wenn man über Start-Ziel fährt
- Countdown oder Ampel beim Spielstart
- Coole Hintergrundmusik hinzufügen
- Töne beim Gasgeben, Kurve, Ampel oder Crash
- Töne beim durchs Ziel fahren, beim über Gras fahren
- Multiplayer gegen andere Spieler oder eine KI
- Lasst eurer Kreativität freien Lauf, probiert euch aus, habt Spaß!
Viel Spaß!
Fabian
VerwalterTipp 1
Ihr braucht natürlich erst ein neues Thunkable Projekt. Aus der „Add Component“ Liste zieht ihr eine Leinwand („Canvas“) auf euren Screen. Den „Sprite Type 1“ nennt ihr in Ball um, und ihr ladet für den Ball ein Bild hoch oder gibt eine URL ein. Zum Beispiel, die hier. Anschließend draggt ihr einen neuen Ball in eure Leinwand hinein.
Nun seid ihr dran: Wie programmiert man die Bewegung des Balls durch das Ablesen der Beschlueinigungssensoren (Accelerometer)?
Fabian
VerwalterAuflösung
Und hier ist der gesamte Code für das Reaktionsspiel für zwei Spieler:
import machine import utime import urandom led = machine.Pin(15, machine.Pin.OUT) knopfA = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN) knopfB = machine.Pin(17, machine.Pin.IN, machine.Pin.PULL_DOWN) pressed = False ersterGedrueckt = None def button_handler(pin): global pressed if not pressed: pressed=True global ersterGedrueckt ersterGedrueckt = pin while True: print("Los...") led.value(1) utime.sleep(urandom.uniform(5, 10)) led.value(0) knopfA.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler) knopfB.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler) # Warten bis erster gedrückt while ersterGedrueckt is None: utime.sleep(1) print("Gedrückt") # Wer war der erste? if ersterGedrueckt is knopfA: print("Spieler A gewinnt!") elif ersterGedrueckt is knopfB: print("Spieler B gewinnt!") # Spiel für nächste Runde vorbereiten fastest_button = None pressed = False
Ihr könnt natürlich das Spiel für weitere Spieler erweitern. Ihr braucht einfach ein paar mehr Knöpfe, ein paar mehr Pin Definitionen und ein paar mehr Triggers.
Viel Spaß!
Fabian
VerwalterTipp 3
Hier ist der Anfang vom Programm mit der Handler-Funktion:
import machine import utime import urandom led = machine.Pin(15, machine.Pin.OUT) knopfA = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN) knopfB = machine.Pin(17, machine.Pin.IN, machine.Pin.PULL_DOWN) pressed = False ersterGedrueckt = None def button_handler(pin): global pressed if not pressed: pressed=True global ersterGedrueckt ersterGedrueckt = pin while True: ....
Wie geht’s weiter?
Fabian
VerwalterTipp 2
Welche Änderungen müsst ihr in eurem Programm von Woche 1 hinzufügen? Hier ein paar Stichpunkte:
- Ihr müsst ein zweiten Pin als Eingangs-Pin definieren:
knopfA = machine.Pin(16, machine.PIN.IN,...)
- Die Handler-Funktion
def button_handler(pin)
bleibt, muss aber abgeändert werden. Ihr braucht aber keine zweite Funktion. Diese Handler-Funktion wird sowohl beim Drücken vom Knopf an Pin 16 wie beim Drücken vom Knopf an Pin 17 aufgerufen. In der Variablepin
ist der Knopf gespeichert der gedrückt wurde:knopfA
oderknopfB
. - Ihr braucht zwei Triggers im Hauptprogramm:
knopfA.irq(trigger=machine...)
undknopfB.irq(trigger=machine...)
- Danach braucht ihr eine Schleife, die fortlaufend überprüft ob eines der Knöpfe gedrückt wurde und welches es war. Dann soll eine Nachricht in der Kommandozeile erscheinen.
Fabian
VerwalterTipp 1
Erst bauen wir die Schaltung. Wir brauchen wieder eine LED mit einem Vorwiderstand in Serie (hintereinander). Zum Beispiel zwischen GP 15 (Pin 20) und Minuspol (Pin 38). Achtet wieder darauf, dass die Anode der LED (das lange Bein) am GP 15 verbunden ist.
Die zwei Taster, einen für jeden Spieler, bauen wir zwischen jeweils GP 16 (Pin 21) und GP 17 (Pin 22) und dem Pluspol (Pin 36).
Hier das Schaltbild des Pi Picos zur Hilfe.
Fabian
VerwalterAuflösung
Und die Lösung für die erste Weekly Challenge findet ihr
hier.Ihr könnt den Quellcode aus der Datei in Thonny kopieren und auf euren Pi Pico laden. Wie schnell seid ihr beim Knopfdrücken? Könnt ihr meine 200 Millisekunden schlagen?
Fabian
VerwalterTipp 3
Welche Schritte müssen programmiert werden? Hier ein paar Stichpunkte:
- Definition für Handler-Funktion für Knopf programmieren
def button_handler(pin)
: Zeitzähler Differenz berechnenutime.ticks_diff
und in die Konsole schreibenprint()
- LED anschlaten –> eine zufällige Zeit warten (z.B. zwischen 5 und 10 Sekunden) –> LED ausschalten
- Zeitzähler (timer) starten
utime.ticks_ms
und Millisekunden in Variable speichern - Input Request für Knopf mit Handler-Funktion aufrufen
button.irq
Fabian
VerwalterFabian
VerwalterTIPP 1
Als erstes solltet ihr die Schaltung aufbauen. Ihr müsst zwei Input/Output Pins (GP) aussuchen. Zum Beispiel GP 15 (am Pin 20) und GP 16 (am Pin 21).
Zwischen dem einen GP (z.B. GP 15) und dem Pluspol (3.3V an Pin 36) wird der Taster geschalten. Wenn der Taster gedrückt wird, liegen 3.3V an GP 15 an.
Zwischen dem anderen GP (GP 16) und dem Minuspol (Pin 38) kommen die LED und der Widerstand in Serie geschalten. Natürlich müsst ihr darauf achten, dass die LED korrekt verpolt ist. Das lange Bein ist die Anode oder Pluspol und muss zum GP des Pi Picos.
Hier das Schaltbild des Pi Picos zur Hilfe.
Fabian
VerwalterHi Jonathan, als Vorwiderstand, um die LED zu schützen, eigenen sich Werte zwischen 200 und 400 Ohm.
Je höher der Wert desto weniger Strom fließt und die LED leuchtet weniger. Ist der Wert aber zu klein fließt zu viel Strom und die LED kann kaputt gehen.
Die Farbringe geben den Wert des Widerstandes an. Bei einem Widerstand mit vier Ringe wäre der 330 Ohm Widerstand Orange-Orange-Braun. Hier sind die Farb-Codes für die 4-Ring und 5-Ring wiederstände:
-
AutorBeiträge