Rada se hrou - házení kostkou – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Rada se hrou - házení kostkou – Python – Fórum – Programujte.comRada se hrou - házení kostkou – Python – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Milhaus
~ Anonymní uživatel
4 příspěvky
9. 10. 2011   #1
-
0
-

Dobrý den,

patřím k programátorům začátečníkům (lamám) a nevím si rady s jednou věcí do školy. Mám za úkol naprogramovat "hru", ve které se simuluje náhodný hod kostkou a podle toho se posouváme po herním poli. Na poli velikosti N se musíme dostat do cíle, přičemž se musíme trefit přesně do finálního pole, nelze jej přeskočit. Samozřejmě když padne 6, tak házíme znovu.

Něco málo jsem již napsat dokázal, ale nefunguje mi to tak, jak bych si představoval. Určitě mám někde chybu v postupu, jen nevím kde. A dost pravděpodobně mi něco chybí. Možná to někomu bude připadat směšně jednoduché, ale programuji teprve 3 týdny.

# tady mám náhodný hod hrací kostkou, vrátí mi vždy jednu hodnotu od 1 do 6, přičemž výpis print x pro mě není zvlášť důležitý, proto jsem ho na konci umazal

def hod():
    for i in range(1):
        x = randint(1,6)

a tady něco málo, co jsem splácal, dost jsem se inspiroval dalšími úkoly, co jsme dělali na cvičení, ale nestačilo to, nefunguje...chybí mi tu nějaké řešení situace, že padne 6...nicméně toho chybí asi více, ale už několikátý den nejsem schopen nic vymyslet

def hra(velikost):
    pozice = 0
    kolo = 1
    hod()
    while pozice <= velikost:
        print "V", kolo, "kole padlo", hod(), ",jste na", pozice, "pozici."
        if hod() == 1: pozice +=1
        elif hod() == 2: pozice +=2
        elif hod() == 3: pozice +=3
        elif hod() == 4: pozice +=4
        elif hod() == 5: pozice +=5
        else:
            pozice +=6
        kolo +=1
       
    print "Hra dokoncena v", kolo,"kole."

Pokud by někdo ochotný měl nápad, jak pokročit, uvítám každou radu, inspiraci. Díky moc všem za nápady, návrhy :)

Nahlásit jako SPAM
IP: 90.178.30.–
m->29+6
Super člen
9. 10. 2011   #2
-
0
-

A prečo máš vo funkcii hod cyklus? Stačí ti predsa jedno číslo, nie? A x je globálna premenná? Lepšie je z funkcie hodnotu vrátiť. Tak ju aj používaš.  

def hod():
  return randint(1,6)

Potom, ak zavoláš funkciu hod, tak by bolo fajn si jej výsledok uložiť. Pretože ak ju zavoláš znovu tak ti to vráti zase iné číslo. 

def hra(velikost):
     pozice = 0
     kolo = 1
     while pozice <= velikost:
         hodene_cislo = hod()
         print "V", kolo, "kole padlo", hodene_cislo, ",jste na", pozice, "pozici."
         if hodene_cislo == 1: pozice +=1
         elif hodene_cislo == 2: pozice +=2
         elif hodene_cislo == 3: pozice +=3
         elif hodene_cislo == 4: pozice +=4
         elif hodene_cislo == 5: pozice +=5
         else: pozice +=6
         kolo +=1
        
     print "Hra dokoncena v", kolo,"kole."

No a nakoniec by som sa zamyslel nad tou sériou ifov, kde kontoluješ aké je hodene_cislo a následne pričítaš rovnakú hodnotu do premennej pozice. To by sa dalo zjednodušiť na jediný príkaz, čo myslíš? ;-)


Nahlásit jako SPAM
IP: 83.240.51.–
Milhaus
~ Anonymní uživatel
4 příspěvky
9. 10. 2011   #3
-
0
-

#2 m->29
To s tím returnem mě nenapadlo, slepě jsem se řídil řešením z předchozích příkladů, nenapadlo mě, že to jde tak jednoduše.

Ten algoritmus jsem, doufám, vhodně upravil. Kromě záležitosti s šestkou, ale to nechám na později. Tady mám výsledek:

def hra(velikost):
    pozice = 0
    kolo = 1
    while pozice <= velikost:
        hozene_cislo = hod()
        print "V", kolo, "kole padlo", hozene_cislo, ",jste na", "pozici", pozice + hozene_cislo
        if hozene_cislo == hozene_cislo : pozice += hozene_cislo

       
        kolo +=1
       
    print "Hra dokoncena v", kolo,"kole."

To s tou řadou ifů bylo dosti selhání, snad je to takhle dobře definované. Nicméně to neposlouchá tak, jak by mělo:

hra(20)

V 1 kole padlo 2 ,jste na pozici 2
V 2 kole padlo 3 ,jste na pozici 5
V 3 kole padlo 5 ,jste na pozici 10
V 4 kole padlo 3 ,jste na pozici 13
V 5 kole padlo 5 ,jste na pozici 18
V 6 kole padlo 1 ,jste na pozici 19
V 7 kole padlo 6 ,jste na pozici 25
Hra dokoncena v 7 kole.

Tudíž kromě toho, že to neřeší tu šestku (není podstatné zatím), si to samolibě přeskakuje hodnotu (velikost). Použitý cyklus while se shoduje s tvým návrhem, nevím jak ho zarazit, aby nepřekročil stanovenou hranici a zároveň začal nový pokus do doby, než se trefí...

Nahlásit jako SPAM
IP: 90.178.30.–
m->29+6
Super člen
9. 10. 2011   #4
-
0
-

A na čo tam máš tú podmienku? 

if hozene_cislo == hozene_cislo: ...

Myslíš, že niekedy bude aj False?

Čo sa týka toho preskočenia tak to je predsa tým, že pričítaš číslo. Myslím, že nie je problém detekovať kedy sa po pričítaní hodu preskočí cieľ a zariadiť sa tak ako chceš. Neviem čo chceš vtedy robiť.

A to s tým hodom znovu po 6 je jednoduché. Nezapočítaš pri nej kolo.

PS: zdrojové kódy vkladaj kam patria. Je na to v nástrojovej lište ikonka <?.

Nahlásit jako SPAM
IP: 83.240.51.–
Milhaus
~ Anonymní uživatel
4 příspěvky
9. 10. 2011   #5
-
0
-

#4 m->29

To s tou podmínkou upraveno, ačkoliv to fungovalo, moc smysl to nedávalo, napsal jsem to mnohem jednodušeji a logičtěji.

S tou šestkou moc děkuji, nezapočítat kolo by mě nenapadlo.

Samozřejmě, že když :

if pozice > velikost:..

tak jsem tam, kde jsem být nechtěl, ale nevím, jak to opravit.

* Hra končí, když dorazíme na poslední pole. Je nutné se trefit přesně na
poslední pole (pokud se netrefíme, tak figurka stojí).

Takhle přesně zní zadání. Napadlo mě už odečíst hozene_cislo a vrátit na hodnotu před překročením velikosti, nebo zavolat znovu funkci hod() (házet znovu), ale ať dělám co dělám, nedaří se mi toho dosáhnout.

Nahlásit jako SPAM
IP: 90.178.30.–
m->29+6
Super člen
9. 10. 2011   #6
-
+2
-
Zajímavé

S tým zastavením si na dobrej ceste. V podstate si to povedal. Viac k tomu netreba ;-) Už to len napísať v jazyku počítača :-)

Nahlásit jako SPAM
IP: 83.240.51.–
9. 10. 2011   #7
-
0
-

Uvidíme, co s tím vymyslím. Každopádně díky moc za rady, moc jsi mi pomohl ;)

Nahlásit jako SPAM
IP: 90.178.30.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý