0 / 0 / 0
Регистрация: 29.05.2019
Сообщений: 9
|
||||||
1 | ||||||
ООП. Написать игру крестики-нолики.25.06.2019, 11:47. Показов 29602. Ответов 6
Метки нет (Все метки)
Есть вот такое вот задание
Написать игру крестики-нолики, используя как можно больше ООП. Общие указания. Все этапы независимы, вы можете реализовывать их в любом порядке. Создавайте вспомогательные методы по необходимости. Не забывайте про конструкторы и __str__ Этап 1. Напишите класс Field - игровое поле. По умолчанию оно имеет размер 3х3. Игровое поле должно иметь метод для заполнения клетки с указанными координатами указанным символом. Нулевой считается клетка в верхнем левом углу, она имеет координаты (0, 0). Игровое поле должно иметь метод для проверки, занята ли клетка с указанными координатами, который возвращает True или False. Игровое поле должно иметь метод для вывода себя на экран. Вместе с полем выводите значения координат, например: 0 1 2 0 o | x | o ----------- 1 | x | ----------- 2 | o | x Этап 2. Напишите класс Player - игрок. При создании игрок получает символ, которым ходит. У игрока должен быть метод, который возвращает координаты клетки, куда выполняется ход. Для игрока-человека координаты вводит пользователь. Если клетка уже занята, нужно вывести сообщение об этом и попросить ввести другую клетку. Метод принимает объект Field в аргументах. Этап 3. Напишите класс Brain - бот. Бот наследуется от игрока. Бот должен переопределять метод для совершения хода и самостоятельно выбирать клетку, куда будет ходить. Используйте любой алгоритм для выбора клетки, например, случайный выбор пустой клетки на поле. Бот должен выводить сообщение, куда он ходит. Этап 4. Напишите класс Checker - проверщик. Проверщик должен содержать метод для определения, что один из игроков победил - построил на поле линию из одинаковых символов по вертикали, горизонтали или диагонали. Метод принимает объект Field для проверки в аргументах. Этап 5. Напишите класс Game - игра. Кроме конструктора, класс игры должен содержать один метод - главный цикл игры: Выбор типа игры: 1 игрок или 2 игрока Выбор первого игрока случайным образом Пока поле не заполнилось или один из игроков не победил: Ход первого игрока, проверка на победу, вывод игрового поля на экран Ход второго игрока, проверка на победу, вывод игрового поля на экран Вывод сообщения о победе. Вывод "Сыграть ещё?", выход, если игрок отказался. Должна быть возможность выхода из игры командой exit. Вот что имеется на данный момент
Окончательно запутался в том что написал.Помогите кто может выполнить задание. c классом Player и с классом Brain
0
|
25.06.2019, 11:47 | |
Ответы с готовыми решениями:
6
Написать консольную вариацию игры крестики-нолики Крестики-нолики Крестики-нолики Нолики-крестики |
25.06.2019, 13:28 | 2 |
K312, Основная ошибка, которую делают используя ООП, это применяют средства ООП чисто механически. Однако, так как ООП моделирует мыслительные образы человека, такие как классы, например класс Игра, класс ИгрокЧеловек, класс ИгрокРобот, класс ПолеИгры, класс ЯчейкаПоля. Нужно мысленно представить игру, представить эти классы, продумать какие свойства и методы у экземпляров этих классов, то есть у конкретных объектов принадлежащих этим классам. У Вас слишком емкая задача, задается слишком много классов. В мышлении человека любой объект является экземпляром класса и как правило не одного. Реализовать все классы, к которым принадлежит объект мышления, это не реально, поэтому при программировании нужно ограничиваться только основным классом для этого объекта. Работать со всем огромным разнообразием классов, которым принадлежит объект, способен только мозг человека, но не программа компьютера.
Не понятно кто Вам дал такое емкое задание. Или Вы сами придумали для себя задание? Итак на пример рассмотрим класс ПолеИгры. Небольшое замечание. В базах данных field обычно называют поля(названия столбцов) таблицы. Поэтому для меня название класса Field немного режет слух. Да и вообще понятие Поле является более общим, например пшеничное поле или футбольное поле. Поэтому логичнее было бы назвать ПолеИгры (FieldGame). Итак представим себе поле игры в крестики нолики. Какие у него свойства и методы. Основное свойство, это размеры ширина m и высота n. Второе свойство, игровое поле содержит m*n количество экземпляров класса ЯчейкаПоля. Так как это упорядоченное множество объектов, имеет смысл разместить их в списке, и назвать свойство СписокЯчеек (listCell). И дальше в том же духе. Работы много, если делать основательно. Но может кто то сделает Вам по быстрому, чисто механически как бы используя ООП. Добавлено через 3 минуты Я уже не помню, если поле в крестиках-ноликах всегда квадратное, тогда первое свойство это размер стороны n .
0
|
25.06.2019, 13:34 | 3 |
Viktorrus, нормальное задание, классов тут немного.
Кстати, если уж придираться к слову Field, то его следует заменить на Board. K312, в целом норм для новичка. В check_win, видимо, надо использовать Checker? Или я чего-то не заметил? "Сделать ход" - сомнительное решение, что этим должен заниматься класс Field (доска), это же игровой процесс, должно быть в классе Game. И проверять выигрыш надо после каждого хода. Заюзайте numpy, если можно, проще будет проверять состояние.
0
|
0 / 0 / 0
Регистрация: 29.05.2019
Сообщений: 9
|
|
25.06.2019, 13:46 [ТС] | 4 |
numpy как я понял использовать нельзя нужно все сделать по ТЗ. А я что то запутался в конец ни чего не выходит
0
|
25.06.2019, 14:10 | 5 | |||||
K312, в ТЗ я не увидел ничего, что запрещало бы использование numpy. Его, конечно, не стоит использовать, если проверка автоматизирована и выполняется на стороннем компьютере, а так - - -
По заданию. Разбираться подробно в вашем коде я не хочу. Просто дам советы. Как верно заметил Victorrus, объекты программы должны отражать привычные нам объекты реального мира и их действия. Пусть будет класс Game, который отвечает за игровой процесс. Именно процесс, то есть - выполнение ходов по очереди. Класс Board - норм. Возможно, в него и засунуть проверку, что кто-то выиграл. Класс Player - основное занятие - придумать, куда сделать следующий ход, и выдать это наружу. Для начала игрок-компьютер может выбирать клетку случайно, чтобы вам не заморачиваться с логикой игры. Спрашивать клетку будет Game. Поскольку игроку нужна информация о поле, ему передать Board. Желаю удачи. Добавлено через 5 минут По поводу numpy. Нужные вам срезы берутся в одно действие:
1
|
25.06.2019, 16:46 | 6 | ||||||||||
K312, Кстати Ваш код, как Вы его выложили, не запускается, и отладчик ругается, потому что недопустима запись
0
|
0 / 0 / 0
Регистрация: 24.03.2023
Сообщений: 5
|
||||||
26.03.2023, 11:35 | 7 | |||||
0
|
26.03.2023, 11:35 | |
26.03.2023, 11:35 | |
Помогаю со студенческими работами здесь
7
Крестики-нолики Крестики-нолики Крестики-нолики Крестики-нолики Крестики-нолики Крестики - нолики Крестики-нолики Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |