Programmierwettbewerb 2: Aaah a snake!

Larius

OutOfOrder
Teammitglied
Registriert
12 Juli 2013
Beiträge
3.831
Was lange währt undso... (Jaja DrFuture..)

Auf gehts in die 2te Runde! Und wer jetzt BadgerBadgerBadger als Ohrwurm hat sollte auc

Aufgabe:
Entwickle einen Snake-Clone
Die Aufgabe wird in mehrere Schwierigkeits-Grade geteilt, wie weit jeder Programmieren möchte ist jedem selber überlassen.
Der Ausprogrammierte Grad ist bei der Abgabe anzugeben.

Schwierigkeits-Level / Aufgabendetails:

*) Ein Spielfeld fester Größe auf dem sich ein Punkt / Quadrat bewegt sich per Tastatur steuern lässt.
*) Eine Schlange von Punkten / Quadraten die sich wie das Original Snake um Ecken bewegt
*) An zufälligen punkten erscheinen rote Zielpunkte, bei "fressen" eines Punktes wächst die Schlange um ein Element an.
*) Insofern die Schlange den Rand oder sich selber frisst ist das Spiel zu Ende
*) Jeder gefressene rote Zielpunkt gibt 10 Punkte > Punkteskala, optional Statistiken über gespielte Zeit usw.
*) alle x roten Punkte wird die Schlange schneller
*) Auf dem Spielfeld erscheinen zufällig Bonus-Gegenstände die höhere Punkte geben
*) zusätzliche Level > nach Zeit x ist Level 1 zu Ende, Level 2 mit einem Hinternis
*) Spielfeld ist in seiner Größe im Spielbetrieb frei skalierbar
*) Animierte Schlange aus Grafiken


Randbedingungen:
*) Programmiersprache kann frei gewählt werden.
*) Ausarbeitung kann Graphisch oder mit Ascii auf der Console erfolgen
*) Insofern Graphisch dann maximal 2D ohne Verwendung von DirectX, OpenGL oder ext. Spiele-Bibliotheken
*) Eingereicht wird der Quellcode in das NGB GitLab Repository (Zugangsdaten bei drfuture)
*) Code ist gut (in Deutsch) zu kommentieren.
*) Zusätzlich wird eine Compilierte .exe zum Download angeboten, bei Implementierung in Javascript, PHP etc. ein aufrufbarer Weblink, bei Java die .jar und evtl. eine .bat / sh dazu.
*) Die Anwendung muss nicht zwingend Multiplattform-Fähig sein.

Bewertung:

Eine "Einfache" und "Simple" Bewertung ist aufgrund der Bandbreite der möglichen Implementierungen nicht möglich. Daher konzentrieren wir uns auf "weichere" Kriterien.

*) Welche Umsetzung überzeugt einfach nach "Bauchgefühl" und warum / Was gefällt euch besonders gut? Besonders Kreativ?, Besonders klein (64kb ;D) ...
*) Bei der Bewertung darf der Schwierigkeits-Grad keinen Einfluss nehmen.
*) Gefundene Programmier-Fehler (Logik-Fehler usw..) geben Punkte Abzug und sollten aufgezeigt werden.
*) Probleme und Fragen bei der Umsetzung sind jedoch nicht negativ zu bewerten.


Allgemein geht es natürlich darum, etwas zu lernen. Das heißt es wäre schön wenn Zwischenstände im Thread gepostet werden und durch Mitspieler schon einmal kommentiert werden.

Gerne sollten die Bug / Wiki usw. Funktionen eines jeden Projektes in GitLab zur Kommunikation mit dem Entwickler genutzt werden - eine Zusammenfassung kann dann eine Bewertung hier im Forum erleichtern.

Bei Problemen und Fragen - das Problem nach Möglichkeit zum eigenen Quellcode zusätzlich verallgemeinert beschreiben um Antworten auch von Sprachen-Fremden Entwicklern zu erhalten.

Ende des zweiten Wettbewerbs:
Sonntag der 08. November 2015


Zum Anschauen der Projekte bitte hier entlang:
 
Zuletzt bearbeitet:
Ja wie geil. Man sollte es in Python umsetzen, das wäre doch mal so eine richtige Snake. *scnr*

Wäre interessiert mitzumachen und erfrage hiermit die Zugangsdaten für das Gitlab, ein paar Informationen zum Ablauf und wie Projekte dort gemanaged werden wäre aber noch interessant um überhaupt einen Einstieg zu bekommen. Auch, muss ich meine Email Angeben bzw. ist diese sichtbar für andere oder nicht?

Eine andere Sache auch, die mir gerade im Kopf schwirrt.
Keine externen Bibliotheken - PyGame oder SDL wären doch erlaubt? Irgendwie ist der Punkt etwas schwammig für mich.
 
Die Daten schicke ich dir @theSplit per PN.
Wir nutzen alle EINEN NGB-Account - um genau das zu vermeiden das man seine e-mail angeben muss, sich reggen muss oder sonst irgendwas. Ich denke mal jeder ist so brav und macht mit dem Account keinen Unfug - und wenn, dann können wir da halt keine Contests mehr machen ;)

Gemanaged kann entweder per git-client oder einfach die Files per Hand auf der Webseite ins Repository laden.
Ein Beispiel-Projekt lade ich (hoffentlich heute Abend) Hoch damit jeder sieht wie es aussehen könnte.

@Bibliotheken meine ich das man nichts nutzen soll das z.B. Objektsteuerung per Maustasten fertig bietet oder eine Kollisionserkennung, ein "Spielfeld" usw.
Gibt ja genug 2d und 3d Spiel-Bibliotheken die schon sehr viel von Haus aus bieten. Die Herausforderung soll ja sein sich mal selber Gedanken zu machen wie man so etwas hin bekommt (Evtl. lange nicht so gut wie etablierte Mechanismen aber das muss ja nicht sein) Genau sowas wie PyGame oder SDL also nich :D

@Alle bzw. Larius, kannst du oben noch hinzufügen - das ist die öffentliche Seite zum anschauen der Projekte ;)
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #4
Mach ich dann wenn ich zuhause bin.
 
DrFuture - da muß ich mal was zu loswerden ;)

Also wegen SDL, das bietet ja an sich keine Features an mit denen man so etwas schon vollautomatisch umsetzt, zum Beispiel automatische Kollissions-Erkennung, SDL würde ich zum Beispiel nur verwenden damit ich aus C heraus ein Fenster und Pixel/2d Daten verarbeiten bzw. Zugriff auf Zeichenroutinen/Pixelebene habe. Ich wüßte auch gar nicht wie das mit C allein funktionieren sollte um ehrlich zu sein. ;)

Und Windows-API will ich nicht programmieren :D
Und Open Glide/Direct X coding ist zu kompliziert derzeit (für mich) ;)

Zu SDL noch:
Simple DirectMedia Layer (SDL) is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D.

Es sei denn jemand schlägt mir eine Bibliothek vor die nur Zeichenroutinen bietet und ein Fenster öffnet. Dann nehme ich die auch! ;)

Allegro vielleicht noch für C/C++.

Bei Pygame sehe ich es ähnlich, man brauch ja zumindest Zugriffe auf so etwas wie Tastatur, Mouse, nen Joystick, ein Fenster und nen JPG/PNG Loader um etwas zu realisieren und vielleicht noch gewisse Zeichenroutinen wie Pixel, Linie, Rechteck, Polygone... also Zugriff auf Grundelemente.

Fertige Features zu verwenden wäre ja im Code ersichtlich und etwas Lame, wobei Pygame im Gegensatz zu SDL schon mehr Features bietet, unter anderem auch Kollisionserkennung wenn ich mich richtig erinnere ;)

Nichts desto trotz, SDL würde ich nicht bannen, Pygame auch nicht, aber man darf nur low-level Funktionen verwenden: Pixel Zeichen, ein Bild laden und anzeigen, ein Fenster öffnen, die Tastatur ansteuern, eine Mp3 Laden und Abspielen, et cetera aber das Spiel darf keine erweiterten/smarten Features/fertige Funktionen verwenden - so wäre das doch fair. :T
 
Jo ist auch Ok, dachte c kann das alles auch ohne :D - Klar in .net gibt es ja auch die .net Funktionen die man nutzen können muss - und nicht in ASM alles selber schreibt.
Ok dann mach das ^^
 
Hmmm, wie sieht's denn mit QtQuick aus? Ich bin mir absolut sicher, dass ich das gesamte Spiel in QML machen könnte. Das will ich aber aus zwei Gründen nicht. Erstens ist es langweilig weil einem sehr viel Arbeit abgenommen wird und zweitens will ich mich nicht mehr JavaScript aussetzen als unbedingt nötig. :D

Was ich vor hatte wäre, dass ich in QML das reine Zeichnen der UI-Elemente und das Abfangen von Tastatureingaben übernehme. In C++ würde ich dann die gesamte Logik, Speicherverwaltung, Verarbeiten der Eingabe, Verändern der UI-Elemente, etc. übernehmen und selbst from-scratch implementieren.
Das sollte so doch zulässig sein, oder?
 
Ich kenne doch nich jedes Framework und jede Sprache ;P Wie du schon sagtest nehmen Div. Frameworks recht viel ab -

[src=actionscript3]x = new quader(1,1)

on keypress{
quader.move(keypress)
}

on kollision {
quader.destroy()
}[/src]

So soll das Spiel nicht aussehen ;P
 
Hier eimal im Detail.
Was ich mache:
  • Logik (Punkte, Gewinn-/Verlier-Bedingung(en), Bewegung, Kollisionserkennung, Items, Level -> der gesamte Spielverlauf halt)
  • Speicherverwaltung
  • Umsetzung von Eingabe zu Logik
  • Manipulation der UI-Elemente (Punkte-Text aktualisieren, Positionierung der einzelnen Teile der Schlange, Items, etc.)
Was ich nicht mache:
  • Manuelles Abfangen der Tastatureingaben auf Betriessystem-Level (ich nutze das Event-Handling von Qt um zu bestimmen ob und welche Tasten gerdrückt worden sind, implementiere das Verhalten jedoch selbst)
  • Rendern der einzelnen Elemente (nutze Qt um das UI zu rendern)

Das sollte so doch kein Problem sein, oder?
 
Ich hätte die dann auch gerne.
Eine Frage. Wird das Repository danach geleert oder wird Alles für die Nachwelt erhalten?
 
Na dann auf ans Werk!

(Was ich ein wenig komisch finde ist das darauf bestanden wird das auf Deutsch kommentiert wird. Könnt ihr alle kein Englisch oder was? :cool:)
 
Ich werde mal gucken, ob ich hier mitmache. Zeit und Lust und so. ;)
Ansonsten: C++ mit Qt. Entwickelt wird aber erstmal alleine, sodass ich die Zugangsdaten nicht brauche. Erst wenn ich was vorzuweisen habe.. oder "nah" dran bin. ;)
 
  • Thread Starter Thread Starter
  • #16
My inglish isn't the yellow of the egg :D

Du musst halt bedenken das es auch jüngere Mitglieder gibt, die sich dann vl doch mal den Wettbewerb anschauen - Neugierde undso. Da ist es doch besser wenn in Deutsch dabei steht, was man da macht, damits die kleinen Scriptkiddies lernen :D
 
Ich habe ein Problem mit dem Titel.

Es ist doch kein Programmierwettbewerb, lediglich eine Herausforderung (in Ablehnung an Challenge )

Ob sich außer Larius beim ersten Versuch noch jemand die Ergebnisse angeschaut hat, wage ich zu bezweifeln. Wer sich nicht sicher ist, die Zeit zum teilnehmen zu finden, hat auch keine Zeit sich anschließend um andere Lösungsvorschläge zu kümmern

Richtig spannend dagegen war, wobei ich es nicht geschafft habe , mich weiter damit zu beschäftigen, die DNS Aufgabe, die so nebenbei hier rein kam.
 
Ich hätte auch gerne gitlab-Zugriff. :) Von meiner Seite aus würde das dann vermutlich per Java und Slick2D umgesetzt werden, wobei ich von Slick nur auf wenige Funktionen zurückgreifen werde (verschiedene Screens, Zeichnen etc.). Das sollte hoffentlich in Ordnung sein?
 


Ja, die DNA Aufgabe war wirklich gut, das solltest du auf alle Fälle coden, nachdem du am aktuellen Wettbewerb teilgenommen hast. ;)

Für mich persönlich war im ersten Wettbewerb schwer alle Daten zu sondieren da ich nicht von allen Programmiersprachen Ahnung habe und auch wenig über das "wie gut ist etwas gecodet" sagen kann und zum zweiten war die Aufteilung für mich auch ein Punkt, ich bin faul. Das hat sich aber bei Gitlab dann vermutlich erledigt, da ein Programm mit allen Clon-baren Dateien kopiert werden kann, ohne 20 Teilprogramme abzuarbeiten, das geht ja dann automatisch, also muss man nicht alles zusammenfriemeln.

Es ist auch schwer eine Bewertung abzugeben, meine ich, wenn man 4-5 unterschiedliche Programmiersprachen vor sich hat, als wenn es um eine geht und dabei das Optimium herauszuholen ist. Es kann ja nur das Resultat, wenn auch weniger leider, die Technik bewertet werden, es sei denn die "Jury" ist bewandert in allen Sprachen bzw. kann genau sagen wo Probleme und Schwächen aufgetaucht sind.

Ich will hier auch niemanden in Schutz nehmen, sondern so erging es mir bei der letzten Aufgabe. :)

Es ging mir dabei auch nicht darum einen ersten Platz zu machen, sondern darum die Aufgabe mit der Sprache zu lösen, so gut ich kann. Hätte jemand gesagt du mixt C und C++, weil das in deinem "Lehrbuch" so drin steht (Jürgen Wolf) - dann hätte ich das so hinnehmen müssen um umschreiben, aber die Expertise bekommt man erst wenn man sich selbst in einer Sprache wohlfühlt. Von daher, seh es nicht so eng das dir niemand aufgezeigt hat was du hättest besser machen können, ich tippe auch einfach mal auf Unwissenheit wie man es hätte besser lösen können, das ist sehr Sprachenspezifisch.

Für mehr Feedback würde ich einfach einen Thread aufmachen zu dem Thema, vielleicht finden sich auch einige Leute hier die mit Java entsprechend umgehen können und dann ihr Feedback an dich weitergeben, weil sie eben wissen wo die Bottlenecks/Problemzonen sitzen.
 
Bei kompilierten Projekten ist ja klar, dass die erzeugte Datei keine Kommentare enthält und daher kleiner ausfallen kann, als der originale Source.
Wie sieht es bei Scriptsprachen aus? Dürfen hier komprimierte Versionen erzeugt werden?
Will man bspw. unter 64kb bleiben, ist eine ausführliche Dokumentation des Codes natürlich nicht drin, was ja laut Regeln eine Voraussetzung ist.
 
Zurück
Oben