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

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

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

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

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

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

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

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ů

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

Úvodem... 9 Kapitola 1 Karetních

Konstruktory a destruktory

Implementace LL(1) překladů

Více o konstruktorech a destruktorech

Konečný automat. Jan Kybic.

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

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

Mělká a hluboká kopie

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.

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

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

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.

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

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

Úvod do programovacích jazyků (Java)

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

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

Programování v Pythonu

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

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

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

Algoritmizace prostorových úloh

20. Projekt Domácí mediotéka

Standardní algoritmy vyhledávací.

Chit Chat 2 - Lekce 1

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

Hledání správné cesty

PRG036 Technologie XML

Programování II. Návrh programu I 2018/19

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

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

Algoritmizace a programování

Spojový seznam. Jan Kybic.

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

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

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

Programovací jazyk Pascal

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

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

Algoritmy a datové struktury

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

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

Dynamické datové struktury III.

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

Základy umělé inteligence

2. Řešení úloh hraní her Hraní her (Teorie a algoritmy hraní her)

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

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

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

Algoritmizace prostorových úloh

Objekty, třídy, instance

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

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

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.

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

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

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

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

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

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

Algoritmizace. 1. Úvod. Algoritmus

Úvod do programovacích jazyků (Java)

Další nutný soubor je laydiv.js, ve kterém jsou uloženy funkce pro zobrazování virů na ploše a funkce pro odkaz na Teachers Guide.

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

6 Příkazy řízení toku

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

Mission ctitical real time system

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

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

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

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

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Abstraktní datové typy FRONTA

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

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

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

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

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

5. Vyhledávání a řazení 1

Úvod do teorie her ZVYŠOVÁNÍ ODBORNÝCH KOMPETENCÍ AKADEMICKÝCH PRACOVNÍKŮ OSTRAVSKÉ UNIVERZITY V OSTRAVĚ A SLEZSKÉ UNIVERZITY V OPAVĚ

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

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

ČTENÍ. M e t o d i c k é p o z n á m k y k z á k l a d o v é m u t e x t u :

11. Přehled prog. jazyků

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

19. Projekt Adventura

Programování v jazyce JavaScript

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

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 2018-10-09 08/10/18

než začneme dívka jménem Lenka doplňková cvičení, úterky 16:15-17:45, KN:E-220, kolega D. Mareda

Pokud všichni studenti zvolí pro svou odpověď velká písmena, dostane každý student ještě další jeden bod. Pokud bude odpověď alespoň jednoho studenta tvořena malými písmeny, všichni, kdo odpověděli velkými písmeny, nedostanou žádné další body a ti, kteří použili malá písmena, dostanou navíc jen 0.5 bodů. Volby jednotlivců nebudou zveřejněny. Výsledek se dozvíte opět později.

Lenka - výsledky Odevzdaných řešení: 185 Syntakticky správně: 182 Správná odpověď: 61 velkými písmeny: 40

Poznámka k programovacím úlohám nutná vlastní práce úlohy voleny tak, aby dovolily naprogramování vlastnímí silami zapomínací test https://cw.fel.cvut.cz/wiki/help/common/ plagiaty_opisovani

Kámen-nůžky-papír kódy budou po přednášce ke stažení velejemný úvod do objektů málokdy existuje jediné správné řešení vítame: bug-reports, doporučení ke zlepšení kódy v přednášce odpovídají starší verzi

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 score = evaluate_moves([move1,move2]) 14 if score[0]>score[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