brauche hilfe linux c++ (c4droid)



  • nabend liebes forum,

    ich habe mir für mein tablet c4droid runtergeladen/gegauft
    zusätzlich benötigt man auch eine weiere app (irgendwas mit gcc-),
    damit man c++ programme ausführen kann 🙂

    -> und sogar als apk exportieren kann -> sprich als app !!!

    doch halt !!!!

    android selbst laüft auf ein linux kernel , somit sind windows
    prozesse ausgeschlossen -> heist linux c++ ...

    hierzu habe ich 3 fragen:

    wie benutze ich die arrow keys ?
    wie mache ich den blinkenden cursor weg?
    warum kann ich im terminal keine sondertasten drücken
    -> wie z.b. backspace ... es kommt dann ^a34xy... oder son

    denn.. ich wollte aus spaß mal ein smiley mit arrow keys im terminal
    steuern können

    die kleine 2 ist in windows eine mauer (array) die urspürunglich
    mal als level gedacht war.
    da das aber nicht funtionierte, sondern nur die ² im terminal erschien,
    habe ich gedacht, dann steuere ich die halt durch den screen xd

    hier der code:

    #include <iostream>
    #include <conio.h> 
    
     #include<stdio.h>
     #include<stdlib.h>
    
    using namespace std;
    
    int main()
    {
        int c= 0;
    
        int move_x  = 20;
        int move_y = 10;
    
       while( c != 27)
       {
         c = getche();
         //if(c == 0 || c == 224)
    
         if (c == 119)
         {
           clrscr();
           move_y --;     
           gotoxy(move_x,move_y);
           cout<<"²";
          }  // w     
    
          if (c == 115) 
            {   
              clrscr();
              move_y ++;     
              gotoxy(move_x,move_y);
              cout<<"²";
             }  // s  
    
            if (c == 97) 
            {   
              clrscr();
              move_x --;     
              gotoxy(move_x,move_y);
              cout<<"²";
             }  // a     
    
            if (c == 100) 
            {   
              clrscr();
              move_x ++;     
              gotoxy(move_x,move_y);
              cout<<"²";
             }  // d  
    
        }
       return 0;  
    }
    

    were cool wenn ihr mir helfen könntet

    ps: ich schreibe klein, da ich auf mein tablet schreibe und
    das zulange dauern würde immer umzuswitchen

    -> tablet: mobII 945 point of view 4k (2048 mb ram, 4 kern , android 4.2.2 )



  • kommt auch auf den Zeichensatz im terminal drauf an, als was dein "hoch 2" dargestellt wird.
    nur weil das in der Windows Konsole eine "Mauer" ist, muss es nicht unbedingt auf Android als Mauer dargestellt werden.

    P.S.: Zum Zeichnen gibt es schönere Wege, als irgendwelche speziellen ASCII Codes per cout auszugeben.



  • Und wie ??? O.o

    Und was bei dem 3 anderen sachen 🤡 ?



  • Du suchst vermutlich sowas wie eine Curses-Bibliothek.

    de.wikipedia.org/wiki/Ncurses



  • Siehe das im Wikipedia-Artikel verlinkte Wikibook.



  • // SDL-, SDL_image-, SDL_mixer- und SDL_ttf-Header einbinden
    #ifdef WIN32
    #include <SDL.h>
    #include <SDL_image.h>
    #include <SDL_mixer.h>
    #include <SDL_ttf.h>
    #else
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_mixer.h>
    #include <SDL/SDL_ttf.h>
    #endif
    
    #include <iostream>
    
    int main(int argc, char* argv[])
    {
    	// SDL mit dem Grafik- und Audiosystem initialisieren.
    	if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1)
    	{
    		// Ups, das hat nicht funktioniert!
    		// Wir geben die Fehlermeldung aus.
    		std::cerr << "Konnte SDL nicht initialisieren! Fehler: " << SDL_GetError() << std::endl;
    		return -1;
    	}
    
    	// Hier erzeugen wir ein Fenster der Gr��e 800x600 Pixel mit 32-Bit Farbtiefe und Double Buffer.
    	// Wenn Vollbildmodus erw�nscht ist, f�gen wir noch das Flag SDL_FULLSCREEN mittels |-Operator hinzu.
    	SDL_Surface* screen = SDL_SetVideoMode(800, 600, 32, SDL_DOUBLEBUF);
    	if(!screen)
    	{
    		// Fehler! Fehlermeldung ausgeben und Programm beenden.
    		std::cerr << "Konnte SDL-Fenster nicht erzeugen! Fehler: " << SDL_GetError() << std::endl;
    		return -1;
    	} 
    
    	// Nun setzen wir noch den Titel des Fensters.
    	SDL_WM_SetCaption("Game", "Game");
    
    	// Hier laden wir unser Bild mit SDL_image.
    	SDL_Surface* image = IMG_Load("ship.jpg");
    	SDL_Surface* background_a = IMG_Load("background_a.jpg");
    
    	if(!image)
    	{
    		// Fehler!
    		std::cerr << "Konnte das Bild nicht laden! Fehler: " << IMG_GetError() << std::endl;
    		return -1;
    	}
    
    	// SDL_mixer starten.
    	const int samplingFrequency = 44100;	// 44100 Hz Abtastfrequenz
    	Uint16 audioFormat = AUDIO_S16SYS;		// 16 Bits pro Sample
    	const int numChannels = 2;				// 2 Kan�le = Stereo
    	const int chunkSize = 4096;				// ein guter Wert ...
    	if(Mix_OpenAudio(samplingFrequency, audioFormat, numChannels, chunkSize) == -1)
    	{
    		std::cerr << "Konnte SDL_mixer nicht starten! Fehler: " << Mix_GetError() << std::endl;
    		return -1;
    	}
    
    	// WAV-Datei laden.
    	Mix_Chunk* sound = Mix_LoadWAV("SDL_Example_Sound.wav");
    	if(!sound)
    	{
    		std::cerr << "Konnte WAV-Datei nicht laden! Fehler: " << Mix_GetError() << std::endl;
    		return -1;
    	}
    
    	// OGG-Datei als Musik laden.
    	Mix_Music* music = Mix_LoadMUS("SDL_Example_Music.ogg");
    	if(!music)
    	{
    		std::cerr << "Konnte OGG-Datei nicht laden! Fehler: " << Mix_GetError() << std::endl;
    		return -1;
    	}
    
    	// Musik abspielen.
    	Mix_PlayMusic(music, -1);
    
    	// SDL_ttf initialisieren.
    	if(TTF_Init() == -1)
    	{
    		std::cerr << "Konnte SDL_ttf nicht initialisieren! Fehler: " << TTF_GetError() << std::endl;
    		return -1;
    	}
    
    	// Schriftart "FreeSans.ttf" laden.
    	TTF_Font* font = TTF_OpenFont("FreeSans.ttf", 12);
    	if(!font)
    	{
    		std::cerr << "Konnte Schriftart nicht laden! Fehler: " << TTF_GetError() << std::endl;
    		return -1;
    	}
    
    	// Einen Text zeichnen.
    	SDL_Color textColor = {255, 255, 1};
    	SDL_Surface* text = TTF_RenderText_Blended(font, "written by Patrick Ratz", textColor);
    
    	// In diesem Array merken wir uns, welche Tasten gerade gedr�ckt sind.
    	bool keyPressed[SDLK_LAST];
    	memset(keyPressed, 0, sizeof(keyPressed));
    
    	// Position des Bilds initialisieren.
    
    	SDL_Rect imagePosition;
    	imagePosition.x = 100;
    	imagePosition.y = 50;
    
    	SDL_Rect background_aPosition;
    	background_aPosition.x = 0;
    	background_aPosition.y = 0;
    
    	bool run = true;
    
    	// die Event-Schleife
    	while(run)
    	{
    		// Wir holen uns so lange neue Ereignisse, bis es keine mehr gibt.
    		SDL_Event event;
    		while(SDL_PollEvent(&event))
    		{
    			// Was ist passiert?
    			switch(event.type)
    			{
    			case SDL_QUIT:
    				// Das Programm soll beendet werden.
    				// Wir merken uns das und brechen beim n�chsten Mal die Schleife ab.
    				run = false;
    				break;
    			case SDL_KEYDOWN:
    				keyPressed[event.key.keysym.sym] = true;
    				if(event.key.keysym.sym == SDLK_SPACE)
    				{
    					// Sound abspielen
    					Mix_PlayChannel(-1, sound, 0);
    				}
    				break;
    			case SDL_KEYUP:
    				keyPressed[event.key.keysym.sym] = false;
    				break;
    			}
    		}
    
    		// Hier w�rden bei einem Spiel die eigentliche Spiellogik berechnet
    		// und Grafiken angezeigt werden.
    
    		// Bild je nach gedr�ckten Tasten bewegen.
    		if(keyPressed[SDLK_LEFT]    && imagePosition.x > 0)                     --imagePosition.x;  // Bild nach links bewegen.
    		if(keyPressed[SDLK_RIGHT]   && imagePosition.x + image->w < screen->w)  ++imagePosition.x;  // Bild nach rechts bewegen.
    		if(keyPressed[SDLK_UP]      && imagePosition.y > 0)                     --imagePosition.y;  // Bild nach oben bewegen.
    		if(keyPressed[SDLK_DOWN]    && imagePosition.y + image->h < screen->h)  ++imagePosition.y;  // Bild nach unten bewegen.
    		if(keyPressed[SDLK_ESCAPE])												run = false;		// Programm beenden.
    
    		// Bildschirm mit Blau f�llen und dann das Bild zeichnen.
    		SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 255));
    		SDL_BlitSurface(background_a, 0, screen, &background_aPosition);
    		SDL_BlitSurface(image, 0, screen, &imagePosition);
    
    		// Den Text ausgeben.
    		SDL_Rect textPosition;
    		textPosition.x = 10;
    		textPosition.y = 50;
    		SDL_BlitSurface(text, 0, screen, &textPosition);
    
    		// Dann aktualisieren wir den Bildschirm, damit wir auch etwas sehen.
    		SDL_Flip(screen);
    	}
    
    	// Bild wieder freigeben
    	SDL_FreeSurface(image);
    	SDL_FreeSurface(background_a);
    
    	// Sound und Musik aufr�umen und SDL_mixer stoppen
    	Mix_FreeChunk(sound);
    	Mix_FreeMusic(music);
    	Mix_CloseAudio();
    
    	// Schriftart und gezeichneten Text freigeben und SDL_ttf herunterfahren
    	SDL_FreeSurface(text);
    	TTF_CloseFont(font);
    	TTF_Quit();
    
    	// SDL herunterfahren
    	SDL_Quit();
    
    	return 0;
    }
    

    Joa die wikkisammplung hats in sich 🙂

    Hier mithilfe von copy/paste
    Und einigen veränderungen ...

    ein code der so in c4droid (wenn gekauft aus google store )
    ausführbar ist:

    Sdl, text, bitmap und ton + das steuern eines sprites

    Code kann nur ausgeführt werden Wenn die ttf,t'bmp und wav datei im selben ordner sind ....


Log in to reply