Die Community zu .NET und Classic VB.
Menü

Ausschreibung: Kollisionsabfrage

 von 

Informationen  

  • Titel: Kollisionsabfrage
  • Ausschreibungsbeginn: 06.01.2003
  • Einsendeschluß: 21.01.2003
  • Auftraggeber: Daniel Furer,
  • Jury: Klaus Langbein, Florian Rittmeier, Daniel Furer
  • Preisgeld: 20 Euro

Ausgangsposition  

Es besteht bereits ein Projekt, das eine Kollisionsabfrage enthält:

Kollisionsabfrage (Source-Code) herunterladen [6000 Bytes]

Der Smiley wird von der Maus gesteuert. Sobald man mit dem Smiley ein Hindernis (schwarz) berührt, erscheint eine Meldung. Wenn sich jedoch eine sichere Fläche (grün) über einem Hindernis befindet erscheint keine Meldung (die grüne Fläche wird sich nachher bewegen, deshalb befindet sie sich auf einem schwarzen Hindernis). Dies funktioniert bereits alles (siehe Bild 1 und 2).

Aufgabenbeschreibung  

Das Problem ist folgendes: Wenn sich die grüne Fläche genau am Rand einer schwarzen Fläche befindet, und wenn man mit dem Maus über die Fläche will und den schwarzen Rand nicht berührt, wird trotzdem eine Kollision gemeldet. So wie der Code momentan geschrieben ist, befindet man sich erst in 'Sicherheit", wenn man sich mit dem kompletten Smiley auf der grünen Fläche befindet. (Siehe Bild 3 und 4) Dieses Problem der Kollisionsabfrage gilt es zu lösen. Der Code muss downgeloadet und abgeändert werden.

Bedingungen  

  1. Ausser Modulen darf der Sourcecode keine zusätzlichen Komponenten enthalten.
  2. Der Sourcecode verwendet keine externen Programme (Excel, Access usw., keine DLLs oder OCX). Es ist ausschliesslich der Sourcecode der Vorlage zu verändern.
  3. Die Namen der PictureBoxen dürfen nicht abgeändert werden.
  4. Das MouseOver-Ereignis darf nicht benutzt werden. Der vorgegebene Timer zur Kollisionsabfrage muss beibehalten werden.
  5. Der Bereich der Maus, der durch die Kollisionsabfrage überprüft werden muss, beträgt 12 Pixel (bereits eingestellt, darf einfach nicht abgeändert werden).
  6. Die Kollisionsabfrage muss folgende Kriterien erfüllen:
    • Sobald der Maus-Bereich ein Hindernis (pctHindernis) berührt, soll die MsgBox erscheinen.
    • Wenn jedoch darüber ein grüner Sicherheits-Bereich (pctSicherheit) liegt, darf keine MsgBox erscheinen (auch wenn der grüne Bereich an den schwarzen grenzt).
    • Auf der Form des Projekts ist bereits als Beispiel eine Anordnung von Hindernissen und Sicherheiten erstellt. Die Kollisionsabfrage muss bei der ganzen Vorlage einwandfrei funktionieren - egal wie die Hindernisse und Sicherheiten angeordnet sind.

Bewertung  

Der Gewinner wird nach Vergabe der Punkte (Max. 100) durch die Jury ermittelt. Die Punktevergabe wird folgendermassen zusammengesetzt:

  • 25 Punkte: Die Aufgabe ist möglichst elegant gelöst.
  • 25 Punkte: Der Sourcecode ist gut gegliedert und übersichtlich.
  • 20 Punkte: Der Sourcecode ist möglichst detailliert und mit aussagekräftigen Kommentaren versehen.
  • 20 Punkte: Es wurden NUR Änderungen in der Funktion "Kollisionsabfrage" vorgenommen. Am restlichen Code und an der Form wurden keine Änderungen vorgenommen.
  • 10 Punkte: Die Aufgabe wurde in möglichst wenigen Programmzeilen gelöst (gezählt werden nur die Zeilen, die zur Kollisionsabfrage dienen und keine Kommentare).

Einsendungen erfolgen durch E-Mail an ActiveVB () und werden bis zum Einsendeschluß geheimgehalten.

Lösung  

Diese Ausschreibung lieferte gleich 8 Einsendungen. Dies überrumpelte uns zunächst ein wenig, denn die Begutachtung von acht und nicht nur zwei Einsendungen, wie bei der vorherigen Ausschreibung, brachte etwas mehr Arbeit mit sich.

Zunächst möchten wir nun allen Einsender für die Teilnahme danken.

Leider zeigte sich bei den praktischen Tests, dass der Großteil der Einsendungen die Aufgabe nicht erfüllte, da entweder das Problem nicht gelöst wurde, das Problem nun an anderer Stelle auftrat oder die Abstände zu stark oder zu wenig berücksichtigt wurden.

In die Endbewertung kamen zunächst die Einsendunge von Guido Beckmann und COeXe.

Leider mussten wir die Einsendung von Guido Beckmann für ungültig erklären, da sie zwar das Problem sehr gut und elegant löste, dabei allerdings gegen die Regeln der Ausschreibung verstieß indem zur Lösung eine Windows-System-DLL hinzugezogen wurde.

Somit hatten wir nur noch eine Einsendung, welche zu beurteilen war. Aufgrund der sauberen Lösung und der mangelnden Konkurrenz, wurde COeXe mit seiner Einsendung zum Sieger erklärt.

Einsendung von COeXe (Gewinner) 

Einsendung von Guido Beckmann (Gutes Beispiel, aber ungültig) 

Kommentar des Auftraggebers  

Zuerst danke ich allen, die Ihre Lösung eingesendet haben. Leider haben nur zwei Einsendungen das Problem korrekt gelöst. Diese zwei Lösungen haben jedoch meine Erwartungen weit übertroffen. Beide waren sehr elegant gelöst. Die Lösung von Guido Beckmann werde ich wahrscheinlich für mein Projekt verwenden - schade, dass es gegen die Regeln verstieß.

Die Ausschreibung bei ActiveVB kann ich nur weiterempfehlen. Wenn ich wieder einmal ein grösseres Problem habe, werde ich gerne wieder eine Ausschreibung tätigen. Vielen Dank auch hier nochmal an Klaus Langbein für die gute Zusammenarbeit!