Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.03.2016, 13:54
Интересующийся
Отправить личное сообщение для JoeCocker Посмотреть профиль Найти все сообщения от JoeCocker
 
Регистрация: 23.12.2014
Сообщений: 23

Создание матрицы карт (покер)
Всем привет!
Мои друзья покеристы раскрывают некоторые секреты игры в покер для заработка на ней в интернете*.

Дабы лучше освоить методический материал, и кроме того, подтянуть свои навыки программирования, я решил разработать онлайн-сервис, который бы показывал возможности игры тех или иных рук ("рука" - это те две карты, что сдаются игроку перед раздачей).

В покере много вариантов игр, но мы сосредоточились на конкретном - spin&go. Суть его в том, что участвуют три человека - 3max, и HU - (handsup), когда остаются 2 игрока, побеждает один, а игра движется очень быстро за счет быстрого увеличения уровней блайндов (о блайндах и вообще о покере лучше прочитать отдельно, так как тут нет возможности все объяснить).
Еще одно, что необходимо упомянуть перед постановкой задачи, это позиции. У нас их три (BU- button, SB - small blind, BB - big blind) и каждый раунд они передвигаются по кругу.
В зависимости от позиции, количества игроков за столом и полученных карт в руке, мы играем одной из четырех ключевых опций: fold (пас), call ("сухой" вход в игру), raise (повышение ставки) и all-in (ставим на кон все свои фишки). Общая стратегия - сыграть с более лучшей рукой, чем у оппонентов или же поставить такую ставку, что бы оппоненты играли в пас, отдав банк нам.

Что бы знать как играть в какой позиции и с какими картами, мои друзья составили специальные чарты (в экселе), которые я и хочу развернуть на своем сайте.

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

http://pokergo.su/v1/

Тот уровень низкого программирования, что вы наблюдаете на этом сайте - это и есть я

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

Итак, задача!

Проект: покерные чарты онлайн.
Элементы: матрица карт (пустой чарт) и контроллеры (кнопки).
Действия: контроллеры должны динамично выделять те или иные руки в матрице карт.

Пример:



На этом чарте выделены руки, которые мы играем на позиции BU с размером нашего стека от 20бб и больше (игра начинается с 25бб у каждого игрока).
Красным выделены те, что играем повышением, зеленым - те, что играем в PUSH (all-in), синим - call, (фиолетовый цвет не считаем). Все что без цвета - в пас.
Обратите внимание на то, как составлена матрица, это стандарт в покерном мире. Она делится пополам на две части - одномастные руки и разномастные, по диагонали располагаются парные карты.
Собственно это первая часть задачи - генерация подобной матрицы.

За сим я вынужден передать пальму лидерства вам, так как мои знания в ООП явно меньше чем в покере

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

Очень сложная для генерации матрица (имхо), и самый простой способ что я вижу, это просто вручную забить все в HTML с навешиванием айдишников на каждый для дальнейшего контроля. Но этот подход из прошлого века мне претит, я чувствую, что должны быть более изящные способы.


Возможно, будет удобно, если каждая рука будет описана в виде объекта, в котором будут указаны все необходимые свойства.
Такой пример:

sAK = {
    'name': 'AKs',
    'is_suited': 'true',
    'is_pair': 'false'
}

oKQ = {
    'name': 'KQo',
    'is_suited': 'true',
    'is_pair': 'false'
}

pQQ = {
    'name': 'QQ',
    'is_suited': 'false',
    'is_pair': 'true'
}


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

pQQ = {
    'name': 'QQ',
    'is_suited': 'false',
    'is_pair': 'true',
    'players_3max' : {
        'position_BU': {
            'bb20': 'call',
            'bb15': 'raise',
            'bb10': 'push',
            'bb5': 'push',
        },
        'position_BB': {
            'bb20': 'raise',
            'bb15': 'raise',
            'bb10': 'push',
            'bb5': 'push',
        },
        'position_SB': {
            'bb20': 'raise',
            'bb15': 'push',
            'bb10': 'push',
            'bb5': 'push',
        }
    },
    'players_HU' : {
        'position_BU': {
            'bb20': 'call',
            //и тд
        },
        'position_SB': {
            'bb20': 'raise',
            //и тд
        },
}

Так как я слаб в ООП (читал кое-что), то и не могу точно предположить, что подобная архитектура будет удачной.

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

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

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

Вот собственно все на пока, надеюсь на помощь, на советы, на javascript

(Примечание: "проф.покер", это когда вы играете математически правильно на протяжении тысяч игр и имеете с этого 0-10% прибыли с оборота, за счет игроков, которые играют на удачу или же просто не правильно).
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2016, 14:56
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

JoeCocker,
Вы почти хорошо описали, но не ту информацию.
Вы должны правильно сформулировать ТЗ (техническое задание).
Вы так и не объяснили, что такое O, а что такое S. Я предполагаю, что это одномастные и неодномастные, но какая буква чему соответствует я не знаю.
Насколько я понял, вам нужно создать объект, но вы хотя бы скажите что у него должно быть из параметров, не в примерах а как есть. Ну и плюс дальнейшее развитие, значит им надо и методы описывать, а о них ни слова вы не сказали. Попробую подумать над этим, как я это вижу, но ничего не обещаю.

Вот ещё вопрос. Что именно нужно с пользователем делать? Он выбирает только свою позицию и стак и тогда ему нужно просто вывести картинку см раскрашенными клеточками или же он выбирает руку позицию и стак, но тогда по идеи нужно делать какой-то макет сравнения, что прямо таки будет хреновато, потому что там условий тьма тьмущая в придачу ещё зависимые друг от друга.
Вообще, это работа достаточно большая и я не думаю, что кто-то на форуме за спасибо её всю будет делать, а если вам нужно какая-то конкретика, то здесь уже помогут без вопросов (в переносном смысле, вопросы почти всегда возникают=) ).

Последний раз редактировалось AciDWarrioR, 25.03.2016 в 15:11.
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2016, 15:14
Интересующийся
Отправить личное сообщение для JoeCocker Посмотреть профиль Найти все сообщения от JoeCocker
 
Регистрация: 23.12.2014
Сообщений: 23

Да, s - это suited, они все располагаются в верхней части.

С ТЗ всегда все сложно Это либо пятитомник надо писать, либо додумывать по ходу дела. Мне больше нравиться второй вариант, что-то вроде agile-методологии разработки.

Первый этап разработки - это матрица рук. Нужно выстроить их по порядку как на картинке.

Методы не могу описать, так как не умею ими пользоваться. Только знаю, что это могут быть функции в объекте.

По нажатию на кнопки (контроллеры), состояние объектов (рук) меняется (назначаются цвета в чарте-матрцие).

Еще раз повторю, что я не спец в программировании, и уж тем более не архитектор ПО, поэтому не могу предоставить грамотное ТЗ, но надеюсь, что в наших дискуссиях родится истина.
Ответить с цитированием
  #4 (permalink)  
Старый 25.03.2016, 15:16
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

JoeCocker,
Друг, вот я начал набрасывать. Я считаю вот как у тебя задача есть на данный момент я бы сделал вот так.
Создал бы на html все эти блоки, в css прописал бы стили для всех случаев, а за счет изменение кнопок позиции и стака уже бы тупо менял бы классы.
Вот такой вариант устраивает?
Ответить с цитированием
  #5 (permalink)  
Старый 25.03.2016, 16:29
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

Это я для себя выложил.
домой приду продолжу, но если вы сами поймете мою задумку, то очень хорошо)
<!DOCTYPE html>
<html lang="en">
<head>
	<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
  <scrit src="http://code.jquery.com/jquery-latest.min.js"></script>
  <style>
	p{
		border: 1px solid black;
		width: 50px;
		height: 50px;
		display: table-cell;
		text-align: center;
		vertical-align: middle;
	}
	.blue{
		background-color: blue;
	}
	.purple{
		background-color: #AD009F;
	}
	.red{
		background-color: red;
	}
	.green{
		background-color: green;
	}
  </style>
<script>
</script>
<body>
	<div id="position">
		<input type="radio" name="position" checked="true">BU</input>
		<input type="radio" name="position">SB</input>
		<input type="radio" name="position">BB</input>
	</div>
	<div id="stack">
		<input type="radio" name="stack">5BB</input>
		<input type="radio" name="stack">10BB</input>
		<input type="radio" name="stack">15BB</input>
		<input type="radio" name="stack" checked="true">20BB</input>
	</div>
	<div>
	  	<div id="line1"><p id="v14140">AA</p><p id="v14122">AKs</p><p id="v14122">AQs</p><p id="v14112">AJs</p><p id="v14102">ATs</p><p id="v1492">A9s</p><p id="v1482">A8s</p><p id="v1472">A7s</p><p id="v1462">A6s</p><p id="v1452">A5s</p><p id="v1442">A4s</p><p id="v1432">A3s</p><p id="v1422">A2s</p></div>
	  	<div id="line2"><p id="v14131">AKо</p><p id="v13130">KK</p><p id="v13122">KQs</p><p id="v13112">KJs</p><p id="v13102">KTs</p><p id="v1392">K9s</p><p id="v1382">K8s</p><p id="v1372">K7s</p><p id="v1362">K6s</p><p id="v1352">K5s</p><p id="v1342">K4s</p><p id="v1332">K3s</p><p id="v1322">K2s</p></div>
	  	<div id="line3"><p id="v14121">AQo</p><p id="v13121">KQo</p><p id="v12120">QQ</p><p id="v12112">QJs</p><p id="v12102">QTs</p><p id="v1292">Q9s</p><p id="v1282">Q8s</p><p id="v1272">Q7s</p><p id="v1262">Q6s</p><p id="v1252">Q5s</p><p id="v1242">Q4s</p><p id="v1232">Q3s</p><p id="v1222">Q2s</p></div>
	  	<div id="line4"><p id="v14111">AJo</p><p id="v13111">KJo</p><p id="v11121">QJo</p><p id="v11110">JJ</p><p id="v11102">JTs</p><p id="v1192">J9s</p><p id="v1182">J8s</p><p id="v1172">J7s</p><p id="v1162">J6s</p><p id="v1152">J5s</p><p id="v1142">J4s</p><p id="v1132">J3s</p><p id="v1122">J2s</p></div>
	  	<div id="line5"><p id="v14101">ATo</p><p id="v13101">KTo</p><p id="v12101">QTo</p><p id="v11101">JTo</p><p id="v10100">TT</p><p id="v1092">T9s</p><p id="v1082">T8s</p><p id="v1072">T7s</p><p id="v1062">T6s</p><p id="v1052">T5s</p><p id="v1042">T4s</p><p id="v1032">T3s</p><p id="v1022">T2s</p></div>
	  	<div id="line6"><p id="v1491">A9o</p><p id="v1391">K9o</p><p id="v1291">Q9o</p><p id="v1191">J9o</p><p id="v1091">T9o</p><p id="v990">99</p><p id="v982">98s</p><p id="v972">97s</p><p id="v962">96s</p><p id="v952">95s</p><p id="v942">94s</p><p id="v932">93s</p><p id="v922">92s</p></div>
	  	<div id="line7"><p id="v1481">A8o</p><p id="v1381">K8o</p><p id="v1281">Q8o</p><p id="v1181">J8o</p><p id="v1081">T8o</p><p id="v981">98o</p><p id="v880">88</p><p id="v872">87s</p><p id="v862">86s</p><p id="v852">85s</p><p id="v842">84s</p><p id="v832">83s</p><p id="v822">82s</p></div>
	  	<div id="line8"><p id="v1471">A7o</p><p id="v1371">K7o</p><p id="v1271">Q7o</p><p id="v1171">J7o</p><p id="v1071">T7o</p><p id="v971">97o</p><p id="v871">87o</p><p id="v770">77</p><p id="v762">76s</p><p id="v752">75s</p><p id="v742">74s</p><p id="v732">73s</p><p id="v722">72s</p></div>
	  	<div id="line9"><p id="v1461">A6o</p><p id="v1361">K6o</p><p id="v1261">Q6o</p><p id="v1161">J6o</p><p id="v1061">T6o</p><p id="v961">96o</p><p id="v861">86o</p><p id="v761">76o</p><p id="v660">66</p><p id="v652">65s</p><p id="v642">64s</p><p id="v632">63s</p><p id="v622">62s</p></div>
	  	<div id="line10"><p id="v1451">A5o</p><p id="v1351">R5o</p><p id="v1251">Q5o</p><p id="v1151">J5o</p><p id="v1051">T5o</p><p id="v951">95o</p><p id="v851">85o</p><p id="v751">75o</p><p id="v651">65o</p><p id="v550">55</p><p id="v542">54s</p><p id="v532">53s</p><p id="v522">52s</p></div>
	  	<div id="line11"><p id="v1441">A4o</p><p id="v1341">K4o</p><p id="v1241">Q4o</p><p id="v1141">J4o</p><p id="v1041">T4o</p><p id="v941">94o</p><p id="v841">84o</p><p id="v741">74o</p><p id="v641">64o</p><p id="v541">54o</p><p id="v440">44</p><p id="v432">43s</p><p id="v422">42s</p></div>
	  	<div id="line12"><p id="v1531">A3o</p><p id="v1331">K3o</p><p id="v1231">Q3o</p><p id="v1131">J3o</p><p id="v1031">T3o</p><p id="v931">93o</p><p id="v831">83o</p><p id="v731">73o</p><p id="v631">63o</p><p id="v531">53o</p><p id="v431">43o</p><p id="v330">33</p><p id="v322">32s</p></div>
	  	<div id="line13"><p id="v1421">A2o</p><p id="v1321">K2o</p><p id="v1221">Q2o</p><p id="v1121">J2o</p><p id="v1021">T2o</p><p id="v921">92o</p><p id="v821">82o</p><p id="v721">72o</p><p id="v621">62o</p><p id="v521">52o</p><p id="v421">42o</p><p id="v321">32o</p><p id="v220">22</p></div>
	</div>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 25.03.2016, 17:04
Интересующийся
Отправить личное сообщение для JoeCocker Посмотреть профиль Найти все сообщения от JoeCocker
 
Регистрация: 23.12.2014
Сообщений: 23

Думаю, что ID лучше назначать со смыслом:
o75 = разномастные 75
sKQ = одномастные KQ
Ответить с цитированием
  #7 (permalink)  
Старый 25.03.2016, 17:06
Интересующийся
Отправить личное сообщение для JoeCocker Посмотреть профиль Найти все сообщения от JoeCocker
 
Регистрация: 23.12.2014
Сообщений: 23

Это самый простой вариант и совсем не ООП, хотелось бы получить новый опыт
Ответить с цитированием
  #8 (permalink)  
Старый 25.03.2016, 18:15
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

Rise,
Чтобы высчитывать потом значения больше меньше.
JoeCocker,
1) там итак уникальные значения. 1ая(ые) цифры старшая карта вторая (ые) младшая последняя цифра 0 - пара 1- разномасть 2 - одномастные. Буквы заменены цифрами для сравнения. Получаем значения id обрезаем первый символ и сравниваем значения. Больше N но меньше M ставим класс такой-то и так далее.
2) Вы хотите новый опыт, при этом чтобы писали другие? Как то не вяжется.
3) Да это самый простой вариант, так как задачу вы нормально не поставили, а для решения такой задачи как я сказал это то, что надо. Хотите другое, сформулируйте тз.

Последний раз редактировалось AciDWarrioR, 25.03.2016 в 18:22.
Ответить с цитированием
  #9 (permalink)  
Старый 26.03.2016, 19:11
Интересующийся
Отправить личное сообщение для JoeCocker Посмотреть профиль Найти все сообщения от JoeCocker
 
Регистрация: 23.12.2014
Сообщений: 23

Конечно я бы хотел сам сделать, но мне не хватает инструментария. Есть чуйка что на реакте такие приложения в самый раз делать.
Или другой фреймворк подходящий?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание Конструктора sheckler Элементы интерфейса 1 25.05.2015 12:02
Динамическое создание матрицы div и присвоением значений элементам sonntagausgang Общие вопросы Javascript 5 07.12.2013 07:51
Создание своей библиотеки. Создание двух одинаковых объектов. Как избежать? IDCh Javascript под браузер 2 31.10.2012 12:53
Создание скрипта "Итеррационные циклы" по формуле krasopetka Общие вопросы Javascript 0 17.11.2011 12:42
Создание скрипта! Создание диктанта для учеников! Елизавета Работа 10 30.06.2010 21:00