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!