Spiele proggen ohne große Mathematik Kentnisse?



  • LiquidAcid schrieb:

    Also wenn du schon nicht fähig bist mit einer Suchmaschine umzugehen, dann würde ich das Programmieren lieber ganz schnell sein lassen.

    genau ich wusste nicht das sinus zu trigronometie gehört!

    tja euch wurde der verdammte ... halt gelernt, ich habe KEIN MATHE MEHR! dann KANN ICH ES AUCH NICHT WISSEN! 😡

    ich muss mir das halt alles selbst beibringen, tja und ich hab auch noch zeit des zu lernen! Ich lass mir bestimmt nicht von ein paar Möchtegern Einsteinen das Programmieren ausreden!

    edit: hier im forum gibt es genug nette menschen leider gibt es immer ein paar ausnahmen! 😡



  • Du kannst auch ein Spiel ohne Sinus programmieren. Wenn Du eine Library benutzt, die alles schön wegkapselt, brauchst Du nicht viel Mathe. Oder versuch Dich an einem Text-Adventure...

    Edit: Habe die Smileys vergessen! 😡 😡 😡 😡 😡 😡 😡 und noch ein 😡



  • hey gerner, mach mal halblang 😡 😡 😡 :p



  • eXpEdItIoN-gEfOrCe!! schrieb:

    genau ich wusste nicht das sinus zu trigronometie gehört!

    Dann hast du dich nicht genügend informiert. Wenn einem ein mathematischer Begriff nicht vertraut ist versucht man als erstes den Teilbereich der Mathematik herauszufinden, aus dem dieser Begriff entspringt. Hast du das getan? Nein? Dann beschwer dich nicht.

    eXpEdItIoN-gEfOrCe!! schrieb:

    tja euch wurde der verdammte ... halt gelernt, ich habe KEIN MATHE MEHR! dann KANN ICH ES AUCH NICHT WISSEN! 😡

    ICH HAB AUCH KEIN MATHE MEHR!!! ICH BIN ZIVILDIENSTLEISTENDER IN EINER KINDERTAGESSTÄTTE UND DA KÖNNEN DIE KLEINEN NICHT MAL MULTIPLIZIEREN!! (damit das mal klar ist)

    eXpEdItIoN-gEfOrCe!! schrieb:

    ich muss mir das halt alles selbst beibringen, tja und ich hab auch noch zeit des zu lernen!

    Sollen wir jetzt klatschen, dass du dir das allein beibringst und dabei noch deine ach so kostbare Zeit opferst?!

    eXpEdItIoN-gEfOrCe!! schrieb:

    Ich lass mir bestimmt nicht von ein paar Möchtegern Einsteinen das Programmieren ausreden!

    Einstein würde ich eher zur Physik zuordnen, hier gehts allerdings um Mathematik.

    eXpEdItIoN-gEfOrCe!! schrieb:

    edit: hier im forum gibt es genug nette menschen leider gibt es immer ein paar ausnahmen! 😡

    Es gibt auch die Sorte Menschen hier im Forum, die einfach zu faul sind mal ihren Hintern zu heben, in die örtliche/nahegelegene Bücherei zu gehen und sich dort ein passendes Buch auszuleihen. Gott, selbst in der Schule kommt man bestimmt günstig oder zum Nulltarif an ausgediente Schulbücher, die einem den Stoff auf einfachere Art vermitteln. Und ich glaube mit einem dieser Sorte Mensch rede ich hier gerade.

    cya
    liquid



  • Sinus und co verstehe ich leider daher auch nicht, und nach gescheiten tutorials suche ich schon ewig - leider vergebens

    Bei 2D kenne ich 2 Formeln die wichtig sind.

    Die eine bestimmt die Entfernung zwischen 2 Punkten und ist eine Ableitung vom allgemein bekanntem a²=b²+c²

    a²=b²+c²
    <=>a=√(b²+c²)
    <=>d=√((x1-x2)²+(y1-y2)²)
    

    Mit x1-x2 berechnet man die Entfernung auf der X- Achse. Wegen des ² spielt das Zeichen des Zwischenergebnisses keine Rolle. Und das Ganze noch mal in Form von C++ Funktion:

    inline double point_distance(double x1,double y1,double x2,double y2)
    {
        return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    }
    

    Sinus (sin) und Kossinus (cos) werden im Zusammenhang mit Kreisen verwendet. Wobei sin den Y Wert in Bild ermittelt und cos den X Wert. Als Argument nehmen sie irgendeine Winkelangabe (ist leider nicht genormt und hängt stark von der Programmiersprache ab). Im Fall C++ sind das Radian aber hier eine Formel um sie in gute alte 360 Grad zu verwandeln wo 0 Grad Rechts ist, 90 Oben, 180 Links und 270 Unten.

    inline double gradzurad(double a)
    {
        return (((90-a)/180)*3.141592654);
    }
    

    cos und sin geben jeweils die X und Y Koordinaten für einen Kreis mit Radius 1 aus. Das heißt:
    cos(gradzurad(0))=1;//X wert für Links
    sin(gradzurad(0))=0;//Y wert für Links
    cos(gradzurad(90))=0;//X wert für Oben
    sin(gradzurad(90))=1;//Y wert für Oben
    cos(gradzurad(180))=-1;//X wert für Rechts
    sin(gradzurad(180))=0;//Y wert für Rechts
    cos(gradzurad(270))=0;//X wert für Unten
    sin(gradzurad(270))=-1;//Y wert für Unten
    Alle Graden dazwischen geben immer sehr krumme Zahlen jedoch sind es die Punkten eines Kreises. Falls du nicht verstehst sieh dir dieses Beispiel mal an:

    for(int i=0;i<360;i++)
        draw_pixel(cos(gradzurad(i)),sin(gradzurad(i)));
    

    Der Code oben zeichnet einen Kreis und dies würde einen Halbkreis zeichnen:

    for(int i=0;i<180;i++)
        draw_pixel(cos(gradzurad(i)),sin(gradzurad(i)));
    

    (Wobei es draw_pixel(x,y) gar nicht gibt, sollte jedoch klar sein was gemeint ist.)

    Allerdings ist der Kreis sehr klein weil er einen Radius von 1 hat. Um dies zu ändern multipliziert man einfach cos und sin mit dem gewünschtem Radius. Jedoch wird der Kreis auch um den Punkt (0,0) gezeichnet um dies zu ändern addieren wir einfach das gewünschte Zentrum zu den Endergebnissen von cos * Radius und sin * Radius.
    Zu Beispiel dies zeichnet einen Kreis um den Punkt (5,9) mit einem Radius von 4:

    for(int i=0;i<360;i++)
        draw_pixel(cos(gradzurad(i))*4+5,sin(gradzurad(i))*4+9);
    

    So ich hoffe du verstehst jetzt wozu cos und sin geraucht werden. 😉

    Ach ja falls du 2D Spiele auf die einfache Weise machen willst wird dich das vielleicht interessieren:
    [url]http:\\www.gamemaker.nl[/url]
    Ist sehr einfach zu gebrauchen kann aber für so gut wie alle Arten von 2D Spielen verwendet werden.

    mit den tutorials aus dem Internet kann man das sowieso nicht so gut lernen

    Alles was ich über das Programmiren weis (und das ist nicht gerade wenig) hab ich über das Internet und durch Versuch und Irrtum gelernt. Und das Einzige was schwer daran ist sind Leute die andere kritisieren weil man sie um Hilfe fragt oder mit immer passenden denkschwachen Antworten kommen wie "Such auf Google".



  • @drVoodoo

    wow danke für den crashkurs 🙂
    ich druck mir des ma an und schau mir des ma genauer an!

    @anderen

    ich keinen bock mich hier runzustreiten, is mir einfach zu primitiv, schlau ist es halt ma nachzugeben! Die rumstreitereien helfen auch niemanden!



  • drVoodoo schrieb:

    Sinus (sin) und Kossinus (cos) werden im Zusammenhang mit Kreisen verwendet. Wobei sin den Y Wert in Bild ermittelt und cos den X Wert.

    Niemand würde mit Sin und Cos einen 2D-Kreis zeichnen, dafür gibt es einen viel schnelleren Algorithmus. Den Hauptzweck von Sin und Cos hast Du garnicht erwähnt. Sin und Cos werden nämlich hauptsächlich im Zusammenhang mit Dreiecken und Seitenlängen verwendet, und sie sind ja auch durch ein Dreieck definiert (Verhältnisse von Seitenlängen)!



  • TomasRiker schrieb:

    und sie sind ja auch durch ein Dreieck definiert (Verhältnisse von Seitenlängen)!

    Das würde ich mal nicht zu lautstark behaupten.

    Es gibt Leute(meist Mathematiker), die sagen
    sin(x):=Sum[n=0..oo]x^(2n+1)/(2n+1)!

    Ich versteh jedenfalls nicht, wie es einige hier schaffe sich so sehr aufzuregen. Ist ja toll LiquidAcid, daß Du das alles kannst, obwohl Du Zivildienst leistest, aber kann es sein, daß Du das vorher mal in der Schule gelernt hast? Was ist, wenn expedition (kein Bock auf die tolle Schreibweise) das nicht in der Schule gelernt hat. Muß er es dann wirklich können? Viele Sachen kann man sich nur sehr schwer selbst aneignen. Wenn man's dann aber einmal gefressen hat, dann isses ziemlich einfach. Trotzdem ist es dann für diejenigen, die es noch frisch lernen müssen nicht einfacher als zuvor.
    Aber die Masche: "Wie Du kannst kein Sinus? Dann kannste auch ned programmieren." Sowas find ich echt scheiße. Wieso soll er denn nicht programmieren. Wenn er's dann wirklich braucht, dann wird er's auch verstehen. Und dann geht's auch gleich viel leichter, weil man einen konkreten Anwendungsfall vor Augen hat.

    MfG Jester



  • eXpEdItIoN-gEfOrCe!! schrieb:

    anscheinend hälst dich für extra schlau

    Bin ich doch auch.



  • Niemand würde mit Sin und Cos einen 2D-Kreis zeichnen

    Ich kenne viele für die das Gang und Gäbe ist! Und es ist das konkreteste Beispiel das es gibt.

    dafür gibt es einen viel schnelleren Algorithmus

    Das Schnellste ist immer noch die Sinus und Kosinus Tabelle. Erstell einfach einen Array und füll ihn mit den Ergebnissen von Sinus und Kosinus aus. Wenn du es schafft einen schnelleren Algorithmus vorzulegen dann Hut ab.

    Und komm jetzt nicht mit dem Argument das es unexakt ist! 360 Grad sind genauer als man brauch bei Auflösungen wie 1024x798 und 800x600.

    Den Hauptzweck von Sin und Cos hast Du gar nicht erwähnt.

    Sag mal wie willst du wissen was für mich den "Hauptzweck" zu sein hat? Ist der viel mathematisch definiert?

    wow danke für den crashkurs
    ich druck mir des ma an und schau mir des ma genauer an!

    Gern geschen. Ach und gestern ist es mir ein kleiner Fehler unterlaufen:

    cos(gradzurad(0))=1;//X wert für Links
    sin(gradzurad(0))=0;//Y wert für Links
    cos(gradzurad(180))=-1;//X wert für Rechts
    sin(gradzurad(180))=0;//Y wert für Rechts

    Das sollte eigentlich:

    cos(gradzurad(0))=1;//X wert für Rechts
    sin(gradzurad(0))=0;//Y wert für Rechts
    cos(gradzurad(180))=-1;//X wert für Links
    sin(gradzurad(180))=0;//Y wert für Links

    sein.

    Und benutz bei Mathe immer float oder double! int und co geben oft schwer zu findende Fehler!



  • drVoodoo schrieb:

    Das Schnellste ist immer noch die Sinus und Kosinus Tabelle. Erstell einfach einen Array und füll ihn mit den Ergebnissen von Sinus und Kosinus aus. Wenn du es schafft einen schnelleren Algorithmus vorzulegen dann Hut ab.

    Der Kreis-Algorithmus von Bresenham ist soweit ich weiß der schnellste:
    http://www-lehre.informatik.uni-osnabrueck.de/~cg/2000/skript/3_4_Kreis.html

    Deine Methode ist in jedem Fall ungenau, wenn Du große Kreise zeichnest, denn dann musst Du schon entweder
    a) sehr viele Einträge in Deine Sin-/Cos-Tabelle schreiben, oder
    b) die einzelnen Punkte durch Linien verbinden.

    Wenn Du das nicht tust, dann hast Du nachher keinen Kreis mehr, sondern einen Haufen getrennter Pixel. Also zieh schonmal Deinen Hut, lieber Freund! 😉



  • Ließe sich das Ganze nicht auch über die Kreisrelation

    x*x + y*y = r*r
    

    machen, wenn man ein Koordinatensystem "einführt", wo Ursprung = Kreismittelpunkt?

    Wenn das in dem Zusammenhang Mist ist, dann macht mich bitte nicht fertig, habe keinen Plan von Spieleprogrammierung ;). Aber soweit ich mir das vorstellen kann, ist doch Vektorgeometrie und das Lösen linearer Gleichungssysteme (Gauß + Cramer/Sarrus) zur Kollisionsabfrage auch elementar für Spiele oder?



  • EDIT: Sorry, verklickt... Kann man Beiträge löschen?



  • Ich weiß nicht, wie Du das genau machen willst, vielleicht alle x-Pixel durchgehen und die zwei Lösungen für y berechnen?
    Der Bresenham-Algorithmus ist trotzdem schneller, man braucht in der Iteration nur ein paar Additionen und ein paar Subtraktionen. Keine Multiplikationen, keine Divisionen und kein Wurzelziehen. Es würde mich schwer wundern, wenn es noch was schnelleres gäbe.



  • Also, ohne den Bresenham-Algo zu kennen, würde ich es so angehen (gesetzt der Fall, es gäbe eine Funktion "DrawPixel" und OHNE Umwandlung der relativen Kreis-Koordinaten in absolute Bildschirm-Koordinaten):

    int x, y, r; // x: x-Koordinate, y: y-Koordinate, r: Kreisradius
    
    for(x = -r; x <= r; i++)
    {
      y = sqrt(r*r - x*x);
      DrawPixel(x, y); // Fiktive DrawPixel-Funktion
    
      // Zeichnen des Pixels unterhalb der x-Achse
      y = -sqrt(r*r - x*x);
      DrawPixel(x, y);
    }
    

    Ergibt das keinen Sinn?



  • Klar ergibt das Sinn (wenn Du aus "x" unter der Wurzel ein "x*x" machst, denn dann ist es richtig), es ist aber viel, viel langsamer im Vergleich zum Bresenham-Algorithmus. Aber auch Dein Code ließe sich noch sehr stark optimieren! Z.B. ist es unnötig, die zweite Wurzel zu berechnen, weil die ja gleich der ersten ist. Und es reicht auch, nur die Hälfte der x-Werte durchzugehen (man kann den Kreis ja spiegeln).



  • Jester schrieb:

    Ich versteh jedenfalls nicht, wie es einige hier schaffe sich so sehr aufzuregen.

    Also ich persönlich hab mich nicht aufgeregt. Das würde ich dann auch durch Smilies kenntlich machen. Ich hab nur meine Meinung zu dem Thema offengelegt, das darf man ja wohl noch?

    Jester schrieb:

    Ist ja toll LiquidAcid, daß Du das alles kannst, obwohl Du Zivildienst leistest, aber kann es sein, daß Du das vorher mal in der Schule gelernt hast?

    Ich rühme mich nicht damit, dass ich mathematische Grundlagen beherrsche. Ich wollte damit einzig und allein ausdrücken, dass ich (zur Zeit) in keinem Feld tätig bin, was auch nur im entferntesten mit Mathematik zu tun hat (außer vielleicht die Kiddies durchzählen *g*).
    Und ja, ich hatte in der Schule Mathe-Leistungskurs. Jedoch taucht Trigonometrie schon vor der Oberstufe auf und ist gewissermaßen Pflichtprogramm.
    Darüberhinaus (und da rühme ich mich ebenfalls nicht für) kann ich auch noch sehr viel mehr, als der Mathematikunterricht uns geboten hat. Das ist eine einfache Feststellung.(Punkt)

    Jester schrieb:

    Was ist, wenn expedition (kein Bock auf die tolle Schreibweise) das nicht in der Schule gelernt hat.

    Warum wählt man auch Mathe ab, wenn man vor hat in die Softwarentwicklung einzusteigen? Ich bin der Meinung, dass die Mathematik für die Informatik eine der essentiellen Grundlagen ist.

    Jester schrieb:

    Muß er es dann wirklich können? Viele Sachen kann man sich nur sehr schwer selbst aneignen.

    Programmieren ist zum Großteil Autodidaktik, man erarbeitet sich sehr viel selber. Sowohl was den programmtechnischen als auch den algorithmustechnischen Teil angeht. Das was ich über Programmieren weiß hat mir kein Lehrer, Tutor, etc. beigebracht.

    Jester schrieb:

    Wenn man's dann aber einmal gefressen hat, dann isses ziemlich einfach. Trotzdem ist es dann für diejenigen, die es noch frisch lernen müssen nicht einfacher als zuvor.

    Das habe ich auch nicht gesagt. Aber jeder halbwegs denkende Mensch wird die Mittel der Informationsbeschaffung kennen. Wie ich schon gesagt habe. Geht er kurz in die Schule und fragt dort nach ausrangierten Mathebüchern. Guckt kurz rein ob er was zu seinem Thema findet (oder nimmt gleich alle mit, würde ich persönlich immer machen (/me = Büchersammler)). Dann gehts halt nur noch darum das ganze zu lesen. Und bei Nichtverstehen nocheinmal wenns nötig ist.

    Jester schrieb:

    Aber die Masche: "Wie Du kannst kein Sinus? Dann kannste auch ned programmieren." Sowas find ich echt scheiße. Wieso soll er denn nicht programmieren.

    Ich sag mal so. Auf bestimmten Teilbereichen wird er dann nur eingeschränkt programmieren können.

    Jester schrieb:

    Wenn er's dann wirklich braucht, dann wird er's auch verstehen. Und dann geht's auch gleich viel leichter, weil man einen konkreten Anwendungsfall vor Augen hat.

    Na dann mal so. Wie gesagt, Autodidaktik rul3z! 😉

    cya
    liquid



  • Warum wählt man auch Mathe ab, wenn man vor hat in die Softwarentwicklung einzusteigen? Ich bin der Meinung, dass die Mathematik für die Informatik eine der essentiellen Grundlagen ist.

    ich hab es abgewählt da ich Beruf und Hobby trenne! ich will beruflich was wirtschaftliches machen. mit Programmieren denke ich komme ich beruflich nicht weit, ich hab halt schon viel darüber gelesen, wie schwer es ist.

    Versteht ihr was ich meine? ich muss doch mehr auf meinen beruf achten als auf meinen hobby

    edit: Glaubt nicht das ich zu faul bin irgendwelche Bücher zu lesen und den stoff zu lernen, im Gegenteil das macht mir sogar Spaß.

    Ich hab ja nur gefragt ob ich da herum kommen würde



  • Du sagtest da eben was von Wirtschaft. Da spielt Mathe aber auch eine entscheidende Rolle. Was willste denn genau machen?

    cya
    liquid



  • LiquidAcid schrieb:

    Du sagtest da eben was von Wirtschaft. Da spielt Mathe aber auch eine entscheidende Rolle. Was willste denn genau machen?

    cya
    liquid

    schon, wir hatten ja auch 1 Jahr Wirtschaftssmathematik (Zinsrechnung und CO)!

    Das einzige was wir noch haben das annähernd was mit Mathematik zu tun hat ist rechnungswesen -> also Buchführung

    Ich will warscheinlich mal Industriekaufmann machen ich bin mir aber noch nicht sicher.


Anmelden zum Antworten