

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Superdaniel« (1. August 2009, 14:32)
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Fortgeschrittener
Aktuelles Projekt: verschiedene kleinere sachen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »peyj« (9. August 2009, 20:00)
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Spoiler
Spoiler
Spoiler
Spoiler
Jetzt darfst du dir noch aussuchen, ob du einen "Sieger" oder einen "Ass"-Titel willst (oder eine Kombination aus beidem).
Spoiler
![]()
GML
1 2 3 4 5 // mewx_abs(x) if (argument0 < 0) return -argument0; else return argument0;
![]()
GML
1 2 3 4 5 6 // mewx_sign(x) if (argument0 > 0) return 1; if (argument0 < 0) return -1; return 0;
![]()
GML
1 2 3 4 5 // mewx_min(x,y) if (argument0 > argument1) return argument1; else return argument0;
![]()
GML
1 2 3 4 5 // mewx_max(x,y) if (argument0 > argument1) return argument0; else return argument1;
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 // mewx_draw_line(x1,y1,x2,y2) // // Die hier vorgestellte Lösung soll deutlich machen, wie man aus den Teilaufgaben von Aufgabe 2 die 3a löst. // Dabei werden verschiedene Tricks vorgestellt. // Anmerkung: Da hier auf Kommazahlen verzichtet wird, sind diese Linien etwas "grob" im Vergleich zu denen, die z.B. der GM zeichnet. // Zumindest in Assembler wäre die hier vorgestellte Lösung allerdings wesentlich schneller. // Linie ist parallel zur x-Achse (Aufgabe 2a) if (argument1 == argument3) { if (argument0 > argument2) { var t; // der folgende Block "tauscht" argument0 mit argument2 t = argument0; // in Pseudocode sieht man das oft als swap(x,y) argument0 = argument2; argument2 = t; } var xx; for (xx=argument0;xx<argument2;xx+=1) draw_point(xx,argument1); return true; // verlässt zugleich das Script } // Linie ist parallel zur y-Achse if (argument0 == argument2) { if (argument1 > argument3) { var t; t = argument1; argument1 = argument3; argument3 = t; } var yy; for (yy=argument1;yy<argument3;yy+=1) draw_point(argument0,yy); return true; } // Berechne Differenzen var Xdifference, Xdifference; Xdifference = argument2-argument0; Ydifference = argument3-argument1; // Zeichne 45°-Linien (Aufgabe 2b, mit Spiegelungen) if (abs(Xdifference) == abs(Ydifference)) { // ohne abs() würde das nicht alle Fälle abdecken! var i,xx,yy; xs = sign(Xdifference); // die Vorzeichen sparen weitere Unterscheidungen ys = sign(Ydifference); for (i=0;i<=abs(Xdifference);i+=1) draw_point(argument0+xs*i,argument1+ys*i); // egal, wie wir i durchlaufen: Die Vorzeichen regeln das schon return true; } // Zeichne flache Treppen (Aufgabe 2c) if (abs(Xdifference) > abs(Ydifference)) { // wenn Höhenunterschied kleiner als Breitenunterschied ist, haben wir eine flache Treppe if (argument0 > argument2) { // Falls x1 größer als x2 ist, tauschen wir gleich mal x1,y1 mit x2,y2 var t; t = argument0; argument0 = argument2; argument2 = t; t = argument1; argument1 = argument3; argument3 = t; Xdifference *= -1; // nicht vergessen, dass die Steigungen nun auch negiert werden müsssen Ydifference *= -1; } var Yerror,xx,yy,ys; Yerror = 0; // der "Zähler" unseres virtuellen Bruchs - Warum? Steigungen von Geraden kann man einfach in Brüchen darstellen yy = argument1; ys = sign(Ydifference); for (xx=argument0;xx<argument2;xx+=1) { draw_point(xx,yy); Yerror = Yerror + abs(Ydifference); // Zähler erhöhen if (Yerror >= Xdifference) { // wenn unser Bruch >= 1 wird (also Zähler >= Nenner)... yy += ys; // ... gehen wir 1 hoch bzw. runter Yerror = Yerror - Xdifference; // und ziehen vom Bruch 1 ab (also Zähler - Nenner) } } return true; } // Zeichne steile Treppen if (abs(Ydifference) > abs(Xdifference)) { // keine Bange, == haben wir bereits ganz weit oben behandelt if (argument1 > argument3) { // bei steilen Treppen ist natürlich alles mit y statt mit x und umgekehrt var t; t = argument0; argument0 = argument2; argument2 = t; t = argument1; argument1 = argument3; argument3 = t; Xdifference *= -1; Ydifference *= -1; } var Xerror,xx,yy,xs; Xerror = 0; xx = argument0; xs = sign(Xdifference); for (yy=argument1;yy<argument3;yy+=1) { draw_point(xx,yy); Xerror = Xerror + abs(Xdifference); if (Xerror >= Ydifference) { xx += xs; Xerror = Xerror - Ydifference; } } return true; }
|
|
Quellcode |
1 2 3 4 5 6 7 8 |
[b]Dauer:[/b] [b]Schwierigkeitsgrad:[/b] [b]Umfang der Aufgaben:[/b] [b]Waren die Aufgaben interessant?[/b] [b]Kennenlernen der eigenen Grenzen:[/b] [b]Lerneffekt:[/b] [b]Sind die Scripte noch außerhalb des Wettbewerbs nützlich?[/b] [b]Sonstiges:[/b] |
Benutzerinformationen überspringen
Game Maker Version: 7 Pro
Selbsteinschätzung: GML Anfänger
Aktuelles Projekt: ♥Pixel art♥ & Gunz & SubFritz helfen :)

Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
). Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Seltsam, dass meine Emails nicht ankamen...Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Geheimprojekt mit Soul Reaver, Hard Recoil
Danksagungen: 23



___________________________________________________________|
|
GML |
1 |
return argument0 div 1; |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Phoenix« (18. August 2009, 20:02)