|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
||||||
Карточная игра "Буркозел"13.02.2025, 11:46. Показов 6549. Ответов 39
Здравствуйте всем!
Лет 30 назад были попытки изучать BASIC на советском ПК ZX Spectrum, далее взрослая жизнь которая совсем далека от программирования. Пару лет назад тряхнул стариной, изучил основы и написал код на С++ для своего хобби: Плата ардуино управляет краном отбора по пару. Сейчас появилось время и желание изучить более современный JAVA. Почитал литературу. Порешал задачки. Основа более менее ясна. Решил написать карточную игру "Буркозел". Просьба к форумчанам обсуждать код, предлагать свои решения и указывать на ошибки. На данном этапе я не совсем понимаю правильная ли у меня структура кода, я не использую пакеты, методы у меня вверху кода, а ход игры будет в главном методе main. Правильно ли это, и почему если нет.
12 февраля Колода перетасована, розданы первые карты игрокам. Пока игроков двое, планируется на выбор от двух до четверых. 13 февраля Сейчас в разработке ИИ для выбора с каких карт ходить игроку которым будут управлять компьютер. Думаю за пару дней сделаю.
0
|
||||||
| 13.02.2025, 11:46 | |
|
Ответы с готовыми решениями:
39
Карточная игра 21. Оптимизация и проверка Продам готовый движок J2ME для создания современных мобильных игр Софт для создания мобильных игр |
|
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
|
| 01.03.2025, 12:48 | |
|
-------
ArrayList - это массив, чью длину можно менять динамически. В принципе, это хороший тип-контейнер для данных, но есть ещё Deque (ArrayDeque, LinkedList), Queue, множества (HashSet), чтобы сказать какая структура лучше подходит для представления колоды карт надо знать правила игры. Я не совсем понимаю правила, может расскажете кратко? Добавлено через 3 минуты --------- this надо писать если работаете с членами этого класса (которому принадлежит метод в котором пишете текст). Если не писать this, то человек который смотрит текст, может подумать что это вызываете импортированный ресурс. Добавлено через 2 минуты ------- объект - это какое-то абстрактное понятие, даже не связанное с программированием. А экземпляр класса (instance) - это понятие из программирования. Это структура данных, которая реализует объект в компьютере. Добавлено через 6 минут ------- конструктор public Deck() - это нормально, передавать какие-то параметры не обязательно.
0
|
|
|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
||
| 01.03.2025, 13:01 [ТС] | ||
|
за один ход, игрок заходит с одной или несколько карт одной масти, и далее по очереди можно побить или скинуть такое же количество карт, до 4 человек может играть. Чьи карты старше тот забирает взятку и заходит первым. Старшинство карт не меняется, но для каждого кона новый козырь
0
|
||
|
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
|
| 01.03.2025, 16:18 | |
|
насчёт структур данных для представления колоды карт. Колода, которая лежит на столе, она ведь упорядоченная, то есть стопка. Значит можно ArrayDeque. Если из колоды нужно брать не только сверху, а пропустить несколько карт или произвольный доступ по индексу, то LinkedList.
А карты на руках игроков это другое. У них не колода, не упорядоченная структура, а просто куча. То есть множество. Тут надо HashSet.
0
|
|
|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
|||||||||||
| 09.03.2025, 19:09 [ТС] | |||||||||||
|
Требуется код, для получения из списка карт на руке, кол-ва одинаковых мастей. У меня получается слишком большой и как мне кажется неправильный для JAVA код. Просьба помочь с более коротким вариантом.
Первый вариант: Кликните здесь для просмотра всего текста
Второй вариант: Кликните здесь для просмотра всего текста
0
|
|||||||||||
|
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
||||||
| 10.03.2025, 10:44 | ||||||
|
>У меня получается слишком большой (код)
Не то чтоб большой, просто не совсем оптимальный. Сейчас коллекции данных рекомендуется обрабатывать в аппликативном стиле, считается что это повышает надёжность. Здесь можно почитать https://struchkov.dev/blog/ru/java-stream-api/ То есть в данном случае, если cardset - это набор карт, то получится что-то вроде
0
|
||||||
|
wound up as Aussie
516 / 139 / 22
Регистрация: 15.05.2019
Сообщений: 593
|
|
| 11.03.2025, 09:36 | |
|
А мне уже удалось (за неделю правда, часов по 5 в день) написать код. Там с выбором количества участников и компьютеров. Но пока не получается сбрасывать две и более карты одной масти. Подключил GPT4, но пока глухо....
0
|
|
|
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
|
| 11.03.2025, 13:31 | |
|
Python_Val, в чём трудность?
0
|
|
|
wound up as Aussie
516 / 139 / 22
Регистрация: 15.05.2019
Сообщений: 593
|
|
| 11.03.2025, 19:03 | |
|
NotAbug, трудность в мониторе.
Я не вижу на мониторе большого куска программы, а там уже около 500 строк. (память уже не та что раньше. ).Добавлено через 1 час 15 минут А вообще, конечно, надо это через swing написать.
0
|
|
|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
||||||
| 11.03.2025, 22:16 [ТС] | ||||||
|
Так сделал ответ на свой вопрос от 09.03
Кликните здесь для просмотра всего текста
0
|
||||||
|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
||||||
| 11.03.2025, 22:34 [ТС] | ||||||
|
Так сделал ответ на свой вопрос от 09.03
Кликните здесь для просмотра всего текста
На данный момент меня устраивает тест на ход компьютера:
0
|
||||||
|
wound up as Aussie
516 / 139 / 22
Регистрация: 15.05.2019
Сообщений: 593
|
|||||
| 12.03.2025, 11:32 | |||||
|
Ну понятно, что пока тест. Добавлено через 2 часа 24 минуты Помню, в Гонконге в 2006, помоему, году, стояли компы с шестью языками (знако-буквами) - там латиница, китайский, японский, хинди, корейский и ещё один язык, который мне был неизвестен (они на боку, стороне, каждой клавиши нарисованы были, но помему это был минъянмар - там 4 знака с санскрита ) - всё кроме кириллицы. Я установил ru язык, и напечатал письмо домой. В процессе печатания (а там у них кабеля от мониторов и клавиатуры с мышкой просто уходили в стену) подошёл чел какой-то и смотрел как я печатаю - просто стоял как придурок слева от левого плеча за спиной и смотрел.... (200 знаков в минуту не то чтобы много, но и не мало). Мне странно, что современные кодеры не обладают этим... Добавлено через 3 минуты Вот словесное описание. Словесное описание игры Буркозёл: 1) колода из 36 карт. Старшинство карт такое: 6, 7, 8, 9, Валет, Дама, Король, 10, Туз. Очки: карты 6, 7, 8 и 9 - не дают никаких очков (т.е. 0). Валет это 2 очка, Дама - 3 очка, Король - 4 очка, карта 10 - это 10 очков, Туз - это 11 очков. У карт 4 масти: бубны, пики, трефы, черви. 2) Может быть 4 или 3 или 2 игрока играют до 12 очков, причём один из игроков должен быть компьютер (надо написать логику компьютера для этой игры). Тот кто набирает 12 очков первым вылетает и остаются другие игроки. Тот кто остался последним, тот и победитель. 3) Игра: Тусуется колода (random). Кто будет раздавать определяется жребием (random). Раздаётся колода по одной каждому по кругу, всего 4 карты каждому игроку. Из оставшейся колоды вытаскивается одна карта и открывается - это козырь, козырная масть может перебивать остальные карты, т.е. козырная 6 может перебить любую некозырной масти карту. Оставшиеся карты ложатся закрытыми сверху. 4) Ходит тот кто сдавал карты. Ходить можно с одной любой карты из четырёх что на руках у каждого. Ходит тот кто сдавал карты. Ходить можно или одной любой картой, или двумя, тремя или четырьмя картами если они одной масти. Если есть масть с которой зашли, то надо играть этой мастью карты. Остальные игроки смотрят в свои карты, если у них есть большая по номиналу карта (или карты, смотря сколько карт пошёл первый игрок) то можно или кинуть большой номинал - чтобы побить карты соперника (карты ложатся сверху) или если бить нечем, то скидываются столько же карт меньшего номинала сколько кинул соперник, но карты не открываются, а кидаются закрытыми. И так отбиваются все оставшиеся игроки - каждый кидает столько карт сколько кинул первый игрок в начале. Тот у кого самые старшие по номиналу карты тот забирает все брошенные карты себе - это называется взятка. Смысл игры - набрать как можно больше взяток, чтобы было как можно больше очков при подсчёте в конце игры. Дальше каждый берёт из колоды на столе столько карт, чтобы у каждого снова было 4 карты. И начинает играть следующий по кругу игрок. 5) Очки считаются подсчитыванием карт со взяток в конце игры. Подсчитываются все карты со взяток у каждого по отдельности игрока.Как считаются очки: - если 4 игрока: а) Если набрали меньше 16 очков, то этому игроку назначают 4 штрафных очка; б) Если набрали меньше 31 очка, то этому игроку назначают 2 штрафных очка; в) Если набрали 0 очков (то есть нет ни одной взятки), то игроку назначают 6 штрафных очков. Далее тусуется колода, и снова раздаются карты как описано выше и начинают играть снова. У каждого очки суммируются за эту и все предыдущие игры. у кого 12 штрафных очков - тот выбывает из игры. - если 3 игрока: а) Если набрали меньше 21 очка, то этому игроку назначают 4 штафных очка; б) Если набрали меньше 41 очка, то этому игроку назначают 2 штрафных очка; в) Если набрали 0 очков (то есть нет ни одной взятки), то игроку назначают 6 штрафных очков. Далее тусуется колода, и снова раздаются карты как описано выше и начинают играть снова. У каждого очки суммируются за эту и все предыдущие игры. у кого 12 штрафных очков - тот выбывает из игры. - если 2 игрока: а) Если два игрока набрали меньше 31 очка, то этому игроку назначают 4 штрафных очка; б) Если набрали меньше 61 очка, то этому игроку назначают 2 штрафных очка; в) Если набрали 0 очков (то есть нет ни одной взятки), то игроку назначают 6 штрафных очков. Далее тусуется колода, и снова раздаются карты как описано выше и начинают играть снова. У каждого очки суммируются за эту и все предыдущие игры. у кого 12 штрафных очков - тот выбывает из игры. Оставшийся игрок победитель. В игре должно быть 4 счётчика очков. Игра должна ждать пока походят все игроки, и считать очки. Игра должна считать кто забирает взятку (и всё это надо писать на экране). Убывающий игрок (у кого 12 и больше штрафных очков) выводится из игры (тоже пишется на экране) и продолжают играть оставшиеся игроки. И так игра должна продолжаться пока не останется один игрок - победитель. Игра останавливается.
1
|
|||||
|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
|||||||||||||||||||||||
| 12.03.2025, 13:15 [ТС] | |||||||||||||||||||||||
|
Изначально в конструктор карты заложил поле: int rateMoveHand - рейтинг карты заходящего Кликните здесь для просмотра всего текста
И у карт изначально есть условная стоимость для поиска нужной для хода карты Кликните здесь для просмотра всего текста
Заодно у карт есть сила и очки, в общем enum такой: Кликните здесь для просмотра всего текста
Вот сам метод: Кликните здесь для просмотра всего текста
Про еще код: он совсем страшный , не буду показывать, он убирает 10ки и тузы из organizeHand если заход меньше чем четыре карты.Про GPT интересно, было бы круто что бы комп ходил не по шаблону а своими мыслями.
1
|
|||||||||||||||||||||||
|
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
|
| 12.03.2025, 13:55 | |
|
Python_Val, " У меня автоматом переключает на то что я печатаю." - язык ввода в компьютере переключается или в голове?
"современные кодеры не обладают этим" - не знаю как современные, я программистов вживую давно уже не видел (а есть ли они ещё в природе?), но раньше - да, видел как настоящий программист быстро-быстро набирал текст. Слепой набор не каждый человек может, это не зависит от профессии.
0
|
|
|
wound up as Aussie
516 / 139 / 22
Регистрация: 15.05.2019
Сообщений: 593
|
|||
| 12.03.2025, 20:21 | |||
(я использую puntoSwitcher с самого начала его появления - не помню уже когда он появился - почти никогда не отключаю). Добавлено через 3 минуты К игре GPT не подключен. Я просто у него спрашивал на счёт выброса двух карт - оно всё получается, но колоду пока неправильно перебирает, и находит победителя когда ещё пол колоды на столе. (но я пока не искал ошибку у себя в коде, если честно. Просто написал что есть и чего нет). KING("Король",4, 7, 2500) - а что это за 2500 ? для чего? (4 - это очки, 7 это нумерация, наверное). (а..., это Вы так компьютеру очки для оценки хода что ли подаёте? я понял - это у Вас "условная стоимость" ? ) И ещё мне не понятно вот что: - Вы пишете код (говорите, что вот написал код) который далеко совсем не для начинающих, но в каком-то другом посте пишете, что "надо разобраться как это всё работает". Так Вы его пишете или переписываете откуда-то ? (многие, и я в том числе, используют уже готовые решения, если они есть. Т.е. это не укор, это просто вопрос). Я к тому, что если Вы пишете сами, но не всё полностью понимаете, то Вы гений какой-то.
0
|
|||
|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
||||||||
| 13.03.2025, 20:58 [ТС] | ||||||||
|
Добавлено через 1 час 51 минуту Просьба подсказать как правильно вернуть из метода новый список только козырей Кликните здесь для просмотра всего текста
0
|
||||||||
|
wound up as Aussie
516 / 139 / 22
Регистрация: 15.05.2019
Сообщений: 593
|
||||||||||||
| 13.03.2025, 23:02 | ||||||||||||
|
Вот класс Deck (я не делал так как Вы). Козырь только один. Там выводы разные закомментированы - это в процессе разработки для понимания, и методы которые потом нужны в игре. Просто оставляю как есть. (дополнительная стоимость не нужна, можно использовать очки самой карты).
![]() А, это Вы в процессе игры проверяете козырь? И вам нужно где-то хранить список? Я не уверен, но возможно так:
1
|
||||||||||||
|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
||
| 14.03.2025, 06:54 [ТС] | ||
|
Нужна была фильтрация карт на руке отбивающего игрока, циклами и условными операторами неудобно и страшно выглядит. Работаю над "мозгами" отвечающего игрока: Козырь меняется каждый кон, здесь в каждой тестовой проверке. Не стал делать козырь видимой картой внизу колоды, просто масть, хоть это и не совсем по реальным правилам. В тесте 153 вообще бить нечем В тесте 154 нужно выбрать карту для ответа Тесты "мозгов" заходящего, в этих проверках, правильно работают, не ходят с тузов и 10ок
0
|
||
|
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
||||||
| 14.03.2025, 10:27 | ||||||
|
welder2025, forEach ничего не возвращает. Если надо собрать данные из потока в коллекцию, то применяют метод collect(). По той ссылке можно посмотреть в конце https://struchkov.dev/blog/ru/java-stream-api/
1
|
||||||
|
2 / 2 / 0
Регистрация: 12.02.2025
Сообщений: 21
|
|||||||
| 14.03.2025, 16:33 [ТС] | |||||||
|
Это действительно лучшая статья на русском про Stream. Но мне сложно понять тонкости без примеров. Можно ли заменить данную условную конструкцию:
0
|
|||||||
|
47 / 39 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
||||||
| 14.03.2025, 17:15 | ||||||
|
Попрбуйте так:
0
|
||||||
| 14.03.2025, 17:15 | |
|
Создание двухмерных игр на телефонах Редактирование и взлом JAVA игр Рисование графики для игр Обучение программированию для написания игр Сборник Flash игр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии
Введение
Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
|
|
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np
class PlantAgent:
def __init__(self, name, strategy, initial_biomass):
self. name = name
self. strategy = strategy # "greedy" (широколиственные) или. . .
|
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли
Введение: Экологический рынок как игра с нулевой суммой
Традиционная экология долгое время. . .
|
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ
Введение: Синдром «цифрового учебника»
Современные большие языковые модели (LLM) обладают колоссальным. . .
|
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос.
Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех.
А широколиственный лес тоже имеет самую крутую биомассу.
То почему не возникло их симбиоза? Это. . .
|