Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Game Maker Domäne. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

1

Mittwoch, 29. Juli 2009, 21:00

gm-d.de Technikcontest Sommer '09

gm-d.de Technikcontest Sommer '09

Und es ist endlich soweit, ein neuer Contest ist da!
Diesmal handelt es sich um einen Technikcontest, angelehnt an den kleineren, den ich vor einiger Zeit organisiert habe und von dem sich viele eine Fortsetzung gewünscht haben.
Wie auch schon bei dem ersten Technikcontest geht es hier nicht nur darum, sein Können unter Beweis zu stellen, sondern auch seine Grenzen kennenzulernen und neue Erfahrungen zu sammeln.

Im Gegensatz zum letzten Mal ist für alle etwas dabei: GML-Einsteiger, -Fortgeschrittene und auch Experten werden hier (hoffentlich) irgendwie gefordert werden. Ferner gibt es mehrere Aufgaben, die auch alle Punkte geben. Abhängig von den erreichten Punkten gibt es am Ende des Wettbewerbs auch entsprechende Benutzertitel bzw. -ränge. Betrachtet dies also auch als Chance, eure "Selbsteinschätzung" zu untermauern. Keine Sorge: Wer nur Aufgabe 1 schafft und etwas von Aufgabe 2, wird vermutlich schon einen Titel bekommen.
Unabhängig davon werden wir dennoch Sieger kühren. Wieviele das sein werden, machen wir von der Teilnehmeranzahl abhängig.

Verständnisfragen zu den Wettbewerbsregeln können hier im Thread gestellt werden, Fragen bezüglich der Aufgabenstellungen aber bitte per PN an mich. Auch bitte keine Diskussionen über Lösungsansätze hier im Thread oder in den Technikforen für die Dauer des Wettbewerbs.

Infos zur Abgabe befinden sich unter der Aufgabenstellung.

Aufgabenstellung

  Spoiler Spoiler

  1. (GML-Einsteiger) Schreibe zu den folgenden Funktionen Ersatzfunktionen in GML.
    Funktionsaufrufe innerhalb der Funktionen dürfen dabei nicht benutzt werden (auch von keinen eigenen Funktionen). Build-In Variablen sind ebenfalls nicht erlaubt (hspeed, speed, ...). Es ist nicht notwendig, die Parameter auf ihren Typ hin zu überprüfen.
    1. abs(x)
    2. sign(x)
    3. min(x,y) (2 Parameter reichen)
    4. max(x,y) (2 Parameter reichen)

  2. (GML-Fortgeschritter) Schreibe folgende Funktionen in GML. Es gelten alle Regeln aus Aufgabe 1. Die selbstgeschriebenen Funktionen aus Aufgabe 1 dürfen nicht aufgerufen werden. Die angewendeten Prinzipien sollten aber im Hinterkopf behalten werden.
    Zusätzlich darf draw_point (bzw. draw_pixel) verwendet werden.
    1. draw_hline(x1,y1,x2,y2) zeichnet eine gerade, horizonte Linie von (x1,y1) nach (x2,y2). Es soll zuerst überprüft werden, ob die zu zeichnende Linie tatsächlich parallel zur x-Achse ist.
    2. draw_stairs(x1,y1,x2,y2) zeichnet eine Linie im 45° Winkel von (x1,y1) nach (x2,y2). Auch hier soll eine entsprechende Überprüfung der Parameter stattfinden.
    3. draw_stairs_flat(x1,y1,x2,y2) ähnlich wie b), nur darf der Winkel der Treppe nun auch weniger als 45° betragen. Wieder soll zuerst überprüft werden, ob die zu zeichnende "Treppe" wirklich flach ist (Tipp: Keine Kommazahlen benutzen!). Es reicht, wenn nur einer der 4 Fälle abgedeckt ist (0-45°, 135°-180°, 180°- 225° bzw. 315°-0°, d.h. nach rechts oben, links oben, links unten, rechts unten).

  3. (GML-Fortgeschritter bis -Experte) Schreibe eine Ersatzfunktion für draw_line. Es gelten die gleichen Regeln wie in Aufgabe 2. Es ist nicht notwending, dass die Funktion deckungsgleiche Linien mit draw_line zeichnet.
    1. Schreibe die Funktion mit geeigneten Fallunterscheidungen (Tipp: Aufgabe 2 gibt hierfür einen guten Leitfaden).
    2. Optimiere deine Funktion bezüglich ihrer Performance. Hierfür ist die Benutzung von den GM-Funktionen aus dem Kapitel "Computing Things" erlaubt. Stelle sicher, dass keine Variablen nach dem Aufrufen der Funktion in der entsprechenden Instanz gespeichert bleiben (Tipp: Debugmodus -> View Local Variables). Nimm als Maßstab die erreichte Fps bei einem Roomspeed von ~9999. Notiere zusätzlich deine Beobachtungen. Beachte dabei allerdings, dass diese eine Schwäche des GMs aufzeigen sollten und keine Allgemeingültigkeit besitzen!

  4. (GML-Fortgeschritter bis -Experte) Schreibe deine draw_line-Funktion (lieber die aus 3a, sonst gibts evtl- böse Überraschungen!) so um, dass sie die Instanz bewegt, von der aus sie aufgerufen wird (diese sollte eine rechteckige Maske haben). Als Parameter wird eine x- und y-Verschiebung übergeben. Das Script soll die "Linie" dieser Bewegung (von x, y nach x+.., y+...)ablaufen und die Instanz entsprechend verschieben. Sollte ein Wandobjekt im Weg sein, soll die Instanz auf der letzten freien Stelle stehenbleiben. Zusätzlich zu den in Aufgabe 3 beschriebenen Funktionen ist die Benutzung der Funktion place_free erlaubt.
    1. Schreibe die oben beschriebene Funktion mit dem Namen move_along(hspd,vspd) und entwerfe eine einfache Testumgebung, um ihre Funktionalität zu überprüfen. Hierfür reicht ein einfacher Raum mit solid Wandobjekten und einer Spielerfigur (Tipp: Du kannst als Parameter einfach hspeed und vspeed übergeben, solange du sie nach dem Aufrufen der Funktion auf 0 setzt).
    2. Erweitere die Funktion so, dass sie einen Spielraum von 1 Pixel erlaubt. Sollte sich die Spielfigur also z.B. auf einer Geraden befinden (Seitenansicht), auf der sich eine 1-Pixel-hohe und - breite Erhebung befindet, soll sie diesen ohne Geschwindigkeitsverlust umgehen bzw. "hochklettern". Es ist dabei zu erwarten, dass die Figur nach dem Überqueren dieser Erhebung sich nicht wieder um den einen Pixel nach unten bewegt, den sie vorher nach oben ausgewichen ist.
    3. Erweitere deine Testumgebung um Schrägen und beobachte, wie sich deine Spielfigur nun verhält.
    4. Beschreibe in Worten je eine Situation in einem Spiel, in der das Verhalten aus dem letzten Satz aus Aufgabenteil b (nicht) wünschenswert ist.
    5. Überlege, wie man die Problematik deiner nicht wünschenswerten Situation aus Aufgabenteil d umgehen könnte.

  5. (Bonusaufgabe) Erweitere deine draw_line-Funktion so, dass sie draw_line_color entspricht.

Anmerkung: Die Aufgaben sollten nicht außerhalb ihrer Reihenfolge bearbeitet werden. Für eine volle Punktzahl müssen alle Aufgaben gelöst werden. Aufgabe 5 steht außerhalb der Wertung für die Rangvergabe nach Punkten, wird aber für die Bestimmung des Siegers / der Sieger mitangerechnet.

Abgabe / Richtlinien:
Arbeiten im Team ist nicht erlaubt. Der Wettbewerb verfolgt zugleich ein Lernziel, das durch Teamarbeit allerdings stark gefährdet wird. Tut euch daher selbst einen Gefallen und kommt auch nicht darauf, abzuschreiben. Mitglieder des Teams sind vom Wettbewerb nicht ausgeschlossen, liegen aber außerhalb der Wertung.
Benutzt bitte bei selbstgeschriebenen Funktionen ein Präfix, das aus eurem Nickname besteht (Beispiel: mewx_draw_line, mewx_abs).
Schickt dann eine *.gm6 oder *.gmk mit den entsprechenden Skripten bzw. der Testumgebung (sofern vorhanden) an uawg@gm-d.de (da die Weiterleitung anscheinend ewig braucht, vermerkt am besten noch im Thread oder per PN, dass ihr eine Email geschickt habt. Nicht, dass nachher etwas verloren geht). Als Namen für die Datei bitte ebenfalls den Nickname verwenden.

Schriftliche Aufgaben, die kein auszuführender Code sind, einfach in eine eigene Scriptdatei schreiben und mit /* und */ auskommentieren. Bitte nicht die Game Info benutzen!

Einsendeschluss ist Sonntag, 9. August, 2009 um 20:00 Uhr.

Viel Erfolg und viel Spaß, ran ans Coden!


Ergänzung:
Ein Testscript für Aufgabe 1. Einfach ins eigene Projekt kopieren und ausführen (funktioniert derzeit leider nur für registrierte Benutzer, sorry). Und: Ein "OK" bedeutet nur sehr wahrscheinlich, dass euer Script korrekt ist. Ein Fehler kann trotzdem drin sein.

  Spoiler Spoiler

GML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// context_check()
// written by MewX

// init variables
var map,i,prefix,str,src,res;
// create script map
map = ds_map_create();
for (i=0;i<100;i+=1) {
    if (!script_exists(i))
        continue;
    ds_map_add(map,string_lower(script_get_name(i)),i);
}
// get prefix
prefix = "";
while (prefix = "")
    prefix = get_string("Bitte gib deinen Nickname bzw. das Präfix deiner Skripte ein:","mewx")+"_";
// test abs()
res = true;
str = "Aufgabe 1#a) abs(x): ";
src = ds_map_find_value(map,prefix+"abs");
if (!script_exists(src))
    str += "nicht gefunden";
else {
    for (i=-25;i<25;i+=0.5)
        res &= (abs(i) == script_execute(src,i));
    if (res)
        str += "OK";
    else
        str += "FEHLER";
}
// test sign()
res = true;
str += "#b) sign(x): "; 
src = ds_map_find_value(map,prefix+"sign");
if (!script_exists(src))
    str += "nicht gefunden";
else {
    for (i=-25;i<25;i+=0.5)
        res &= (sign(i) == script_execute(src,i));
    if (res)
        str += "OK";
    else
        str += "FEHLER";
}
// test min()
res = true;
str += "#c) min(x,y): "; 
src = ds_map_find_value(map,prefix+"min");
if (!script_exists(src))
    str += "nicht gefunden";
else {
    res &= (script_execute(src,0,0) == 0);
    res &= (script_execute(src,32,2) == 2);
    res &= (script_execute(src,7,32) == 7);
    res &= (script_execute(src,-32,-2) == -32);
    res &= (script_execute(src,32,-2) == -2);
    res &= (script_execute(src,0,-2) == -2);
    res &= (script_execute(src,2,0) == 0);
    res &= (script_execute(src,23.4,79.7) == 23.4);
    if (res)
        str += "OK";
    else
        str += "FEHLER";
}
// test max()
res = true;
str += "#d) max(x,y): "; 
src = ds_map_find_value(map,prefix+"max");
if (!script_exists(src))
    str += "nicht gefunden";
else {
    res &= (script_execute(src,0,0) == 0);
    res &= (script_execute(src,32,2) == 32);
    res &= (script_execute(src,7,32) == 32);
    res &= (script_execute(src,-32,-2) == -2);
    res &= (script_execute(src,32,-2) == 32);
    res &= (script_execute(src,0,-2) == 0);
    res &= (script_execute(src,2,0) == 2);
    res &= (script_execute(src,23.4,79.7) == 79.7);
    if (res)
        str += "OK";
    else
        str += "FEHLER";
}
// clean up
ds_map_destroy(map);
// show result
show_message(str);

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

2

Mittwoch, 29. Juli 2009, 23:49

Ergänzung!

Da es schon bei einigen für Verwirrung sorgte:
Die Aufgaben sollen der Reihe nach gelöst werden. Wer bestimmte Aufgaben nicht schafft, braucht diese natürlich nicht zu machen, aber für die höchstmögliche Punktzahl müssen alle Aufgaben gelöst werden, auch die trivialen (Aufgabe 1 und 2 lassen sich von guten Codern binnen 10 Minuten oder weniger lösen).

Edit:
Wer nur einen Teil schafft, kann auch schon einen Rang bekommen. Die Untergrenze legen wir erst beim Bewerten fest, sollte aber ungefähr Aufgabe 1 + etwas von Aufgabe 2 umfassen.

Edit2:
Die Weiterleitung der Emails braucht etwas zu lange. Bedenkt das bitte bei der Abgabe.

Edit3:
Ich habe für die Anfänger ein Testscript für Aufgabe 1 hinzugefügt, es befindet sich am Ende des ersten Posts (derzeit nur für registrierte GM Benutzer, sorry).

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

3

Donnerstag, 30. Juli 2009, 10:33

Ergänzung zur Aufgabe 2c:
Es reicht, wenn nur einer der 4 Fälle abgedeckt ist (0-45°, 135°-180°, 180°- 225° bzw. 315°-0°, d.h. nach rechts oben, links oben, links unten, rechts unten).

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

4

Donnerstag, 30. Juli 2009, 12:42

Aufgabe 4 und 4a:
Die Aufgabenstellung wurde konkretisiert. Für weitere Verständnisfragen mich ruhig weiterhin anschreiben!

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

5

Donnerstag, 30. Juli 2009, 12:49

Aufgabe 2:
Aufgabenstellung konkretisiert. Eigene Funktionen dürfen weiterhin nicht aufgerufen werden, auch nicht die aus Aufgabe 1. Die Prinzipien dahinter sollte man natürlich nicht vergessen haben.

J@kob

"Good news, everyone!"

Beiträge: 1 040

Game Maker Version: 8.1 Standard

Selbsteinschätzung: GML Fortgeschrittener

  • Private Nachricht senden

6

Donnerstag, 30. Juli 2009, 12:49

(Tipp: Keine Kommazahlen benutzen!)

heist das, wir dürfen runden? also round, ceil oder floor benutzen?

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

7

Donnerstag, 30. Juli 2009, 12:50

Nö.

Beiträge: 840

Game Maker Version: 7 Pro

  • Private Nachricht senden

8

Donnerstag, 30. Juli 2009, 13:44

Zitat

Schreibe die Funktion mit geeigneten Fallunterscheidungen

Was soll das heißen? Was gibt es denn da für Fälle?


Mann darf aber doch alle Operatoren und Statements benutzen oder?
Und ab 3.b auch round, floor, ceil, sin... ?


3. Besteht aus 3 Teilaufgaben?
( Also schreibe draw_line neu, schreibe geeignete fallunterscheidungen (was auch immer das heißen mag) und optimiere deine draw_line - funktion)

Würde es dann reichen, wenn man nur eine optimierte schreibt?

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

9

Donnerstag, 30. Juli 2009, 14:11


Was soll das heißen? Was gibt es denn da für Fälle?

Aufgabe 2 bringt da einen Leitfaden.
Mann darf aber doch alle Operatoren und Statements benutzen oder?
Und ab 3.b auch round, floor, ceil, sin... ?

Darf man, aber keine der genannten Funktionen ist sinnvoll.
3. Besteht aus 3 Teilaufgaben?
( Also schreibe draw_line neu, schreibe geeignete fallunterscheidungen (was auch immer das heißen mag) und optimiere deine draw_line - funktion)

Nein, 2 Teilaufgaben. draw_line neu soll mithilfe geeigneter Fallunterscheidungen geschrieben werden.

Würde es dann reichen, wenn man nur eine optimierte schreibt?

Das würde wohl 0 Punkte geben. Wenn ich die Zeichen außerdem richtig deute und und du mit dem Sinus arbeiten willst, dann kann ich dir direkt sagen: Das ist nicht optimal.

Beiträge: 840

Game Maker Version: 7 Pro

  • Private Nachricht senden

10

Donnerstag, 30. Juli 2009, 17:24

Zitat

Das würde wohl 0 Punkte geben. Wenn ich die Zeichen außerdem richtig deute und und du mit dem Sinus arbeiten willst, dann kann ich dir direkt sagen: Das ist nicht optimal.
Ja, das weiß ich wohl ^^ es war eine generelle Frage! Also braucht man für die 3 2 Scripts? Einmal das mit den Fallunterscheidungen (auch wenn ich nicht erkennen kann, was daran sinnvoll wäre (ich glaube, ich benutze eine andere Methode :S (nicht mit sinus :pinch: ))) und einmal die optimierte Version. Wäre es nicht genügend nur eine (optimierte) Version abzugeben?

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

11

Donnerstag, 30. Juli 2009, 17:34

Nein, nur so kann ich überprüfen, ob ihr kein Copy und Paste macht.

Beiträge: 840

Game Maker Version: 7 Pro

  • Private Nachricht senden

12

Donnerstag, 30. Juli 2009, 17:36

Also soll es auch kommentiert werden et.c.?

Edit:
Man soll also auch eine Art Zwischenschritt abgeben?

[edit:] tu mir leid wenn ich damit jetzt nerve ^^

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

13

Donnerstag, 30. Juli 2009, 17:37

Nicht unbedingt notwendig.

Superdaniel

Sokrates

Beiträge: 464

  • Private Nachricht senden

14

Donnerstag, 30. Juli 2009, 19:46


Eigentlich wäre ja nur die grüne Linie 45°, die rote beträgt ja den Winkel von 135°. Lieg ich da richtig oder bedeutet das 45° einfach alle Diagonalen?

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

15

Donnerstag, 30. Juli 2009, 19:48

Ich habe die Aufgabenstellung bereits verdeutlicht deshalb - eine 45°-LInie reicht, aber aus Interesse gegenüber den übrigen Aufgaben wäre es nicht falsch, alle 4 zu machen.

MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

16

Donnerstag, 30. Juli 2009, 23:09

Und noch eine Ergänzung:

Verwendet bei Aufgabe 4 euren Code aus Aufgabe 3a als Basis. Der Code aus Aufgabe 3b wird wahrscheinlich schon nicht mehr brauchbar sein fürs Umschreiben.

henrik1235

***Gold***

Beiträge: 1 393

Game Maker Version: 7 Pro

Selbsteinschätzung: GML Experte

  • Private Nachricht senden

17

Freitag, 31. Juli 2009, 00:11

Kurze Frage zu draw_stairs_flat(x1,y1,x2,y2):
Soll das so ausehen:

?
Wenn ja,soll das gefüllt sein?

Zitat

(Gilt auch für draw_stairs_flat) Eine Linie, kein Dreieck.
Schade ^^

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »henrik1235« (31. Juli 2009, 11:45)


copyboy

Krankhafter Individualist

Beiträge: 2 046

Selbsteinschätzung: GML Experte

  • Private Nachricht senden

18

Freitag, 31. Juli 2009, 10:21

@henrik1234:
draw_stairs(x1,y1,x2,y2) zeichnet eine Linie im 45° Winkel von (x1,y1) nach (x2,y2). Auch hier soll eine entsprechende Überprüfung der Parameter stattfinden.
(Gilt auch für draw_stairs_flat) Eine Linie, kein Dreieck.

Superdaniel

Sokrates

Beiträge: 464

  • Private Nachricht senden

19

Freitag, 31. Juli 2009, 13:22

Soll die optimierte Version von draw_line ähnlich der der suboptimalen sein, oder kann man theoretisch nochmals eine ganz neue draw_line-Funktion schreiben, die jedoch schneller als die vorige ist? Bzw bekommt man dann die Punkte für die Aufgabe?!^^
edit: Je öfter ich die Aufgabenstellung lese, desto schwachsinniger finde ich meine Frage. Werds einfach so machen wie ich eigentlich vermute - ähnlicher Aufbau.
Aber eine andere Frage: Müssen dort auch wieder die Fallunterschiede rein?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Superdaniel« (31. Juli 2009, 15:24)


MewX

Breaking the 4th wall

  • »MewX« ist der Autor dieses Themas

Beiträge: 1 316

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Experte

Aktuelles Projekt: Disordia & Harald

Danksagungen: 7

  • Private Nachricht senden

20

Samstag, 1. August 2009, 00:18

Bezüglich der Fallunterscheidungen solltest du bei der optimierten Version eine frustrierende Feststellung machen.

Ähnliche Themen