Raus aus der Konsole



  • Lymogry schrieb:

    Nathan schrieb:

    Du kannst in C auch Grafikanwendungen machen.
    Geht wunderbar. Schaue dir zum Beispiel mal Allegro an, das ist eine Bibliothek, mit der du wunderbar grundlegende geometrische Formen zeichen kannst.

    Da hab ich gleich mal gesucht und das hier gefunden:
    http://www.c-programmieren.com/Allegro-Tutorial.html#Das erste Projekt
    Auf den ersten Blick klingt das sehr vielversprechend.

    Veraltete Version.
    Wenn du Englisch kannst, schau dir das an: http://www.youtube.com/playlist?list=PL9333715188CD7669
    Ist zwar eigentlich C++, sollte aber auch mit C kompatibel sein.
    Und in seiner Serie ObjetOrientedGameDevelopment lernst du auch, wie so etwas in C++ aussehen könnte.

    Alternativ auch CSFML.

    das hab ich jetzt noch nicht wirklich gefunden.

    C-Binding von SFML: sfml-dev.org

    Allerdings ist vieles einfacher, wenn du Objektorientiert denkst.
    Das geht auch in C, allerdings ist es dort umständlicher.
    Ich würde deswegen zu einem Umstieg zu C++ raten.
    Dort gibt es außerdem Dinge wie lineare Listen, variable lange Strings,... und noch viele weitere nützliche Dinge schon in der Standardbibliothek.

    SeppJ schrieb:

    Du kannst auch in C schön Programmieren. Auch objektorientiert. Sei dir klar, dass der Umstieg auf C++ praktisch eine völlig neue (und nicht gerade einfache) Sprache wäre, für die du mehrere Monate bräuchtest. Das ist sicherlich nicht das, was du dir wünscht.

    Meinst du mit Objektorientiert die Realisierung mit Strukturen? Oder ganz was anderes.

    Objektorient zu programmieren heißt, dass man Objekte (Instanzierungen von Strukturen in C) und Funktionen, die diese bearbeiten, hat.

    Ich frag mal ganz unverblümt...: Kann ich nicht einfach mit C weitermachen und wenn ich irgendwann Lust auf die tollen Klasseneigenschaften von C++ brauche, meinen Code in C++ kompilieren? :p
    Wenn ich JETZT umsteigen, glaube ich nämlich, dass ich von meinem C Denkmuster nicht so schnell wegkomme .... 😉

    Das ist dann das gefürchtete C + std::cout = C++.
    Generell eine schlechte Lösung. Lieber in OOP einarbeiten und neu anfangen.

    hmmm..... ich suche gerade bei google und da stellt sich eine Frage: OpenGL und DirectX werden nicht direkt eingebunden, aber dienen als Schnittstelle, oder?
    Dann wäre OpenGL zb nur die Ausgabe von meinem Algorithmus.
    Ganz ehrlich: Ich hatte gehofft, ein Fenster zu haben, dort meine floats beliebig einzutragen, dann per Knopfdruck eine Ausgabe zu bekommen. Aber das sieht für mich grad so aus, als wäre ich noch in der Konsole am kompilieren. Oder?

    Nein, OpenGL und Direct3d (heißt der 3D-Teil so? :p) geben die möglich 3D-Objekte in einem Fenster zu zeichnen. Das Fenster (keine Konsole!) musst du selber erstellen, entweder mit der WinAPI oder mit externen Bibliotheken (CSFML, Allegro,...).

    Eigentlich weiß ich noch gar nicht, was ich für Möglichkeiten hab .... in diesem Thema bin ich wirklich Anfänger. ^^

    Jeder war mal Anfänger. 😉



  • Lymogry schrieb:

    Ich hatte gehofft, ein Fenster zu haben, dort meine floats beliebig einzutragen, dann per Knopfdruck eine Ausgabe zu bekommen.

    Weißt du schon, unter welchem Betriebssystem das laufen soll?
    Es gibt für verschiedene Betriebssysteme verschiedene GUI APIs.
    Einige GUI APIs können aber auch Cross Platform.



  • Nathan schrieb:

    Veraltete Version.
    Wenn du Englisch kannst, schau dir das an: http://www.youtube.com/playlist?list=PL9333715188CD7669
    Ist zwar eigentlich C++, sollte aber auch mit C kompatibel sein.

    gefällt mir! 🙂

    Objektorient zu programmieren heißt, dass man Objekte (Instanzierungen von Strukturen in C) und Funktionen, die diese bearbeiten, hat.

    Ich hab mal verkettete Listen implementiert. Das waren Structs mit Pointern. Und ich hatte Fkten die ein Element hinzufügen, löschen, die Liste sortieren, usw konnten.
    DAS heißt das also? 🙂

    Dann hat C++ noch eine benutzerfreundliche Art, dass man die Eigenschaften "vererben" kann. Ich weiß nicht wirklich, was es bedeutet. Versuche das gerade mit meinem C wissen zu dechiffrieren. 😉

    Nein, OpenGL und Direct3d (heißt der 3D-Teil so? :p) geben die möglich 3D-Objekte in einem Fenster zu zeichnen. Das Fenster (keine Konsole!) musst du selber erstellen, entweder mit der WinAPI oder mit externen Bibliotheken (CSFML, Allegro,...).

    Das Allegro Tutorial hab ich jetzt mal überflogen. Dort wird die Grafikausgabe auch mit Allegro erledigt. Wenn ich das Fenster mit Allegro erstelle, dann wechsel ich auf OpenGl und Direct3D und kann das ganze in 3D ausgeben. Aber ohne 3D wäre ich auch mit Allegro glücklich?
    Ich weiß noch nicht, was Allegro kann oder nicht kann. 😉

    Ich bin grad dabei, Allegro5 zu installieren. Im Tutorial wird das in Visual Basic verwendet. Ist Cygwin auch in der Lage das zu verwenden, oder muss ich mir auch Visual Basic zulegen?

    Fragen über Fragen ........ sorry ... 🙂



  • CJosef schrieb:

    Lymogry schrieb:

    Ich hatte gehofft, ein Fenster zu haben, dort meine floats beliebig einzutragen, dann per Knopfdruck eine Ausgabe zu bekommen.

    Weißt du schon, unter welchem Betriebssystem das laufen soll?
    Es gibt für verschiedene Betriebssysteme verschiedene GUI APIs.
    Einige GUI APIs können aber auch Cross Platform.

    Ähm ja... ich hab Windows7 und es sollte auf meinem PC laufen. 😉

    Ich kompiliere zurzeit mit Cygwin, bisher lief jedes Programm auch unter Linux. Ist mir persönlich aber nicht wichtig. Ich brauch hinterher nur den fertigen Ausdruck. 😉



  • Lymogry schrieb:

    Objektorient zu programmieren heißt, dass man Objekte (Instanzierungen von Strukturen in C) und Funktionen, die diese bearbeiten, hat.

    Ich hab mal verkettete Listen implementiert. Das waren Structs mit Pointern. Und ich hatte Fkten die ein Element hinzufügen, löschen, die Liste sortieren, usw konnten.
    DAS heißt das also? 🙂

    Dann hat C++ noch eine benutzerfreundliche Art, dass man die Eigenschaften "vererben" kann. Ich weiß nicht wirklich, was es bedeutet. Versuche das gerade mit meinem C wissen zu dechiffrieren. 😉

    Vererbung steht für eine ist-ein-Eigenschaft.
    Ein Mensch ist ein Säugetier.
    Deshalb erbt die Klasse (C++-Struktur) Mensch alle Eigenschaften, die ein Säugetier auch hat und kann zusätlich noch neue definieren.
    Aber falls dich OOP wirklich interessiert, solltest du ein Buch lesen; ich kann das nicht so gut erklären. 😉

    Nein, OpenGL und Direct3d (heißt der 3D-Teil so? :p) geben die möglich 3D-Objekte in einem Fenster zu zeichnen. Das Fenster (keine Konsole!) musst du selber erstellen, entweder mit der WinAPI oder mit externen Bibliotheken (CSFML, Allegro,...).

    Das Allegro Tutorial hab ich jetzt mal überflogen. Dort wird die Grafikausgabe auch mit Allegro erledigt. Wenn ich das Fenster mit Allegro erstelle, dann wechsel ich auf OpenGl und Direct3D und kann das ganze in 3D ausgeben. Aber ohne 3D wäre ich auch mit Allegro glücklich?
    Ich weiß noch nicht, was Allegro kann oder nicht kann. 😉

    Ja, du hast dann 3D (Weiß zwar nicht genau die OpenGL-Schnittstelle, sollte aber eigentlich eine geben (gehe ich einfach mal von aus)).

    Ich bin grad dabei, Allegro5 zu installieren. Im Tutorial wird das in Visual Basic verwendet. Ist Cygwin auch in der Lage das zu verwenden, oder muss ich mir auch Visual Basic zulegen?

    Allegro ist plattformunabängig.
    Genauere Installationshinweise (auch für andere Compiler) gibt es hier: http://wiki.allegro.cc/index.php?title=Allegro_5#Installing_and_Building_Allegro_5

    Fragen über Fragen ........ sorry ... 🙂

    Nicht schlimm. 🙂



  • Jetzt versuche ich immernoch, Allegro unter Cygwin zum Laufen zu bringen ....

    Ich hab mir von http://alleg.sourceforge.net/wip.html die Version 5 runtergeladen. Aber ich weiß nicht, wohin mit den Daten. Der Inhalt sieht zb ganz anders aus als in der Installationsanleitung aus dem Youtube Tutorial.

    Für Cygwin hab ich diese Anleitung gefunden und befolgt:
    http://alleg.sourceforge.net/stabledocs/en/build/mingw32.html
    Dafür hab ich aber nur die Datei dx70_mgw.zip von der alleg.sourceforge.net benutzen müssen.

    Nun kompiliere ich einen Testcode mit #include <allegro.h>
    Cygwin gibt zurück, dass allegro.h nicht gefunden werden kann.
    Der Bash gcc -v gibt aber keine Fehlermeldung ...

    Hier hab ich einen Screenshot aus meinem Cygwin hochgeladen: http://up.picr.de/14029456ek.png

    Für die Konsole kompiliere ich immer mit
    gcc -Wall -pedantic -o main.exe main.c
    falls ich den Linker brauche, muss ich nur weitere xyz.c hinzufügen. Diese drei Befehle waren also völlig ausreichend für mich.
    Jetzt soll ich '-mno-cygwin' mitverwenden, aber cygwin beachtet den Flag nicht... (siehe Screenshot)

    .... du meine Güte .... 🙄



  • Richtige Seite: http://alleg.sourceforge.net/download.html

    Deine Links sind hauptsächlich für ältere Versionen von Allegro.



  • Lymogry schrieb:

    Gegeben werden mehrere floats, diese enthalten Längen, Winkel oder auch Kurveneigenschaften. Gezeichnet werden sollen sie nach einem bestimmten Algorithmus, dabei sollen auch neue Punkte als Schnittpunkte entstehen und damit soll weitergezeichnet werden.
    Ich möchte einen Maßstab mitführen, also sollte das passend skalierbar sein, ohne dass alles neu berechnet werden muss. Es muss noch gedruckt werden und dabei kann die Größe des Bilder die Größe eines DinA4 Blattes übersteigen, also muss noch passend zugeschnitten werden, aber das ist dann ein anderes Thema.

    Die Implementierung dieser Aufgabenstellung bedingt keine OOP. Jede klassische bzw. neumodische Programmiersprache sollte sowas können, und da du C schon kannst...

    Lymogry schrieb:

    Ich weiß jetzt nicht, ob ich auf C++ umsteigen soll und mich mich in die Objektorientierung umarbeiten soll. Hab bereits mitbekommen, dass Grafik und C++ sich besser vertragen als Grafik und C.

    Quatsch.

    Lymogry schrieb:

    Aber eigentlich ist es ja nur Geometrie.

    Richtig erkannt, und geometrische/mathematische Algorithmen kann nahezu jede gängige Programmiersprache erledigen, s.o.

    Lymogry schrieb:

    Wäre ein Umstieg Kanonen auf Spatzen?
    Oder kann ich das in C realisieren?

    Ja. Ja.

    Um es mal zusammenzufassen: Für C gibt es etliche Bibliotheken für alle möglichen Anwendungsfälle und natürlich auch für grafische Ausgaben, oftmals sind die auch noch Opensource o.ä. und kosten nichts.
    Wenn du dich auf eine bestimmte Plattform (bei dir wohl Windows) beschränken kannst, ist die Auswahl sogar noch weitaus größer.
    OOP ist keine Bedingung für grafische Ausgaben.

    Ein anderer Weg wäre vielleicht auch, sich einer Hostanwendung zu bedienen (weil die z.B. die grafischen Ausgaben schon erledigt und quasi als Frontend arbeitet) und diese via existenter C-Schnittstelle mit selbstberechneten Daten zu versorgen, du könntest also deine bisherigen C-Quellcodes wiederverwenden.
    MATLAB (als Studentenversion kostenfrei) wäre da zu nennen, da du wohl weniger mit Spielen sondern mit mathematischen Aufgaben zu tun hast.
    D.h. aber natürlich auch wieder, dass du primär dieses neue Frontend erstmal beherrschen musst, d.h. dessen API/Quasiprogrammiersprache erlernen musst. Aber du bist eben offen zu C, da sehr viele solcher Frameworks eher C als C++ Schnittstellen anbieten, wenn sie denn überhaupt welche anbieten.



  • Wutz schrieb:

    OOP ist keine Bedingung für grafische Ausgaben.

    Aber es macht insbesondere GUIs um einiges einfacher. Glücklickerweise ist OOP keine Bedingung, C nicht verwenden zu können (siehe Gtk+).



  • Es gibt Fortschritte bei Cygwin und Allegro 5...

    Ich befolge nun die Readmes aus dem Allegro5 Archiv
    allegro-5.0.9.zip von http://alleg.sourceforge.net/download.html:

    1. Aufgabe (das sagt die README aus Allegro5)
    cmake installieren: http://www.cmake.org (README von cmake:)
    $ ./bootstrap

    2. Aufgabe (README_make aus Allegro5)
    Allegro5 im Cygwin Ordner entpacken. Einen neuen Ordner 'Build' erstellen. Mit cygwin in diesen Ordner wechseln und dann
    $ cmake ..
    Er hat gemeckert, dass ich libFlAC, libdump, libvorbis nicht habe .. hab sie aber noch nicht runtergeladen (könnte das den Fehler unten erklären?!)

    3. Aufgabe
    Allegro erstellen (im selben Build Ordner)
    $ make
    $ make install

    Zum Ende hin bin ich diesem Tutorial gefolgt: http://wiki.allegro.cc/index.php?title=Install_Allegro5_From_Git/Linux/Debian
    (obwohl ich auf Windows7 mit Cygwin bin!)

    Erstes Kompilieren: gcc -Wall -pedantic -o main.exe main.c
    ........ er meckert nicht mehr, dass die Header Datei fehlt .... uuuh ein spannender Moment. 😮

    Dafür jede Menge Fehler im Testcode:

    #include <allegro5/allegro.h>
    
    int main(){
        int x=0,y=0;
    
        allegro_init();
        install_keyboard();
        set_color_depth(16);
        set_gfx_mode( GFX_AUTODETECT, 800 , 600, 0, 0);
    
        while(key[KEY_ESC]==0)
        {
           textprintf_ex(screen, font, x, y, makecol(255, 255, 255), makecol(0, 0, 0), "Hallo Welt!");
        }
    
        return 0;
    }
    END_OF_MAIN();
    

    Den Code hab ich von http://www.c-programmieren.com/Allegro-Tutorial.html
    Der benutzt wohl eine ältere Allegro Version. Sind die Funktionen unter Allegro 5 etwa nicht mehr aktiv?!?
    Kann ich mir eigentlich nicht vorstellen ...

    Also .. warum kompilliert er das nicht ...?



  • Ein noch minimaleres Beispiel:

    #include <stdio.h>
    #include <allegro5/allegro.h>
    
    int main(int argc, char **argv){
    
       ALLEGRO_DISPLAY *display = NULL;
    
       display = al_create_display(640, 480);
    
       al_destroy_display(display);
    
       return 0;
    }
    

    In Cygwin kompiliert:

    $ gcc -Wall -pedantic -o main.exe main.c
    
    undefined reference to '_al_create_display'
    undefined reference to '_al_destroy_display' 
    collect2: ld gab 1 als Ende-Status zurück
    

    Aber die Header wird eingebunden?!
    Was passiert hier? Warum klappt das nicht??

    ... langsam geht mein Latein zu ende 😞



  • Der Code mit END_OF_MAIN() geht, wie du schon sagtest, nicht mehr mit Allegro 5.
    Dein anderer Code sollte funktionieren.
    Du musst noch die Lib-Dateien in den Linker Settings hinzufügen, so weiß der Compiler nur, dass es eine Funktion al_create_display gibt, aber nicht was sie macht.



  • Hey Nathan,
    ja danke! 🙂

    Nathan schrieb:

    Du musst noch die Lib-Dateien in den Linker Settings hinzufügen, so weiß der Compiler nur, dass es eine Funktion al_create_display gibt, aber nicht was sie macht.

    Ja. Das hab ich jetzt auch gefunden:

    17. This won't compile just yet. MAke sure to include the allegro library files as shown below:
    Click Project->Build Options->Linker Settings. Click Add. Click the "..." box.
    Navigate to "C:\codeblocks\MinGW\lib" and select "liballegro.dll.a".
    Keep the path as relative, or not, it depends on what you prefer if the locations of the file changes in the future.

    https://www.allegro.cc/forums/thread/606041

    Aber ich kann das nicht mit Cygwin linken .... ???

    Dazu hab ich das hier gefunden und bereits befolgt: http://alleg.sourceforge.net/stabledocs/en/build/mingw32.html
    bringt nichts.



  • Wo hast du denn die lib-Dateien abgespeichert?
    Genau diesen Ort gibst du in den Linkersettings an.



  • Nathan schrieb:

    Wo hast du denn die lib-Dateien abgespeichert?
    Genau diesen Ort gibst du in den Linkersettings an.

    Wenn ich nur wüsste wie .....
    ich suche schon seit Stunden und finde nichts. 😞 😞

    Die libs hab ich unter cygwin/lib und unter usr/local/lib

    Sind das die Linker Settings?

    export ALLEGRO_USE_CYGWIN=1
             export MINGDIR=/usr/local
             export CPATH=/usr/local/include
             export LIBRARY_PATH=/usr/local/lib
    


  • Soweit ich das weiß (und ich kenn mich mit Cygwin nicht aus), hast du nur gesagt, wo die Datein sind, nicht welche dazu kommen sollen.
    Nutzt du eine IDE, wenn ja welche?



  • Hmm .. welche dazu kommen sollen...

    Ich hab Allegro mit make und cmake quasi 'installiert'. Da hab ich einen neuen Ordner Build erhalten. Dadrin sind einige neue dlls erschienen, die heißen liballegro_xyz.dll, und noch vieles mehr. Das alles ist in dem Cygwin Ordner. Einiges hab ich auch in die Cygwin Bib per Hand kopiert.

    Ich benutz keine IDE .....

    Code in einem Editor (damit es bunt und übersichtlich ist, hab ich CodeLite) dann mit Cygwin kompilieren. Cygwin tut nur so als wäre ich auf Linux unterwegs.
    Aber ich bin nicht auf Linux, ich hab Windows7. Und ich kenne mich mit Linux nicht aus. Ich hab immer nur die Befehle
    gcc -Wall -pedantic -o main.exe main.c
    benutzt ..... Damit hatte ich keine Probleme bisher.

    Cygwin Installation geht auch vollautomatisch: http://cygwin.com/install.html
    die Setup Datei lädt die Pakete runter, die man haben will und mehr muss man nicht machen!
    Allegro wird da nicht angeboten, also muss man das von Hand hinzufügen.

    Ansonsten hat mich cygwin immer sehr verwöhnt, ich musste mich um nichts kümmern. 😉
    Und wenn man C kompiliert, bekommt man in Cygwin immer seeeeeeehr genaue und verständliche Warnungen/Fehler angezeigt. Bin damit immer gut gefahren und eigentlich sehr zufrieden.

    .... so langsam werd ich verrückt von .... 🤡 🤡



  • Hast du auch einen Ornder lib?
    Mit Dateien wit liballegro_xyz.a?
    Eine heißt monolith.
    Die fügst du mit -l in der Befehlszeile hinzu.



  • Eine monolith Datei hab ich nicht .... 😕

    Wird auch nichts in der Windows Suche gefunden.

    Ich wollt schon mal Danke sagen, dass du mir so bereitwillig hilfst! 🙂 🙂 Find ich klasse. Ich komme hier schon gar nicht mehr zurecht... ^^



  • Lymogry schrieb:

    Ich benutz keine IDE .....

    Du hast Windows und frickelst mit Cygwin rum?
    Mensch Jung, mach dir das Leben nicht unnötig schwer.
    http://www.microsoft.com/visualstudio/deu/products/visual-studio-express-products


Anmelden zum Antworten