Snake Spielfeld größenunabhängig drucken
-
Guten Tag,
ich versuche mich nach längerer Pause momentan an einem Snake Spiel in der Konsole.
Mein bisheriger Code sieht so aus (Ist im Moment noch viel unnötiges drin für Funktionen die ich erst noch schreiben will:Zum Problem :
Mein Problem ist ,dass die Funktion InitField noch nicht so funktioniert wie gewollt.
Ich hätte gerne,dass ich die Spielfeldgröße jederzeit ändern kann und diese Funktion immer den Spielfeldrand initialisiert.
Allerdings ist der rechte Spielfeld Rand immer um 1 Feld des Arrays zu weit links und der unterste Rechte Rand (|) fehlt einfach.
Ich finde einfach nicht heraus, was ich falsch gemacht habe.
Hat jemand eine Idee, was falsch sein könnte, oder wie ich das ganze anders lösen könnte?#include <math.h> #include <iostream> #include "Windows.h" using namespace std; void InitField(char * Field, const short field_size, short wight){ short row = 0; short next_row = 9; for (int i = 0; i <= (field_size - 1); i++){ if (i <= wight || i + wight >= (field_size-1) ) Field[i] = '-'; else if ( row == (next_row + 1) || row == (next_row + wight )) Field[i] = '|'; else Field[i] = ' '; if (next_row + wight == row) next_row += wight; row++; } } void PrintField(char * field, const short field_size, short wight) { short row = 0; short next_row = 0; for (int i = 0; i <= (field_size - 1); i++){ if (next_row + wight + 1 == row){ cout << "\n"; next_row += wight; } cout << field[i]; row++; } } string KeyPressed(){ string ret; if (GetKeyState(VK_UP)) return ret = "UP"; else if (GetKeyState(VK_DOWN)) return ret = "DOWN"; else if (GetKeyState(VK_LEFT)) return ret = "LEFT"; else if (GetKeyState(VK_RIGHT)) return ret = "RIGHT"; } bool CheckLoose(char *field, short snake_pos){ if (field[snake_pos] == '-' || field[snake_pos] == '|' || field[snake_pos] == 'o') return true; else return false; } void CreateFruit(){ //random frucht auf Spielfelder 1-8 in jeder zeile } void EatenFruit() { } void NewPos(short field_size, short hight, short * snake_pos) { if (KeyPressed() == "UP") snake_pos -= hight; else if (KeyPressed() == "DOWN") snake_pos += hight; else if (KeyPressed() == "LEFT") snake_pos -= 1; else if (KeyPressed() == "RIGHT") snake_pos += 1; } bool snake[50]; int main() { HANDLE outcon = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_FONT_INFOEX font; font.cbSize = sizeof(CONSOLE_FONT_INFOEX); GetCurrentConsoleFontEx(outcon, false, &font); font.dwFontSize.X = 80; font.dwFontSize.Y = 80; SetCurrentConsoleFontEx(outcon, false, &font); short snake_pos = 0; short snake_end = 0; const short tfield_size = 100; //short thight = (short)(sqrt(field_size) -1); //short twight = hight; short thight = 9; short twight = 9; char tfield[tfield_size]; InitField(tfield, tfield_size,twight); PrintField(tfield, tfield_size, twight); std::cin.get(); //string current_direction = KeyPressed(); //string last_direction = current_direction; //Muss immer die Richtung der Schlange vom letzten Spielzug zeigen,falls der Spieler mal keine Taste drückt return 0; }
-
Wie waere es, wenn du die dein Array fuer einen simplen Fall (z.b. 4x5) auf Papier notierst und dann einen Debugger benutzt?