Differences
This shows you the differences between two versions of the page.
pub:labprog:20171211 [2017/12/11 17:18] atrent created |
pub:labprog:20171211 [2017/12/13 08:13] (current) atrent |
||
---|---|---|---|
Line 6: | Line 6: | ||
<code java> | <code java> | ||
- | // dall'aula: 172.22.83.53 | ||
- | // dai portatili: atrent.it:993 | ||
- | |||
import java.util.*; | import java.util.*; | ||
import java.io.*; | import java.io.*; | ||
+ | import java.util.concurrent.*; | ||
public class Life { | public class Life { | ||
Line 29: | Line 27: | ||
public Campo cambiaCampo() { | public Campo cambiaCampo() { | ||
if(campoCorrente==campo1) { | if(campoCorrente==campo1) { | ||
- | System.out.println("era campo1"); | + | //System.out.println("era campo1"); |
campoCorrente=campo2; | campoCorrente=campo2; | ||
altro=campo1; | altro=campo1; | ||
} | } | ||
else if(campoCorrente==campo2) { | else if(campoCorrente==campo2) { | ||
- | System.out.println("era campo2"); | + | //System.out.println("era campo2"); |
campoCorrente=campo1; | campoCorrente=campo1; | ||
altro=campo2; | altro=campo2; | ||
Line 43: | Line 41: | ||
/** | /** | ||
calcola una singola "generazione" di celle | calcola una singola "generazione" di celle | ||
- | + | ||
- | regole: | + | regole https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life#Rules |
- | + | ||
- <2 intorno, muore | - <2 intorno, muore | ||
- 2,3 intorno, resta viva | - 2,3 intorno, resta viva | ||
Line 55: | Line 53: | ||
for(int riga=0; riga<righe; riga++) { | for(int riga=0; riga<righe; riga++) { | ||
for(int colonna=0; colonna<colonne; colonna++) { | for(int colonna=0; colonna<colonne; colonna++) { | ||
- | int q=campoCorrente.quanteViveIntorno(riga,colonna); | + | int q=campoCorrente.quanteViveIntorno(riga,colonna); |
- | + | ||
- | if(q<2) altro.impostaCella(riga,colonna,Campo.MORTA); | + | // mancava la copia del vecchio stato |
- | if(q>3) altro.impostaCella(riga,colonna,Campo.MORTA); | + | altro.impostaCella(riga,colonna,campoCorrente.osservaCella(riga,colonna)); |
- | if(q==3) altro.impostaCella(riga,colonna,Campo.VIVA); | + | |
- | System.err.print(campoCorrente.quanteViveIntorno(riga,colonna)); | + | if(q<2) altro.impostaCella(riga,colonna,Campo.MORTA); |
- | //System.err.print(" "); | + | if(q>3) altro.impostaCella(riga,colonna,Campo.MORTA); |
+ | if(q==3) altro.impostaCella(riga,colonna,Campo.VIVA); | ||
+ | //System.err.print(campoCorrente.quanteViveIntorno(riga,colonna)); | ||
} | } | ||
- | System.err.println(); | + | //System.err.println(); |
} | } | ||
- | System.out.println(cambiaCampo()); | + | cambiaCampo(); |
} | } | ||
Line 108: | Line 108: | ||
throws Exception | throws Exception | ||
{ | { | ||
- | Life l=new Life(10,30); // istanziazione (tutto a "zero") | + | Life l=new Life(30,180); // istanziazione (tutto a "zero") |
- | + | ||
- | System.out.println(l); // stampo stato iniziale | + | |
+ | //System.out.println(l); // stampo stato iniziale | ||
//l._inizializzazioneTest(); // modifico stato | //l._inizializzazioneTest(); // modifico stato | ||
- | |||
l.inizializzazione("initLife.txt"); // modifico stato | l.inizializzazione("initLife.txt"); // modifico stato | ||
+ | //System.out.println(l); // stampo stato a valle modifica | ||
- | System.out.println(l); // stampo stato a valle modifica | + | //System.out.println(l.campoCorrente.quanteViveIntorno(4,9)); // expected: 5 |
- | + | //System.out.println(l.campoCorrente.quanteViveIntorno(4,20)); // expected: 4 | |
- | System.out.println(l.campoCorrente.quanteViveIntorno(4,9)); // expected: 5 | + | //System.out.println(l.campoCorrente.quanteViveIntorno(0,0)); // expected: 2 |
- | System.out.println(l.campoCorrente.quanteViveIntorno(4,20)); // expected: 4 | + | |
- | System.out.println(l.campoCorrente.quanteViveIntorno(0,0)); // expected: 2 | + | |
- | for(int it=0;it<100;it++){ | + | for(int it=0; it<1000; it++) { |
- | l.iterazione(); | + | l.iterazione(); |
- | System.out.println(l.campo()); | + | System.out.println(l.campo()); |
+ | System.out.print("\033[H"); | ||
+ | TimeUnit.MILLISECONDS.sleep(50); | ||
} | } | ||
} | } | ||
public String campo() { | public String campo() { | ||
- | return campoCorrente.campo(); | + | return campoCorrente.campo(); |
} | } | ||
Line 227: | Line 226: | ||
return celle[coordRiga(riga)][coordColonna(colonna)]; | return celle[coordRiga(riga)][coordColonna(colonna)]; | ||
} | } | ||
- | | + | |
public char charCella(int riga, int colonna) { | public char charCella(int riga, int colonna) { | ||
- | if(osservaCella(riga,colonna)) return '*'; | + | if(osservaCella(riga,colonna)) return '*'; |
- | return '.'; | + | return '.'; |
} | } | ||
- | | + | |
- | public int isViva(int coordX, int coordY){ | + | public int isViva(int coordX, int coordY) { |
- | if(osservaCella(coordX, coordY)) return 1; | + | if(osservaCella(coordX, coordY)) return 1; |
- | return 0; | + | return 0; |
} | } | ||
- | | + | |
- | public int coordRiga(int riga){ | + | public int coordRiga(int riga) { |
- | if(riga==-1) return righe-1; | + | if(riga==-1) return righe-1; |
- | if(riga==righe) return 0; | + | if(riga==righe) return 0; |
- | return riga; | + | return riga; |
} | } | ||
- | public int coordColonna(int colonna){ | + | public int coordColonna(int colonna) { |
- | if(colonna==-1) return colonne-1; | + | if(colonna==-1) return colonne-1; |
- | if(colonna==colonne) return 0; | + | if(colonna==colonne) return 0; |
- | return colonna; | + | return colonna; |
+ | } | ||
+ | |||
+ | public int quanteViveIntorno(int riga, int colonna) { | ||
+ | |||
+ | return | ||
+ | isViva(riga-1,colonna-1)+ | ||
+ | isViva(riga-1,colonna)+ | ||
+ | isViva(riga-1,colonna+1)+ | ||
+ | isViva(riga,colonna-1)+ | ||
+ | isViva(riga,colonna+1)+ | ||
+ | isViva(riga+1,colonna-1)+ | ||
+ | isViva(riga+1,colonna)+ | ||
+ | isViva(riga+1,colonna+1); | ||
+ | |||
+ | |||
+ | |||
+ | /* | ||
+ | if(riga!=0 && riga!=ultima) | ||
+ | { | ||
+ | if(isviva(riga-1,colonna)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,colonna)) | ||
+ | vivaintorno++; | ||
+ | |||
+ | if(colonna!=0 && colonna!=ultima) | ||
+ | { | ||
+ | if(isviva(riga,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga-1,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga-1,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | if(colonna==ultima) | ||
+ | { | ||
+ | if(isviva(riga,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga,0)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,0)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga-1,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga-1,0)) | ||
+ | vivaintorno++; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | if(isviva(riga,ultima)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,ultima)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga-1,ultima)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga-1,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | else //riga non ultima e non prima | ||
+ | { | ||
+ | if(riga==ultima) | ||
+ | { | ||
+ | if(isviva(riga-1,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga-1,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(0,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(0,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | if(isviva(riga,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(riga+1,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(ultima,colonna-1)) | ||
+ | vivaintorno++; | ||
+ | if(isviva(ultima,colonna+1)) | ||
+ | vivaintorno++; | ||
+ | } | ||
+ | */ | ||
} | } | ||
- | public int quanteViveIntorno(int riga, int colonna){ | ||
- | |||
- | return | ||
- | isViva(riga-1,colonna-1)+ | ||
- | isViva(riga-1,colonna)+ | ||
- | isViva(riga-1,colonna+1)+ | ||
- | isViva(riga,colonna-1)+ | ||
- | isViva(riga,colonna+1)+ | ||
- | isViva(riga+1,colonna-1)+ | ||
- | isViva(riga+1,colonna)+ | ||
- | isViva(riga+1,colonna+1); | ||
- | |||
- | |||
- | |||
- | /* | ||
- | if(riga!=0 && riga!=ultima) | ||
- | { | ||
- | if(isviva(riga-1,colonna)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,colonna)) | ||
- | vivaintorno++; | ||
- | |||
- | if(colonna!=0 && colonna!=ultima) | ||
- | { | ||
- | if(isviva(riga,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga,colonna+1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,colonna+1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga-1,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga-1,colonna+1)) | ||
- | vivaintorno++; | ||
- | } | ||
- | else | ||
- | { | ||
- | if(colonna==ultima) | ||
- | { | ||
- | if(isviva(riga,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga,0)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,0)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga-1,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga-1,0)) | ||
- | vivaintorno++; | ||
- | } | ||
- | else | ||
- | { | ||
- | if(isviva(riga,ultima)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga,colonna+1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,ultima)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,colonna+1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga-1,ultima)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga-1,colonna+1)) | ||
- | vivaintorno++; | ||
- | } | ||
- | } | ||
- | |||
- | } | ||
- | else //riga non ultima e non prima | ||
- | { | ||
- | if(riga==ultima) | ||
- | { | ||
- | if(isviva(riga-1,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga-1,colonna+1)) | ||
- | vivaintorno++; | ||
- | if(isviva(0,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(0,colonna+1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga,colonna+1)) | ||
- | vivaintorno++; | ||
- | } | ||
- | else | ||
- | { | ||
- | if(isviva(riga,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga,colonna+1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(riga+1,colonna+1)) | ||
- | vivaintorno++; | ||
- | if(isviva(ultima,colonna-1)) | ||
- | vivaintorno++; | ||
- | if(isviva(ultima,colonna+1)) | ||
- | vivaintorno++; | ||
- | } | ||
- | */ | ||
- | } | ||
- | |||
Line 372: | Line 371: | ||
.............................. | .............................. | ||
.............................. | .............................. | ||
- | ..............................</code> | + | .............................. |
+ | </code> | ||
+ | |||
+ | |||
+ | Glider cannon | ||
+ | <code> | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .....................................*.............................................................................................................................................. | ||
+ | ...................................*.*.............................................................................................................................................. | ||
+ | .........................**......**............**................................................................................................................................... | ||
+ | ........................*...*....**............**................................................................................................................................... | ||
+ | .............**........*.....*...**................................................................................................................................................. | ||
+ | .............**........*...*.**....*.*.............................................................................................................................................. | ||
+ | .......................*.....*.......*.............................................................................................................................................. | ||
+ | ........................*...*....................................................................................................................................................... | ||
+ | .........................**......................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | .................................................................................................................................................................................... | ||
+ | </code> |