C++ Spieleprogrammieren
-
numberone123 schrieb:
ok thx ich werde mal den code durch büffeln...und ging sogar xD
Damit du nicht die ganzen Grafikfunktionen selber schreiben musst bzw. um nicht solche ClearScreen-Übelkeiten zu übernehmen kann dir evtl. auch die Improved Console (http://ic.c-plusplus.net) helfen. Sie bietet einige Konsolenfunktionen an um etwas Farbe ins Spiel zu bringen. Bleibt aber trotzdem alles auf Zeichenebene.
MfG SideWinder
-
ja danke...
ja das clearscreen hab ich besser gelöst xD
system("CLS");
:p
edit:
hab noch ne frage wie kann ich denn die steuerung machen hab jetzt schon einen kopf der sich durch tasten druck sich verschiebt(naja tut er nicht ,cout xD) aber wie soll ich das mit dem feld und so machen und ich bräuchte noch hilfe für die steuerung hab da jetzt ne sehr besch***** steuerung eingebaut und ich weiß nicht weitervoid Bewegung(char b){ do{ if(!g_LastPressedKey || !GetAsyncKeyState(g_LastPressedKey)){ g_LastPressedKey = 0; if (GetAsyncKeyState(VK_RIGHT)){ for(i = 0;i < 1;i++){ cout << b; } g_LastPressedKey = VK_RIGHT; } else if(GetAsyncKeyState(VK_DOWN)){ for(i = 0; i < 1; i++){ cout << '\n' << b; } g_LastPressedKey = VK_DOWN; } } }while( s == 1); }
bei dem feld könnte ich auch hilfe gebrauchen...
Mfg,
numberone123
-
fang erst garnicht so an, logic und rendering sind zwei verschiedene stufen. du hast ja schon gut angefangen es in einzelne funktionen zu trennen, da wo "void Bewegung(char b)" drueber steht, sollte eine bewegung gemacht werden, kein zeichnen. sonst wirst du am ende durch den ganzen code steigen muessen falls du mal irgendwas am layout deines spieles aendern willst.
erst logic dann rendering, nicht beides zusammen!
also, fuer den anfang
typedef unsigned char tdPixel; tdPixel g_PixelBuffer[SIZE_X*SIZE_Y] void ClearBuffer() { memset(g_PixelBuffer,32,sizeof(g_PixelBuffer)); } void SetPixel(unsigned int x,unsigned int y,tdPixel c) { if(x<SIZE_X && y<SIZE_Y) g_PixelBuffer[x+y*SIZE_X]=c; } void Display() { //display { for(unsigned int y=0;y<SIZE_Y;y++) { GotoPixel(0,y); for(unsigned int x=0;x<SIZE_X;x++) printf("%c",DrawField[x+y*SIZE_X]); } }
du zeichnest ab jetzt in nichts anderes ausser in den pixelbuffer und wenn du fertig bist, gibst du das mittels Display() aus. (SIZE_X und SIZE_Y sollten entsprechend deines verlangen angepasst werden).
der logicloop sollte also in etwas so sein
while(..) { bearbeiteInput(); //z.b. if left then x--;etc logic(); //z.b. gegner bewegen oder bei tetris den block fallen lassen Zeichne(); //hier solltest du alles an spielinformation ins g_pixelbuffer stecken Display(); //am ende zeigst du das nur an, eventuel noch ein paar strings wie "score" }
ja, mein tetris war nur quick und dirty und ist nicht perfekt zum lernen, aber mit einer noch abstrakteren trennung von logik und rendering waere es fuer den anfang vielleicht noch konfuser.
wenn du das so sauber trennst, wird es dich spaeter vielleicht 10zeilen code kosten um das auf graphik umzubauen.
-
numberone123 schrieb:
ja danke...
ja das clearscreen hab ich besser gelöst xD
system("CLS");
:p
-
-
wtf ? xD
@rapso ja ok danke ich werde es mal so versuchen...
bin halt noch anfänger und nutzte dies eig zum noch lernen
kennt wer ne idee was ich so als anfänger schreiben könnte weil ich glaub das ist mir noch zu schwer hab schon nen taschenrechner geproggt aber dies geling zu leicht und suche eine kleine herrausforderung nicht so schwer wie snake aber auch nicht zu leicht wie eiene tacshcenrechenr...Mfg,
numberone123
-
Hm - ich weiss ja nicht was dein Taschenrechner so konnte, aber ich vermute mal, dass nur Einfache Berechnungen wie 5 * 3 möglich waren.
Du könntest den Taschenrechner z.B. erweitern, sodass er auch komplexere Ausdrücke auswerten kann, sowas in der Art wie (5 * 3) + 2 / ( -2 + (3 * 4) )Hm - sonst könntest du sowas wie Tic Tac Toe oder Schiffe versenken oder ähnliches mal probieren.
-
rapso schrieb:
#pragma intrinsic(_rotl16) enum ETetrad { ET_INVALIDE = 0, ET_I = 0x0F00, ET_J = 0x0470, ET_L = 0x02e0, ET_O = 0x0660, ET_S = 0x06C0, ET_T = 0x04E0, ET_Z = 0x0C60, ET_COUNT = 7 };
Weiss jemand was die Hex Zahlen und das #pragma intrinsic(_rotl16) bedeuten ?
Gruss Stewie G
-
-
Google2 schrieb:
Google halt
ja das #pragma intrinsic(_rotl16) weis ich jetzt, aber wieso werden Hex Zahlen verwendet man könnte man auch das so schreiben ?:
enum ETetrad { ET_INVALIDE = 0, ET_I = 3840, ET_J = 1136, ... }
Was bedeuten die Variablen ?
Gruss Google5 :p