V10: Bewegen der Formen und Kollisionserkennung Steuerung der Spielsteine durch Tastenbefehle (Übersicht der Befehle unter der Hilfe)

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Aufgabe: Wie stellt man eine for-Schleife durch eine while-Schleife dar ?
Konzepte objektorientierter Systeme
Definition von Klassen in Java
Übung zur Numerische Geologie
Suche in Texten (Stringsuche )
Rekursion Was ist Rekursion? Was sind rekursive Methoden?
V04: Definition und Implementierung der Formen. Spieler kann aus Gesamtzahl von 35 Steinen seine Spielsteine wählen Einheitliche Datenstruktur wird benötigt,
VO2 Laden und Initialisieren der Sounds. Wir wollen Sounds in unsere Applikation laden Menü erweitern –um den Menüpunkt Sound –mit dem Identifier ID_ULTRIS_SOUND.
Ultris Version 8: Erzeugen der Formen und Anzeigen der Vorschau
Ultris V10 Bewegen, Drehen und Kollisionserkennung.
V11 Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden ___________________________________ class ultris { private: … void aufloesen(); void.
Funktionen.
Felder sortieren. Aufgabe: Die Zahlen eines Feldes sollen der Größe (zuerst die kleinste Zahl) nach sortiert werden.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Algorithmen und Datenstrukturen
V10 - Kollisionen Nicolas Matentzoglu. Inhalt der Präsentation Kollisionserkennung bei Hindernissen Verhalten der Kugel über verschiedenen Untergründen.
V03 Laden und Initialisieren der Grafiken - Grafiken des Spiels laden und testweise auf dem Bildschirm anzeigen - eine Klasse anlegen, die alle erforderlichen.
V09 Fallende Formen, Geschwindigkeitsregelung und Timing Daniel Ebner Spieleprogrammierung mit DirectX und C++
Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen Sibylle C. Schellhorn,
Vers. 6: Der Konfigurationsdialog Quelle: Spieleprogrammierung mit DirectX und C++, U. Kaiser und P. Lensing, Galileo Computing (2007)
Spieleprogrammierung mit DirectX und C++
V03 Laden und Speichern von Spielfeldern und der Spielfeldeditor.
V11 Auflösen der Formen Abräumen der Reihen. Erweiterung der Klasse ultris class ultris { private: … void aufloesen() void aufruecken() public: … }
Zusammenfassung Vorwoche
DVG Ablaufsteuerung
Einführung in die Programmierung Datensammlung
Bestimmung des ggT zweier Zahlen
Vererbung Einfache Vererbung – Erben von abstrakten Klassen – Implementieren eines Interfaces.
Struktogramme IF-ELSE FOR – Schleife
3D Programmierung Version 12 - Highscores. Die vom Spieler erzielte Punktzahl wird mit 5 vorgegebenen Punktzahlen verglichen und, falls nötig, in die.
Hanjie Hanjie Hanjie ist ein japanisches Bilderpuzzle, das aus dem späten 18. Jahrhundert stammt. Jedes Hanjie besteht.
Java programmieren mit JavaKara
Einfache Syntax einer Matrix
Guten Nachmittag!.
Wir haben gesehen Das Gerüst ist bei JavaKara fix vorgegeben
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
11. Tabellen 11.1 Grundlegende Tabellenbearbeitung
Einführung in die Programmiersprache C 4
Instrumentenpraktikum
Informatik 1 Letzte Übung.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Grundkonzepte des Programmierens (mit ActionScript)
Aufruf einer Methode eines Objektes vom Typ „Bruch“
Purga - Scriptengine Ein Einblick.
LEGO NXT Roboter in Java programmieren
Variablen. var meineZahl:Number = 7; meineZahl 7 Name TypWert = Zuweisung von Variablen.
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
early binding (frühe Bindung) late binding (späte Bindung)
Was ist eine Excel-Tabelle? Aus: Von Ulrich Rapp.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/041 Übungsaufgabe Ergänzt die Klasse Dreieck aus der Hausaufgabe um eine Methode,
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Java Programme nur ein bisschen objektorientiert.
Klausur „Diskrete Mathematik II“
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Wiederholungen mit Zähler
Nksainf.ch/oinf.
Grundkurs Informatik mit Java
 Präsentation transkript:

V10: Bewegen der Formen und Kollisionserkennung Steuerung der Spielsteine durch Tastenbefehle (Übersicht der Befehle unter der Hilfe)

Identifier: IDM_DREHRECHTS IDM_DREHLINKS IDM_RECHTS IDM_LINKS Jeder Identifier wird für 2 Tasten verwendet Identifier werden später im Callback-Handler eingefügt Benutzerschnittstelle Akzelleratoren anlegen

LRESULT CALLBACK ultris_windowhandler(…) {... case IDM_DREHRECHTS: mein_spiel.drehen(1); return 0; case IDM_DREHLINKS: mein_spiel.drehen(-1); return 0; case IDM_RECHTS: mein_spiel.bewegen(1); return 0; case IDM_LINKS: mein_spiel.bewegen(-1); return 0;... } Zahl als Übergabewert

Neue Methoden der Klasse class ultris: void bewegen( int dir); // -1 eins nach links +1 eins nach rechts void drehen(int dir); // -1 eins nach links +1 eins nach rechts Übergabewerte in der Variable dir werden zur Steuerung verwendet

void ultris::bewegen( int dir) // -1 eins nach links +1 eins nach rechts { int z, s, // Zeile und Spalte im Spielstein int neue_spalte; const form *f; f = aktuelle_form(); //aktuelle Form wird geholt neue_spalte = spalte + dir; //Berechnung der neuen Spaltenposition if( neue_spalte < 0) return; if( neue_spalte + f->b > 10) return; // Abbruch, falls neue Position außerhalb des Spielfelds Bewegung

for( z = 0; z h; z++) //Durchlaufen der Zeilen { if( zeile+z < 0) continue; // falls Zeile noch unterhalb der Abdeckung, keine weiteren Prüfungen for( s = 0; s b; s++) //alle Spalten der Zeile durchlaufen { if( f->data[z][s]) //befindet sich in der aktuellen Zeile und Spalte der Form ein Segment (1), wird weiter geprüft { if( (offset < 16) && spielfeld[zeile+z][neue_spalte+s]) return; //Bedingungen, unter denen keine Bewegung ausgeführt wird: 1. Offset ist kleiner als Spalte neben betrachteten Segment ist belegt

Wichtig: Spalte neben Segment muss immer frei sein Begrenzung auf ein Offset unter 16 schafft ein ausreichend großes Zeitfenster, um Segmente in Lücken einzuschieben. if( (offset < 16) && spielfeld[zeile+z][neue_spalte+s]) Je kleiner die Offset-Grenze, desto früher kann man den Spielstein verschieben.

if( (offset > 0) && spielfeld[zeile+z+1][neue_spalte+s]) return; // Ist das Offset größer als 0, muss auch die nächste Zeile der benachbarten Spalte frei sein, damit Bewegung nicht abgebrochen wird. } spalte = neue_spalte; ultris_sounds.play( sound_move); } // Letztendlich wird neue Spaltenposition übernommen, falls alle Tests überstanden wurden.

alle Steine werden überprüft bei komplizierteren Formen wäre es schwierig, die vordersten Segmente auszumachen

Drehung void ultris::drehen(int dir) { int sv, sp, zl; int b1, b2, h1, h2, db, dh; int maxb, maxh, minz, mins; int i, j; sv = (formen[0].dv dir)%4; // Index der gesuchten Drehvariante wird bestimmt

b1 = aktuelle_form()->b; b2 = ultris_form[formen[0].ix][sv]->b; h1 = aktuelle_form()->h; h2 = ultris_form[formen[0].ix][sv]->h; //Breite und Höhe der aktuellen Form und der Drehvariante werden ermittelt db = (b1-b2)/2; dh = (h1-h2)/2; sp = spalte+db; zl = zeile+dh; //Drehung der Form um den Mittelpunkt Halbe Höhen- und Breitendifferenz (db und dh) ergibt die neue Zeile (z1) und Spalte (z2)

if( sp < 0) sp = 0; if( sp+b2 >= 10) sp = 10-b2; //Gedrehte Form soll nicht außerhalb des Spielfeldes liegen if( zl+h2 >= 20) return; //Keine Drehung, wenn Figur unten aus dem Spielfeld ragt mins = spalte < sp ? spalte : sp; minz = zeile < zl ? zeile : zl; maxb = b1 > b2 ? b1 : b2; maxh = h1 > h2 ? h1 : h2; if( offset) maxh++; //Bestimmung des Bereichs, der für die Drehung frei sein muss (rechteckiger Bereich, um die Form)

for( i = minz; i < minz+maxh; i++) { for( j = mins; j < mins+maxb; j++) { if( (i>=0)&&(i =0)&&(j<10)&&spielfeld[i][j]) return; } //Befindet sich ein Stein im Weg, erfolgt der vorzeitige Rücksprung formen[0].dv = sv; spalte = sp; zeile = zl; ultris_sounds.play( sound_dreh); } //Wenn alle Prüfungen überstanden sind, wird die Drehvariante übernommen und der Drehsound abgespielt