Informatika gyűjtemény

Egy szinttel feljebb ep_klickety.java

2004050607080910

NézetNyomtat

ep_klickety.java (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 4 KB
import java.util.*;
import java.io.*;

class Palya {
    int sordb = 16;
    int oszlopdb = 10;  // Méretek
    int[][] tabla;      // A játéktér 
    int ls, lo;         // A következő lépés pozíciója
    BufferedReader bemenet = 
    new BufferedReader(new InputStreamReader(System.in));
    // Ilyen egyzerű billentyűzetről beolvasni Javában... :-)
    

    public Palya(){
        tabla = new int[sordb][oszlopdb];
        Random rnd = new Random();
        for(int i=0; i<sordb; i++){
            for(int j=0; j<oszlopdb; j++){
                tabla[i][j] = rnd.nextInt(5)+1;
            }
        }
    } // Palya

    public Palya(int ms, int mo){
        sordb = ms;
        oszlopdb = mo;
        tabla = new int[sordb][oszlopdb];
        Random rnd = new Random();
        for(int i=0; i<sordb; i++){
            for(int j=0; j<oszlopdb; j++){
                tabla[i][j] = rnd.nextInt(5)+1;
            }
        }
    } // Palya(s,o)

    public void ki(){
        System.out.println("A játék állása: ");
        System.out.println();
        System.out.println("   0123456789");
        System.out.println("   ----------");
        for(int i=0; i<sordb; i++){
            String ind = Integer.toString(i);
            if(ind.length()==1) ind = " "+ind;
            System.out.print(ind+"|");
            for(int j=0; j<oszlopdb; j++){
                if(tabla[i][j] > 0){
                    System.out.print(tabla[i][j]);
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    } // ki

    public boolean vanlepes(){
        String s;
        String[] koord;
        
        do{
            System.out.print("x y = ");
            try{
                s = bemenet.readLine();
                if(s.length() == 0) return false;
                koord = s.split("\\s");
                ls = Integer.parseInt(koord[0]);
                lo = Integer.parseInt(koord[1]);

            }
            catch(IOException e){
                System.out.println("Input hiba");
                System.exit(1);
            }
        }
        while (ls < 0 || lo < 0 || ls >= sordb || lo >= oszlopdb);
        return true;
    } // vanlepes

    public boolean tartomany(int i, int j){
        int szin = tabla[i][j];
        int db = 0;
        if(szin != 0){
        if (- 1 >= 0 && tabla[- 1][j] == szin) db++;
        if (+ 1 < sordb && tabla[+ 1][j] == szin) db++;
        if (- 1 >= 0 && tabla[i][- 1] == szin) db++;
        if (+ 1 < oszlopdb && tabla[i][+ 1] == szin) db++;
        }   
        return (db > 0);
    } // tartomany


    public boolean lehet_lepni(){
        for(int i=0; i < sordb; i++){
        for(int j=0; j<oszlopdb; j++){
            if(tartomany(i,j)){
            return true;
            }
        }
        }
        return false;
    } // lehet_lepni


    public void lepes(){
        if( tartomany(ls,lo)){
            int sz = tabla[ls][lo];
            kijelol(ls,lo,sz);
            potyogtat();
            eltol();
        }
    } // lepes

    private void kijelol(int sor, int oszlop, int szin){
        tabla[sor][oszlop] = 0;
        if (sor - 1 >= 0 && tabla[sor - 1][oszlop] == szin) kijelol(sor-1,oszlop,szin);
        if (sor + 1 < sordb && tabla[sor + 1][oszlop] == szin) kijelol(sor+1,oszlop,szin);
        if (oszlop - 1 >= 0 && tabla[sor][oszlop - 1] == szin) kijelol(sor,oszlop-1,szin);
        if (oszlop + 1 < oszlopdb && tabla[sor][oszlop + 1] == szin) kijelol(sor,oszlop+1,szin);
    } // kijelol

    private void le(int oszlop){
        int db = 0;
        for(int j = sordb-1;j>=0;j--){
            if(tabla[j][oszlop]>0){
            if(db >0){
                tabla[j+db][oszlop]=tabla[j][oszlop];
                tabla[j][oszlop]=0;
            }
            } else {
            db++;
            }
        }
    } // le

    private void potyogtat(){
        for(int i = 0; i < oszlopdb; i++){
            le(i);
        }
    } // potyogtat

    private void bal(int ol,int db){
        for(int i=0; i<sordb; i++){
            tabla[i][ol-db] = tabla[i][ol];
            tabla[i][ol] = 0;
        }
    } // bal

    private void eltol(){
        int ures = 0;
        for(int ol = 0; ol < oszlopdb; ol++){
            if(tabla[sordb-1][ol]>0){
                if(ures > 0){
                bal(ol,ures);
                }
            } else {
                ures++;
            }
        }
    } // eltol

    public void eredmeny(){
        int marad = 0;
        for(int i = 0; i < sordb; i++){
        for(int j = 0; j < oszlopdb; j++){
            if(tabla[i][j] != 0){
            marad++;
            }
        }
        }
        System.out.println("Vége a játéknak,");
        System.out.println(marad+" négyzet maradt a táblán.");
    } // eredmeny

}

public class Klickety{
    public static void main(String[] args) throws IOException{
        Palya p;

        if(args.length == 2){
            int ms = Integer.parseInt(args[0]);
            int mo = Integer.parseInt(args[1]);
            p = new Palya(ms,mo);
        } else {
            p = new Palya();
        }    
        
        p.ki();
        while(p.lehet_lepni()){
            if(p.vanlepes()){
            p.lepes();
            p.ki();
            }
            else {
            break;
            }
        }
        p.eredmeny();
    }
}
(Vissza)