Grafik unter C ?!



  • Hallo alle zusammen!!

    Ich hab folgendes Problem. Ich bin gerade dabei ein kleines Spiel für das Studium zu programmieren, ist soweit auch fertig und funktioniert, nur leider kann ich nicht zwischen Grafik- und Eingabefenster automatisch hin und her springen. Zudem soll das Grafikfenster die ganze Zeit geöffnet bleiben, dabei wird das fenster immer inaktiv und "schmiert mir ab".
    Noch eine Frage wäre wie ich das Grafikfenster in der Größe und Position verändern kann, gibts da etwas, hab leider nichts finden können.

    mfg und schonmal im voraus VIELEN DANK
    ANDI



  • Zuerst mal...was ist dein Grafikfenster?
    Was verwendest du für Libs? WinAPI?

    und wieso hast du zwei fenster für die eingabe und für die ausgabe 😕



  • *gg..das ist so eine Frage wie:

    "Hilfe ich habe nen Programmier-Fehler im Spiel ? Was ist das ?"



  • Hallo, danke für die schnelle Antowrt, ich denke der komplette Quelltext hilft euch am ehesten weiter 😉

    #include <stdio.h>
    #include <conio.h>
    #include <graphics.h>
    
    int hoelzer, anz_computer, anz_spieler;	//Globale Variablen
    
    void streichholz(int anzahl)
    {	
    	for(int i=0;i<anzahl;i++)
    	{	
    		int j = i*20;
    		int x1 = 30+j;				// Streichholzkörperkoordinaten
    		int y1 = 60;
    		int x2 = 35+j;
    		int y2 = 140;
    
    		int cr = 6;					// Kreisradius
    		int cx = x1+(x2-x1)/2;		// Kreis x Koordinate
    		int cy = y1-cr;				// Kreis y Koordinate
    
    		setcolor(4);				// Linienfarbe für Streichholzkopf
    		setfillstyle(1 ,4);			// Flächenfarbe für Streichholzkopf
    		pieslice(cx ,cy ,0 ,0 ,cr);	// Streichholzkopf
    		setfillstyle(1 ,14);		// Flächenfarbe für Streichholzkörper
    		bar(x1, y1, x2, y2);		// Streichholzkörper
    
    		settextstyle(3 ,0 ,1);		// Setzt Schriftart, -ausrichtung und -größe fest
    		setcolor(15);				// Setzt Textfarbe fest
    		line(0 ,getmaxy()/2 ,getmaxx() ,getmaxy()/2);						//Horizontal Aufteilung
    		line(getmaxx()/2 ,getmaxy()/2 ,getmaxx()/2 ,getmaxy());				//Vertikal Aufteilung
    	}
    }
    
    void ausgabe()
    {
    	cleardevice();
    
    	setviewport(0, 0, getmaxx(), getmaxy()/2, false);					//Obere Hälfte
    	streichholz(hoelzer);												//Startet Funktion streichholz
    	outtextxy(10, 10, "Noch zu spielende Hölzer");						//Schreibt Text in Fenster
    
    	setviewport(0, getmaxy()/2, getmaxx()/2, getmaxy(), false);			//Unteres-Linkes Fenster
    	streichholz(anz_computer);											//Startet Funktion streichholz
    	outtextxy(10, 10, "Hölzer von Computer");							//Schreibt Text in Fenster
    
    	setviewport(getmaxx()/2, getmaxy()/2, getmaxx(), getmaxy(), false);	//Unteres-Rechtes Fenster
    	streichholz(anz_spieler);											//Startet Funktion streichholz
    	outtextxy(10, 10, "Hölzer von Spieler");							//Schreibt Text in Fenster
    	delay(500);															//Zeitverzögerung um 500ms
    }
    
    int spielerzug(int n, int k)
    {
    	int anz;
    
    	do
    	{
    		printf("Sie sind am Zug!\n");
    		printf("Wieviele Hoelzer wollen Sie nehmen?\n");
    		scanf("%d", &anz);
    	} while(anz<1 || anz>k);
    
    	anz_spieler+=anz;
    	return n-anz;
    }
    
    int computerzug(int n, int k)
    {
    	int anz;
    
    	for(int i=1; i<=k; i++) 
    	{
    		anz = (n-i) % (k+1);
    
    		if(anz==1)
    		{
    			printf("Der Computer nimmt %d Hoelzer\n", i); 
    			anz_computer+=i;
    			return n-i;
    	    }
    	}
    }
    
    void result(int r)
    {
    	cleardevice();				//Bildschirm löschen
    	setviewport(0, 0, getmaxx(), getmaxy(), false);		//Setzt Grafikfenster
    	settextstyle(3 ,0 ,8);		//Setzt Schriftart, -ausrichtung und -größe fest
    	setcolor(4);				//Setzt Textfarbe fest
    
    	if (r==0)
    	{
    		outtextxy(170, (getmaxy()/2)-50, "WINNER");		//Gibt nach dem Spiel Winner aus
    	}
    	else
    	{
    		outtextxy(180, (getmaxy()/2)-50, "LOSER");		//Gibt nach dem Spiel Loser aus
    	}
    }
    
    void main()
    {
    	int k, r;
    	int grt = DETECT, grm;
    
    	printf("Mit wievielen Streichhoelzern wollen Sie spielen?\n ");
    	scanf("%d", &hoelzer);
    	printf("Wieviele Streichhoelzer duerfen in einem Zug genommen werden?\n ");
    	scanf("%d", &k);
    
    	initgraph(&grt, &grm, "");	// Grafik initialisieren
    
    	delay(500);					//Zeitverzögerung um 500ms
    	ausgabe();					//Startet die Funktion ausgabe
    
    	for (;hoelzer>=2;)
    	{
    		hoelzer = spielerzug(hoelzer,k);
    		ausgabe();
    		printf("\nEs sind noch %d Streichhoelzer uebrig!\n", hoelzer);
    
    		if (hoelzer==1)
    		{
    			printf("\nGratuliere, Sie haben gewonnen!\n");
    			r=0;
    			result(r);			//Startet Funktion result und übergibt Parameter r
    			break;				//Schleife verlassen
    		}
    
    		hoelzer = computerzug(hoelzer,k);
    		ausgabe();
    		printf("\nEs sind noch %d Streichhoelzer uebrig!\n", hoelzer);	
    
    		if (hoelzer==1)
    		{
    			printf("\nDer Computer hat gewonnen!!!\n");
    			r=1;
    			result(r);			//Startet Funktion result und übergibt Parameter r
    			break;				//Schleife verlassen
    		}
    	}
    	getch();
    	closegraph();	// Grafikmodus verlassen 
    }
    


  • Da du vom Wechseln der Fenster sprichst und dein Sourcecode wie der vom Borland Graphics Interfac aussieht nehme ich an du benützt. WinBGI oder?



  • Wo auch immer <conio.h> eingebunden werden kann, kann man alternativ dazu meistens auch <windows.h> oder "d3d9.h" einbinden. Entweder mit GDI-Funktionen oder (vorzugsweise) mit Direct3D-Funktionen arbeiten.
    Es benötigt gar nicht einmal so furchtbar viel Einarbeitungszeit, wie man vielleicht annehmen würde. Und ruckzuck zaubert man Grafiken in den Bildschirm hineinl, die groß und bunt sind. Wie so vieles von Winzigweich.



  • @Glcok17L ... ja da öffnet sich ein WinBGI Fenster.

    Kann ich das BGI Fenster in der Größe und Position verändern ?!

    mfg Andi84



  • Leider hat das mit ANSI C wenig zu tun. Da WinBGI imho aber auch nicht in eines der anderen Fachforen gut passt, schieb ich mal ins rudpf.



  • Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich würde aber noch immer gerne wissen ob ich das BGI Fenster in der Größe und Position verändern kann ?!

    mfg & thx Andi84


Anmelden zum Antworten