Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2019 18:58:13

Yuri197
Зарегистрирован: 2019-03-24
Сообщения: 24
Репутация: +  0  -
Профиль  

Тема закрыта.

Ссылку убрал.

Отредактировано Yuri197 (Март 26, 2019 12:41:18)

Офлайн

#2 Март 25, 2019 10:17:11

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Тема закрыта.

Найдены следующие недочёты:
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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Март 25, 2019 12:36:09

Yuri197
Зарегистрирован: 2019-03-24
Сообщения: 24
Репутация: +  0  -
Профиль  

Тема закрыта.

Rodegast
1) Карты никак не масштабируются к размеру окна.
Есть такая заморочка. Но чтобы масштабировать растровые изображение, для проверки нужно иметь большой монитор (а лучше несколько разных), чтобы уменьшать изначально большие исходники изображения к малым размерам, и сохранить достаточно качественные изображения. На данный момент у меня такого монитора нет. Когда технические возможности появятся, тогда возможно над этим подумаю.
2) Козыри должны находится в конце списка карт.
Если вы о сортировке карт человека, о том, как они отображаются на экране, то это от привычек человека зависит.
3) Действие “Взять” и “Отбой” назначены на разные кнопки, хотя логичнее назначить их на одну.
Над этим подумаю.
4) Код плохо декомпозирован по этому в нём ужас.
Вот это не понял. Что такое “декомпозирован”? Если вы о большом количестве условий, то изначально идея была в том, чтобы каждая карта знала обо всех других - чтобы в любой момент игры опросить саму карту о другой карте. Это автоматически подразумевает описание каждой карты по отдельности, а их 36. И избавляет от ненужной путаницы в дальнейшем.
P.S. А в данном случае речь идет и вовсе о выборе козыря. А там даже в комментариях специально отмечено, что этот козырь должен быть выбран по последней карте в колоде.

Отредактировано Yuri197 (Март 25, 2019 12:50:54)

Офлайн

#4 Март 25, 2019 13:08:49

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Тема закрыта.

Yuri197
Если вы о большом количестве условий, то изначально идея была в том, чтобы каждая карта знала обо всех других - чтобы в любой момент игры опросить саму карту о другой карте
имеется ввиду, что не плохо бы что каждая карта имела, например, два атрибута: масть и величину, тогда бы вы вместо 36 условий сделали всего одну операцию:
 self.trump = list_cards[35].suite()
Но даже в вашем варианте этот долбаный китайский код из 36 условных операторов можно сократить до вот такого:
 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)

Офлайн

#5 Март 25, 2019 13:20:21

Yuri197
Зарегистрирован: 2019-03-24
Сообщения: 24
Репутация: +  0  -
Профиль  

Тема закрыта.

PEHDOM, буду думать, спасибо!

Офлайн

#6 Март 25, 2019 15:31:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Тема закрыта.

> Если вы о сортировке карт человека, о том, как они отображаются на экране, то это от привычек человека зависит.

Значит нужно какую-то настройку сделать.

> Что такое “декомпозирован”?

Декомпозиция это в первую очередь правильное разбиение твоей программы на объекты. При правильной декомпозиции файл 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)

Офлайн

#7 Март 25, 2019 16:59:47

Yuri197
Зарегистрирован: 2019-03-24
Сообщения: 24
Репутация: +  0  -
Профиль  

Тема закрыта.

Rodegast
Это плохая идея.
Если бы идея была бы плохой, то очевидно она не работала бы на практике, а она работает. И вполне себе быстро работает. И более того, именно на этой идее моя реализации игры и построена. Если принять за основу другую идею, то придется переписать вообще весь код. Возможно реализация громоздкая, над этим буду думать.
Но, как говорится, не нравится, не пользуйся - я нигде никого не принуждал.

Отредактировано Yuri197 (Март 25, 2019 17:00:29)

Офлайн

#8 Март 26, 2019 06:42:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Тема закрыта.

Yuri197
Но, как говорится, не нравится, не пользуйся - я нигде никого не принуждал.
А вы, собственно, зачем ваше поделие здесь разместили? Я полагал, что вы рассчитывали на конструктивную критику вашего учебного проекта, а вы, оказывается, думаете что ваши каляки-маляки - это взрослое полезное приложение которым кто-то будет пользоваться. Серьезно? Юрий, это даже не смешно.



Офлайн

#9 Март 26, 2019 10:24:29

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Тема закрыта.

> Если бы идея была бы плохой, то очевидно она не работала бы на практике, а она работает

На практике у тебя каждая карта содержит информацию о том какая карта сможет её “побить”. А в моём примере всё намного лучше:

 >>> k1 = Karta(6, "pika")
>>> k2 = Karta(10, "pika")
>>> print(k1 > k2)
False     # Шестерка не может побить десятку
>>> print(k1 < k2)
True     # Десятка может побить шестёрку

> придется переписать вообще весь код.

Хорошо что ты сам об этом догадался.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Март 26, 2019 10:40:28)

Офлайн

#10 Март 26, 2019 12:32:00

Yuri197
Зарегистрирован: 2019-03-24
Сообщения: 24
Репутация: +  0  -
Профиль  

Тема закрыта.

Rodegast
Хорошо что ты сам об этом догадался.
Плохо, что ты с одного раза не можешь догадаться, что мне повелители нахрен не нужны! Хочешь писать лучше? Вперед и с песней!

Отредактировано Yuri197 (Март 26, 2019 12:32:21)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version