2011 m. gegužės 28 d., šeštadienis

Memo žaidimas ant Java, išvertus iš Pascal'io.

Hm, pagaliau pavyko bent jau išversti į Javos sintaksę tą Memo žaidimuką.
Programoje yra dvi klasės: Main ir Readas2. Main klasė viska atlieka, išskyrus skaitymo iš klaviatūros, dėl to kreipiasi į Readas2 klasę, į jos metodą "giveNu" ("duok skaičių").
Java rašytos programos su komentarais užima daug vietos, todėl ši žinutė tuoj taps labai ilga.

1. Main
2. Readas2

-1-

import java.io.IOException;
import java.util.Random;

public class Main {

public static void main(String[] args) {

//daug kintamuju
int MAX = 10;
int MAZ = 5;
int i,j,k,l,n,x,y, rep, repi;
int zaistidarSk, lenta, ilg, plo, varkie, pasirvar, indvar, atmp, inda;
boolean zaistidar;
boolean endgame, same;
int[] v = new int[4];
int[][] a = new int[MAX+1][MAX+1];
boolean[][] s= new boolean[MAX+1][MAX+1];
int[] xrep= new int[MAZ+1], yrep= new int[MAZ+1];

// visiems kintamiesiems priskiriu betkokias reksmes, norint isvengti praesimo
// ~~"variable AAA may not have initialized"
v[3] = 1;
varkie = 1;
pasirvar = 1;
indvar = 1;

lenta = 1;
ilg = 1;
plo = 1;

x = 1;
y = 1;

zaistidarSk = 2;
zaistidar = true;

//kai kuriu kintamuju pavadinimu paaiskinimai
//ilg - lentos ilgis, plo - lentos plotis
//v[] - variantai, varkie - variantu kiekis
//pasirvar - vartotojo pasirekamas variantas
//indvar - varianto indeksas
//a[][] - langelis, kuriam priskirtas skacius; atmp - "temporary a" (maisant lenta)
//s[][] - saugo a langelio logika (atvertas/uzvertas).
//i,j,n,rep,repi - skaitliukai

//sis visa programa gaubiantis ciklas klausineja, ar nori vartotojas "zaisti dar?"
while (zaistidar) {

System.out.println("pasirinkite lentos dydi, ivesdami atitinkama skaitmeni");
System.out.println("1 - 4x3, 2 - 5x4, 3 - 6x5, 4 - 8x6, 5 - 10x6");

try {
lenta = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/// System.out.println(lenta);


if (lenta==1) { ilg=4; plo=3; varkie=2; v[1]=2; v[2]=3;}
if (lenta==2) { ilg=5; plo=4; varkie=2; v[1]=2; v[2]=4; }
if (lenta==3) { ilg=6; plo=5; varkie=2; v[1]=2; v[2]=3; }
if (lenta==4) { ilg=8; plo=6; varkie=2; v[1]=2; v[2]=3; }
if (lenta==5) { ilg=10;plo=6; varkie=3; v[1]=2; v[2]=3; v[3]=5; }
System.out.println("pasirinkite po kiek vienodu paveiksleliu bus poligone");
System.out.println("pasirinkimo variantai: ");



for (i=1;i<6;i++) {
if (lenta==i) { for (j=1;j
/// System.out.println("indvar : "+indvar);
System.out.println();
try {
pasirvar = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/// System.out.println("pasirvar : "+pasirvar);

for (j=1;j
/// System.out.println("indvar-2 : "+indvar);

for (i=plo;i>0;i--) { //priskiriami skaiciai [1..ixj]
for (j=1;j
a[j][i]=(i-1)*ilg+j;
}
//pvz. i=4, j=3.
// 1 2 3 4
// 5 6 7 8
// 9 10 11 12

}

for (i=plo;i>0;i--) { //vienodu skaiciu sudarymas
for (j=1;j
a[j][i]=(a[j][i]+v[indvar]-1) / v[indvar];
}
}
//pvz. jei v[indvar]=2. jei v[indvar]=3.
// 1 1 2 2 1 1 1 2
// 3 3 4 4 2 2 3 3
// 5 5 6 6 3 4 4 4

Random generator = new Random();

for (n=1;n<4;n++) { //triskart ismaiso lenta
for (i=1;i
for (j=1;j
atmp=a[j][i];
l = generator.nextInt(plo)+1;
k = generator.nextInt(ilg)+1;
a[j][i]=a[k][l];
a[k][l]=atmp;
}
}
}


for (i=MAX;i>0;i--) { //logiskai uzvienetinam kintamuju lauka (MAX lenta)
for (j=1;j
}
for (i=plo;i>0;i--) { //logiskai uznulinam zaidziama lenta (plo x ilg lenta)
for (j=1;j
}


do { //1 --ciklo pabaigoje patikrina ar visi lageliai atverti; jei ne: endgame = false

endgame = true;

rep=0;
do //1.1 --ciklas tikrina ir atvercia vienodas korteles, uzvercia suklydus
{
rep++;

for (i=plo;i>0;i--) { //parodom lenta

for (j=1;j
if (s[j][i]) {
if (a[j][i]<10) {System.out.print(" ");};
System.out.print(" "+ a[j][i]);
}
else { System.out.print(" "+"X"); }
}
System.out.println();
}
System.out.println();

System.out.println("iveskite langelio koord x ir y");

try {
x = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
try {
y = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};


// tikrinam ar vartotojas gerai gaudosi koordinatese negrafineje aplinkoje :>
while ( !( (x<=ilg) && (y<=plo) && (x>0) && (y>0) ) || s[x][y] ) {
if ( !( (x<=ilg) && (y<=plo) && (x>0) && (y>0) ) ) {
System.out.println("uzribio koordinates! iveskite x ir y is naujo");
try {
x = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
try {
y = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
else {
System.out.println("si kortele jau atverta, pasirinkite kita");
try {
x = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
try {
y = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
}


s[x][y] = true; //pazymim si langeli atidarytinu
xrep[rep] =x; //i masyva issaugom langelio x
yrep[rep] =y; //i masyva issaugom langelio y

same=true;
for (repi=1;repi
inda = a[xrep[1]][yrep[1]];
same = same && (inda==a[xrep[repi]][yrep[repi]]);
}

if (!same) {
for (i=plo;i>0;i--) { //parodom lenta atversdami "nebroli", bet tik trupam

for (j=1;j
if (s[j][i]) {
if (a[j][i]<10) {System.out.print(" ");};
System.out.print(" "+ a[j][i]);
}
else { System.out.print(" "+"X"); }
}
System.out.println();

};
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("\n\n\n\n\n\n\n\n\n\n\n"); //"javaClearScreen'as" :>
for (repi=1;repi
s[xrep[repi]][yrep[repi]] = false; //uzvercia visus anksciau atvertus "brolius", jei paskutinysis blogas
}
}

}
while ( !((rep==v[indvar]) || (!same)) ) ; //1.1
// --ciklas baigiasi kai atspetas reikiamas skaicius vienodu skaiciu ARBA kai suklystama

for (i=plo;i>0;i--) { //tikrinam ar visi langeliai atverti
for (j=1;j
endgame = endgame && s[j][i];
}
}

}
while (!endgame); //1

System.out.println("Jeigu norite zaisti dar, iveskite 1, jeigu ne - kita skaiciu");
try {
zaistidarSk = Readas2.giveNu();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};

if (zaistidarSk!=1) zaistidar=false;

}

System.out.println("programa baigia darba. viso gero!");

}

}


-2-

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Readas2 {
public static int giveNu() throws IOException {

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

boolean teisigaiIvesta = false;
int ivesk = 0;

while (!teisigaiIvesta) {
String str = null;
str = br.readLine();

try {
ivesk = Integer.parseInt(str);
}
catch (NumberFormatException nfe){
System.out.println("Blogas formatas!");
continue;
}
teisigaiIvesta = true;
}
// br.close();
return ivesk;
}
}