2020. szeptember 8., kedd

Kitalálós játék jávanyelven

import java.awt.*;

/**
 * Kitalálós.java
 *  -   Applet,
 *  -   Implementálja az ActionListener interfészt.
 *
 *  Egyszerű kitalálósjáték. A cél az, hogy kitaláld a számítógép által
 * randomizált színkombinációt.
  */
public class Kitalalos extends java.applet.Applet implements java.awt.event.ActionListener {
    
    /**
     *  Globális változók deklarálása.
     */
    
    char[] r = new char[4];
    char[] m = new char[4];
    
    String eredm = "";
    int ssz = 0;
    int kör = 1;
    
    boolean nyert      = false;
    
    boolean pactivated = false;
    boolean kactivated = false;
    boolean sactivated = false;
    boolean zactivated = false;
    boolean factivated = false;
    
    Label l1;
    Label l1jo;
    Label l1rossz;
    
    Label l2;
    Label l2jo;
    Label l2rossz;
    
    Label l3;
    Label l3jo;
    Label l3rossz;
    
    Label l4;
    Label l4jo;
    Label l4rossz;
    
    Label l5;
    Label l5jo;
    Label l5rossz;
    
    Label l6;
    Label l6jo;
    Label l6rossz;
    
    Label lszöv;
    Label stres;
    
    Button piros;
    Button kék;
    Button zöld;
    Button sárga;
    Button fekete;
    
    Button új;
    
    /**
     *
     *  Inicializálás. Az applet böngészőbe való betöltése után hívódik meg.
     *
     *  Ez építi fel a felhasználói felületet, és "ráakasztja" magát a gombokra.
     *
     */
    public void init() {
        setLayout(new GridLayout(9,0));
        
        l1      = new Label("1.próba");
        l1jo    = new Label("Jó");
        l1rossz = new Label("Rossz");
        
        l2      = new Label("2.próba");
        l2jo    = new Label("Jó");
        l2rossz = new Label("Rossz");
        
        l3      = new Label("3.próba");
        l3jo    = new Label("Jó");
        l3rossz = new Label("Rossz");
        
        l4      = new Label("4.próba");
        l4jo    = new Label("Jó");
        l4rossz = new Label("Rossz");
        
        l5      = new Label("5.próba");
        l5jo    = new Label("Jó");
        l5rossz = new Label("Rossz");
        
        l6      = new Label("6.próba");
        l6jo    = new Label("Jó");
        l6rossz = new Label("Rossz");
        
        lszöv   = new Label("Eddigiek");
        stres   = new Label("");
        
        piros   = new Button("Piros");
        kék     = new Button("Kék");
        zöld    = new Button("Zöld");
        sárga   = new Button("Sárga");
        fekete  = new Button("Fekete");
    
        új      = new Button("Új");
        
        Panel s1 = new Panel();
        Panel s2 = new Panel();
        Panel s3 = new Panel();
        Panel s4 = new Panel();
        Panel s5 = new Panel();
        Panel s6 = new Panel();
        Panel s7 = new Panel();
        
        s1.setLayout(new GridLayout(0,2));
        s2.setLayout(new GridLayout(0,2));
        s3.setLayout(new GridLayout(0,2));
        s4.setLayout(new GridLayout(0,2));
        s5.setLayout(new GridLayout(0,2));
        s6.setLayout(new GridLayout(0,2));
        
        Panel s1jo = new Panel();
        Panel s2jo = new Panel();
        Panel s3jo = new Panel();
        Panel s4jo = new Panel();
        Panel s5jo = new Panel();
        Panel s6jo = new Panel();
        
        s1jo.setLayout(new GridLayout(0,2));
        s2jo.setLayout(new GridLayout(0,2));
        s3jo.setLayout(new GridLayout(0,2));
        s4jo.setLayout(new GridLayout(0,2));
        s5jo.setLayout(new GridLayout(0,2));
        s6jo.setLayout(new GridLayout(0,2));
        
        s1.add(l1);
        s1jo.add(l1jo);
        s1jo.add(l1rossz);
        s1.add(s1jo);
        add(s1);
        
        s2.add(l2);
        s2jo.add(l2jo);
        s2jo.add(l2rossz);
        s2.add(s2jo);
        add(s2);
        
        s3.add(l3);
        s3jo.add(l3jo);
        s3jo.add(l3rossz);
        s3.add(s3jo);
        add(s3);
        
        s4.add(l4);
        s4jo.add(l4jo);
        s4jo.add(l4rossz);
        s4.add(s4jo);
        add(s4);
        
        s5.add(l5);
        s5jo.add(l5jo);
        s5jo.add(l5rossz);
        s5.add(s5jo);
        add(s5);
        
        s6.add(l6);
        s6jo.add(l6jo);
        s6jo.add(l6rossz);
        s6.add(s6jo);
        add(s6);
        
        Panel kapcsolat = new Panel();
        kapcsolat.setLayout(new BorderLayout());
        kapcsolat.add(lszöv, BorderLayout.WEST);
        kapcsolat.add(stres, BorderLayout.CENTER);
        add(kapcsolat);
        
        Panel színek = new Panel();
        színek.add(piros);
        színek.add(kék);
        színek.add(zöld);
        színek.add(sárga);
        színek.add(fekete);
        add(színek);
        
        Panel opciógombok = new Panel();
        opciógombok.add(új);
        add(opciógombok);
        
        piros.addActionListener(this);
        kék.addActionListener(this);
        zöld.addActionListener(this);
        sárga.addActionListener(this);
        új.addActionListener(this);
        fekete.addActionListener(this);
        
        rejtvényKitalálása();
        
        setSize(300,400);
    }
    
    
    /**
     *
     *  Random számot alkot a megadott paraméterig bezárólag,
     *      azaz a 0...(meddig-1) intervallumon.
     *
     *  A rejtvény kitalálása metódusnál van rá szükség, egyszerűsíti a kódot.
     *
     */
    public int rszám(int meddig) {
        return ( (int)(meddig*Math.random())%meddig);
    }
    
    /**
     *
     *  Az init() metódus lefutása után, ill. az Új gomb lenyomása után hívódik meg.
     *
     *  Célja, hogy feltöltse a rejtvény 4 elemű tömbjét az rszám() fv. segítségével.
     *      Egy segédtömböt használ, amiben bennevannak a lehetséges értékek. Ebből szedegeti
     *      ki a lehetséges színeket, majd amit kiszedett, azt letörli a tömbből. A ciklus
     *      sajnos elég bonyolult lett...
     *
     */
    public void rejtvényKitalálása() {
        char[] st = new char[5];
        st[0] = 'P';
        st[1] = 'K';
        st[2] = 'Z';
        st[3] = 'S';
        st[4] = 'F';
        
        int stsize = 5;
        int akt;
        int hány = 4;
        while (hány != 0) {
            akt = rszám(stsize);
            r[4-hány]=st[akt];
            st[akt] = st[(stsize-1)];
            stsize--;
            hány--;
        }
    }
    
    /**
     *
     *  Ez a metódus végzi a címkék sorban történő helyes feltöltését.
     *
     *  Az adott sorban az első Label - t a 'mire' változóra változtatja, ami
     *    a felhasználó által beadott kombinációt reprezentálja.
     *
     *  A második Label - en feltünteti a jó helyzetű színek számát a 'mennyiJó()'
     *      fv. segítségével.
     *
     *  A harmadik Label - en feltünteti az eltalált színek számát a 'mennyiRossz()'
     *      fv. segítségével.
     *
     */
    public void megfelelőLabelreKiír() {
        
        String mire = new String( m[0] + " " + m[1] + " " + m[2] + " " + m[3] );
        
        switch (kör) {
            case 1 : l1.setText(mire);
                l1jo.setText( mennyiJó() );
                l1rossz.setText( mennyiRossz() );
                break;
                
            case 2 : l2.setText(mire);
                l2jo.setText( mennyiJó() );
                l2rossz.setText( mennyiRossz() );
                break;
                
            case 3 : l3.setText(mire);
                l3jo.setText( mennyiJó() );
                l3rossz.setText( mennyiRossz() );
                break;
                
            case 4 : l4.setText(mire);
                l4jo.setText( mennyiJó() );
                l4rossz.setText( mennyiRossz() );
                break;
            
            case 5 : l5.setText(mire);
                l5jo.setText( mennyiJó() );
                l5rossz.setText( mennyiRossz() );
                break;
            
            case 6 : l6.setText(mire);
                l6jo.setText( mennyiJó() );
                l6rossz.setText( mennyiRossz() );
                break;
            
        }
    }
    
    /**
     *
     *  Ez a metódus dönti el, hogy nyert-e már a felhasználó.
     *
     *  Beállítja a 'nyert' globális változó értékét is, és nyerés esetén kiírja
     *      a nyert feliratot is.
     *
     */
    public void nyertE() {
        nyert = ( Integer.parseInt(mennyiJó()) == 4 );
        if (nyert) stres.setText("NYERTÉL!!!");
    }
    
    /**
     *
     *  Ez a metódus jelzi a felhasználó felé, ha vesztett, ill. kiírja, hogy mi lett
     *      volna a megoldás.
     *
     */
    public void vesztettE() {
        if (kör >=7 && !(nyert)) stres.setText("Vesztettél! A mo. ez lett volna: " + 
            r[0] + r[1] + r[2] + r[3]);
    }
    
    /**
     *
     *  Ez a fv. visszaadja, hogy mennyi színt rakott a felhasználó a megfelelő helyre.
     *
     */
    public String mennyiJó() {
        int counter = 0;
        
        for (int i=0; i<=3; i++) {
            if (m[i] == r[i]) counter++;
        }
        
        return String.valueOf(counter);
    }
    
    /**
     *
     *  Ez a fv. visszaadja, hogy mennyi szín van meg a 4 kitalálandóból.
     *
     */
    public String mennyiRossz() {
        int counter = 0;
        
        for (int i=0; i<=3; i++) {
            for (int j=0; j<=3; j++) {
                if (m[i] == r[j]) counter++;
            }
        }
        
        return String.valueOf(counter);
    }
    
    /**
     *
     *  Ez a metódus hivatott a körönkénti változók visszaállítására.
     *      (4 lenyomott szín-gomb után hívódik meg)
     *
     */
    public void körvége() {
        pactivated = false;
        kactivated = false;
        zactivated = false;
        sactivated = false;
        factivated = false;
        megfelelőLabelreKiír();
        stres.setText("");
        nyertE();
        ssz = 0;
        kör++;
        vesztettE();
        eredm="";
    }
    
    /**
     *
     *  Az eseményfigyelő.
     *
     *      Szín-gombok(a 'körvége()' metódus segítségével) és az új gomb kezelése.
     */
    public void actionPerformed(java.awt.event.ActionEvent ae) {
        if (ae.getSource() == piros && kör<7 && !(nyert) && !(pactivated)) {
            pactivated = true;
            eredm += " piros,";
            stres.setText(eredm);
            m[ssz] = 'P';
            ssz++;
            if (ssz==4) {
                körvége();
            }
        } else if (ae.getSource() == kék && kör<7 && !(nyert) && !(kactivated)) {
            kactivated = true;
            eredm += " kék,";
            stres.setText(eredm);
            m[ssz] = 'K';
            ssz++;
            if (ssz==4) {
                körvége();
            }
        } else if (ae.getSource() == sárga && kör<7 && !(nyert) && !(sactivated)) {
            sactivated = true;
            eredm += " sárga,";
            stres.setText(eredm);
            m[ssz] = 'S';
            ssz++;
            if (ssz==4) {
                körvége();
            }
        } else if (ae.getSource() == zöld && kör<7 && !(nyert) && !(zactivated)) {
            zactivated = true;
            eredm += " zöld,";
            stres.setText(eredm);
            m[ssz] = 'Z';
            ssz++;
            if (ssz==4) {
                körvége();
            }
        }  else if (ae.getSource() == fekete && kör<7 && !(nyert) && !(factivated)) {
            factivated = true;
            eredm += " fekete,";
            stres.setText(eredm);
            m[ssz] = 'F';
            ssz++;
            if (ssz==4) {
                körvége();
            }
        } else if (ae.getSource() == új) {
            
            pactivated = false;
            kactivated = false;
            zactivated = false;
            sactivated = false;
            
            ssz = 0;
            stres.setText("");
            eredm = "";
            kör = 1;
            
            nyert = false;
            
            l1.setText("1.próba");
            l2.setText("2.próba");
            l3.setText("3.próba");
            l4.setText("4.próba");
            l5.setText("5.próba");
            l6.setText("6.próba");
            
            l1jo.setText("Jó");
            l2jo.setText("Jó");
            l3jo.setText("Jó");
            l4jo.setText("Jó");
            l5jo.setText("Jó");
            l6jo.setText("Jó");
            
            l1rossz.setText("Rossz");
            l2rossz.setText("Rossz");
            l3rossz.setText("Rossz");
            l4rossz.setText("Rossz");
            l5rossz.setText("Rossz");
            l6rossz.setText("Rossz");
            
            rejtvényKitalálása();
            
        }
        
    }
    
}


http://java2.uw.hu/

Nincsenek megjegyzések:

Megjegyzés küldése