Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dziwne znaki po wywołaniu programu

Ostatnio zmodyfikowano 2018-04-03 11:52
Autor Wiadomość
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/mBKbfS

a tutaj po wciśnięciu przykładowo sekwencji a , d: https://ibb.co/eyRNLS

Jak 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:

C/C++
#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;
}
P-170412
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.
P-170416
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 ]
P-170431
« 1 »
  Strona 1 z 1