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