/* A Jatekos objektumnak van - azonositoja - nyert meccs szamlaloja - dontetlen meccs szamlaloja (egy az osszes objektumra) A Jatekos kepes - meccset kezdemenyezni - fogadni egy masik Jatekos kezdemenyezeset - kiirni a nyert meccsek szamat A Jatekos kommunikal - A partnerjatekossal */ class Jatekos { int jatekos_szama; int nyert_meccsek = 0; static int dontetlen_meccsek = 0; static int KO = 0; static int PAPIR = 1; static int OLLO = 2; Jatekos( int jsz ) { jatekos_szama = jsz; } // 0 - ko, 1 - papir, 2 - ollo int tipp() { double veletlen = Math.random()*3; // Megszorozzuk 3-mal, hogy a hatarertek // ne 0.3333 ... legyen, hanem 1 es 2 if( veletlen < 1 ) return KO; if( veletlen < 2 ) return PAPIR; return OLLO; } int MeccsetFogad( int kezdemenyezo_tipp ) { int sajat_tipp = tipp(); System.out.println( "Sajat tipp: "+sajat_tipp+" ellenfel tippje: "+kezdemenyezo_tipp ); // Az ollo (2) csak a ko (0) ellen veszit, ez az egyetlen helyzet, amikor // a nagyobb szamu fogadas veszit egy kisebb szamuval szemben. Ha ilyen eset // van, megvaltoztatjuk az ollo szamat -1-re, hogy az altalanos kiertekelo logika // mukodjon. if( ( kezdemenyezo_tipp == OLLO ) && ( sajat_tipp == KO ) ) kezdemenyezo_tipp = -1; if( ( kezdemenyezo_tipp == KO ) && ( sajat_tipp == OLLO ) ) sajat_tipp = -1; if( sajat_tipp == kezdemenyezo_tipp ) { ++dontetlen_meccsek; return 0; // Dontetlen } if( sajat_tipp < kezdemenyezo_tipp ) return 1; // A partner nyert ++nyert_meccsek; // Kulonben mi nyertunk return 0; } // Jatszik egy meccset egy ellenfellel. Megkapja az ellenfel referenciajat. void MeccsetJatszik( Jatekos ellenfel ) { nyert_meccsek = nyert_meccsek + ellenfel.MeccsetFogad( tipp() ); } void IrdKiANyertMeccseket() { System.out.println( jatekos_szama+". jatekos "+nyert_meccsek+" meccset nyert" ); } } /* A KoPapirOllo a Fogado osztaly neve */ public class KoPapirOllo2 { void Jatszma() { Jatekos j1 = new Jatekos( 1 ); Jatekos j2 = new Jatekos( 2 ); Jatekos j3 = new Jatekos( 3 ); for( int i = 0 ; i < 20 ; ++i ) { j1.MeccsetJatszik( j2 ); j2.MeccsetJatszik( j3 ); j3.MeccsetJatszik( j1 ); // Ezt ugyan nem kerte a feladat, de nyomkovetesnek hasznos j1.IrdKiANyertMeccseket(); j2.IrdKiANyertMeccseket(); j3.IrdKiANyertMeccseket(); } System.out.println( "-------------- Vegeredmeny --------------" ); j1.IrdKiANyertMeccseket(); j2.IrdKiANyertMeccseket(); j3.IrdKiANyertMeccseket(); System.out.println( "Dontetlen meccsek osszesen: "+Jatekos.dontetlen_meccsek ); } public static void main( String args[] ) { KoPapirOllo2 k = new KoPapirOllo2(); k.Jatszma(); } }