• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Abstimmung Programmierwettbewerb #5

Wessen Abgabe(n) gefällt dir am besten?


  • Umfrageteilnehmer
    12
  • Umfrage geschlossen .

theSplit

1998

Registriert
3 Aug. 2014
Beiträge
28.379
Hallo zur Abstimmung NGB.to Programmierwettbewerb #5

Viele fleißige Hände haben sich an einer Lösung zu der aktuellen Coding Challenge bzw. dem Programmierwettbewerb herangetastet. Und es war wirklich ein Vergnügen dem Thema zu folgen. Vielen Dank an alle Teilnehmer an dieser Stelle für eure Teilnahme und die investierte Arbeit an und in diesem Thema!

Ihr seid nun dazu eingeladen für eine oder mehrere der Abgaben zu stimmen. Auch könnt ihr gerne ein paar Worte zu eurem Favoriten schreiben, warum ihr für ihn oder sie gestimmt habt um den Teilnehmer noch etwas mehr Feedback zu geben über dass sie sich sicherlich freuen würden.

Ihr habt nun 21 Tage Zeit für einen oder mehrere Favoriten. unter den Gesichtspunkten Optik, Funktionalität und Code Qualität zu stimmen.

Und nun zu der folgende Problemstellung und Anforderungen für diesen Wettbewerb (vielen Dank an @ Mingsping für die tolle Einleitung/Ankündigung!)

Mingsping schrieb:
Dynamischer Dungeon / Dynamisches Labyrinth
EINLEITUNG

Unendlich viel Spielspaß? Kein Level gleicht dem anderen?

Das klingt zu gut, um wahr zu sein?
Das ngb machts möglich! Wir beginnen gerade noch rechtzeitig im Jahr 2020 den 5. forumsinternen Programmierwettbewerb.

ANFORDERUNGEN

Es soll ein Programm geschrieben werden, das zufällig generierte (dynamische) Labyrinthe erstellt. Welche Form diese haben (2d/3d, Quadrate/sonstige Bausteine), ist euch überlassen. Eine Grafikausgabe ist nicht zwingend, wäre aber toll. Im Prinzip reicht eine Kommandozeilenausgabe.

Mögliche Features:
- Schwierigkeitsparameter: wie "verwinkelt" soll das Labyrinth sein?
- Größe einstellbar
- mehrere Wege zum Ziel möglich? Mehrere Ziele?
- Räume im Labyrinth
- Fog of War
- Sechsecke (because Hexagons are Bestagons, danke an Brother John)


Folgend die Abgaben der Challenge in chronologischer Reihenfolge mit Link zum jeweiligen Abgabebeitrag, gegebenenfalls mit Bild und oder Video und Quelltexten/Bezugsquellen.


[src=text]Maze Generator by Rakorium

Lang: Go + Qt5[/src]

Abgabebeitrag


[src=text]ngbLabyrinth by Roin

Lang: Python3 + Tkinter[/src]

Abgabebeitrag


[src=text]Maze by Brother John

Lang: C++ & Qt[/src]

Abgabebeitrag


[src=text]X-Coder

Lang: Expression2 (Garry`s Mod/Wiremod)[/src]

Abgabebeitrag


[src=text]KaPiTN

Lang: C#[/src]

Abgabebeitrag


[src=text]Der3Geist

Lang: VB 6[/src]

Abgabebeitrag
 
Zuletzt bearbeitet:

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Ich habe meine Stimme mal an Brother John gegeben.
Allein die Dokumentation ist sehr gut. Dafür muss bereits mehr Zeit investiert worden sein als ich für die ganze Aufgabe genutzt habe.
Ansonsten sind nunmal Hexagons genutzt worden, was die Abgabe eindeutig von den anderen Abgaben unterscheidet.
Auch die Code-Qualität ist gut, jedoch hätte ich mir in dem Code ein paar mehr Kommentare gewünscht.

Die anderen Abgaben finde ich auch alle sehr gut und deswegen konnte ich mich erst nicht entscheiden. Hier aber ein paar Sätze zu den restlichen Abgaben:

Rakorium:
Ich habe noch nie etwas in Go gesehen und fand es spannend das mal zu sehen.
Die Einleitung am Anfang deiner Abgabe als Kommetar fand ich sehr hilfreich, wenn auch er Gedankengang ein wenig umständlich ist. Das liegt aber durchaus daran, dass ich diesen bei mir in der Form einfach nicht verwendet habe.

Ich:
Mein eigener Code ist sowieso der Beste von allen. Ist ja immerhin meiner ;-)

X-Coder:
Die Aufgabe als Mod für ein Spiel umzusetzen finde ich eine coole Idee. Ich weiß nicht recht, ob du es in deinem Code eingestellt hast oder es einfach der Mod geschuldet ist, aber den Aufbau des Labyrinths fand ich etwas arg langsam, wenn auch schön zu sehen ist, wie dein Algorithmus funktioniert.
Sonst noch ein kleiner Hinweis: Bei vielen Ecken kann man bei dir zwischen den Wänden durchgucken, weil sozusagen der Treffpunkt der Wände nicht zwingend bündig sind. Das könnte dem Spieler wichtige Tipps geben. Kann man aber dadurch auch als Feature verkaufen :D
Zudem bist du der Einzige, bei dem, neben mir ein "echtes" Spiel aus dem Labyrinth entstanden ist.
Dafür gibt es aber noch einen großen Kritikpunkt an deinem Code. Ich bin gar kein Freund davon Variablen mit großen Buchstaben zu starten. Das stört mich persönlich sehr stark.

KaPiTN:
Sehr sauberer Code und sinnvoll in verschiedene Dateien gesplittet. Auch hier hätte ich mir ein paar wenige Kommentare mehr gewünscht.
Die Form des Codes, also zum Beispiel die Klammern in einer eigenen Zeile ist Geschmackssache, ich finde es streckt den Code unnötig lang und es passt einfach weniger auf den Bildschirm.

Der3Geist:
Du hast schonmal die gleiche Datenstruktur wie ich verwendet. Das gibt von mir natürlich einen Pluspunkt.
Ich habe vier Punkte, die ich bei dir ansprechen möchte...
Du hast ein relativ großes Beispielmaze gemacht, das finde ich erstmal schön. Leider gibt es allerdings keinen Ein- und Ausgang, da fehlen also wohl noch ein paar wenige Zeilen Code.
Das VB* keine hübsche Sprache ist, ist wieder komplett Geschmackssache und einfach persönliche (nicht-)Präferenz.
Du hast in deinem geposteten Code eine Variable "skip", die für mich so absolut kein Sinn ergibt. Habe ich da was übersehen oder ist in dem Code die Variable nicht initialisiert und dadurch wird bei der Variable immer zwischen 0 und 1 gewechselt? Ich hätte dafür eher eine Variable genutzt, die zwischen True und False welchselt. Hätte ich intuitiver gefunden.
Ansonsten ist der Code aber ausreichend kommentiert.

Alle zusammen:
Schön, dass ihr die Zeit gefunden habt mitzumachen.
@Brother_John: Magst du mal sagen, wie viel Zeit du am Ende für das Projekt gebraucht hast? Ganz ehrlich?
 

Brother John

(schein)heilig

Registriert
1 Aug. 2013
Beiträge
235
Roin schrieb:
@Brother_John: Magst du mal sagen, wie viel Zeit du am Ende für das Projekt gebraucht hast? Ganz ehrlich?
Da muss ich schätzen, weils mich häppchenweise den ganzen Weihnachtsurlaub begleitet hat. Das kommt davon, wenn Lockdown ist und schnelle kleine Wochenendprojekte plötzlich unerwartet viel Spaß machen … :) Bei dem Umfang, wenn ich mir die Githistorie so anschaue, mit Recherche und allem drum und dran: Größenordnung ne Vollzeitwoche.
 

X-Coder

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
146
Finde es super, dass viele mitgemacht haben und auch bei allen gute und umfangreiche Lösungen dabei heraus gekommen sind.


Ein bisschen Feedback zu Roin's post:
X-Coder:
Die Aufgabe als Mod für ein Spiel umzusetzen finde ich eine coole Idee. Ich weiß nicht recht, ob du es in deinem Code eingestellt hast oder es einfach der Mod geschuldet ist, aber den Aufbau des Labyrinths fand ich etwas arg langsam, wenn auch schön zu sehen ist, wie dein Algorithmus funktioniert.
Ich musste es künstlich ausbremsen, da ich nur alle x ms Objekte spawnen darf, was der Multiplayer-Engine bzw. dem Wiremod geschuldet ist. Da gibt es Hard-Limits um Lags bei anderen Spielern zu verhindern, da die Funktionen oft Missbräuchlich verwendet werden um andere Mitspieler zu trollen oder Server zu crashen und da der Mod die alte Halflife2-Engine ziemlich ausreizt, welche dafür wahrscheinlich gar nicht ausgelegt war.

Und ich wollte die Generierung absichtlich sichtbar machen, damit man auch visuell sehen kann wie der Algorythmus arbeitet, sonst hätte man natürlich auch alles Vorab generieren können, und erst zum Schluss das fertige Labyrinth spawnen.


Sonst noch ein kleiner Hinweis: Bei vielen Ecken kann man bei dir zwischen den Wänden durchgucken, weil sozusagen der Treffpunkt der Wände nicht zwingend bündig sind. Das könnte dem Spieler wichtige Tipps geben. Kann man aber dadurch auch als Feature verkaufen :D
Zudem bist du der Einzige, bei dem, neben mir ein "echtes" Spiel aus dem Labyrinth entstanden ist.
Das ist ein Feature ;)

Dafür gibt es aber noch einen großen Kritikpunkt an deinem Code. Ich bin gar kein Freund davon Variablen mit großen Buchstaben zu starten. Das stört mich persönlich sehr stark.
Da bin ich auch absolut kein Freund von, ist aber leider dem Expression2-Syntax geschuldet, dieser ist sehr simpel gehalten und unterscheidet zwischen Funktionsnamen und Variablen nur durch Groß-/Kleinschreibung, da habe ich leider keinen Einfluss drauf. Wurde von den Entwicklern vermutlich so gelöst damit das Syntax-Highlighting simpel gelöst werden kann.
 

Der3Geist

always feed the fish

Registriert
14 Juli 2013
Beiträge
2.709
Ort
Hessen
Meine Stimmt geht ebenfalls an Brother John, weil die Doku wirklich sehr Umfangreich ist.
Außerdem finde ich die sache mit den Hexagons wirklich Gelungen.
Die wege sind nicht wie üblich oben/unten, Links und rechts, was ein Labyrinht somit viel Komplexer machen kann.
Das finde ich Persönlich einfach Innovativ und ich wüsste jetzt auch anhieb nicht wie das "Leicht" umzusetzen ist.

Eine weiter Stimme geht an X-Coder für die Idee die Aufgabe mit einer Scriptsprache eines Spieles zu lösen.
Der Code ist leider wenig Dokumentiert und für jemanden der Code fremd ist, ist es schwer dort durchzusteigen.


@Roin
Dadurch, das ich nur den Codeteil für die Labyrinth Generierung gepostet habe, fehlen einige dinge.
Dies hat zur folge (hab ich leider Verpeilt) die ein & ausgänge zu zeigen.
Da die Gänge alle miteinander Verbunden ist, suche ich mir einfach am oberen und unteren rand ein Feld mit "Weg" und lösche die wand für einen Aus & Eingang.

Die Variable "Skip" wird als Integer Definiert (Siehe Quellcode)
Die gibt es nur, damit bei jedem 2. durchlauf der Fortschrittsbalken Akualisiert wird.
Da es nicht nötig ist, die bei jedem durchlauf der Schleife zu machen.
In VB erlaubt es der Befehl "DoEvents" das Windows seine restlichen sachen Abarbeitet.
Wenn ich nun jeden durchlauf ein DoEvents laufen lasse, wird die Levelgenerierung Künstlich Verlangsamt, und im gegensatz dazu wenn kein DoEvents ausgeführt wird,
Aktualisiert Windows das Programmfenster Nicht und das programm wirkt wie Abgestürzt.

Mit True & False ist das so nicht möglich, da ich durch die Rechnung "skip=1-skip" erreiche, das diese immer zwischen 0 und 1 wechselt.
Wenn ich ein Boolean verwenden würde, kann ich nicht mit dieser Simplen rechnung wechseln.
Dies würde dann in VB entsprechend so aussehen "if skip=true then skip=false : else : skip=true : endif" was die sache unnötig verschachtelt und Unübersichtlicher als "skip=1-skip" macht.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Mit True & False ist das so nicht möglich, da ich durch die Rechnung "skip=1-skip" erreiche, das diese immer zwischen 0 und 1 wechselt.
Wenn ich ein Boolean verwenden würde, kann ich nicht mit dieser Simplen rechnung wechseln.
Dies würde dann in VB entsprechend so aussehen "if skip=true then skip=false : else : skip=true : endif" was die sache unnötig verschachtelt und Unübersichtlicher als "skip=1-skip" macht.

Und was wäre mit
[src=vb]skip=!skip[/src]?
 

Der3Geist

always feed the fish

Registriert
14 Juli 2013
Beiträge
2.709
Ort
Hessen
Und was wäre mit
[src=vb]skip=!skip[/src]?


Code:
Private Sub Form_Load()
 Dim test As Boolean

 test=true
 test=!Test
End Sub

Ergibt

Code:
Fehler beim Kompilieren
Unzulässiger oder nicht ausreichend definierter Verweis

Nicht zu Vergessen, es Handelt sich um VB6
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Ok. Ich war mir nicht sicher, ob VB das kann.

Auslagern in eine Funktion würde mir dann noch einfallen.

(Das gibt es aber, oder? :o)
 

Der3Geist

always feed the fish

Registriert
14 Juli 2013
Beiträge
2.709
Ort
Hessen
Auslagern in eine Funktion würde mir dann noch einfallen.

(Das gibt es aber, oder? :o)

Sicher gibt es das, das macht es aber Weniger Benutzerfreundlich und Bläht die ganze sache unnötig auf.
Nur um die sache mit True & False zu machen, und ein Boolean zu Verwenden macht es nun wirklich keinen Sinn dafür noch eine Funktion zu schreiben, um von 0 und +1 (x=1-x) auf 0 und -1 zu wechseln. ;)
 

Der3Geist

always feed the fish

Registriert
14 Juli 2013
Beiträge
2.709
Ort
Hessen
VB war case-insensitive?

Also der Fehler beim Kompilieren liegt nicht an groß/klein?

VB ist nicht Case Sensitive.
Es lag auch nicht an "test=!Test", da VB6 bei mir in einer VM Läuft und ich den Code nicht per Zwischenablage Kopiert habe sondern hier neu eingetippt habe.
Die Variablen waren in VB schon richtig Geschrieben, zumal der VB Codeeditor das sowieso selber regelt, und es dieser nicht zulässt eine Variable mal klein / groß zu schreiben.

Der Editor passt das selber an, heisst so wie die Variable Deklariert wurde ( Dim test as Integer) so wird sie vom Editor im Kompletten Code Automatisch immer angepasst.
Und nach einer Änderung der Deklaration ändert sich diese im Kompletten Code.

Es liegt einfach an der Operation !
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Ich bin mir ehrlich gesagt nicht sicher wo der Unterschied zwischen Visual Basic und VB6 ist aber statt ! gibt es zumindest in Visual Basic das NOT

Alternativ sowas wie:

[src=vb]' Möglichkeit 1
skip = not skip
' Möglichkeit 2
skip = (skip == False)[/src]

Aber da wird jetzt über ein Kleinigkeit diskutiert. Ich fand die Stelle einfach auf den ersten Blick etwas irritierend.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Jetzt wo Du es erwähnst.

Ich habe länger kein VB.Net mehr gemacht und vergessen, daß da nicht nur die Klammern durch End ersetzt werden, sondern es auch Unterschiede wie ! statt not oder auch select case statt switch case gibt.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.392
Ort
in der Zukunft
VB6 != VB.NET ;)
Vb.Net läuft am Ende auf den gleichen Zwischencode wie c# raus...
VB6 findet in etwas angepasster Form z.b. auch in der Makro engine von Excel / wird etc. Verwendung.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Natürlich ist es nicht das Gleiche, aber vor allem unter der Haube. Ansonsten ist VB.Net sprachlich darauf angelegt, den VB-Usern den Einstieg in .NET leicht und schmackhaft zu machen.

Und mit not läßt sich das ohne Fehler kompilieren.
[src=vb]Module VBModule
Sub Main()

Dim test As Boolean

test=true
test= NOT test
Console.WriteLine(test)
End Sub
End Module[/src]

gibt false aus und

[src=vb]Module VBModule
Sub Main()

Dim test As Boolean

test=false
test= NOT test
Console.WriteLine(test)
End Sub
End Module[/src]

gibt true aus.


Und aus C# und VB.Net resultiert weitestgehend gleiche CIL.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.392
Ort
in der Zukunft
Ja - c# hat auch ein wesentlich größeren Sprachumfang - wodurch sich einige dinge Eleganter lösen lassen und damit auch anderer Zwischencode entsteht ;)
Aber ist ja gut wenn du das weißt - leider wird das nur alt so gerne in einen Topf geworfen - meist nicht aus Böswilligkeit sondern wegen blöder Namensgebung ;)
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Ich mußte mal vor Ewigkeiten ein VB.Net Projekt eines ausgeschiedenen Kollegen nach C# portieren. Theoretisch sollte das ja von alleine gehen, wenn die CIL die Gleiche wäre.
Aber, die genauen Einzelheiten sind nicht mehr parat, da war eine Menge Handarbeit nötig.

Schon so etwas Einfaches wie ein Array unterscheidet sich in beiden Sprachen:

Ein Array mit 5 Elementen

in VB.Net wird der höchste Index angegeben:
[src=vbnet]Dim numbers(4) As Integer[/src]

in C# die Anzahl der Elemente:
[src=csharp]int[] numbers = new int[5];[/src]
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.392
Ort
in der Zukunft
Nein so meinte ich das nicht...
der Syntax ist bei VB.NET ziemlich an VB6 angelehnt; c# eher an Java... im weitersten Sinne.
der Compiler erstellt zwischencode der dann bei Ausführung von der .NET Laufzeitumgebung gelesen wird.

Dieser Zwischencode ist relativ identisch - in beiden deiner Code-Varianten oben.
 

Der3Geist

always feed the fish

Registriert
14 Juli 2013
Beiträge
2.709
Ort
Hessen
[src=vb]

Dim test As Boolean

test=true
test= NOT test
Console.WriteLine(test)

Geht nicht, weil der Consolen Befehl in VB nicht Existiert.
Aber das mit "test= NOT test" Funktioniert.

Ich hab es halt über test=1-test gelöst, weil ich mir das zu C64 zeiten halt schon so angewöhnt habe.

VB 6 und VB Net sind zwar Ähnlich, aber die Unterschiede sind doch ziemlich groß.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.392
Ort
in der Zukunft
lohnen sich aber ... so btw ;)
Komme auch von VB6 und bin froh das ich vor vielen Jahren dann umgestiegen bin.
Vor allem da VB6 langsam aber sicher auch von der technischen Basis im OS mehr beschnitten wird und langsam ausstirbt.
 
Oben