Wywoływanie funkcji - nie działa.

0

Cześć, kilka miesięcy temu zacząłem swoją przygodę z programowaniem i pythonem.
Problem dotyczy mojego pierwszego samodzielnego projektu, gry w oczko według zasad stosowanych w moim domu^^.

Otóż w wersie 90.:


            print u"Liczba punktów GRACZA 1: %d." % player1.punkty_gracza
            print u"Liczba punktów GRACZA 2: %d.\n" % player2.punkty_gracza
            self.sprawdzanie(gracz1, gracz2)  # nie działa

            tura += 1

wzywam funkcję 'sprawdzanie' odpowiedzialną za sprawdzanie wyników w przypadku oczka/perskiego oczka - i tu jest problem, bo funkcja nigdy się nie aktywuje.

Dla ułatwienia ograniczyłem wielkość talii kart, żeby w każdej grze problem był widoczny już pod koniec drugiej tury.


#-*- coding: utf-8 -*-

from random import *
from sys import exit

deck = [(u'dziesiątka kier', 10), (u'dziesiątka pik', 10),  (u'dziesiątka karo', 10), (u'dziesiątka trefl', 10),
            ('as kier', 11), ('as pik', 11), ('as karo', 11), ('as trefl', 11)]

shuffle(deck)


class Rozgrywka(object):

    ''' class for opening of the game '''

    def granie(self):

        print u"\nROZPOCZNIJMY GRĘ!"
        print u"\nBy gra była fair należy rozegrać mecz i rewanż (lub parzystą liczbę gier),"
        print u"zmieniając się za każdym razem numerem gracza.\n"
        print u"Po ustaleniu kolejności graczy wcisnąć ENTER.\n"
        readyness = raw_input('Gotowi? ') 
        gra = Gra()
        gra.pierwsze_rozdanie(gracz1, gracz2)


class Gra(object):

    def pierwsze_rozdanie(self, player1, player2):

        ''' first deal '''

        print "*-" * 10
        print "Tura 1"
        print "*-" * 10
        print u"\nKażdy z graczy otrzymuje po jednej karcie."
                        
        gracz1.pick_card(deck)
        gracz2.pick_card(deck)

        print u"Liczba punktów GRACZA 1:", gracz1.punkty_gracza
        print u"Liczba punktów GRACZA 2:", gracz2.punkty_gracza
        print u"Wciśnij ENTER, aby przejść dalej."
        klawisz = raw_input('>>> ')
        self.kolejne_rozdania(gracz1, gracz2)

    def kolejne_rozdania(self, player1, player2):

        """ every next deal """

        tura = 2

        while True:
            print "*-" * 10
            print "Tura %d" % tura
            print "*-" * 10
            print "\n"

            if player1.pasowanie == False and player2.pasowanie == False:
                player1.players_turn(gracz2)
                player2.players_turn(gracz1)

            elif player1.pasowanie == True and player2.pasowanie == False:
                print u"GRACZ 1 spasował."
                player2.players_turn(gracz1)

            elif player1.pasowanie == False and player2.pasowanie == True:
                print u"GRACZ 2 spasował."
                player1.players_turn(gracz2)

            else:
                print u"Obu graczy spasowało."
                self.sprawdzanie_koncowe(gracz1, gracz2)

            print "-" * 20
            print "KONIEC TURY nr %d." % tura
            print u"Liczba punktów GRACZA 1: %d." % player1.punkty_gracza
            print u"Liczba punktów GRACZA 2: %d.\n" % player2.punkty_gracza
            self.sprawdzanie(gracz1, gracz2)  # nie działa

            tura += 1

    def sprawdzanie(self, player1, player2):

        """ scores checking """

        if player1.punkty_gracza == 21 and len(player1.karty_zebrane) == 2:
            print "GRACZ 1 ma OCZKO!"
            print u"Zwycięża GRACZ 1!!!"
            print "KONIEC."
            exit(0)

        elif player2.punkty_gracza == 21 and len(player2.karty_zebrane) == 2:
            print "GRACZ 2 ma OCZKO!"
            print u"Zwycięża GRACZ 2!!!"
            print "KONIEC."
            exit(0)

        elif player1.punkty_gracza == 21 and len(player1.karty_zebrane) == 2 and \
            player2.punkty_gracza == 21 and len(player2.karty_zebrane) == 2:
            print "Obu graczy ma OCZKO!"
            print "REMIS."
            print "KONIEC."
            exit(0)

        elif player1.punkty_gracza == 22 and len(player1.karty_zebrane) == 2 and \
            player2.punkty_gracza == 22 and len(player2.karty_zebrane) == 2:
            print "Obu graczy ma PERSKIE OCZKO! WOW!"
            print "REMIS."
            print "KONIEC."
            exit(0)

        elif player1.punkty_gracza == 22 and len(player1.karty_zebrane) == 2:
            print "GRACZ 1 ma PERSKIE OCZKO!"
            print u"Zwycięża GRACZ 1!!!"
            print "KONIEC."
            exit(0)

        elif player2.punkty_gracza == 22 and len(player2.karty_zebrane) == 2:
            print "GRACZ 2 ma PERSKIE OCZKO!"
            print u"Zwycięża GRACZ 2!!!"
            print "KONIEC."
            exit(0)

    def sprawdzanie_koncowe(self, player1, player2):

        """ scores checking in case of both players passing their turns """

        if player1.punkty_gracza > player2.punkty_gracza:
            print u"GRACZ 1 ma więcej punktów niż GRACZ 2."
            print u"Zwycięża GRACZ 1!!!"
            print "KONIEC."
            exit(0)
            
        elif player2.punkty_gracza > player1.punkty_gracza:
            print u"GRACZ 2 ma więcej punktów niż GRACZ 1."
            print u"Zwycięża GRACZ 2!!!"
            print "KONIEC."
            exit(0)

        elif player1.punkty_gracza == player2.punkty_gracza:
            print u"Obu graczy ma taką samą ilość punktów!"
            print "REMIS."
            print "KONIEC."
            exit(0)


class Player(object):

    ''' class for player '''

    punkty_gracza = 0
    karty_zebrane = []
    pasowanie = False

    def __init__(self, name):
        self.name = name

    def pick_card(self, deck):

        num = randrange(0, len(deck)-1)
        card = deck[num]
        deck.remove(card)
        print "%s otrzymuje: %s." % (self.name, card[0])
        self.punkty_gracza += card[1]
        self.karty_zebrane.append(card)

    def players_turn(self, player2):

        """ defines player's turn, second argument should be a second player """

        print u"Akcja należy do: %s." % self.name
        print "1) Dobranie karty."
        print "2) Pass."
        print "Wpisz numer akcji:"

        akcja = raw_input('>>> ')

        try:
            input = int(akcja)
        except ValueError:
            print "NUMER, ciemniaku!"

        if input == 1:
            self.pick_card(deck)
                
            if self.punkty_gracza > 22:
                print u"%s ma %d punktów - 'fura'! PRZEGRYWA." % (self.name, self.punkty_gracza)
                print u"%s zwycięża, mając %d punkty!" % (player2.name, player2.punkty_gracza)
                exit(0)

        elif input == 2:
            print "%s pasuje." % self.name
            self.pasowanie = True

        print "%s - koniec akcji." % self.name
        print u"Wciśnij ENTER, aby przejść dalej."
        klawisz = raw_input('>>> ')


gracz1 = Player("GRACZ 1")
gracz2 = Player("GRACZ 2")
mecz = Rozgrywka()
mecz.granie()

Proszę o pomoc. Dzięki!

1

na rzecz jakich obiektow ta linijka jest wywolana?

        gra.pierwsze_rozdanie(gracz1, gracz2)

bo jezeli powiesz ze tych na dole gracz1, gracz2 to jestes w bledzie ;)

0
  1. Nie używaj zmiennych globalnych!
  2. Zapnij się debugerem i zobacz jak przechodzi program krok po kroku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1