Форум сайта python.su
Ссылку убрал.
Отредактировано Yuri197 (Март 26, 2019 12:41:18)
Офлайн
Найдены следующие недочёты:
1) Карты никак не масштабируются к размеру окна.
2) Козыри должны находится в конце списка карт.
3) Действие “Взять” и “Отбой” назначены на разные кнопки, хотя логичнее назначить их на одну.
4) Код плохо декомпозирован по этому в нём ужас. Например:
# По последней карте в списке определяется # козырная масть. Так как последняя карта ложится # на "стол" и должна быть выдана игрокам последней, # то важно определить козырную масть именно по ней. if list_cards[35] == "ace_of_diamonds": self.name_image_trump_card = "img_ace_of_diamonds" self.trump = 1 if list_cards[35] == "king_of_diamonds": self.name_image_trump_card = "img_king_of_diamonds" self.trump = 1 if list_cards[35] == "queen_of_diamonds": self.name_image_trump_card = "img_queen_of_diamonds" self.trump = 1 if list_cards[35] == "jack_of_diamonds": self.name_image_trump_card = "img_jack_of_diamonds" self.trump = 1 if list_cards[35] == "ten_of_diamonds": self.name_image_trump_card = "img_ten_of_diamonds" self.trump = 1 if list_cards[35] == "nine_of_diamonds": self.name_image_trump_card = "img_nine_of_diamonds" self.trump = 1 if list_cards[35] == "eight_of_diamonds": self.name_image_trump_card = "img_eight_of_diamonds" self.trump = 1 if list_cards[35] == "seven_of_diamonds": self.name_image_trump_card = "img_seven_of_diamonds" self.trump = 1 if list_cards[35] == "six_of_diamonds": self.name_image_trump_card = "img_six_of_diamonds" self.trump = 1 if list_cards[35] == "ace_of_hearts": self.name_image_trump_card = "img_ace_of_hearts" self.trump = 2 if list_cards[35] == "king_of_hearts": self.name_image_trump_card = "img_king_of_hearts" self.trump = 2 if list_cards[35] == "queen_of_hearts": self.name_image_trump_card = "img_queen_of_hearts" self.trump = 2 if list_cards[35] == "jack_of_hearts": self.name_image_trump_card = "img_jack_of_hearts" self.trump = 2 if list_cards[35] == "ten_of_hearts": self.name_image_trump_card = "img_ten_of_hearts" self.trump = 2 if list_cards[35] == "nine_of_hearts": self.name_image_trump_card = "img_nine_of_hearts" self.trump = 2 if list_cards[35] == "eight_of_hearts": self.name_image_trump_card = "img_eight_of_hearts" self.trump = 2 if list_cards[35] == "seven_of_hearts": self.name_image_trump_card = "img_seven_of_hearts" self.trump = 2 if list_cards[35] == "six_of_hearts": self.name_image_trump_card = "img_six_of_hearts" self.trump = 2 if list_cards[35] == "ace_of_spades": self.name_image_trump_card = "img_ace_of_spades" self.trump = 3 if list_cards[35] == "king_of_spades": self.name_image_trump_card = "img_king_of_spades" self.trump = 3 if list_cards[35] == "queen_of_spades": self.name_image_trump_card = "img_queen_of_spades" self.trump = 3 if list_cards[35] == "jack_of_spades": self.name_image_trump_card = "img_jack_of_spades" self.trump = 3 if list_cards[35] == "ten_of_spades": self.name_image_trump_card = "img_ten_of_spades" self.trump = 3 if list_cards[35] == "nine_of_spades": self.name_image_trump_card = "img_nine_of_spades" self.trump = 3 if list_cards[35] == "eight_of_spades": self.name_image_trump_card = "img_eight_of_spades" self.trump = 3 if list_cards[35] == "seven_of_spades": self.name_image_trump_card = "img_seven_of_spades" self.trump = 3 if list_cards[35] == "six_of_spades": self.name_image_trump_card = "img_six_of_spades" self.trump = 3 if list_cards[35] == "ace_of_clubs": self.name_image_trump_card = "img_ace_of_clubs" self.trump = 4 if list_cards[35] == "king_of_clubs": self.name_image_trump_card = "img_king_of_clubs" self.trump = 4 if list_cards[35] == "queen_of_clubs": self.name_image_trump_card = "img_queen_of_clubs" self.trump = 4 if list_cards[35] == "jack_of_clubs": self.name_image_trump_card = "img_jack_of_clubs" self.trump = 4 if list_cards[35] == "ten_of_clubs": self.name_image_trump_card = "img_ten_of_clubs" self.trump = 4 if list_cards[35] == "nine_of_clubs": self.name_image_trump_card = "img_nine_of_clubs" self.trump = 4 if list_cards[35] == "eight_of_clubs": self.name_image_trump_card = "img_eight_of_clubs" self.trump = 4 if list_cards[35] == "seven_of_clubs": self.name_image_trump_card = "img_seven_of_clubs" self.trump = 4 if list_cards[35] == "six_of_clubs": self.name_image_trump_card = "img_six_of_clubs" self.trump = 4
Офлайн
RodegastЕсть такая заморочка. Но чтобы масштабировать растровые изображение, для проверки нужно иметь большой монитор (а лучше несколько разных), чтобы уменьшать изначально большие исходники изображения к малым размерам, и сохранить достаточно качественные изображения. На данный момент у меня такого монитора нет. Когда технические возможности появятся, тогда возможно над этим подумаю.
1) Карты никак не масштабируются к размеру окна.
2) Козыри должны находится в конце списка карт.Если вы о сортировке карт человека, о том, как они отображаются на экране, то это от привычек человека зависит.
3) Действие “Взять” и “Отбой” назначены на разные кнопки, хотя логичнее назначить их на одну.Над этим подумаю.
4) Код плохо декомпозирован по этому в нём ужас.Вот это не понял. Что такое “декомпозирован”? Если вы о большом количестве условий, то изначально идея была в том, чтобы каждая карта знала обо всех других - чтобы в любой момент игры опросить саму карту о другой карте. Это автоматически подразумевает описание каждой карты по отдельности, а их 36. И избавляет от ненужной путаницы в дальнейшем.
Отредактировано Yuri197 (Март 25, 2019 12:50:54)
Офлайн
Yuri197имеется ввиду, что не плохо бы что каждая карта имела, например, два атрибута: масть и величину, тогда бы вы вместо 36 условий сделали всего одну операцию:
Если вы о большом количестве условий, то изначально идея была в том, чтобы каждая карта знала обо всех других - чтобы в любой момент игры опросить саму карту о другой карте
self.trump = list_cards[35].suite()
self.name_image_trump_card = 'img_{}'.format(list_cards[35]) suits = {'diamonds':1, 'hearts':2, 'spades':3, 'clubs':4} for suit in suits: if suit in list_cards[35]: self.trump = suits[suit] break
[code python][/code]
Отредактировано PEHDOM (Март 25, 2019 13:14:40)
Офлайн
> Если вы о сортировке карт человека, о том, как они отображаются на экране, то это от привычек человека зависит.
Значит нужно какую-то настройку сделать.
> Что такое “декомпозирован”?
Декомпозиция это в первую очередь правильное разбиение твоей программы на объекты. При правильной декомпозиции файл manage_cards.py должен был выглядеть как-то так:
import random MASTI = ("trefa", "pika", "bubna", "chervi") class Karta(): kozir = None @classmethod def setKozir(cls, mast): # Устанавливает козырную масть cls.kozir = mast def __init__(self, value=6, mast="trefa"): self.value = value self.mast = mast def __gt__(self, obj): if isinstance(obj, Karta): if self.kozir == self.mast: if not self.kozir == obj.mast: return True elif not self.mast == obj.mast: raise ValueError() return self.value > obj.value raise TypeError(obj) def __repr__(self): return "%s - %i" % (self.mast, self.value) class Koloda(list): name = "atlas" # Наименование колоды, полезно для переключения внешнего вида def __init__(self): for x in (6,7,8,9,10,11,12,13,14): for y in MASTI: self.append(Karta(x, y)) def tasovka(self): # Тасуем колоду и устанавливаем козырнуюмасть, т.к. карты забираются с конца списка, то козырем будет первая карта random.shuffle(self) Karta.setKozir(kolod[0]) def vidat(self, value=6): s = [] for x in range(value): s.append(self.pop()) return s
Отредактировано Rodegast (Март 25, 2019 15:40:59)
Офлайн
RodegastЕсли бы идея была бы плохой, то очевидно она не работала бы на практике, а она работает. И вполне себе быстро работает. И более того, именно на этой идее моя реализации игры и построена. Если принять за основу другую идею, то придется переписать вообще весь код. Возможно реализация громоздкая, над этим буду думать.
Это плохая идея.
Отредактировано Yuri197 (Март 25, 2019 17:00:29)
Офлайн
Yuri197А вы, собственно, зачем ваше поделие здесь разместили? Я полагал, что вы рассчитывали на конструктивную критику вашего учебного проекта, а вы, оказывается, думаете что ваши каляки-маляки - это взрослое полезное приложение которым кто-то будет пользоваться. Серьезно? Юрий, это даже не смешно.
Но, как говорится, не нравится, не пользуйся - я нигде никого не принуждал.
Офлайн
> Если бы идея была бы плохой, то очевидно она не работала бы на практике, а она работает
На практике у тебя каждая карта содержит информацию о том какая карта сможет её “побить”. А в моём примере всё намного лучше:
>>> k1 = Karta(6, "pika") >>> k2 = Karta(10, "pika") >>> print(k1 > k2) False # Шестерка не может побить десятку >>> print(k1 < k2) True # Десятка может побить шестёрку
Отредактировано Rodegast (Март 26, 2019 10:40:28)
Офлайн
RodegastПлохо, что ты с одного раза не можешь догадаться, что мне повелители нахрен не нужны! Хочешь писать лучше? Вперед и с песней!
Хорошо что ты сам об этом догадался.
Отредактировано Yuri197 (Март 26, 2019 12:32:21)
Офлайн