Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2010 11:15:44

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Учебные проекты

Дело в том что я не знаток теории вероятности, хотя и есть некоторые знания, по этому написать более продвинутую логику для компьютера не могу. А точнее просто не интересно на данный момент тратить на это время. Сейчас меня больше мучает поиск пути, чтобы красиво соединить два элемента на принципиальной электрической схеме.

В остальном, код работоспособный, и на ГУИ его перевести как два пальца… При этом рефакторить ничего не надо. Я итак вложил избыточную архитектуру.

Кроме того соответствует всем требованиям кроме “Предусмотреть запись всех шагов игры в лог файл”, но и это добавляется без рефакторинга. Пару строк добавить.



Отредактировано (Апрель 28, 2010 12:09:40)

Офлайн

#2 Апрель 28, 2010 13:02:21

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Учебные проекты

Griffon
Кроме того соответствует всем требованиям кроме “Предусмотреть запись всех шагов игры в лог файл”, но и это добавляется без рефакторинга. Пару строк добавить.
Нет, не только лог. В приведённом варианте игрок-компьютер вырабатывает стратегию не учитывая успехи соперника. При чем же теория вероятностей? Всё же просто. По ТЗ робот должен рассуждать как-то так: Если сопернику остался один ход до выигрыша, то я буду рисковать и бросать кость до выигрыша. Или: если я отстаю, то буду рисковать, если обгоняю, то не буду.

Логика то простая. Но она не реализована.

lorien
Не вижу ничего удивительно. Нашёлся один энтузиаст, набросал код после обеда. Выяснилось, что код надо рефакторить, да и вообще было бы неплохо запроектировать систему для начала. А это что? Это работа, это исправление ошибок. Ну вот энтузиазм и пропал
В общем, самый большой просчёт в том, что инициатор (то есть я) сам код не пишет. Это побуждает остальных рассуждать так: “зачем я буду писать код, если никто, даже инициатор, не пишет”. С другой стороны, нечестно будет, если один из программистов будет автором ТЗ. То есть надо было искать дополнительного автора ТЗ. Ну и ещё некоторые коррективы в организации и идеологии нужны. Нужно более явно обозначить цели проекта, типа: научиться писать читаемый и гибкий код, научиться делать рефакторинг, изучить методики TDD и парного программирования как в XP и т.д.

Ладно. Первый блин вышел тут комом. Буду думать.



Отредактировано (Апрель 28, 2010 16:47:07)

Офлайн

#3 Апрель 28, 2010 16:16:33

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Учебные проекты

Отрефакторить можно что угодно. Мможно даже имена поменять всем методам и переменным. А можно переписать с нуля.
Я, как инженер, выполняю поставленную задачу. И отвечаю на следующие вопросы.
Можно ли сделать лучше? - Да.
Нужно ли что-то менять в данном случае? - Нет.

Пределов совершенству нет, но надо знать когда остановиться.

В приведённом варианте игрок-компьютер вырабатывает стратегию не учитывая успехи соперника
Учитывает. Если противник впереди то компьютер рискует. Если компьютер впереди - осторожничает. Причём степень риска и осторожности, для каждого компьютера из трёх, своя.
Единственное что, надо было вынести настройки сложности за пределы реализации класса.

А вторая цитата мне не принадлежит.

upd. Целью является совершенствование знаний, как отметил автор. Были найдены и указаны места где можно улучшить что-либо. Урок окончен. Знания получены. Или вам требуется больше?



Отредактировано (Апрель 28, 2010 16:36:59)

Офлайн

#4 Апрель 28, 2010 17:09:21

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Учебные проекты

Griffon
Учитывает. Если противник впереди то компьютер рискует. Если компьютер впереди - осторожничает. Причём степень риска и осторожности, для каждого компьютера из трёх, своя.
Да. Я неправильно прочитал код. Или он был поправлен после моего прочтения.
Griffon
А вторая цитата мне не принадлежит.
Да.
Griffon
upd. Целью является совершенствование знаний, как отметил автор. Были найдены и указаны места где можно улучшить что-либо. Урок окончен. Знания получены. Или вам требуется больше?
Ну, тут планировался не урок. Я хотел не учить, а учиться. Тут планировался тренажёр для освоения неких методов программирования. Работать он должен был примерно по следующему алгоритму:

1. Пишется первый вариант ТЗ.
2. Анализируется предметная область. Прикидываются необходимые классы, объекты, их взаимосвязи. Тут можно использовать UML.
3. Пишется код, с использованием Unit-тестов.
4. Обсуждается код, правится.
5. Изменяется ТЗ: добавляются новые возможности, новые правила, учитываются пожелания пользователей.
6. Переходим к пункту 2, с учетом того, что уже есть какие-то заготовки. Тут можно анализировать, где в коде имеются негибкие места, как их лучше можно было сделать, если бы предполагались изменения и т.д.

Конечно, я о таком тренажере не говорил, но в моих сообщениях и так было много информации. Кроме того, это не обязательный алгоритм. Возможно, кто-то придумал бы что-то лучше.

Если у кого-то будет желание написать вторую версию ТЗ (и взять на себя роль автора ТЗ), то я попробую выполнять роль программиста. Может смена ролей позволит лучше почувствовать дефекты структуры проекта.



Офлайн

#5 Апрель 28, 2010 18:22:45

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Учебные проекты

Все должны и писать, и думать. :)
Пишущий программу не должен быть козлом отпущения. Хочешь внести изменение - вноси. И выкладывай код с изменениями! А то задача сводится к тому чтобы найти в чьём-то коде место для оптимизации. А затем подождать пока кто-нибудь внесёт это в свою реализацию.

p.s. кстати большую часть замечаний (lorein, itertools в том числе) я вносил почти сразу после прочтения (если был на работе в это время).



Офлайн

#6 Май 1, 2010 10:54:02

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Учебные проекты

хотелось бы внести свое предложение:
учебные проекты конечно хорошо, но одна мысль что код, на который потрачено несколько часов\дней\недель, об критикуют, заставят переписать 10 раз и благополучно ЗАБУДУТ, отбивает всякое желание этим заниматься.
так вот предлагаю писать такой код, что бы он был востребован, и было интересно этим заниматься.
мморги и тп заглохнут еще на начале, а вот писать плагины для EventScripts - дешево и сердито :) порой бывает скрипт на 3 строчки :)
собственно что для этого нужно: CS:source Dedicated server с установленным EventScripts
клиент игры CS:S (чтобы проверять скрипт)
оф форум http://forums.eventscripts.com/viewforum.php?f=115
документация на ES для питона http://python.eventscripts.com/pages/Main_Page
————-
можт кто нибудь заинтересуется ? русских проф питонистов для ES нет :( одни буржуйские :rolleyes:
————-
и ваше имя останется в веках :)



Отредактировано (Май 1, 2010 11:01:14)

Офлайн

#7 Май 1, 2010 21:09:43

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Учебные проекты

Не понял. Можно кратко и на рабоче-крестьянском? Ботов для Контр-Страйка писать что-ли?

Если так, то меня оно не очень привлекает пока. Была у меня мысль другая - сделать форк UliPad-а, чтобы он был не глючил в Linux, поддерживал проекты, и вообще, ориентирован был только на Python. Тогда бы ещё добавил кое-какие удобства.

Но это тоже работа для одиночки. Да и не готов я к такому пока.



Офлайн

#8 Май 1, 2010 23:22:46

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Учебные проекты

Kogrom
Не понял. Можно кратко и на рабоче-крестьянском? Ботов для Контр-Страйка писать что-ли?
боты давно написаны :)
что можно сделать с помощью ESPython? все что угодно начиная от сообщения всем игрокам кто и с какого ip подключился до полного изменения гейплея
небольшой пример:
# -*- coding:Utf-8 -*-
import es, playerlib

def player_activate(ev): # событие когда игрок полностю подключился
userid = ev["userid"] # получаем id этого игрока
ip = playerlib.getPlayer(userid).address.split(':')[0] #получаем его ip
name = es.getplayername(userid) # и имя
es.msg('\4Игрок %s подключился с %s'%(name,ip)) # выводим в обший чат (\4 зеленинькими букафкоми :))
и задача:
по этому ip определить страну, область, город послав запрос на http://ip2city.ru/ (или проще скачать от туда базу айпи адресов?)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version