Oppure

Loading
30/10/10 10:30
XBarboX
Ciao,
sto facendo un semplice programma: muovere un "#" dentro alla console.

Ecco il sorgente:
#include<iostream>
#include<fstream>
using namespace std;

const int width=50;
const int height=15;

bool mappa[height][width];
int x;
int y;

void Azzera(){
     for(int i=1; i<=height; i++){
             for(int j=1; j<=width; j++){
                     mappa[i][j]=false;
                     }
             }
     }
     
void Stampa(){
     for(int i=1; i<=height; i++){
             for(int j=1; j<=width; j++){
                     if(mappa[i][j])cout<<"#";
                     else cout<<"-";
                     }
             cout<<endl;
             }     
     }

int main(){
    Azzera();
    x=25;
    y=8;
    mappa[y][x]=true;
    Stampa();   
    system("pause");
    return 0;
    }



Praticamente è ancora una bozza mancano le funzioni per gestire lo spostamento del "#". Comunque capita un errore "strano" (magari è solo distrazione ma non capisco dov'è l'errore)
Dovrebbe stampare alla coordinate x=25 e y=8 il carattere "#" e per tutto il resto della mappa il carattere "-". Eppure a me l'output esce così:
img530.imageshack.us/img530/2231/…
Non capisco come mai vengano stampati due "#" senza motivo.

p.s. Se stampo subito dopo la funziona Azzera() tutta la mappa è piena di "-", quindi non è un errore delle funzioni Azzera o Stampa
aaa
30/10/10 12:04
Pitagora

#include<iostream>
#include<fstream>
using namespace std;
 
const int width=50;
const int height=15;
 
bool mappa[height][width];
int x;
int y;
 
void Azzera(){
     for(int i=1; i<=height; i++){
             for(int j=1; j<=width; j++){
                     mappa[i][j]=false;
                     }
             }
     }
     
void Stampa(){
     for(int i=1; i<=height; i++){
             for(int j=1; j<=width; j++){
                     if(mappa[i][j] == false) {
						 cout<<"-"; 
						 } else {
						  cout<<"#";
					  }
				  }
             cout<<endl;
             }    
     }
 
int main(){
    Azzera();
    x=25;
    y=8;
    mappa[y][x]=true;
    Stampa();  
    getchar();
    return 0;
    }

:k: modificando in questo modo il codice funziona non so perchè prima non funzionava. Suggerimenti?
Ultima modifica effettuata da Pitagora 30/10/10 12:48
aaa
30/10/10 12:43
lumo
non ho guardato bene il motivo dell'errore, ma posso dirti che non puoi loopare su un array in quel modo
se hai un array di 20 elementi ad esempio, il primo elemento ha indice 0 mentre l'ultimo 19, tu invece vai da 1 a 20
Ti ho riscritto il codice, IMO adesso è più comprensibile( anche se si potrebbe migliorare ancora )
#include<iostream>
#include<fstream>
using namespace std;
 
const int width=50;
const int height=15;
 
void Azzera( bool mappa[height][width] )
{
   for(int i=0; i<height; i++)
   {
      for(int j=0; j<width; j++)
      {
         mappa[i][j]=false;
      }
   }
}
     
void Stampa( bool mappa[height][width] )
{
   for(int i=0; i<height; i++)
   {
      for(int j=0; j<width; j++)
      {
         if(mappa[i][j]==true)
            cout<<"#";
         else 
            cout<<"-";
       }
       cout<<endl;
   }    
}
 
int main()
{
    bool mappa[height][width];
    
    Azzera( mappa );
    mappa[8][25]=true;
    Stampa( mappa );  
    
    cin.get();
    return 0;
}
aaa
31/10/10 10:13
carmine
per far muovere un carattere sullo schermo puoi usare la gotoxy(int x,int y)
mettendo in un ciclo la coordinata che cresce con un rallentamento e il gioco è fatto! se vuoi saperne di più ti posto la procedura! ciao!!!
aaa
31/10/10 13:10
Pitagora
Postato originariamente da carmine:

per far muovere un carattere sullo schermo puoi usare la gotoxy(int x,int y)
mettendo in un ciclo la coordinata che cresce con un rallentamento e il gioco è fatto! se vuoi saperne di più ti posto la procedura! ciao!!!
Posta, interessa anche a me! Ma la funzione gotoxy è solo del C++?
aaa
31/10/10 13:48
carmine
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;

void gotoxy(int x,int y);  //gotoxy  strutturata gotoxy(colonna,riga)

int main()
{
     int col=20, rig=2,tasto=0;   
    //per farlo muovere fai cosi
    
    do
    {
        if(kbhit()) tasto=getch();   //leggo il tasto per uscire con ESC
        gotoxy(col,rig); putch('#');  //cancello
        _sleep(30);     //ritardo la scrittura per effetto camminamento
        gotoxy(col,rig); putch(' ');  //scrivo
        
        col++;  //incremento la riga
        if(col == 75) { col =1; }

}while(tasto!=27);    //27 è ESC
getch();
return 0;
}

void gotoxy(int x,int y)
{
    COORD coor;
    HANDLE hOutput;
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    coor.X = x;
    coor.Y = y;
    SetConsoleCursorPosition(hOutput,coor);
} 


anche in c funziona solo che il ritardo è delay(millisecondi) inclusa nella libreria dos.h, inoltre il c dovrebbe avere nella conio.h gia inclusa la gotoxy in caso contrario aggiungi la libreria windows.h e la procedura ke ti ho scritto spero di averti aiutato ciaoo
Ultima modifica effettuata da carmine 31/10/10 13:51
aaa