"Canasta Opening" - карточная игра на Point JS

Страница 1 из 6 1, 2, 3, 4, 5, 6  Следующий

Перейти вниз

"Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Пн Янв 08, 2018 8:17 pm

Всем привет. Изучая уроки программирования Scannera на "point js" и внушаемый мыслями моего "умного" знакомого мне пришла идея создать карточную игру "canasta opening". Я буду вам многим признателен и очень благодарен в оказании помощи в написании данной игры на point.js. Используемая версия движка - pointjs_0.2.0.1. "Канвас" и фон уже созданы, ресурсы для игры - имеются.

ПРАВИЛА ИГРЫ:
В игре принимают участие 2 игрока. Для компьютерного варианта (игрок и компьютер). Используется 1 колода в 54 листа. ( 13 треф,пик,червей,бубей и 2 джокера(красный и чёрный)).
Перед каждой партией колода тасуется и раздаётся. Раздаётся каждому игроку по 9 карт в открытую. Игроки делают по очереди свои ходы.
ПОЛЕ ДЛЯ ИГРЫ: По 9 карт в "руке" у каждого игрока. "Закрытая колода", "Колода для сноса" - формируется путём сбросов игроков ненужных карт, зона для выкладки комбинаций.
В данной игре возможно 2 окончания (выигрыш и ничья)
ВЫИГРЫШ: чтобы выиграть игру необходимо сбросить со своей руки все карты путём выкладки следующих комбинаций (МАСТЬ и ЗНАЧЕНИЕ). МАСТЬ - комбинация состоящая минимум из 4х карт одной масти идущих по порядку (пример масти: Туз бубей, 2 буби, 3 буби, 4 буби). Максимально МАСТЬ может состоять из 14 карт (от 2-ки до туза и джокера под цвет масти).Туз является "переходящей" картой, то есть комбинация может быть с тузом такой (пример масти: Туз бубей, 2 буби, 3 буби, 4 буби), а может быть и такой (пример ещё бубновой масти: Дама буби, Король буби, Туз буби, 2-ка буби). По ЗНАЧЕНИЮ карт может быть от 3х до 6-ти. Пример (10 буби, 10 треф, 10 червей) - комбинация ЗНАЧЕНИЕ из 3х карт.
АЛГОРИТМ ХОДА(начало игры): а) игрок берёт из "закрытой колоды" карту и кладёт её в свою "руку" б) Игрок изучает свою "руку" со взятой картой из закрытой колоды. в)Игрок в праве выложить получившуюся одну или несколько комбинаций, если таковые у него имеются. Допустим комбинация у игрока есть, тогда он её объявляет или не объявляет с целью собрать ещё лучшую "руку" для сбора комбинаций. Если он её объявляет то следующий пункт "г)" снос любой карты из своей "руки" в "колоду для сноса". Если игрок комбинацию не выкладывает, то он также сносит любую карту из своей "руки" в "колоду для сноса". После этого ход переходит к следующему игроку.
ДЖОКЕРЫ: Джокер заменяет собой любую карту в комбинациях. Красный джокер может идти только в красную МАСТЬ (буби,червы), чёрный джокер может идти только в чёрную МАСТЬ(пики, трефы). Джокер может так же пойти в комбинацию ЗНАЧЕНИЕ только при условии, что в ЗНАЧЕНИИ уже есть минимум 2 "натуральные" карты. Пример две 2-ки любых мастей и любой джокер как 3-я 2-ка.
СНОС ДЖОКЕРА. Если джокера сносит игрок в "колоду для сноса" (редко,но могут возникнуть и такие ситуации), то следующий игрок не может "завалить" "колоду для сноса". Он должен покрыть джокера любой другой своей картой, даже джокером, если таковой у него имеется.
ЗАВАЛ КОЛОДЫ для сноса: если верхняя карта в колоде (кроме джокера) может пойти в комбинацию игроку, чья очерёдность хода, то тот игрок может по своему усмотрению взять верхнюю карту из "колоды для сноса" к себе в объявляемую комбинацию. Если под верхней картой в "колоде для сноса" лежат ещё какие-нибудь карты, то они автоматически идут в "руку" к тому игроку, который "завалил" колоду.
НИЧЬЯ и ОБЪЯВЛЕНИЕ ВЫИГРЫША: Ничья засчитывается при условии нахождения в "руках" игроков минимум 1 карты и наличия 0 карт в "закрытой" колоде. При ничьей оставшиеся карты на руках игроков засчитываются в минус. 1 каждая оставшаяся карта = 1 очко в минус. Чтобы объявить выигрыш игрок должен со своей руки сбросить все карты путём выкладки комбинаций. Минимум может быть выложена 1 масть и 1 комбинация по значению. Взятие "выигрышной" карты из "закрытой колоды" называется "ЦУМО" - не путать с "СУМО"

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Пн Янв 08, 2018 8:20 pm

а взятие карты, которая даёт выигрыш по объявленным комбинациям из "колоды для сноса" - "РОНом".
НАЧИСЛЕНИЕ ОЧКОВ ЗА КОМБИНАЦИИ:
МАСТЬ: ---------------ЗНАЧЕНИЕ:
4 карт - 1 очко, ----3 карты - 1 очко
5 карт - 2 очка, ----4 карты - 3 очка
6 карт - 3 очка, ----5 карт - 7 очков
7 карт - 4 очка, ----6 карт - 10 очков
8 карт - 5 очков,
9 карт - 6 очков,
10 карт - 7 очков,
11 карт - 8 очков,
12 карт - 9 очков,
13 карт - 10 очков,
14 карт - 11 очков (джокер)

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Вт Янв 09, 2018 10:26 am

Собственно возникли следующие вопросы:
1. Реализация AI (искусственный интеллект"компьютер").
2. Создание "рук" игроков и реализация сдачи карт в них.
3. Создание "колоды для сноса", "закрытой-основной колоды".
4. Реализация хода игрока и компьютера.
Пока это основные вопросы. Сами правила - думаю написать не сложно будет. Их можно написать через операторы IF ELSE. Подсчёт очков оставим на будущее пока что. Поскольку я не математик, а гуманитарий Smile - мне понять всю логику - это непостижимо.(

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор Pyro338 в Вт Янв 09, 2018 11:54 am

конкретизируй задачи. что уже сделано?

2. Создание "рук" игроков и реализация сдачи карт в них.

ну это вообще простою у тебя есть массив объектов - карт и ты этот массив рандомом перемешиваешь, а потом с конца сплитишь, а соответственно игроку и компьютерному игроку - пушишь в массивы
avatar
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 33
Откуда : Ставрополь

Посмотреть профиль http://pyro338.ru/

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор raingo в Вт Янв 09, 2018 2:19 pm

конкретизируй задачи. что уже сделано?
Походу только фон в канвасе))

AlexeyOK, для начала тебе нужно сделать управление. Создать объект "карта". Когда нажимаешь на карту она цепляется к мышке. Когда мышку отжимаешь карта падает на нужный слот. Следующие шаги - потом.

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

1) Какие у тебя знания js? Знаешь что такое массивы, функции?
2) Каким редактором кода пользуешься?

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор Dessan в Вт Янв 09, 2018 3:54 pm


Dessan
Юный падаван

Сообщения : 426
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Вт Янв 09, 2018 7:31 pm

raingo, знания у меня по js базовые. С функциями, массивами данных, с переменными знаком. Управление мышью почти уже настроил.) Редактор использую "Sublime Text 2". Браузер - Опера.

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Вт Янв 09, 2018 7:38 pm

Благодарю.) Очень полезное видео.) Wink

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор S30N1k в Ср Янв 10, 2018 3:06 pm

Делал как то карточную игру "101" на поинте. поищу вечером в компе, если найду исходники то кину)
если я верно понял, то в ней надо будет правила немного изменить и получится нужная тебе игра.
avatar
S30N1k

Сообщения : 97
Дата регистрации : 2017-12-27

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор raingo в Ср Янв 10, 2018 4:20 pm

S30N1k, AI тоже писал? На if-else?

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор raingo в Ср Янв 10, 2018 4:22 pm

Есть идея, как сделать ai без if-else, но не знаю насколько она прагматична.

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

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор raingo в Ср Янв 10, 2018 4:24 pm

Собсно условия тоже можно засунуть в массив и таким образом обойтись без if-else вообще. Надо подумать.

Типа события-состояния(2 в 1) как в конечных автоматах. Только упрощенное, ибо нафиг в простой игре конечные автоматы и эвристические функции?

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор raingo в Ср Янв 10, 2018 5:22 pm

Собсно я затупил. У самой игры есть состояния и события, которые меняют состояния.

Например, состояние "ход 1 игрока" и событие "1 игрок завершает ход", после чего запускается событие "2 игрок начинает ход" и игра меняет состояние на "ход 2 игрока" и так по кругу.

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

Это просто наиболее удобный вариант реализации архитектуры.

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор Pyro338 в Ср Янв 10, 2018 5:43 pm

события и слушатели событий, а на слушатели - функции обработки. как-то так
avatar
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 33
Откуда : Ставрополь

Посмотреть профиль http://pyro338.ru/

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор raingo в Ср Янв 10, 2018 5:51 pm

Да, точно. Это связь разных игроков и ai. Хотя если подумать, то может и не нужна такая сложная система. Тут надо начать делать, а уже потом понять, какой вариант оптимальный.

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Ср Янв 10, 2018 6:52 pm

Мозгуемс и работаем потихоньку. Думаю не проще будет всё в массивы запихать? Например "рука игрока" - это 1 массив данных, "рука компьютера" - это 2-й массив данных, "закрытая колода" - это 3-й массив, "колода для сноса" - 4-й массив...

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Ср Янв 10, 2018 6:56 pm

Ждёмс ответа многоуважаемого "S30N1k". Cool Дерево условий? - с этим возможно затруднения точно возникнут. Это что-то похоже на создание эндшпильных баз, как на шахматах.

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор S30N1k в Ср Янв 10, 2018 7:45 pm

AlexeyOK пишет:Мозгуемс и работаем потихоньку. Думаю не проще будет всё в массивы запихать? Например "рука игрока" - это 1 массив данных, "рука компьютера" - это 2-й массив данных, "закрытая колода" - это 3-й массив, "колода для сноса" - 4-й массив...
Ну у меня как то так и есть, только вместо ИИ другой игрок. Онлайновая кароче.
До дома еще не добрался, забухал =\
avatar
S30N1k

Сообщения : 97
Дата регистрации : 2017-12-27

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Ср Янв 10, 2018 7:59 pm

S30N1k пишет:
AlexeyOK пишет:Мозгуемс и работаем потихоньку. Думаю не проще будет всё в массивы запихать? Например "рука игрока" - это 1 массив данных, "рука компьютера" - это 2-й массив данных, "закрытая колода" - это 3-й массив, "колода для сноса" - 4-й массив...
Ну у меня как то так и есть, только вместо ИИ другой игрок. Онлайновая кароче.
До дома еще не добрался, забухал =\
Это не беда, вариант онлайновой версии тоже возможно разработается. Как же заменить 2-го обычного игрока на компьютерные мозги? С другим человеком можно в принципе и за одной машиной сразиться.
Главное верно разработать алгоритм полного хода: 1."Взятие карты" из колоды, если только начало партии - то понятно, что из "закрытой" берёшь. 2-е - выкладка комбинаций, если такое возможно. Далее сброс ненужной карты в "колоду для сноса". Ход завершён и наступает далее следующий цикл, его уже делает следующий игрок, когда он свой ход завершит, вновь очередь ходить 1-му игроку.

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор S30N1k в Пт Янв 12, 2018 3:05 am

Все архивы на ноуте перековырял, не нашел =\ Сорян
avatar
S30N1k

Сообщения : 97
Дата регистрации : 2017-12-27

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор Pyro338 в Пт Янв 12, 2018 9:06 am

у меня смутное ощущение, что проще сначала сделать игру на двоих человек - отработать механику раздач там, снятий, получения очков и вот этого вот всего. короче чтобы правила заработали. а потом уже прикручивать туда какой-то ИИ
avatar
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 33
Откуда : Ставрополь

Посмотреть профиль http://pyro338.ru/

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Вт Янв 30, 2018 10:17 pm

Всем привет.) Проект не заброшен.) Я продвигаюсь в его создании.) Вопросы (на чём заглох):
1. Реализация растасовки колоды и раздача верхних карт её игрокам.
2. Реализация алгоритма "хода"...Пока что получилось: https://i.servimg.com/u/f62/19/85/07/61/ieaezz10.png
Карты можно спокойно перетаскивать мышкой.)


Создал массивы данных, а дальше - не пойму как быть...

var BaseColClose = ['c2c','c3c','c4c','c5c','c6c','c7c','c8c','c9c','c10c','cjc','cqc','ckc','cac','c2h','c3h','c4h','c5h','c6h','c7h','c8h','c9h','c10h','cjh','cqh','ckh','cah','c2s','c3s','c4s','c5s','c6s','c7s','c8s','c9s','c10s','cjs','cqs','cks','cas','c2d','c3d','c4d','c5d','c6d','c7d','c8d','c9d','c10d','cjd','cqd','ckd','cad','cjkb','cjkk'];
var PlayerOpenCards = ['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
var CompOpenCards = ['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];


AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор Pyro338 в Вт Янв 30, 2018 10:58 pm

как вариант:

можно перемешать массив такой функцией

Код:
/* Array.shuffle( deep ) - перемешать элементы массива случайным образом

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

      нужно ли рекурсивно обрабатывать вложенные массивы;

      по умолчанию false (не обрабатывать)

*/

Array.prototype.shuffle = function( b )

{

 var i = this.length, j, t;

 while( i )

 {

  j = Math.floor( ( i-- ) * Math.random() );

  t = b && typeof this[i].shuffle!=='undefined' ? this[i].shuffle() : this[i];

  this[i] = this[j];

  this[j] = t;

 }

 return this;

};

Примеры использования:

Код:
// Перемешивание одномерного массива

var a = new Array(1,2,3,4,5);

alert( a.shuffle() );

//Перемешать включая вложенные массивы

alert( ['a','b','c', [1,2,3,4,5], 'D','E','F'].shuffle(true) );

или такой вариант:

Код:
var arr = [1, 2, 3, 4, 5];

function compareRandom(a, b) {
  return Math.random() - 0.5;
}

arr.sort(compareRandom);

alert( arr ); // элементы в случайном порядке, например [3,5,1,2,4]

берем карту

Код:

PlayerOpenCards.push(BaseColClose[BaseColClose.length-1]);
BaseColClose.splice(BaseColClose.length-1, 1);

даем карту компьютерному игроку

Код:

CompOpenCards.push(BaseColClose[BaseColClose.length-1]);
BaseColClose.splice(BaseColClose.length-1, 1);
avatar
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 33
Откуда : Ставрополь

Посмотреть профиль http://pyro338.ru/

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор AlexeyOK в Ср Янв 31, 2018 11:47 am

Pyro338, благодарю за информацию. Извиняюсь за ещё 1 вопрос.

var BasecolCl = game.newImageObject({
file : 'card_mask.bmp',
x : 1170,
y : 400,
h : 107,
w : 74,
scale : 1.5
}); можно ли к нему добавить массив данных, содержащийся в переменной "BaseColClose"?

AlexeyOK

Сообщения : 50
Дата регистрации : 2018-01-08

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор Pyro338 в Ср Янв 31, 2018 1:07 pm

да, можно. например

Код:

var BasecolCl = game.newImageObject({
    file : 'card_mask.bmp',
    x : 1170,
    y : 400,
    h : 107,
    w : 74,
    scale : 1.5,
    userData : {
              score    : 150,
              hurtScore: 0,
              health  : 1,
              damage  : 1,
            }
});

и да. использовать bmp - не самая лучшая идея. лучше png или jpg
avatar
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 33
Откуда : Ставрополь

Посмотреть профиль http://pyro338.ru/

Вернуться к началу Перейти вниз

Re: "Canasta Opening" - карточная игра на Point JS

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Страница 1 из 6 1, 2, 3, 4, 5, 6  Следующий

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения