Spielprogrammierung in C - Buchempfehlung
-
Hallo Freunde der Codierung,
ich wollte mich gerne bisschen mit Grafik/Spiel-Programmierung beschaeftigen.
Ich suche ein gutes Buch zum DirectX aber (jetzt kommt der Hacken) ausschliesslich in der Programmierersprache "C"
Ich habe mir viele Bücher angeguckt aber alle waren C/C++ oder nur C++.
Bitte keine Antworten dass ich C++ brauche um DirectX zu programmieren...
ich suche halt ein Buch das diese Materie ohen C++ erklärt.Noch etwas zu meinem Wissenstand: C - gut, WinApi - gut
Wenn Ihr ein Link zu 'nem gutem Tutorial dazu habt, her damit....
thx im Vorraus
-
Gibt's da 'nen Grund für?
Das ist so, als wolltest Du ein Fahrrad ohne Lenker steuern... (Geiler Vergleich, gell?! )
Such nach COM Programmierung mit C.
Viel Spaß... :p
-
oder schau dir den Quellcode zu Quake 3 an^^
-
lad dir doch die SDL runter da is ene doku dabei mit anleitung für das lernen und SDL is C
ausserdem hat sie den voteril das sie plattformunabhangig ist und im forum benutzten sie recht viele..
aber an deiner stelle würd uich sowieaso c++ da viels nur noch damit geht odr dein compoiler mit gröster warsch ein c++ compiler ist und kein reiner c vompiler..
-
Ich kann da das Buch von Andre Lamothe empfehlen: "Tricks of the Windows Game Programming Gurus". Oder wenn dus ein bisschen ruhiger angehen willst: "Game Programming fuer Dummies" auch von ihm.
Beides sehr gute Buecher, ohne dem C++ Zeugs. Kann ich nur empfehlen.
mfg LastManStanding
-
Pellaeon schrieb:
oder schau dir den Quellcode zu Quake 3 an^^
Nein, besser nicht.
Das geht echt so viel leichter./* ============================================================ DIRECT INPUT MOUSE CONTROL ============================================================ */ #undef DEFINE_GUID #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ EXTERN_C const GUID name \ = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_XAxis, 0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_YAxis, 0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_ZAxis, 0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); #define DINPUT_BUFFERSIZE 16 #define iDirectInputCreate(a,b,c,d) pDirectInputCreate(a,b,c,d) HRESULT (WINAPI *pDirectInputCreate)(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUT * lplpDirectInput, LPUNKNOWN punkOuter); static HINSTANCE hInstDI; typedef struct MYDATA { LONG lX; // X axis goes here LONG lY; // Y axis goes here LONG lZ; // Z axis goes here BYTE bButtonA; // One button goes here BYTE bButtonB; // Another button goes here BYTE bButtonC; // Another button goes here BYTE bButtonD; // Another button goes here } MYDATA; static DIOBJECTDATAFORMAT rgodf[] = { { &GUID_XAxis, FIELD_OFFSET(MYDATA, lX), DIDFT_AXIS | DIDFT_ANYINSTANCE, 0,}, { &GUID_YAxis, FIELD_OFFSET(MYDATA, lY), DIDFT_AXIS | DIDFT_ANYINSTANCE, 0,}, { &GUID_ZAxis, FIELD_OFFSET(MYDATA, lZ), 0x80000000 | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0,}, { 0, FIELD_OFFSET(MYDATA, bButtonA), DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0,}, { 0, FIELD_OFFSET(MYDATA, bButtonB), DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0,}, { 0, FIELD_OFFSET(MYDATA, bButtonC), 0x80000000 | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0,}, { 0, FIELD_OFFSET(MYDATA, bButtonD), 0x80000000 | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0,}, }; #define NUM_OBJECTS (sizeof(rgodf) / sizeof(rgodf[0])) // NOTE TTimo: would be easier using c_dfDIMouse or c_dfDIMouse2 static DIDATAFORMAT df = { sizeof(DIDATAFORMAT), // this structure sizeof(DIOBJECTDATAFORMAT), // size of object data format DIDF_RELAXIS, // absolute axis coordinates sizeof(MYDATA), // device data size NUM_OBJECTS, // number of objects rgodf, // and here they are }; static LPDIRECTINPUT g_pdi; static LPDIRECTINPUTDEVICE g_pMouse; void IN_DIMouse( int *mx, int *my ); /* ======================== IN_InitDIMouse ======================== */ qboolean IN_InitDIMouse( void ) { HRESULT hr; int x, y; DIPROPDWORD dipdw = { { sizeof(DIPROPDWORD), // diph.dwSize sizeof(DIPROPHEADER), // diph.dwHeaderSize 0, // diph.dwObj DIPH_DEVICE, // diph.dwHow }, DINPUT_BUFFERSIZE, // dwData }; Com_Printf( "Initializing DirectInput...\n"); if (!hInstDI) { hInstDI = LoadLibrary("dinput.dll"); if (hInstDI == NULL) { Com_Printf ("Couldn't load dinput.dll\n"); return qfalse; } } if (!pDirectInputCreate) { pDirectInputCreate = (long (__stdcall *)(void *,unsigned long ,struct IDirectInputA ** ,struct IUnknown *)) GetProcAddress(hInstDI,"DirectInputCreateA"); if (!pDirectInputCreate) { Com_Printf ("Couldn't get DI proc addr\n"); return qfalse; } } // register with DirectInput and get an IDirectInput to play with. hr = iDirectInputCreate( g_wv.hInstance, DIRECTINPUT_VERSION, &g_pdi, NULL); if (FAILED(hr)) { Com_Printf ("iDirectInputCreate failed\n"); return qfalse; } // obtain an interface to the system mouse device. hr = IDirectInput_CreateDevice(g_pdi, &GUID_SysMouse, &g_pMouse, NULL); if (FAILED(hr)) { Com_Printf ("Couldn't open DI mouse device\n"); return qfalse; } // set the data format to "mouse format". hr = IDirectInputDevice_SetDataFormat(g_pMouse, &df); if (FAILED(hr)) { Com_Printf ("Couldn't set DI mouse format\n"); return qfalse; } // set the cooperativity level. hr = IDirectInputDevice_SetCooperativeLevel(g_pMouse, g_wv.hWnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND); // https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=50 if (FAILED(hr)) { Com_Printf ("Couldn't set DI coop level\n"); return qfalse; } // set the buffer size to DINPUT_BUFFERSIZE elements. // the buffer size is a DWORD property associated with the device hr = IDirectInputDevice_SetProperty(g_pMouse, DIPROP_BUFFERSIZE, &dipdw.diph); if (FAILED(hr)) { Com_Printf ("Couldn't set DI buffersize\n"); return qfalse; } // clear any pending samples IN_DIMouse( &x, &y ); IN_DIMouse( &x, &y ); Com_Printf( "DirectInput initialized.\n"); return qtrue; }
EDIT: Lustigerweise hat der Q3-Render-Code nicht halb so viele Kommentare...
Schau Dir die Samples an und guck was Du davon gebrauchen kannst.
Das gilt besonders, wenn Du Dich nur vor C++ drücken willst.LastManStanding schrieb:
Ich kann da das Buch von Andre Lamothe empfehlen: "Tricks of the Windows Game Programming Gurus". Oder wenn dus ein bisschen ruhiger angehen willst: "Game Programming fuer Dummies" auch von ihm.
Beides sehr gute Buecher, ohne dem C++ Zeugs. Kann ich nur empfehlen.
Naja, AFAIK nutzt er ja schon C++.
Allerdings nur grundlegendes. Keine Templates und diese kranken Sachen die man machen kann, von denen aber nur 10 Leute auf der Welt wissen...
-
Sgt. Nukem schrieb:
Pellaeon schrieb:
oder schau dir den Quellcode zu Quake 3 an^^
Nein, besser nicht.
Das geht echt so viel leichter.War ja auch ein Gag, daher "^^°
-
Pellaeon schrieb:
Sgt. Nukem schrieb:
Pellaeon schrieb:
oder schau dir den Quellcode zu Quake 3 an^^
Nein, besser nicht.
Das geht echt so viel leichter.War ja auch ein Gag, daher "^^°
Achso...
Wie in NadrW letztens erst diskutiert wurde, scheint "^^" nicht standardisiert zu sein. Ein ":D" oder "" wäre besser gewesen...
-
@Sgt. Nukem:
LaMothe nimmt halt von c++ ein paar sachen her, die das ganze vereinfachen. bleibt aber wirklich am boden.mfg LastMan
-
LastManStanding schrieb:
@Sgt. Nukem:
LaMothe nimmt halt von c++ ein paar sachen her, die das ganze vereinfachen. bleibt aber wirklich am boden.Yo.
And I don't want to see any of you guys messing with multiple inheritance!!