Montag, 28. Januar 2013
Von der Kunst, alles wegzuwerfen.
Manchmal muss man einen Ansatz komplett verwerfen, sich frische Gedanken zu einem Thema machen, einen Neuanfang wagen. Das erlaubt, einmal tief durchzuatmen, aus gewohnten Denkmustern auszubrechen und etwas Neues zu schaffen, etwas Besseres, Größeres, Schöneres.

In unserem Falle ist dies, was die Plattform-Features-Gruppe durchgemacht hat. Die erst kürzlich fertiggestellte Lokalisierungs-Schnittstelle wurde komplett neu begonnen, ist nun deutlich schlanker, einfacher zu benutzen und übersichtlicher. Sie verzichtet nun auf eine Datenbank, um die Übersetzungen zu speichern, und liest stattdessen die ohnehin benötigten Sprachdateien des Client-Projektes aus. Zudem bietet der neue ViewLokalisierer - wie der Name bereits impliziert - die Funktionalität, Views zu lokalisieren, ohne, dass diese manuell jedes Mal gecastet werden müssen.



Montag, 21. Januar 2013
Nach einer langen Zeit...
Nach einer langen Zeit kommen auch wieder neue Ergebnisse zum Bombermanspiel.
Es ist viel passiert in und nach der Weinachtszeit.
Wir haben das gesamte Menü verändert, damit dieses auch skalierbar ist und auf jedem Display gleich und nicht versetzt erscheint.
Das neue Startmenü zum Bombermanspiel.
Des weiteren wurde auch am Spielfeld viel erneuert.
Unter anderem:
- Neue Steuerung
- Bombe legen funktioniert
- Bombe explodiert
- Blöcke werden zerstört
- Items kommen aus Blöcken
Hier ist ein kleiner Ausschnitt aus dem Spiel.
Das aktuelle Spielfeld des Bombermanspieles, wo eine Bombe explodiert.
Insgesamt geht es mit nun mit großen Schritten unserem Ziel entgegen.



Von Highscores, Übersetzungen und Frustration
Der zweite Sprint war für die Features-Gruppe ein besonders aufreibender. Die teils sehr verwirrenden (oder zumindest dem bislang nicht mit Android in Kontakt gekommenen Entwickler nicht einleuchtenden) Konzepte von Android sowie Einschränkungen der Android-Plattform machten uns die Arbeit schwer.

Dennoch haben wir es nun geschafft, ein funktionierendes System zur Abspeicherung von Highscores zu schaffen, das im Nonogramm-Spiel bereits Anwendung findet und mittlerweile gut getestet ist. Zudem entwarfen wir eine Schnittstelle zur zentralen Steuerung der Plattformsprache und konnten erfolgreich die Idee verwerfen, die bekannten Meldungs-Klassen um eine Möglichkeit, eine Meldung mit zwei möglichen (bearbeitbaren) Antworten ausgeben zu lassen.

Gerade letzteres wurde zu einer echten Zerreißprobe für unser aller Nerven: Da unser Ziel ist, durchgängig möglichst einfach anzusprechende Schnittstellen zu entwerfen, wollten wir lediglich eine einzige Funktion schaffen, deren Rückgabewert Auskunft über die Entscheidung des Benutzers gibt. Problematischerweise sind die Android-Klassen, die erlauben, einen Dialog mit mehreren Schaltflächen anzuzeigen, so gestaltet, dass sie asynchron arbeiten: Die Funktionen, die die Anzeige auslösen, kehren sofort zurück und blockieren nicht so lange, bis ein Ergebnis feststeht. Dementsprechend wäre es auch nicht ohne großartige Hacks möglich gewesen, unsere Funktion synchron zu gestalten. Im nächsten Sprint steht nun eine asynchrone Umsetzung dieser Funktionalität an.

Die Lokalisierungs-Schnittstelle erhält, während ich diese Zeilen schreibe, gerade ihren letzten Schliff: Generell ist sie bereits funktional, es fehlt lediglich noch das Eintragen der Übersetzungen in die Datenbank sowie eine Möglichkeit, plattformeinheitlich die zu verwendende Sprache einzustellen.



Samstag, 19. Januar 2013
Gruppe Nonogramme: 2. Sprint beendet
Die Gruppe Nonogramme hat gestern ihren zweiten Sprint beendet. Dafür sollten wir abhängig von der Levelauswahl die Spielfeldgröße berechnen (genaueres siehe letzter Beitrag) und haben somit verschiedene Schwierigkeitsstufen. Weiterhin wurde ein Timer eingebaut, der die Zeit misst, die für das Lösen eines Nonogramms benötigt wird.



Dieser ist auch für die Berechnung des Highscores möglich, was ebenfalls Bestandteil des Sprints war, jedoch in den Aufgabenbereich der Gruppe PlattformFeatures fällt. Die Schnittstelle zwischen Spiel und Plattform für die Speicherung der Highscores ist mittlerweile geschaffen und nach Beendigung eines Nonogramms werden zuerst ein "Geschafft-Bildschirm" und anschließend die aktuelle Top10 Liste für den jeweiligen Schwierigkeitsgrad angezeigt.



Der User hat auch die Möglichkeit, das Spiel zu pausieren und nach einer gewissen Zeit weiterzuspielen. Während der Pause wird der Timer gestoppt und anschließend wieder an der gleichen Stelle gestartet.
Außerdem ist das Tutorial nun vollständig, das dem User Step-by-Step ein Nonogrammspiel erklärt.
Eine der aufwenigsten Aufgaben war die Skalierung der Grafiken und des Spielfeldes abhängig von der Displaygröße. Dies hat uns einiges an Zeit gekostet, hat aber letztlich funktioniert.



Mittwoch, 9. Januar 2013
Gruppe Nonogramme: versch. Spielfeldgrößen
Die Gruppe Nonogramme kann nach den Ferien einige Fortschritte im zweiten Sprint vorweisen.
Zunächst einmal werden die Lösungen für die einzelnen Nonogramme zufällig generiert, wodurch es möglich ist, verschiedene Nonogramme zu spielen. Zudem ist es mittlerweile möglich, vom Hauptmenü aus in die Levelauswahl zu gelangen und anschließend wird die Spielfeldgröße abhängig von der Levelauswahl generiert. Somit können verschiedene Nonogramme in unterschiedlichen Schwierigkeitsstufen gespielt werden.

Hauptmenü


Levelauswahl


Spielfeld in der Größe 7x7



Ein weiterer Fortschritt ist, dass vom Spiel ins Hauptmenü zurückgekehrt oder ein neues Spiel gestartet werden kann.
Weiterhin haben wir die Credits und das Tutorial eingebunden.

Tutorial



Dienstag, 18. Dezember 2012
Gruppe Platform: SQLite database handler
Unsere Gruppe hat in der letzten Woche einen Datenbank-Handler erstellt, welcher die Kommunikation zu unserer SQLlite Datenbank herstellt und in dieser Informationen verarbeitet.

gelöste Problematik: Cursor

Um mit der verbundenen Datenbank arbeiten zu können, werden sogenannte Cursor (dt. Positionsanzeigen) benötigt. Einen Cursor kann man sich ähnlich wie den blinkenden Strich in Textverarbeitungsprogrammen als aktuelle Bearbeitungsposition innerhalb der Datenbank vorstellen. Erst mit solchen Cursorn können wir Datensätze verändern oder abfragen, wobei es zu einer Datenbankverbindung beliebig viele Cursor geben kann. Ein neuer Cursor kann mithilfe der cursor-Methode des Connection-Objekts erzeugt werden.

ContentValues:

Android bietet eine unzählige Menge an verschiedenen Klassen, die die SQLite-Datenbank Zugriffe erleichtern. Mit der Klasse ContentValues können Tabelleninhalte hinzugefügt oder verändert werden.


Quellcode SQLiteDBhandler:
-----------------------------


package classes;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class Datenbank extends SQLiteOpenHelper {
SQLiteDatabase datenbank;

public Datenbank(Context context) {
super(context, "BenutzerDaten", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE if not exists users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, passwort TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}

public Cursor holeDaten(String anfrage) {
datenbank = this.getReadableDatabase();
Cursor cur = datenbank.rawQuery(anfrage, new String[] {});
datenbank.close();
if(cur.getCount() > 0)
return cur;
else
return null;
}

// Weil timo long wollte.
public long schreibeDaten(String tabelle,ContentValues daten){
datenbank = this.getWritableDatabase();
return datenbank.insert(tabelle, null, daten);
}
}



Montag, 17. Dezember 2012
Gruppe Nonogramm: Sprint beendet
Die Gruppe Nonogramm hat letzte Woche ihren ersten Sprint beendet. Dazu wurde noch eine Tür eingebaut, die als Exit-Button fungiert und über die man das Spiel beenden kann. Das Spiel kann jederzeit verlasen werden, es können aber keine Spielstände gespeichert werden.

Spielfeld mit Tür

Des Weiteren wurde eine kurze Dokumentation über die Aufgabenstellung, die Umsetzung der Anforderungen und das Ergebnis des ersten Sprints erstellt.