Precedente :: Successivo |
Autore |
Messaggio |
Ruben Comune mortale
![Comune mortale Comune mortale](/images/livelli/1.png)
![](images/avatars/860659477550d797e2df9d.jpg)
Registrato: 21/03/15 14:55 Messaggi: 2
|
Inviato: 21 Mar 2015 16:14 Oggetto: [C++] Somma di booleani in un int, forse. |
|
|
Salve a tutti sono nuovo ^^
Volevo chiedervi aiuto su un breve codice C++ che inizialmente ho creato per semplice divertimento ma che, una volta mostrato il problema, ha iniziato a farmi scervellare.
La mia semplice intenzione era quella di creare una versione ridotta (23x28) del "Gioco della Vita" di Conway: per chi non lo conoscesse, si tratta di una griglia in cui ciascuna casella è "viva" o "morta" (la disposizione di partenza di quelle vive la si sceglie come la si vuole) ed ad ogni iterazione ognuna delle caselle, indipendentemente dal suo precedente stato, sarà impostata a true se nel suo intorno 3x3 (8 "vicini") ci sono 2 o 3 caselle vive, altrimenti muore (o resta morta) per solitudine o sovrappopolazione.
Per approfondimenti, c'è Google.
Ho scritto dunque questo semplice codice C++ in cui imposto anche la disposizione di partenza.
Codice: | #include<iostream>
using namespace std;
void avanza(bool mat[][25]);
main()
{
bool griglia[30][25];
int i, j;
for(i=0;i<30;i++)
{
for(j=0;j<25;j++) griglia[i][j]=false;
}
griglia[4][2]=true;
griglia[5][3]=true;
griglia[3][4]=true;
griglia[4][4]=true;
griglia[5][4]=true;
system("pause");
while(true)
{
system("cls");
avanza(griglia);
system("pause");
}
}
void avanza(bool mat[][25])
{
bool next[30][25];
int vicini, i, j;
for(i=0;i<30;i++)
{
for(j=0;j<25;j++) next[i][j]=mat[i][j];
}
for(i=1;i<29;i++)
{
for(j=1;j<24;j++)
{
vicini=mat[i-1][j-1]+mat[i-1][j]+mat[i-1][j+1]+mat[i][j-1];
vicini+=mat[i][j+1]+mat[i+1][j-1]+mat[i+1][j]+mat[i+1][j+1];
if((vicini==2)||(vicini==3)) next[i][j]=true;
else next[i][j]=false;
}
}
for(i=0;i<30;i++) next[i][0]=false;
for(j=0;j<25;j++) next[0][j]=false;
for(i=0;i<30;i++) next[i][24]=false;
for(j=0;j<25;j++) next[29][j]=false;
for(i=0;i<30;i++)
{
for(j=0;j<25;j++) mat[i][j]=next[i][j];
}
for(i=0;i<30;i++)
{
for(j=0;j<25;j++)
{
cout<<" ";
if(mat[i][j]==false) cout<<" ";
else cout<<"X";
}
cout<<endl;
}
cout<<endl<<endl<<endl<<endl<<endl;
} |
Il problema: non rispetta la regola "Con 2 o 3 vivi, altrimenti muori", generando così uno schema molto più confusionario rispetto a ciò che dovrebbe fare.
L'ho postato per intero perché non ho la certezza che sia l'unico problema.
Un aiuto sarebbe molto gradito, grazie ^^ |
|
Top |
|
![](templates/subSilver/images/spacer.gif) |
Ruben Comune mortale
![Comune mortale Comune mortale](/images/livelli/1.png)
![](images/avatars/860659477550d797e2df9d.jpg)
Registrato: 21/03/15 14:55 Messaggi: 2
|
Inviato: 21 Mar 2015 16:34 Oggetto: |
|
|
Ok scusate sono desolato...
...e anche un cretino.
Sono bastati carta e penna per vedere come il programma, ovviamente, fa esattame quel che ho richiesto. Era la regola di iterazione che me la ricordavo in modo sbagliato, non ottenendo dunque il risultato che credevo di dovermi aspettare.
Scusatemi davvero, potete anche eliminare il topic. |
|
Top |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|