Printf-Snake (Mehrere Dateien & Pixel)



  • EDIT: Die erste Frage hat sich erledigt (multitasking)
    die nächsten währe wegen dem Kompilieren eines ganzen projektes in dev-Cpp (siehe weiter unten)
    und: Kann man ohne opengl usw einzelne Pixel ausgeben
    und: kann man bei win ausser dem Hintergrund und gesammte Schriftfarbe auch bei einzelne Buchstaben die Farbe ändern?

    Grüsse euch!

    Ich bin im Moment drum und drann ein Snake-Spiel zu programmieren, das nur mit Printf's dargestellt wird. Etwas kompliziert aber macht trotzdem spass :-). Was ich bis jetzt habe: mit getc steuerung der Schlange, und einstellen der Koordinaten und die der Schlangen-Untelemente, Anzeige des 2d-Arrays auf dem Bildschirm, und kein reinfahren in sich selber und aus dem Spielfeld.

    so jetzt läuft das ja folgendermassen: die schlannge bewegt sich immer nur auf Tastatur-reaktionen... was ja ziemlich langweilig wird...
    Meine vorschläge:
    - eine zweite exe, die dieTastatur einliest und dann in eine Datei, oder sonst im Speicher reinschreibt und dann mit der Spielfled-exe ausgiebt (extrem kacke und blöd^^) (kp wies gehen sollte)
    - einen Hintergrundporzess machen der dann einliest oder mit vbs (zu verhindern^^)
    - oder Schlussendlich eine Multitasking-Funktion einbauen (habe keine ahnung von dem) einfach ohne api oder so...
    (ausserdem kein opengl usw...)

    Freundliche Grüsse Sandmaster



  • Wo genau hakt es denn jetzt? Wenn du Probleme damit hast, daß getc() so lange wartet, bis es etwas auswerten kann, ist es wohl am einfachsten, sich eine nicht-blockierende Eingabefunktion zu suchen (z.B. kbhit()/getch()) - aber die gibt's nur jenseits des ANSI-Standards (und dort mehr als dir lieb sein dürfte).



  • ok Danke!
    stimmt ich hab noch den vorschlag mit zeitbeschränkter einlesen vergessen zu erwähnen wird wohl das problem aufheben



  • ah jo nächste frage: wie kann ich Headerdateien benutzen und funktionen auslagern?
    bis jetzt hab ich alle funktionen in einer Datei drinnen... was natürlich extrem unübersichtlich ist... ich habs auch nicht anders hingebracht hier mein "wissen" darüber:

    //header.h
    #ifndef HEADER_H
    #define HEADER_H
    
    #include //... (includes)
    
    int func1(void);
    void func2(int);
    
    enum{maxrows = 10, maxcolls = 10}; //Feldgrösse (Testgrösse)
    
    #endif
    
    //func.c
    #include header.h
    
    int func1(void){
      return (int)maxrows;
    }
    

    zb... und jetzt einfach in der main.c func1(); aufrufen und das lauft? kp lief irgendwie nicht ganz



  • Erstmal mußt du den Headernamen in Anführungszeichen schreiben.

    Zweitens brauchst du im Hauptprogramm auch ein '#include "header.h".

    Und drittens mußt du beim Compilieren dafür sorgen, daß beide Quelldateien (func.c UND main.c) durch den Compiler und Linker gejagt werden. (wie das geht, hängst von deinem System ab)



  • Erstmal mußt du den Headernamen in Anführungszeichen schreiben.

    war zu faul nochmal drüber zu gehen 😉

    Zweitens brauchst du im Hauptprogramm auch ein '#include "header.h".

    gleiche wie 1.

    Und drittens mußt du beim Compilieren dafür sorgen, daß beide Quelldateien (func.c UND main.c) durch den Compiler und Linker gejagt werden. (wie das geht, hängst von deinem System ab)

    hab DEV-C++ auf win. da wirds anscheinend automatisch reingetan (bei Projekt Optionen->Dateien müssen wohl bei beiden files "in Kompilation/Linken einbeziehen"
    danke für den hinweis

    EDIT: hm geht doch nicht 😞 kommt Projekt nicht kompiliert wenn ich das programm nach dem Kompilieren starten will (kommt keine Fehlermeldung sonst-.-)



  • das was du suchtst ist "Multithreading" .... ein zweiter Thread, welcher in einem best intervall die schlange bewegt...



  • BorisDieKlinge schrieb:

    das was du suchtst ist "Multithreading" .... ein zweiter Thread, welcher in einem best intervall die schlange bewegt...

    das will ich eben noch vermeiden, da das ziemlich kompliziert ist ^^
    da hab ich ja if(kbhit()) key=getch(); sleep(x);


Anmelden zum Antworten