Ringstadjr Skrevet 1. oktober 2011 Del Skrevet 1. oktober 2011 (endret) Jeg er nybegynner i c++. Projektet mitt er å programmere brettspillet mil med en console GUI. Jeg har lagret spillebrettet i et 2-dimensjonalt array. Jeg bruker visual studio. Jeg har to klasser. Den ene er main og gjør ingenting annet enn å kalle på DrawBoard-klassen. DrawBoard inneholder arrayet med spillebrettet, samt en funksjon til å skrive det ut. I tillegg har jeg en header fil som deklarer ting jeg bruker. Når jeg bruker drawBoard() til å skrive ut spillebrettet, får jeg bare masse gibberish, helt til jeg flyttet arrayen inn i blokken til utskrivningsfunksjonen. Dette er ikke hensiktsmessig for da får jeg ikke forandret på den. Main: #include "DrawingBoard.h" #include <iostream> using namespace std; int main(){ int input; DrawingBoard db; db.drawBoard(); cin>>input; return(0); } Header fil: class DrawingBoard { public: DrawingBoard(void); void moveTo(int a, char b); void drawBoard(); char theBoard[14][31]; private: int msg; }; Resten av DrawingBoard: #include "DrawingBoard.h" #include <iostream> using namespace std; DrawingBoard::DrawingBoard(void) char theBoardInit[14][31] = { {' ','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_',' '}, {'|','1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','2','|',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','3','|'}, {'|',' ',' ',' ',' ',' ','_','_','_','_','_','_','_','_','_','|' //Lang oppramsing av brettet som jeg vet funker for (int uiRow = 0; uiRow < 14; ++uiRow) { for (int uiCol = 0; uiCol < 31; ++uiCol) { theBoard[uiRow][uiCol] = theBoardInit[uiRow][uiCol]; } } } void DrawingBoard::drawBoard(){ for(int i=0;i<14;i++) { for(int j=0;j<31;j++) { cout<<theBoard[j]; } cout<<endl; } cin>>msg; } Endret 1. oktober 2011 av Ringstadjr Lenke til kommentar
Dinosauromann Skrevet 1. oktober 2011 Del Skrevet 1. oktober 2011 (endret) Feilen er at arrayet du definerer i DrawingBoard-kildefilen vil slik som du har skrevet det være en global variabel. drawBoard-funksjonen henter theBoard-variabelen som er definert i header-filen siden den er en del av DrawingBoard-klassen og funksjonen printer da ut et array der variablene ikke er initialisert, og du får ut tilfeldig data. Ville det ikke vært mer logisk å bruke 3 arrays (anbefaler å bruke std::vector i stedet for arrays) med 8 elementer, en for ytterste, en for midterste og en for innerste "firkant"? Blir litt mer koplisert å printe brettet, men ellers er det mye mer ryddig for spill-logikken. Endret 1. oktober 2011 av Dinosauromann Lenke til kommentar
Ringstadjr Skrevet 1. oktober 2011 Forfatter Del Skrevet 1. oktober 2011 Har forsåvidt skjønt at problemet er at arrayet ikke er initialisert sett fra scopet til drawBoard(). Problemet er hvordan jeg skal kunne tilordne arrayet en verdi fra constructoren. Er ikke dette mulig i c++. Ganske sikker på at det ville vært mulig i for eksempel Java. Det er i alle fall det linjen char theBoard[14][31] = {...} er et forsøk på. Det ser ut for meg som om jeg deklarerer variabelen på nytt, men jeg har ikke funnet noen annen syntaks på det. Jeg har ikke brukt vektor fordi jeg ikke er kommet så langt. Kan godt hende det er et bedre alternativ, men skulle gjerne fått dette til først. Det ville vært lærerikt. Forslaget ditt med å bruke 3 arrays skjønte jeg ikke helt. Lenke til kommentar
Ringstadjr Skrevet 1. oktober 2011 Forfatter Del Skrevet 1. oktober 2011 Fant en slags løsning på det. Laget en ny multidimensjonell array som jeg initialiserte i constructoren. Så gikk jeg gjennom den og satte den lik den jeg allerede hadde deklarert i header-filen ved hjelp av to løkker. Ganske tungvindt. Burde finnes en bedre løsning. For de som lurer på løsningen så har jeg markert endringene i den opprinnelige koden med fet skrift: for (int uiRow = 0; uiRow < 14; ++uiRow) { for (int uiCol = 0; uiCol < 31; ++uiCol) { theBoard[uiRow][uiCol] = theBoardInit[uiRow][uiCol]; } } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå