[C++] Dziwne znaki po wywołaniu programu
Ostatnio zmodyfikowano 2018-04-03 11:52
krypi23 Temat założony przez niniejszego użytkownika |
[C++] Dziwne znaki po wywołaniu programu » 2018-04-02 19:09:09 Mam problem z moim programem, a konkretnie taki że po jego wywołaniu w zależności od parametru game_width w konsoli dzieją się dziwne rzeczy, a konkretnie pojawiają dziwne znaki. Np. wywołanie dla game_width = 9 ; game_height = 12 wygląda następująco: Włączenie programu: https://ibb.co/mBKbfSa tutaj po wciśnięciu przykładowo sekwencji a , d: https://ibb.co/eyRNLSJak widać pojawiają się jakieś znaki i nie mogę dojść skąd one mogą się brać, analizowałem kod już parę razy linijka po linijce i nie zauważyłem niczego, co mogłoby to powodować. Wiem że cały ten kod zapewne można by napisać lepiej / ładniej, ale zabawę z c dopiero zaczynam i na razie skleciłem tylko coś takiego: #include <iostream> #include <stdlib.h> #include <conio.h>
using namespace std;
bool status = true;
const int game_width = 9; const int game_height = 12; char background = '-'; char obstacle = '#'; char border = '|'; char character = '^';
const int a_w = game_width - 1; const int a_h = game_height - 1; char g_array[ a_h ][ a_w ]; char key; int character_pos;
int random;
void game_set() { for( int i = 0; i <= a_h; i++ ) { for( int j = 1; j <=( a_w - 1 ); j++ ) { g_array[ i ][ j ] = background; } } for( int i = 0; i <= a_h; i++ ) { g_array[ i ][ 0 ] = border; g_array[ i ][ a_w ] = border; } g_array[ a_h ][ 1 ] = character; }
void game_logic() { for( int j = 1; j <=( a_w - 1 ); j++ ) { for( int i =( a_h - 1 ); i >= 1; i-- ) { g_array[ i ][ j ] = g_array[ i - 1 ][ j ]; } } for( int i = 1; i <=( a_w - 1 ); i++ ) { random = rand() % 3; if( random == 0 ) { g_array[ 0 ][ i ] = obstacle; } else { g_array[ 0 ][ i ] = background; } } }
void game() { while( status ) { for( int i = 0; i <= a_h; i++ ) { for( int j = 0; j <= a_w; j++ ) { cout << g_array[ i ][ j ]; } cout << endl; } for( int i = 1; i <= a_w; i++ ) { if( g_array[ a_h ][ i ] == character ) { character_pos = i; } } key = getch(); switch( key ) { case 'a': g_array[ a_h ][ character_pos ] = background; g_array[ a_h ][ character_pos - 1 ] = character; break; case 'd': g_array[ a_h ][ character_pos ] = background; g_array[ a_h ][ character_pos + 1 ] = character; break; } game_logic(); } }
int main() { game_set(); game(); return 0; } |
|
pekfos |
» 2018-04-02 22:10:00 Tablicę N-elementową indeksuje się od 0 do N - 1. Nie masz w kodzie ani jednej pętli, która by poprawnie przeszła po całej tablicy. |
|
krypi23 Temat założony przez niniejszego użytkownika |
» 2018-04-03 11:52:23 Dzięki za pomoc :) znalazłem w końcu błąd, którym był zły rozmiar tablicy g_array[][]. Wystarczyło zmienić char g_array[ a_h ][ a_w ] na char g_array[ game_height ][ game_width ] |
|
« 1 » |