T4b's persönlicher Dumme-C-Fragen-Thread


Granitehead

Advanced Member
Joined
Oct 16, 2009
Messages
3,011
Ich hab absolut keine Ahnung wie man mit C grafische Programme programmiert. Ich möchte hauptsächlich ein paar Spielchen programmieren.

Also, kurz: Was sollte ich da als Anfänger in welcher Reihenfolge lesen? :)
 
Re: Mit C Spiele programmieren

<r>Hi..<br/>
<br/>
schau einfach mal bei Google nach SDL... da gibts auch jede Menge deutsche Einsteiger Tutorials... kann ich nur empfehlen..<br/>
<br/>
hier zum Bleistift : <URL url="http://www.tutorials.de/forum/programming-tutorials/218464-spieleprogrammierung-mit-sdl.html"><LINK_TEXT text="http://www.tutorials.de/forum/programmi ... t-sdl.html">http://www.tutorials.de/forum/programming-tutorials/218464-spieleprogrammierung-mit-sdl.html</LINK_TEXT></URL><br/>
<br/>
MfG</r>
 
Re: Mit C Spiele programmieren

<r>Achtung Eigenwerbung <E>:-D</E> :<br/>
<br/>
<URL url="http://sdl.relei.de">http://sdl.relei.de</URL><br/>
<br/>
Schönen Gruß<br/>
Rene</r>
 
Re: Mit C Spiele programmieren

<t>Und vielleicht eine gute Einführung, in der die Unterschiede der verschiedenen Lösungen erklärt werden?<br/>
Also mit der man herausfinden kann, ob man am besten SDL, OpenGL oder was anderes nimmt.<br/>
<br/>
Und ich will, dass das dann auch auf der Pandora geht, natürlich. Macht OpenGL nicht noch Probleme?</t>
 
Re: Mit C Spiele programmieren

<t>Lern C und SDL, OpenGL kannst du unter SDL verwenden, heißt kannste später machen.<br/>
<br/>
Versuche erst auf deinem PC kleinere Sachen (wie z.B. Pong) oder so zu programmieren, mach dich mit SDL und der Spieleentwicklung vertraut.<br/>
<br/>
Wenn du dann die Möglichkeit hast ein Projekt auf der Pandora zu testen gibt es sicher wieder Tut's oder Leute die schon mehr Ahnung davon haben, von denen du lernen kannst.<br/>
Wichtig ist allerdings das du klein Anfängst, mit kleinen Schritten und kleineren Erfolgserlebnissen, sodass du auch nach 5 Wochen noch Lust auf Spieleentwickeln hast. <br/>
<br/>
MfG</t>
 
Re: Mit C Spiele programmieren

<r>Dann mache ich das so.<br/>
<br/>
Ich weiss schon was für ein kleines Spielchen ich mache. <E>:)</E> Nichts zu grosses.</r>
 
Re: Mit C Spiele programmieren

<r>@T4b: falls du bald schon ergebnisse hast, zeige sie doch mal. ich versuche mich auch in dsl. etwas von den "mitlernenden" zu sehen, dürfte ansporn sein <E>:)</E><br/>
<br/>
@relei: hast du ein tutorial, oder infos, um dein tutorial/ sorce auf dingux zu porten? oder, evtl. auch auf den nanonote...?</r>
 
Re: Mit C Spiele programmieren

<t>@Gamepower: Klar, kann ich machen.<br/>
<br/>
Im moment verwende ich Kate für's Schreiben (und kompiliere es dann mit gcc). Ist schon ziemlich gut.<br/>
Was benützt ihr, auch einzelne Programme? IDEs? Welche? Würdet ihr mir was anderes empfehlen?</t>
 
Re: Mit C Spiele programmieren

<r>Hi,<br/>
<br/>
oh an den Dingo habe ich gar nicht gedacht, werde mal nächste Woche was dazu schreiben <E>:)</E> .<br/>
<br/>
Schönen Gruß<br/>
Rene</r>
 
Re: Mit C Spiele programmieren

<r>Nachdem ich endlich mal Lust hatte anzufangen, finde ich gleich den ersten Fehler nicht (gut, der erste Fehler, der nicht vom Compiler gemeldet wird, auch nicht viel besser).<br/>
<br/>
Weiss Jemand was daran falsch ist?
<CODE><s>
Code:
</s><i>
</i>#include <stdlib.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[])
{
	short quit = 0, py = 210, px = 50, height;
	SDL_Surface *screen, *image;
	SDL_Rect p;
	SDL_Event event;
	Uint8 *keys;
	if (SDL_Init(SDL_INIT_VIDEO) == -1) {
		printf("Can't init SDL:  %s\n", SDL_GetError());
		exit(1);
	}

	atexit(SDL_Quit);

	screen = SDL_SetVideoMode(800, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);

	if (screen == NULL) {
		printf("Can't set video mode: %s\n", SDL_GetError());
		exit(1);
	}

	while (quit == 0) {
		keys = SDL_GetKeyState(NULL);
		if (keys[SDLK_UP]) {
			if (py > 0) {
				py--;
			}
		}
		if (keys[SDLK_DOWN]) {
			if (py < 420) {
				py++;
			}
		}
		if (keys[SDLK_RIGHT]) {
			quit = 1;
		}

		p.x = 50;
		p.y = py;
		p.w = 10;
		p.h = height;
		SDL_FillRect(screen, &p, SDL_MapRGB(screen->format, 0, 0, 255));
		SDL_UpdateRect(screen, 0, 0, 0, 0);
		SDL_Flip(screen);
	}

	return 0;
}
<e>
</e></CODE></r>
 
Re: Mit C Spiele programmieren

<r>Hi,<br/>
<br/>
der Inhalt des von SDL_GetKeyState zurückgegebenen Arrays ändert sich nur wenn du die durch die Eingabe ausgelösten Events bearbeitest. Es reicht einmal vor der Hauptschleife SDL_GetKeyState aufzurufen und um SDL zu zwingen das Array zu aktualisieren solltest du in deiner Hauptschleife SDL_PumpEvents() aufrufen, also in etwa so:
<CODE><s>
Code:
</s><i>
</i>int main(int argc, char *argv[])
{
   short quit = 0, py = 210, px = 50, height;
   SDL_Surface *screen, *image;
   SDL_Rect p;
   SDL_Event event; //Nur nebenbei, wozu definierst du das Event? Du verwendest es doch gar nicht oder?
   Uint8 *keys=SDL_GetKeyState(NULL);

.
.
.

   while (quit == 0) {
      SDL_PumpEvents();
      if (keys[SDLK_UP]) {
         if (py > 0) {
            py--;
         }
      }

.
.
.

      SDL_UpdateRect(screen, 0, 0, 0, 0); //Wozu beides? 
      SDL_Flip(screen); //Eines davon würde ausreichen ;-)<e>
</e></CODE>

lg<br/>
Fillius</r>
 
Re: Mit C Spiele programmieren

<r>Die Antwort auf beide deiner Kommentare ist: Weil ich ein Anfänger bin und mehr oder weniger nur Beispielcode zusammensetze und verändere. Danke dass du mich darauf hingewiesen hast, das wusste ich nicht. <E>:)</E><br/>
<br/>
So funktioniert es nun - so halb zumindest... <E>:-D</E><br/>
<br/>
Edit: Ich Idiot, ich weiss wieso es nicht richtig ging - ich hab "height" deklariert aber nicht definiert. <E>:rotfl:</E></r>
 
Re: Mit C Spiele programmieren

<r><QUOTE author="T4b"><s>
T4b said:
</s>[...]und mehr oder weniger nur Beispielcode zusammensetze und verändere.<e>
</e></QUOTE>

So hab ich es am Anfang auch immer probiert, bis ich gemerkt habe das der Lerneffekt viel größer ist wenn man den ganzen Code selbst schreibt.<br/>
<br/>
ps: Ich kann's trotsdem noch nicht richtig. (zummindest keine grafische Programmierung) <E>:-D</E> <E>:dash:</E></r>
 
Re: Mit C Spiele programmieren

<r><QUOTE author="Chaos"><s>
Chaos said:
</s><QUOTE author="T4b"><s>
T4b said:
</s>[...]und mehr oder weniger nur Beispielcode zusammensetze und verändere.<e>
</e></QUOTE>

So hab ich es am Anfang auch immer probiert, bis ich gemerkt habe das der Lerneffekt viel größer ist wenn man den ganzen Code selbst schreibt.<br/>
<br/>
ps: Ich kann's trotsdem noch nicht richtig. (zummindest keine grafische Programmierung) <E>:-D</E> <E>:dash:</E><e>
</e></QUOTE>
Schon, aber so geht es auch irgendwie. <E>:-D</E><br/>
<br/>
Nein, ich denke am Anfang ist das gut so, so hat man auch schneller etwas, das auch halbwegs funktioniert. <E>:-D</E><br/>
<br/>
<br/>
Wie leere ich den Bildschirm? Das habe ich in dem dummen Wikibook das ich lese nicht gefunden.<br/>
<br/>
Weil so wie ich es jetzt mache wird immer auch noch das von vorher angezeigt, also wenn ich das y von dem Rechteck ändere bewegt es sich nicht nach oben sondern wird nach oben länger.</r>
 
Re: Mit C Spiele programmieren

<r>Füll ihn einfach mit schwarz <E>;-)</E>
<CODE><s>
Code:
</s>SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,0));<e>
</e></CODE>

lg<br/>
Fillius</r>
 
Re: Mit C Spiele programmieren

<r>Ich benütze einfach mal weiter diesen Thread. <E>;)</E> <br/>

<QUOTE author="SDL Wikibook"><s>
SDL Wikibook said:
</s>Da SDL selbst keine Funktionen beinhaltet, Punkte, Linien, Poligone etc zu zeichnen sind wir auf Ergänzungsbibliotheken angewiesen. Eine dieser Bibliotheken ist die SDL_gfx Library, welche von <URL url="http://www.ferzkopp.net/Software/SDL_gfx-2.0/">http://www.ferzkopp.net/Software/SDL_gfx-2.0/</URL> bezogen werden kann.<e>
</e></QUOTE>
Ist diese SDL_GFX Lib mit der Pandora kompatibel?</r>
 
Re: Mit C Spiele programmieren

<t>Hi,<br/>
Ann ich mich recht entsinne ist die sdl_gfx eine Erweiterung die ja auf die sdl Funktionalität aufbaut und deswegen denke ich das es da keine Probleme geben sollte. Bin mir aber nicht hundertprozentig sicher. <br/>
<br/>
MfG</t>
 
Re: Mit C Spiele programmieren

<r>Kleine Frage, allgemein C:<br/>
Ich habe ein paar Ganzzahlen, mit denen werden Berechnungen angestellt, die nicht aufgehen und die am Ende aber auf ganze Zahlen gerundet werden müssen.<br/>
Kann ich da sowas wie
<CODE><s>
Code:
</s>int1 += floor( (int1-int2)*float+0.5 );<e>
</e></CODE>
machen oder geht das nicht?</r>
 
Re: T4b's-C-Fragen-Thread

<t>Das sollte gehen, warum auch nicht...<br/>
<br/>
Floor liefert zwar ein float oder double als Rückgabewert, wenn du den aber wieder auf einen Integer addierst wird der automatisch als int gecastet.<br/>
Kannst außerdem ja noch round() oder ceil() benutzen.<br/>
<br/>
Eine andere Alternative wäre einfach selber (int) auf die Fließkommazahl zu casten, das schneidet dann die Nachkommestellen ab (funktioniert also wie floor() für zahlen > 0 und wie ceil() für zahlen < 0).<br/>
<br/>
foxblock out</t>
 
Back
Top