/* A Jatekos objektumnak van - azonositoja - nyert meccs szamlaloja 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; 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 0; if( veletlen < 2 ) return 1; return 2; } 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 == 2 ) && ( sajat_tipp == 0 ) ) kezdemenyezo_tipp = -1; if( ( kezdemenyezo_tipp == 0 ) && ( sajat_tipp == 2 ) ) sajat_tipp = -1; if( sajat_tipp == kezdemenyezo_tipp ) 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 KoPapirOlloTomb { void Jatszma() { Jatekos j[] = new Jatekos[5]; // 5 referencia Jatekos egyedekre for( int i = 0 ; i < 5 ; ++i ) j[i] = new Jatekos( i+1 ); for( int i = 0 ; i < 20 ; ++i ) { for( int n = 0 ; n < 5 ; ++n ) { // Kivalasztja, kivel fog jatszani. Normalisan az eggyel nagyobb // indexu jatekossal jatszik, de az utolso a 0.-kal jatszik int partner = n + 1; if( partner >= 5 ) partner = 0; j[n].MeccsetJatszik( j[partner] ); } // Ezt ugyan nem kerte a feladat, de nyomkovetesnek hasznos for( int n = 0 ; n < 5 ; ++n ) j[n].IrdKiANyertMeccseket(); } System.out.println( "-------------- Vegeredmeny --------------" ); for( int n = 0 ; n < 5 ; ++n ) j[n].IrdKiANyertMeccseket(); } public static void main( String args[] ) { KoPapirOlloTomb k = new KoPapirOlloTomb(); k.Jatszma(); } }