Spiel ‘Kisten Schieben’ / BoxMoveGame
Ziel des Spiels ist es, Kisten mit einem ferngesteuerten Lego Mindstorms Roboter-Fahrzeug vom Startfeld ins Zielfeld zu schieben. Wer zuerst alle Kisten vom Start zum Ziel geschoben hat, hat gewonnen. Die Kisten sind CD-Boxen, mit einem Fiducial beklebt. Das Fahrzeug ist ebenfalls mit einem Fiducial beklebt. So kann es sich selbst, die Kisten und andere Fahrzeuge über FIPS (FujabaIndoorPositioningSystem) Positionsdaten erkennen. Jedes Fahrzeug hat ein Start- und ein Zielfeld. Das Start- und Zielfeld sind mit einer Geraden verbunden, die über eine Ampelkreuzung führt. Weiterhin existiert ein längerer ampelloser Umgehungsweg. Es spielen zwei Fahrzeuge gegeneinander, die jeweiligen Geradenverbindungen zwischen Start- und Zielfeld sind orthogonal zueinander angeordnet. Der Umgehungsweg besteht aus einem Kreis, den alle Fahrzeuge gemeinsam benutzen. Dort darf nur im Uhrzeigersinn gefahren werden, der Kreisverkehr hat Vorfahrt. Das Spielfeld wird momentan durch folgende grafischen Zeichenkommandos beschrieben:
int xoff = 59;
int yoff = 13;
g2.translate(xoff, yoff);
g2.setColor(Color.BLACK);
g2.fillOval(0, 0, 300, 300);
g2.setColor(Color.WHITE);
g2.fillOval(40, 40, 220, 220);
g2.setColor(Color.BLACK);
g2.fillRect(130, 40, 40, 220);
g2.fillRect(40, 130, 220, 40);
g2.setColor(Color.RED);
g2.drawRect(120, 120, 60, 60);
g2.setColor(Color.BLUE);
g2.drawRect(40, 130, 40, 40);
g2.drawString("Sv", 80, 150);
g2.drawString("Sh", 150, 80);
g2.drawRect(130, 40, 40, 40);
g2.setColor(Color.GREEN);
g2.drawRect(220, 130, 40, 40);
g2.drawRect(130, 220, 40, 40);
(Einheit in cm)
Hier das Spielfeld als Screenshot aus dem Simulator:
Die Ampel der Kreuzung in der Mitte arbeitet folgendermaßen: Es gibt die Zustände ‘horizontal Grün/vertikal Rot (PH)’, ‘horizontal Rot/vertikal Grün (PV)’, ‘beide Richtungen Rot (AR)’. AR ist der Startzustand, d.h. nach Systemstart ist mindestens 7,5s für alle Rot. Zwischen zwei Grünphasen (PH oder PV) folgt immer eine AR-Phase. Die Ampel wird nur auf Aufforderung grün: dazu ist ein requestHorizontal() bzw. requestVertical()-Aufruf abzusetzen. Die erste Anforderung wird zuerst bedient. Fordern beide Seiten, auch mehrmals, Grün an, wird immer abwechselnd geschaltet (mit AR dazwischen). Die Folge PH->AR->PH tritt also nur auf, wenn horizontal Grün angefordert wird und für Vertikal keine Anforderungen eingehen. Alle, also auch mehrfache Anforderungen für eine Grün-Richtung werden beim Wechsel von AR zu dieser Grünphase gelöscht. Die eingegangenen Anforderungen werden zu Beginn nach Ablauf der Minimalzeit in (changed 17.5.10) der AR-Phase ausgewertet (d.h. man hat die ganze Grün-Phase und die AR-Phase Zeit, wieder Grün anzufordern…). Die Komplett-Rot-Zeit (Zustand AR) beträgt mindestens 7,5s (mehr wenn keine Anforderung anliegt). Ist die Ampel im AR-Zustand und es liegen keine Anforderungen an, wird nach Ablauf der minimalen Komplett-Rot-Zeit sofort auf Grün geschaltet, sobald eine Anforderung eintrifft. Die Grün-Zeit (Durchfahrzeit, von PH/PV) beträgt ebenfalls 7,5s.
Regeln zum Ablauf
- Anzahl der Kisten pro Fahrzeug = 4, d.h. das Spiel ist zuende wenn ein Fahrzeug 4 Kisten ins Zielfeld geschoben hat.
- Roboter starten an der Position (80,150) bzw. (150,80) (etwa da wo Sh/Sv im Bild steht) mit Ausrichtung nach ‘aussen’.
- Es befindet sich immer nur eine Kiste im Startfeld. Sobald eine Kiste aus dem Startfeld geschoben wurde, wird die nächste hineingelegt.
- Kisten die ins Zielfeld geschoben werden, werden sofort herausgenommen.
- Kisten dürfen auf dem Spielfeld liegen gelassen werden. Sie werden nach 60s ohne Bewegung wieder herausgenommen bzw ins Startfeld gelegt. (added 17.5.10)
- Es müssen die ‘eigenen’ Kisten in das Zielfeld geschoben werden.
Fahrregeln
- Man darf bei Rot die Ampelzone (Quadrat von 60cm Kantenlänge) in der Mitte nicht befahren, und muss auch innerhalb der Grün-Dauer wieder heraus fahren. Entscheidend ist hier die FIPS-Position, nicht die Außenmaße. Eine Kiste darf bei Rot ebenfalls nicht in die Ampelzone geschoben werden.
- Man darf kein anderes Fahrzeug rammen. Bei einem Fahrzeug, dass mit der Gabel eine Kiste schiebt, gilt die Kiste als Teil des Fahrzeugs.
- Man darf die Strecke (Schwarz) nicht verlassen. Entscheidend ist hier die FIPS-Position, nicht die Außenmaße.
- Man darf die gerade Fahrstrecke des Gegners nicht befahren (Ausnahme: Kreuzungszone).
- Im äußeren Kreis darf nur im Uhrzeigersinn gefahren werden
- Wer im äußeren Kreis fährt, hat Vorfahrt vor einem einfahrenden Fahrzeug (removed 17.5.10)
- Wird eine Kiste (versehentlich) so geschoben, dass das Fahrzeug sie nicht wieder aufnehmen kann, ohne die Strecke zu verlassen, wird die Kiste herausgenommen bzw. ins Startfeld gelegt.
- Bewegt sich ein Fahrzeug an beliebiger Stelle für 30s nicht, wird es auf sein Startfeld(!) gesetzt (added 17.5.10)
Bei Regelverletzung wird das Fahrzeug auf das eigene Zielfeld(!) gesetzt (Ausnahme bei Kollision: ein Fahrzeug, dass zum Kollisionszeitpunkt stand, nicht, nur der Kollisionsverursacher). Falls es eine Kiste geschoben hat, wird diese herausgenommen bzw. ins Startfeld gelegt.
Sonstige Beschränkungen:
- maxMoveSpeed = 22,25 (cm/s), entspricht 50rpm
- maxTurnspeed 170°/s