gm-d.de Technikcontest Sommer '09

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Versteh ich absolut nicht, aber egal. Die Aufgabe ist glaub ich eh falsch - es sei denn man hat zwei Versuche:D
      Aber, wenn ich die Funktion so "umschreiben" würde, wies mir direkt in den Sinn kam, dann bin ich wirklich frustrierend, weil die Fallunterscheidungen garnicht mehr vorkommen, aber das Script ist ja dann nicht mehr umgeschrieben sondern völlig neu.. :-/
      Nunja eben die Testumgebung schreiben und dann wirds abgeschickt :)

      So habs eingereicht. Hoffentlich auch angekommen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Superdaniel ()

    • also, wie soll man jetz eine ersatzfunktion hinschreiben?

      soll man nur eine ersatzfunktion hinschreiben oder muss man noch paar codes irgendwie hinschreiben?

      wäre schön wenn ihr einample schreiben würdet wi es ungefähr auusehen sollte.



      sry das ich damit nerve...
    • Und raus isses!!! :P
      Bin bloß biss 3a gekommen, weil ich meinen GM geschottet hab, bei dem Versuch ihn zu hacken und Teile ins Deutsche zu übersetzten. :headtouch: :headtouch: :headtouch:
      Dann war der YoYo-Games-Server down und ich konnte mir den Gm nicht nochmal downloaden. Und heut hätt ich bis 20 Uhr sowieso nichts mehr zustange gebracht. :D

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von peyj ()

    • So, der Wettbewerb ist vorbei.

      Ich werde allerdings bis Dienstag nicht zur Auswertung kommen, habt also etwas Geduld.
      Alle Leute, die bis jetzt aber etwas eingeschickt haben, dürfen daher noch bis morgen Abend, 21:00 Uhr ihre Einsendungen korrigieren.

      Neben der Auswertung wird es allerdings noch eine kleine Umfrage geben, da dieser Contest mit rund 8 Einsendungen (ein paar mehr werden es wohl sein) doch recht wenig Teilnehmer hatte. Zu viele Aufgaben? Sommerferien? Zu schwer? Nicht interessant genug? Aufgabenstellung schlecht? Aber das nicht jetzt, ich werde dafür eine Umfrage dranhängen, zügelt eure Statements also bis dahin bitte noch.
    • Auswertung


      So, es ist soweit, die Auswertung ist da. Es gibt jetzt auf einen Schlag die Bekanntgabe der Gewinner, die Musterlösung und zu guter Letzt noch eine Umfrage zum Contest.
      Insgesamt gab es 8 9 Einsendungen, von denen auch alle Aufgabe 1 mit voller Punktzahl gemeistert haben.

      Was ihr hier übrigens gemacht habt, kennt man auch unter dem Namen Bresenham-Algorithmus. Allerdings wird dort auch gezeigt, wie man Kreise zeichnet.

      Vielen Dank übrigens an boxxar, der mir bei der Auswertung etwas Arbeit abgenommen hat.


      Gewinner

      Ränge
      Alle erfolgreichen Teilnehmer bekommen wie versprochen eigene Benutzerränge.
      Die vorgesehen Ränge sind Technik-Novize, Technik-Veteran, Technik-Experte und Technik-Ass. Wer schönere Vorschläge hat, möge sie hier posten.
      Wir planen, sofern es einen weiteren Technikcontest geben sollte, ähnliche Ränge wieder zu verteilen. Ursprünglich wollten wir den Sieger einzeln küren, allerdings wird der höchste Rang dieses mal sowieso nur einmal vergeben. Von daher wird der Sieger sich entscheiden dürfen, was er lieber haben will.
      Die Ränge sollten wir noch in dieser Woche implementieren können (ElementZero zaubert noch eine Ranggrafik).


      Technik-Novizen:

      Technik-Veteranen:

      Technik-Experten:

      Technik-Ass und zugleich unser Sieger:
      Spoiler anzeigen

      Jetzt darfst du dir noch aussuchen, ob du einen "Sieger" oder einen "Ass"-Titel willst (oder eine Kombination aus beidem ;)).

      Jeder Teilnehmer bekommt im Übrigen noch eine PN mit persönlichen Kommentaren zu einzelnen Aufgaben.


      Musterlösung

      Aufgabe 1:
      Spoiler anzeigen

      GML-Quellcode

      1. // mewx_abs(x)
      2. if (argument0 < 0)
      3. return -argument0;
      4. else
      5. return argument0;

      GML-Quellcode

      1. // mewx_sign(x)
      2. if (argument0 > 0)
      3. return 1;
      4. if (argument0 < 0)
      5. return -1;
      6. return 0;

      GML-Quellcode

      1. // mewx_min(x,y)
      2. if (argument0 > argument1)
      3. return argument1;
      4. else
      5. return argument0;

      GML-Quellcode

      1. // mewx_max(x,y)
      2. if (argument0 > argument1)
      3. return argument0;
      4. else
      5. return argument1;

      Aufgabe 3a (enthält Aufgabe 2):
      Spoiler anzeigen

      GML-Quellcode

      1. // mewx_draw_line(x1,y1,x2,y2)
      2. //
      3. // Die hier vorgestellte Lösung soll deutlich machen, wie man aus den Teilaufgaben von Aufgabe 2 die 3a löst.
      4. // Dabei werden verschiedene Tricks vorgestellt.
      5. // Anmerkung: Da hier auf Kommazahlen verzichtet wird, sind diese Linien etwas "grob" im Vergleich zu denen, die z.B. der GM zeichnet.
      6. // Zumindest in Assembler wäre die hier vorgestellte Lösung allerdings wesentlich schneller.
      7. // Linie ist parallel zur x-Achse (Aufgabe 2a)
      8. if (argument1 == argument3) {
      9. if (argument0 > argument2) {
      10. var t; // der folgende Block "tauscht" argument0 mit argument2
      11. t = argument0; // in Pseudocode sieht man das oft als swap(x,y)
      12. argument0 = argument2;
      13. argument2 = t;
      14. }
      15. var xx;
      16. for (xx=argument0;xx<argument2;xx+=1)
      17. draw_point(xx,argument1);
      18. return true; // verlässt zugleich das Script
      19. }
      20. // Linie ist parallel zur y-Achse
      21. if (argument0 == argument2) {
      22. if (argument1 > argument3) {
      23. var t;
      24. t = argument1;
      25. argument1 = argument3;
      26. argument3 = t;
      27. }
      28. var yy;
      29. for (yy=argument1;yy<argument3;yy+=1)
      30. draw_point(argument0,yy);
      31. return true;
      32. }
      33. // Berechne Differenzen
      34. var Xdifference, Xdifference;
      35. Xdifference = argument2-argument0;
      36. Ydifference = argument3-argument1;
      37. // Zeichne 45°-Linien (Aufgabe 2b, mit Spiegelungen)
      38. if (abs(Xdifference) == abs(Ydifference)) { // ohne abs() würde das nicht alle Fälle abdecken!
      39. var i,xx,yy;
      40. xs = sign(Xdifference); // die Vorzeichen sparen weitere Unterscheidungen
      41. ys = sign(Ydifference);
      42. for (i=0;i<=abs(Xdifference);i+=1)
      43. draw_point(argument0+xs*i,argument1+ys*i); // egal, wie wir i durchlaufen: Die Vorzeichen regeln das schon
      44. return true;
      45. }
      46. // Zeichne flache Treppen (Aufgabe 2c)
      47. if (abs(Xdifference) > abs(Ydifference)) { // wenn Höhenunterschied kleiner als Breitenunterschied ist, haben wir eine flache Treppe
      48. if (argument0 > argument2) { // Falls x1 größer als x2 ist, tauschen wir gleich mal x1,y1 mit x2,y2
      49. var t;
      50. t = argument0;
      51. argument0 = argument2;
      52. argument2 = t;
      53. t = argument1;
      54. argument1 = argument3;
      55. argument3 = t;
      56. Xdifference *= -1; // nicht vergessen, dass die Steigungen nun auch negiert werden müsssen
      57. Ydifference *= -1;
      58. }
      59. var Yerror,xx,yy,ys;
      60. Yerror = 0; // der "Zähler" unseres virtuellen Bruchs - Warum? Steigungen von Geraden kann man einfach in Brüchen darstellen
      61. yy = argument1;
      62. ys = sign(Ydifference);
      63. for (xx=argument0;xx<argument2;xx+=1) {
      64. draw_point(xx,yy);
      65. Yerror = Yerror + abs(Ydifference); // Zähler erhöhen
      66. if (Yerror >= Xdifference) { // wenn unser Bruch >= 1 wird (also Zähler >= Nenner)...
      67. yy += ys; // ... gehen wir 1 hoch bzw. runter
      68. Yerror = Yerror - Xdifference; // und ziehen vom Bruch 1 ab (also Zähler - Nenner)
      69. }
      70. }
      71. return true;
      72. }
      73. // Zeichne steile Treppen
      74. if (abs(Ydifference) > abs(Xdifference)) { // keine Bange, == haben wir bereits ganz weit oben behandelt
      75. if (argument1 > argument3) { // bei steilen Treppen ist natürlich alles mit y statt mit x und umgekehrt
      76. var t;
      77. t = argument0;
      78. argument0 = argument2;
      79. argument2 = t;
      80. t = argument1;
      81. argument1 = argument3;
      82. argument3 = t;
      83. Xdifference *= -1;
      84. Ydifference *= -1;
      85. }
      86. var Xerror,xx,yy,xs;
      87. Xerror = 0;
      88. xx = argument0;
      89. xs = sign(Xdifference);
      90. for (yy=argument1;yy<argument3;yy+=1) {
      91. draw_point(xx,yy);
      92. Xerror = Xerror + abs(Xdifference);
      93. if (Xerror >= Ydifference) {
      94. xx += xs;
      95. Xerror = Xerror - Ydifference;
      96. }
      97. }
      98. return true;
      99. }
      Alles anzeigen

      Die übrigen Lösungen befinden sich in der *.gmk-Datei am Ende dieses Posts zum Download. Diese entspricht ab Aufgabe 3a der Lösung von Bl@cksp@rk - dem hatte ich einfach nichts mehr hinzuzufügen.
      Allen übrigen Teilnehmern ist es freigestellt, ihre Lösungen selbst noch hier hochzuladen.


      Feedback

      Eure Meinung ist gefragt! Damit das hier in Zukunft wieder stattfinden kann und auch hoffentlich mehr Leute teilnehmen, habe ich eine kleine Liste von Punkten zusammengestellt, zu denen ich gerne (sowohl von den Teilnehmern als auch von denen, die nicht teilgenommen haben) etwas Feedback hätte (Copy & Paste):

      Quellcode

      1. [b]Dauer:[/b]
      2. [b]Schwierigkeitsgrad:[/b]
      3. [b]Umfang der Aufgaben:[/b]
      4. [b]Waren die Aufgaben interessant?[/b]
      5. [b]Kennenlernen der eigenen Grenzen:[/b]
      6. [b]Lerneffekt:[/b]
      7. [b]Sind die Scripte noch außerhalb des Wettbewerbs nützlich?[/b]
      8. [b]Sonstiges:[/b]

      Der Zeitpunkt war schlecht gewählt, darüber brauchen wir nicht diskutieren. 2-3 Wochen später wäre schlauer gewesen.


      Soviel erstmal von meiner Seite. Wie gesagt, Ränge kommen noch.
      Dateien
    • Dauer: /
      Schwierigkeitsgrad:Ich hab nicht mal die erste verstanden, aber konzentriere mich eh nicht mehr sehr aufs programmieren.
      Umfang der Aufgaben:/
      Waren die Aufgaben interessant?Wie gesagt, Programmieren ist nicht mehr so mein Ding und deshalb fand ich es auch nicht so interessant, dass es mich anregen würde teilzunehmen. Für die die gerne Programmieren, wahrscheinlich interessanter.
      Kennenlernen der eigenen Grenzen:Siehe Schwierigkeitsgrad.
      Lerneffekt:/
      Sind die Scripte noch außerhalb des Wettbewerbs nützlich?Für mich nicht^^
      Sonstiges:
      Da ich mich mittlerweile mehr zu Pixel Art etc hingezogen fühle, ist meine Bewertung wohl eher zu ignorieren, weil ich mich sowieso nicht mehr so doll dafür interessiere.
      Bei einem Spiele Contest würde ich aber dennoch mitmachen, weil man da programmieren+pixeln verbinden kann.
      Finde aber gut das ihr sowas überhaupt hier anbietet. :thumbup:
    • Schön, bin ich ja doch noch dabei :) Seltsam, dass meine Emails nicht ankamen...
      Komm ich mal zu meinem Feedback:
      Dauer:Eigentlich ja ein ziemlich kurzer Contest, aber da es nur ums Programmieren ging, eigentlich auch doch nicht zu kurz gekommen. Zeitlich gesehn also angemessen und gut aufteilbar.
      Schwierigkeitsgrad:Wunderbar. Ersten Aufgaben zu Recht noch sehr einfach - gute Steigerung bishin zu sehr schweren Aufgaben.
      Umfang der Aufgaben:Zum Umfang gibts eigentlich auch nichts zu bemängeln. Jede Aufgabe war in den kleineren Teilaufgaben gut zu lösen und es passte alles gut zusammen.
      Waren die Aufgaben interessant?Interessant zu erfahren, wie leicht doch dinge mit den eingebauten Funktionien wie draw_line zu lösen sind.
      Kennenlernen der eigenen Grenzen:Die hab ich kennengelernt. Hat ziemliches Kopfzerbrechen bereitet, auch wenn ich jede Aufgabe mehr oder weniger, sinnvoll oder unsinnig gelöst habe.
      Lerneffekt:Nicht so eigentlich, da ja das theoretische Wissen bereits vorhanden war. Bei Usern, die noch nicht so lange mit dem GM arbeiten, könnte er vorhanden sein, oder halt auch nicht, da sie möglicherweise keine Ahnung haben, wie sies angehen sollen.
      Sind die Scripte noch außerhalb des Wettbewerbs nützlich?Eher weniger.
      Sonstiges:Im großen und Ganzen finde ich, dass der Contest nich nur Spaß sondern auch eine kleine Anregung gebracht hat. Anregung aufs programmieren. Ein netter Zeitvertreib war er auch. Das einzige Problem, das ich sah, war die Aufgabenstellung. Hab ich nicht direkt so verstanden, aber nunja.. Lehrer predigen es oft genug:...Aufgabenstellung richtig durchlesen....
      Ich freu mich auf jeden Fall auf den nächsten.
    • Dauer: /
      Schwierigkeitsgrad: naja geht so, teilweise unverständlich
      Umfang der Aufgaben: Großteils interesssante Aufgabenstellung allerdings mit wenig Abwechslung (da immer Ersatzfunktionen)
      Waren die Aufgaben interessant? Naja mich hätte es intereesiert nützliche Funktionen zu programmieren, die im GM nicht enthalten sind, sonst hat es wenig sinn.
      Kennenlernen der eigenen Grenzen: /
      Lerneffekt: Man lernt vll die Grundlegenden Rechnungsarten bzw ein ganz kleines Teilchen von dem wie GM arbeitet, sonst eher mehr Förderung des logischen Denkens.
      Sind die Scripte noch außerhalb des Wettbewerbs nützlich? Eher nicht.
      Sonstiges: Wie gesagt hab nicht teilgenommen, da ich keinen Vorteil daran finde Funktionen nachzuprogrammieren die ich tagtäglich im GM gebrauche.

      © 2008 by Teamgrill Productions
    • Dauer: 1-2 Stunden
      Schwierigkeitsgrad: gut, man hat halt so weit gemacht, wie man zurecht gekommen ist (alle schwierigkeitsstufen waren meiner meinung nach abgedeckt)
      Umfang der Aufgaben: 1 sehr knapp; 2-3 passend!
      Waren die Aufgaben interessant? Ja, aber neue Funktionen, die noch nicht existieren wären spannender gewesen.
      Kennenlernen der eigenen Grenzen: Nur bedingt, da ich nicht viel Zeit hatte (war eine Woche weg) und daher nur die Aufgaben gemacht habe die ich spontan lösen konnte ohne viel über die probleme zu grübeln.
      Lerneffekt: ist da! Auch dank der Korrektur und Verbesserung von MewX und Boxxar!
      Sind die Scripte noch außerhalb des Wettbewerbs nützlich? kaum, da sie ja bereits vom gm her existieren.
      Sonstiges: Hat Spass gemacht, gerne wieder! :thumbup:
    • Na da freu ich mich doch einfach mal über den Rang (den ich mir noch aussuchen darf) :)
      und will bei der Gelegenheit auch gleich mal ein Feedback geben:

      Dauer:etwa 2 Stunde insgesamt würde ich schätzen. Die meiste Zeit habe ich eigentlich damit verbracht, zu überlegen, was bei den nicht zu programmierenden Aufgaben verlangt sein könnte und den Algorithmus bei 3b zu optimieren. Und dann natürlich am Ende nochmal alles zu kontrollieren.

      Schwierigkeitsgrad: Da war eigentlich für jeden was dabei, was man schaffen konnte. Aber auch anspruchsvollere Aufgaben fehlten nicht. Habe ich eigentlich nichts dran auszusetzen.

      Umfang der Aufgaben: Ich denke für den Bearbeitungszeitraum von etwa 1,5 Wochen ist der Umfang völlig angemessen. Wie oben schon erwähnt habe ich etwa 2 Stunden für alle Aufgaben gebraucht, aber selbst wenn man mehr Zeit investiert hätte, wäre das sicher kein Problem.

      Waren die Aufgaben interessant? Ich vermute mal, dass war der Hauptgrund warum relativ wenige Leute teilgenommen haben. Ich möchte nicht sagen, dass die Aufgaben uninteressant waren, aber dadurch, dass alle Aufgaben irgendwie ähnlich sind, nur immer komplexer werden, hat da sicher der eine oder andere die Lust verloren. Ich sehe natürlich auch den Sinn darin. Man soll sich langsam auf ein Problem hinarbeiten und die einzelnen Aufgaben stellen sozusagen die Zwischenschritte da. Ist natürlich keine schlechte Idee, jedoch fehlt dann dadurch die Abwechslung.

      Kennenlernen der eigenen Grenzen: Ich möchte es mal anders formulieren: Ich habe vor allem die Grenzen des GM bezüglich Performance kennengelernt ;)

      Lerneffekt: Den Bresenham-Algorithmus kannte ich vorher noch nicht. Das war mal ganz interessant sich den anzuschauen.

      Sind die Scripte noch außerhalb des Wettbewerbs nützlich? Die Funktion in Aufgabe 4, auf die eigentlich auch die beiden vorigen Aufgaben hinarbeiten, gibts ja leider schon im GM (move_contact_all), mal abgesehen von der 1px Toleranz. Diese Toleranz könnte natürlich nützlich sein für das ein oder andere Spiel. Dazu sollte man ja auch Situationen in Aufgabe 4 beschreiben. D.h. so ganz unnütz dürften die Lösungen nicht sein.

      Wie auch schon andere erwähnt haben fände ich unabhängige Aufgaben nicht schlecht und auch solche, die die Funktionalität des GM sinnvoll erweitern. Ersatzfunktionen zu schreiben hat natürlich einen sehr guten Lerneffekt um zu verstehen, was der GM da genau macht, aber leider viel mehr auch nicht. Andererseits ist es natürlich auch nicht so einfach sich Aufgaben auszudenken, die sowohl interessant als auch nicht zu schwer und umfangreich sind.

      Es wäre sicher auch interessant Aufgaben von einem anderen Typ zu stellen. Die Aufgaben dieses Contests haben keine großen Abstufungen zugelassen. Entweder hatte man eine Aufgabe richtig oder nicht. Daraus ergibt sich natürlich, dass sich die Teilnehmer nicht in eine richtige Rangfolge bringen lassen. Diese Aufteilung in die unterschiedlichen Ränge finde ich deshalb eine gute Lösung. Mit Aufgaben von einem anderen Typ meine ich damit solche Aufgaben, dessen Lösungen sich besser ordnen ließen um letztlich eine Rangfolge aufstellen zu können. Ein gutes Beispiel dafür ist etwa das entwickeln einer KI. Dazu gab es auch schonmal einen Contest. Damals sollte man eine KI für 4-Gewinnt entwickeln. Solche Aufgabenstellungen finde ich persönlich sehr interessant. Sie sind kurz, präzise und dennoch anspruchsvoll. Zudem lassen sich Lösungen von verschiedenen Teilnehmern am Ende gut miteinander vergleichen.

      Insgesamt hat mir der Contest aber auf jeden Fall Spaß gemacht. Ich fand es schön, dass du dir die Mühe gemacht hast, den Wettbewerb auf die Beine zu stellen und dir die Aufgaben auszudenken.
    • So, dann will ich hier auchmal meinen Senf dazugeben:

      Dauer:
      Schwer zu sagen, da ich die Aufgaben über mehrere Tage zwischendurch gemacht habe
      Schwierigkeitsgrad:
      Fand ich eigentlich ganz angemessen, auch die Angaben, für wen die Aufgaben
      was sind waren gut gemacht.
      Umfang der Aufgaben:
      Es waren nicht zuviel und nicht zu wenig Aufgaben, von daher ganz gut gelungen.
      Waren die Aufgaben interessant?
      Für mich persönlich schon, mir hat es sehr Spaß gemacht zu sehen,
      woran man bei solchen Funktionen alles denken muss und was eigentlich
      bei dem entsprechenden Aufruf alles passieren muss. Ich kann aber auch
      verstehen, dass es für viele nicht ganz so spannend war.
      Kennenlernen der eigenen Grenzen:
      Die größte Grenze, die ich bemerkt habe war mal wieder meine
      nachlassende Motivation :D
      Lerneffekt:
      War jetzt nicht so überragend groß, nach ein bisschen grübeln waren die Lösungen zumindest
      vom Prinzip her da.
      Sind die Scripte noch außerhalb des Wettbewerbs nützlich?
      Für mich ist besonders das move_along skript
      mit Toleranz interessant. Mal schauen, was sich
      daraus noch so machen lässt.
      Sonstiges: \

      Alles in allem war der Contest sehr gut gemacht und eine schöne Alternative zum
      Spiele Contest, da freut man sich schon aufs Nächste Mal.
      Gruß, Spellmaker
      ___________________________________________________________
      Beware of wild pointers
      ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
    • Hmm...und *schwupps*, und schon ist der Contest vorbei :D
      Herzlichen Glückwunsch an die Sieger :)
      Meine Lösung zu abs ( x ) wäre auf die schnelle

      GML-Quellcode

      1. return argument0 div 1;

      da div ja ein "Rechenzeichen" und keine Funktion ist :F

      Naja, wenn ihr meint xD

      EDIT : Hab' garnicht gemerkt, dass das mein 300. Post ist... Sowas kommt halt von... uhmm... ihr wisst ja >.<

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Phoenix ()