Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 7, 2020 15:32:21

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

Привет!
Закончил писать копию сапёра.
Выкладываю файлы.
Потестите на ошибки.
Буду рад послушать ваши мнения.

Прикреплённый файлы:
attachment Saper1.zip (43,1 KБ)

Офлайн

#2 Фев. 8, 2020 20:50:12

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

Проверил код. Сразу скажу, что про PEP8 или банальный рефакторинг ты не слышал. Код полон повторений инструкций, в которых лишь меняются какие-то незначительные части. Ну прочти ты про “for”, и сорцы сократятся и упростятся в 4-5 раз. Также, делай отступы в 2 строки между классами и методами вне класса и 1 строку между методами класса. А то очень не читабельно. А так вроде легитно.



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#3 Фев. 8, 2020 21:59:10

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

А можно чуть конкретней.
В каком месте мне нужно что-то поменять.
Я поэтому и выложил программу, потому что понимаю, что там много недочётов.
Надеюсь вы укажете в каком месте?

Офлайн

#4 Фев. 9, 2020 02:57:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

[guest@localhost Saper1]$ python3 Saper1.py 
Traceback (most recent call last):
File "Saper1.py", line 171, in <module>
if ev.button == pygame.BUTTON_RIGHT:
AttributeError: module 'pygame' has no attribute 'BUTTON_RIGHT'
[guest@localhost Saper1]$

  
>>> import pygame
>>> pygame.__version__
'1.9.3'
>>>



Офлайн

#5 Фев. 10, 2020 11:38:30

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

у меня версия 1.9.6
но я не думаю, что дело в этом.
атрибут BUTTON_RIGHT обязательно будет и в ранней версии

Офлайн

#6 Фев. 10, 2020 12:52:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

panama555
атрибут BUTTON_RIGHT обязательно будет и в ранней версии
Не, нету, и в pygame.constants нет такой константы. Короче, ты должен был написать файл документации, в котором указать версию питона и версию pygame, на которых игра гарантированно запускалась, чтобы пользователи догадки не строили.

Я обновил pygame до 1.9.6

Нашёл несколько багов
https://imageup.ru/img37/3552949/winmine-bug1.jpg.html
https://imageup.ru/img37/3552950/winmine-bug2.png.html

Было один раз, что всё поле открылось и на нём одна мина только. Так я даже проставил на ней флажок, хотя он сам должен был проставиться, а время всё равно шло дальше и игра ждала открытия поля.

Плюс у тебя ещё нет стандартного функционала. Когда возле цифры проставлены все флажки, то нажатие левой и правой кнопки одновременно приводит к тому, что неоткрытые поля вокруг этой цифры открываются сразу за раз. У тебя же в программе, если я нашёл мину возле числа 1, то закрытые поля вокруг этой цифры я должен открывать вручную. А в обычной программе я просто на цифре нажимаю левую и правую кнопки мыши и все закрытые поля открываются за одно нажатие.

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



Отредактировано py.user.next (Фев. 10, 2020 13:00:18)

Офлайн

#7 Фев. 10, 2020 13:36:18

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

Оцените игру на питоне (копия сапёра)

> А можно чуть конкретней. В каком месте мне нужно что-то поменять.

После того как в последний раз я прокомментировал чью-то игру, у человека случился истерический припадок. Но я надеюсь что ты не такой впечатлительный…

 if massive[y][x] == 0:
     picture = "d0.png"
elif massive[y][x] == 1:
      picture = "d1.png"
elif massive[y][x] == 2:
      picture = "d2.png"
....
Такие участки кода заменяй на словарь.
А вот такие замени циклом for:
 if number=="0":
       self.image.blit(self.long_image,(0,0),(28,0,28,50))
elif number=="1":
        self.image.blit(self.long_image,(0,0),(56,0,28,50))
....
elif number=="-":
        self.image.blit(self.long_image,(0,0),(0,0,28,50))

 for y in range(16):#заполняем пустыми клетками группу 
        for x in range(16):
            gr_kletka.add(Kletka((x * 35 + 23, y * 35 + 120),"kletka1.png",0))
замени на что то вроде:
 gr_kletka.add( Kletka((x * 35 + 23, y * 35 + 120),"kletka1.png",0) for x in  in range(16) for y in range(16) )
В место
 massive = [[0 for i in range(stolb)] for j in range(stroki)]#матрица для хранения координат бомб
нужно
 massive = [ [0]*stolb for _ in range(stroki) ]#матрица для хранения координат бомб

А хуже всего то что ты не пользуешься ООП…



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

Отредактировано Rodegast (Фев. 10, 2020 13:36:46)

Офлайн

#8 Фев. 10, 2020 22:31:00

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

py.user.next
Сам код ужасный. Это ты ощутишь, когда начнут сыпаться баги и недочёты всякие и код надо будет поправлять, чтобы их исправить. Естественно, при исправлениях код начнёт превращаться в свалку всяких правок. И ты это не сможешь предотвратить, даже если будешь соблюдать какую-то чистоту, потому что код изначально написан так, что он не пригоден к правке. Он очень быстро придёт к путанице.
Спасибо за тест, буду разбираться
Rodegast
Но я надеюсь что ты не такой впечатлительный…
Не впечатлительный, спасибо за подсказки
Rodegast
А хуже всего то что ты не пользуешься ООП…
Вот это я бы исправил, если бы знал как. Вроде пытаюсь писать программу опираясь на методы объектов, но, как видите, видимо не получается. Сам понимаю, что что-то не так.
Перед этим выкладывал программу Lines.
Довольно простая на вид программа разрослась до неприятных размеров и стала довольно запутанной.
Вот это меня и беспокоит: Как правильно писать ООП? Я уже задавал тут этот вопрос, но, видимо, ответ для меня не очевидный

Офлайн

#9 Фев. 11, 2020 00:53:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

panama555
Вот это я бы исправил, если бы знал как. Вроде пытаюсь писать программу опираясь на методы объектов, но, как видите, видимо не получается. Сам понимаю, что что-то не так.
panama555
Довольно простая на вид программа разрослась до неприятных размеров и стала довольно запутанной.
Займись структурной парадигмой программирования. Она у тебя не развита. Если ты не можешь программу такого размера написать в структурной парадигме, то грош цена такому программированию. Объектно-ориентированная парадигма - это следующий этап. Обеими этими парадигмами нужно владеть.

Архитектурно программы (реальные программы из дикого мира) состоят из низкоуровневых частей и высокоуровневых частей. Так вот, низкоуровневые части пишутся в структурной парадигме (пример - какой-нибудь модуль по работе с устройством или по работе с базовым протоколом). Высокоуровневые части пишутся в объектно-ориентированной парадигме (пример - собака прыгает по дороге или там всадники скачут по полю). Но в целом программа будет из себя представлять высокоуровневые части, которые работает через низкоуровневые части. Если ты чем-то из этого не владеешь, то ты целую программу написать не сможешь. Будет у тебя лишь кусок программы в виде только того или только этого.



Отредактировано py.user.next (Фев. 11, 2020 00:54:57)

Офлайн

#10 Фев. 11, 2020 07:05:03

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Оцените игру на питоне (копия сапёра)

panama555
Как правильно писать ООП? Я уже задавал тут этот вопрос, но, видимо, ответ для меня не очевидный
такое же ):
не ну понятно там но
1. наследование, агрегация или композиция (что когда выбирать?)
2. инкапсуляция (зачем пространство имен экономим? боимся пересечения имен в будущем? это не считая гетеров сетеров почему в одном случаи через @property а в другом через магические методы и зачем все это если можно просто через обычные методы)
3. полиформизм (тут вроде понятно тут за интерфейс взаимодействия но это не точно)
4. туда же парадигмы эти когда что выбирать (и их еще и изучить нужно)
5. переиспользование (и поддержка) тут вобще все мутно

похоже только практикой освоить можно ну и выкладывать код на … в общем такое
ИЧСХ нет не какой гарантии что таки освоишь всё это

зы я думаю ооп нужно с парадигм изучать надо но что бы понимать парадигмы нужно знать ооп вот такая вещь в себе (поправте если ошибаюсь)




1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Фев. 11, 2020 07:13:33)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version