Órai feladat: Kő - papír - olló
Megoldandó feladat: egy három részből álló alkalmazást kell továbbfejleszteni / befejezni, Ami kő-papír olló versenyt szimulál.
A veresenyben tetszőleges számú játékos indul egy játékmester ellen. A játékosok beküldik a választott jelet a játékmesternek, és a játékmester is kiválasztja, hogy ő mit jelez vissza. A játékmester ezután visszaszól a játékosoknak, hogy vesztettek-e (ilyenkor kiesik a játékos) vagy döntetlen lett-e, esetleg nyert (ilyenkor a játékos folytathatja a mérkőzést.) A játékosok célja, hogy minél tovább játékban maradjanak!
Letöltés: Teams > General (Általános) > Files > Tananyagok > 7. Óra (Rock Paper Scissors)
A játék komponensei
A három modul
player- Az egyes játékos. Feladatai:- Kiválasztja, hogy mit mutat (kő, papír, olló)
- pipe-on (csövön) átküldi a
tournament-nek - signalra vár (jel).
SIGTERMesetén leáll,SIGUSR1esetén továbbindul
runtime- a nevezett játékosokat elindítja
forksegítségével - a játék végén pipe-on (csövön) kap statisztikát a játékról a
tournamentfelől, ezt kiírja egy paraméterként megadott file-ba.
- a nevezett játékosokat elindítja
tournament- Ez a komponens le van programozva
- Ez a komponens kapja meg a játékosok döntését, majd ez alapján jelet küld vissza a játékosoknak
Fordítás:
./compile.shlefordítja az összes forrásfile-t!- egy terminálban, előszőr a
runtime-ot el kell indítani - majd egy másik terminálban a
tournament/playermodult!
A gyakorlat felépítése
- Két csoportra bomlik a gyakorlat, egyik része a
runtimemásik aplayermodulon dolgozik. - Az óra utolsó 20 percében együtt átnézzük a megoldást.
További feladatok (szorgalmi, gyakorlás)
Exploit amivel a játékos tud nyerni
Van egy elvi hiba a
runtime.c-ben elrejtve, amit ha csak egy játékos (player) indul ellene, könnyen ki tud az használni. Ezt a hibát ha kihasználja, akkor mindig tud nyerni. Hogyan?
Továbbfejlesztés
Most a várakozás a
runtime.c-ben hagyományossleep-el van megoldva. Ez nem jó megoldás abban az esetben, ha sok játékos van (több száz), vagy a számítógép lassú. Jobb megoldás lennepoll-ra áttérni. Implementáld a javítást!
Exploit amivel a runtime nyer
Most nem csal a
runtime.c, random választ mindig jelet. Módosísd a kiválasztást úgy, hogy mindig olyan jelet választ, amelyikkel a legtöbbet nyer!