Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Podobné dokumenty
Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

První kapitola úvod do problematiky

Gymnázium Arabská. Hra Pexeso. ročníkový projekt předmět programování vyučující Tomáš Obdržálek autor Ondřej Novák školní rok 2013/2014

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Základy algoritmizace 4. Problémy, algoritmy, data

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Konstruktory a destruktory

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

KTE / ZPE Informační technologie

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Karty Prší. Anotace: Abstract: Gymnázium, Praha 6, Arabská 14 předmět Programování, vyučující Tomáš Obdržálek

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Mělká a hluboká kopie

Implementace LL(1) překladů

Programování v Pythonu

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Evoluční algoritmy. Podmínka zastavení počet iterací kvalita nejlepšího jedince v populaci změna kvality nejlepšího jedince mezi iteracemi

Konečný automat. Jan Kybic.

Více o konstruktorech a destruktorech

Chit Chat 2 - Lekce 1

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Návrh aplikace. Založeno na 9. kapitole knihy J. M. Zelle: Python Programming: An Introduction to Computer Science IB111

Spojový seznam. Jan Kybic.

Výukový materiál zpracovaný v rámci projektu EU peníze do škol. Test

Úvod do programovacích jazyků (Java)

II_ _Listening Pracovní list č. 2.doc II_ _Listening Pracovní list č. 3.doc II_ _Listening Řešení 1,2.doc

Úvodem... 9 Kapitola 1 Karetních

PRG036 Technologie XML

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

20. Projekt Domácí mediotéka

Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Příručka aplikace KNetWalk. Fela Winkelmolen Eugene Trounev

Postřehová hra. Zadání projektu. 1 Moje cíle

Programovací software Oblast režimů Oblast nástrojů Složka aplikací pro různé funkce: Oblast tlačítek Tlačítko Loading (Načítání)

IB111 Úvod do programování skrze Python Přednáška 7

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Gymnázium, Praha 6, Arabská 16. předmět Programování, vyučující Tomáš Obdržálek Lodě Dokumentace ročníkového projektu Martin Karlík, 1E 17.5.

Algoritmy a datové struktury

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Abstraktní datové typy FRONTA

Standardní algoritmy vyhledávací.

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Objekty, třídy, instance

Automatické testování softwaru. Testujte svůj kód! Předpoklady: Příklad: sum_digits() Možnost 1: Zkusíme funkci použít v konzoli Pythonu.

PROGRAMOVÁNÍ V C++ CVIČENÍ

Cvičení 1. Přednášející: Mgr. Rudolf B. Blažek, Ph.D. prof. RNDr. Roman Kotecký, DrSc.

Gymnázium, Praha 6, Arabská 14. předmět Programování, vyučující Tomáš Obdržálek. Počítačová hra Fotbalový Manažer. ročníkový projekt.

Úvod do programování - Java. Cvičení č.4

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Programování v C++ 2, 8. cvičení

Základy umělé inteligence

Operační systémy. Cvičení 4: Programování v C pod Unixem

Algoritmus. Algoritmus je posloupnost kroků, které jsou potřeba k vyřešení problému.

Programování v jazyce JavaScript

Programovací jazyk Pascal

Printris. Hra Printris je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

Herní engine. Co je Engine Hotové enginy Jemný úvod do game designu

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

Algoritmizace a programování

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Dynamické datové struktury III.

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

UPM3 Hybrid Návod na ovládání Čerpadlo UPM3 Hybrid 2-5 Instruction Manual UPM3 Hybrid Circulation Pump 6-9

Mission ctitical real time system

Programování v C++ 3, 3. cvičení

19. Projekt Adventura

Hraní her. (Teorie a algoritmy hraní her) Řešení úloh hraní her. Václav Matoušek /

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Programování v C++ 1, 5. cvičení

Hledání správné cesty

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

8 Třídy, objekty, metody, předávání argumentů metod

Sport, sportování a hry

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

Funkce, podmíněný příkaz if-else, příkaz cyklu for

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu


Čtečka otisků prstů 1. POPIS 2. SPECIFIKACE. ECLIPSERA s.r.o. Distributor pro ČR. VÝROBNÍ ČÍSLO

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Algoritmizace prostorových úloh

Programování v C++ 2, 7. cvičení

Úvod do programovacích jazyků (Java)

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Piškvorky. Gymnázium, Praha 6, Arabská 16. Kristofer Filip, 1.E. Květen Stránka 1. předmět programování, vyučující Tomáš Obdržálek

Příkazové skripty Procedurální jazyky Lua a ostatní

6 Příkazy řízení toku

V Dolních Břežanech dne 10. května 2014

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Rozklad problému na podproblémy

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

ČERV. Hra Červ je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

Transkript:

Kámen-nůžky-papír Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické Studijní program: Otevřená informatika 2017-10-10 18/10/17

než začneme dívka jménem Lenka doplňková cvičení, úterky 13:00-14:20, KN:E-220, kolega D. Mareda

Lenka - výsledky Odevzdaných řešení: 185 Syntakticky správně: 183 velkými písmeny: malými písmeny: Správná odpověď: 36 147 86

player 1 yes -> play again player 2 Rock-Paper-Scissors R P S draw? Rock-Paper-Scissors R P S no evaluate winner is

Vyšší level

Player Game Player run player 1 yes -> play again player 2 R P S play draw? play R P S no evaluate winner is

playerdummy.py obecná definice hráče 1 class MyPlayer: docstring - popis hráče/třídy 2 '''A very dummy player (always returns R)''' 3 4 def play(self): vždy vrať R 5 return 'R' 6 7 if name == " main ": 8 p = MyPlayer() # creating a player 9 print(p.play()) # showing what it plays vykonej, pokud je spuštěno jako hlavní program vytvoření konkrétního hráče podle vzoru konkrétní hráč hraje Co když potřebujeme chování hráče měnit?

playerdummyplus.py 1 class MyPlayer: 2 '''A dummy player on steroids''' 3 def init (self,answer='r'): 4 self.answer = answer 5 6 def play(self): 7 return self.answer 8 9 if name == " main ": 10 p1 = MyPlayer() # creating a default player 11 print(p1.play()) # showing what it plays 12 p2 = MyPlayer('P') # a better player? 13 print(p2.play()) # showing what it plays 14 # oops changed mind 15 p1.answer = 'S' 16 print(p1.play()) 17 konstruktor objektu přiřazení atributu objektu konkrétní hráč bude hrát tak, jak má předepsáno vlastnosti objektu mohu měnit podruhé už hraje jinak

krokujte, vizualizujte http://pythontutor.com/

playerdummyplusplus.py (dummy s pameti) 1 class MyPlayer: 2 '''A dummy player on steroids''' 3 def init (self,answer='r'): 4 self.answer = answer 5 self.history = [] 6 7 def play(self): 8 return self.answer 9 10 def record(self,move): 11 self.history.append(move) 12 13 if name == " main ": vytvoření prázdného seznamu přidej tah na konec seznamu append je metoda pro seznamy 14 p1 = MyPlayer() # creating a default player 15 print(p1.play()) # showing what it plays 16 p2 = MyPlayer('P') # a better player? 17 print(p2.play()) # showing what it plays 18 # oops changed mind 19 p1.answer = 'S' 20 print(p1.play()) 21 # just check the record function 22 p1.record('s') 23 print(p1.history) 24

Player Game Player run player 1 yes -> play again player 2 R P S play draw? play R P S no evaluate winner is

Jak hrát hru? p1 = Player p2 = Player draw = True while draw: move1 = p1.play move2 = p2.play draw = (move1 == move2) result = evaluate(move1,move2)

Třída Game 1 class Game: 2 def init (self,p1,p2): 3 self.p1 = p1 4 self.p2 = p2 5 self.winner = None 6 7 def run(self): 8 draw = True 9 while draw: Předání hráčů do hry 10 move1 = self.p1.play() 11 move2 = self.p2.play() 12 draw = (move1 == move2) 13 result = evaluate_moves([move1,move2]) 14 if result[0]>result[1]: 15 self.winner = self.p1 16 else: 17 self.winner = self.p2 Na začátku žádný vítěz není Dokud nehrají, tak je remíza a dokud je remíza, tak hrajte dál Porovnej tahy podle pravidel a přiřaď vítěze

porovnej tahy 1 def evaluate_moves(moves): 2 ''' 3 compares moves (plays) and decides about the winner 4 :param moves: 1x2 list of valid moves 5 :return: 1x2 list with points [1,0] or [0,1] 6 depending on who is winner 7 ''' 8 if moves in [['P','R'],['S','P'],['R','S']]: 9 return [1,0] 10 else: 11 return [0,1] 12 Paper > Rock, Scissors > Paper, Rock > Scissors

hlavní program game.py 1 import playertom 2 import playerdummy 3 10 tady patří class Game: a spol. 4 if name == " main ": 5 p1 = playertom.myplayer() 6 p2 = playerdummy.myplayer() 7 g = Game(p1,p2) 8 g.run() hraj importuj hráče z modulů - souborů playertom.py a playerdummy.py inicializuj hru, předej hráče 9 print('winner is:',g.winner. doc ) oznam vítěze vytvoř hráče

Pro pozdější analýzu výsledku, navrátíme index vítěze 1 class Game: 2 def init (self,p1,p2): 3 self.p1 = p1 4 self.p2 = p2 5 self.winner = None 6 7 def run(self): 8 draw = True 9 while draw: 10 move1 = self.p1.play() 11 move2 = self.p2.play() 12 draw = (move1 == move2) 13 result = evaluate_moves([move1,move2]) 14 if result[0]>result[1]: 15 self.winner = p1 16 return 0 17 else: 18 self.winner = p2 19 return 1 Návratová hodnota podle toho, kdo vyhrál

opakovaná hra 1 def compute_stats(winners): 2 wins = [0,0] počet výher každého hráče 3 for winner in winners: pro každého vítěze v seznamu 4 wins[winner] = wins[winner]+1 5 return wins 6 7 if name == " main ": 8 p1 = playertom.myplayer() 9 p2 = playerdummy.myplayer() 10 winners = [] inicializuj prázdný seznam 11 for i in range(10): 12 hraj 10x g = Game(p1,p2) 13 winners.append(g.run()) 14 print('winner is:',g.winner. doc ) 15 wins = compute_stats(winners) 16 print(p1. doc, 'won %d times'%wins[0]) 17 print(p2. doc, 'won %d times'%wins[1]) mohl bych inicializaci hry přesunout před cyklus pak bych ale musel doplnit vynulování self.winner i do těla metody run. Rozmyslete. přidej výsledek na konec seznamu analyzuj celkové výsledky

iterative game 48 class IterativeGame: 49 def init (self,p1,p2,runs=1): 50 57 self.runs = runs 58 self.p = [p1,p2] 59 self.profits = [0,0] 60 61 def run(self): 62 for k in range(self.runs): 63 draw = True 64 while draw: 65 moves = [None,None] # init moves 66 for i in range(2): 67 moves[i] = self.p[i].play() 68 if not(is_valid_move(moves[i])): 69 raise RuntimeError 71 draw = (moves[0] == moves[1]) 72 profit_increments = evaluate_moves(moves) 73 for i in range(2): 74 self.profits[i] += profit_increments[i] celkový výsledek hry bude v proměnné objektu