"Canasta Opening" - карточная игра на Point JS
Участников: 5
Страница 5 из 6
Страница 5 из 6 • 1, 2, 3, 4, 5, 6
Re: "Canasta Opening" - карточная игра на Point JS
Код хорош, только меня тут смутил немного он:
...if (mouse.isPeekObject('LEFT', finish_round_button)) { //если тыкаем "завершить ход"
game_step = 3;//переходим к следующему шагу
}
break;
case 3:
addCardToPlayer(comp_cards); //даем игроку карту... - ?
После завершения своего хода (игрок) - ход передаётся компьютеру, при этом игроку карты из "закрытой" или из "колоды для сноса" не добавляются.
...if (mouse.isPeekObject('LEFT', finish_round_button)) { //если тыкаем "завершить ход"
game_step = 3;//переходим к следующему шагу
}
break;
case 3:
addCardToPlayer(comp_cards); //даем игроку карту... - ?
После завершения своего хода (игрок) - ход передаётся компьютеру, при этом игроку карты из "закрытой" или из "колоды для сноса" не добавляются.
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
addCardToPlayer(comp_cards); //даем игроку карту... - ?
ну в смысле игроку-компьютеру - comp_cards
карты компу добавляются, но он сразу что-то с ними делает. можно добавить туда задержку, чтобы это лучше выглядело
Re: "Canasta Opening" - карточная игра на Point JS
Да, лучше добавить задержку.) Это 1-е.
2-е - посмотрел ещё раз на скрин - комбинации по ЗНАЧЕНИЮ выглядят просто шикарно, но с комбинациями МАСТЬ - сплошные глюки. Немного не так поняли видимо. МАСТЬЮ считается комбинация в которой от четырёх карт все карты идут по порядку (как в покере - стрейт флеш). По сути комбинация МАСТЬ - это и есть "стрейт-флеш" от 4 карт и выше.
2-е - посмотрел ещё раз на скрин - комбинации по ЗНАЧЕНИЮ выглядят просто шикарно, но с комбинациями МАСТЬ - сплошные глюки. Немного не так поняли видимо. МАСТЬЮ считается комбинация в которой от четырёх карт все карты идут по порядку (как в покере - стрейт флеш). По сути комбинация МАСТЬ - это и есть "стрейт-флеш" от 4 карт и выше.
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
я это понял, но не придумал как сделать. по этому сейчас тупо масть - это любые карты одной масти + джокер того-же цветасплошные глюки. Немного не так поняли видимо. МАСТЬЮ считается комбинация в которой от четырёх карт все карты идут по порядку
Re: "Canasta Opening" - карточная игра на Point JS
Ещё заметил глюк, карты из "закрытой колоды" берутся автоматически без возможности выбора валить ли "колоду для сноса". Получается что колоду для сноса можно завалить даже тогда, когда взята уже карта из "закрытой колоды". Ещё видимо глюк - когда у игрока или у компьютера слишком много карт - то они уходят за экран и становятся недоступными.
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
по поводу того, что карты вылезают за экран - я там в комментариях отметил - где это должно быть доделано
получается что так. можешь переделать как надо. я так до конца и не понял механику - что в какой момент можно делать, а что в какой момент нельзя.
и да: глюк - это неожиданное, непредсказуемое поведение программы. а то что программа работает не по такому алгоритму, который нужен - это не глюк, а неточное/неверное составление алгоритма
- Код:
let card_offset_x = 0; //тут надо придумать сдвиг, чтобы все карты в экран помещались
player_cards_array = player_cards_array.filter(function(n){ return n != undefined });
player_cards_array.sort(fieldSorter(['card_suite', 'card_score'])); //сортируем карты по масти и по достоинству
if(player_cards_array.length > 15){
//card_offset_x = 20;
}
Получается что колоду для сноса можно завалить даже тогда, когда взята уже карта из "закрытой колоды".
получается что так. можешь переделать как надо. я так до конца и не понял механику - что в какой момент можно делать, а что в какой момент нельзя.
и да: глюк - это неожиданное, непредсказуемое поведение программы. а то что программа работает не по такому алгоритму, который нужен - это не глюк, а неточное/неверное составление алгоритма
Re: "Canasta Opening" - карточная игра на Point JS
Тут следует написать несколько проверок через IF ELSE я думаю...Pyro338 пишет:я это понял, но не придумал как сделать. по этому сейчас тупо масть - это любые карты одной масти + джокер того-же цветасплошные глюки. Немного не так поняли видимо. МАСТЬЮ считается комбинация в которой от четырёх карт все карты идут по порядку
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
возможно. но там нужно еще учитывать, что джокер может принимать любое значение и что комбинации могут идти через туза по кругу, а это - хз как сделатьТут следует написать несколько проверок через IF ELSE я думаю...
Re: "Canasta Opening" - карточная игра на Point JS
Да ,это видимо пока будет создать проблематично. А что по поводу добавления карт в уже созданные комбинации?
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
ну это можно в принципе. комбинации хранятся в массивах player_combinations и comp_combinations - проверяешь, чтобы соответстовало правилам всё и пушишь тудаА что по поводу добавления карт в уже созданные комбинации
Re: "Canasta Opening" - карточная игра на Point JS
Не знаю, говорил здесь уже или нет, есть ещё глюк, почему-то карта из закрытой колоды берётся всегда, даже если "заваливаем" колоду для сноса. Это первое. Второе - забыл ещё про одно условие сказать - оно довольно важное, хоть и встречается крайне редко - если у игрока осталась 1 карта и собрана только комбинация ЗНАЧЕНИЕ (несколько комбинаций по значению), но нет комбинации МАСТЬ - то дискард (снос карты в колоду для сноса) становится невозможным и игрок при своём ходе должен пропустить снос.
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
потому что если ты смотрел код, сейчас карта из колоды берется всегда. а завал - по желанию.карта из закрытой колоды берётся всегда, даже если "заваливаем" колоду для сноса.
об этом ты точно не говорилесли у игрока осталась 1 карта и собрана только комбинация ЗНАЧЕНИЕ (несколько комбинаций по значению), но нет комбинации МАСТЬ - то дискард (снос карты в колоду для сноса) становится невозможным и игрок при своём ходе должен пропустить снос.
Re: "Canasta Opening" - карточная игра на Point JS
Я тут подумал и решил. Чтобы правильно составить комбинацию МАСТЬ, для этого надо каждой карте присвоить свой уникальный номер (ID) и уже манипулировать с ним. Для упрощения возьмём просто "карты-цифры 1,2,3,4". Если карты идут по порядку - то выкладываем комбинацию, если карты идут не по порядку - комбинацию не делаем.
Ещё уточнение про...
если у игрока осталась 1 карта и собрана только комбинация МАСТЬ (несколько комбинаций по МАСТИ), но нет комбинации по ЗНАЧЕНИЮ - то дискард (снос карты в колоду для сноса) становится невозможным и игрок при своём ходе должен пропустить снос.
Ещё уточнение про...
если у игрока осталась 1 карта и собрана только комбинация МАСТЬ (несколько комбинаций по МАСТИ), но нет комбинации по ЗНАЧЕНИЮ - то дискард (снос карты в колоду для сноса) становится невозможным и игрок при своём ходе должен пропустить снос.
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
функция parseCardValue(card) парсит название карты в ее масть и значение. соответсвенно у каждой карты card_score - это значение от 2 до 15 (15 - джокер), а card_suite - масть: 1 - пики, 2 - кресты, 3 - буби, 4 - червы, 5 - красный джокер, 6 - черный джокер
Re: "Canasta Opening" - карточная игра на Point JS
Значит выходит, что "card score" - это и есть ID карты...
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
ну не совсем. у десятки пик и у десятки бубей будет одинаковый card_score - 10, а у дам - 12 например
Re: "Canasta Opening" - карточная игра на Point JS
короче посмотрел тут ролики на ютубу - играют вообще не так как ты написал. на русском не нашел, видимо у нас эту игру вообще не знают, но из англоязычных роликов выяснил для себя следующее:
1) в игре участвуют 2 колоды.
2) колода сдается по 15 карт, одна карта сразу ложится в колоду для сноса.
3) какая-то хрень с тройками. ну короче их в сторону откладывают. не понял.
4) игрок, чей ход, если у него меньше 15 карт, добирает до 15-и, либо сносит колоду для сноса.
5) выкладывает комбинации. "по масти" - такого не увидел. все выкладывают "по значению". двойка используется вместо любой карты (типа как ты про джокеров писал).
6) если в комбинации 7 карт их складывают в стопку и отодвигают в сторону.
7) игрок сносит карту.
второй игрок делает с 4 по 7 действия и так по очереди.
9) если на руках у игрока не остается карт, например он подобавлял в комбинации, а последнюю карту снес, раунд заканчивается в независимости от того, остались ли карты в колоде.
10) считаются очки в комбинациях.
11) начинается новый раунд - действия с 1 по 10.
12) если после окончания очередного раунда, кто-то набрал больше 5000 очков, он выиграл. если оба, то ничья.
ну вот это так американцы играют судя по ютубу.
1) в игре участвуют 2 колоды.
2) колода сдается по 15 карт, одна карта сразу ложится в колоду для сноса.
3) какая-то хрень с тройками. ну короче их в сторону откладывают. не понял.
4) игрок, чей ход, если у него меньше 15 карт, добирает до 15-и, либо сносит колоду для сноса.
5) выкладывает комбинации. "по масти" - такого не увидел. все выкладывают "по значению". двойка используется вместо любой карты (типа как ты про джокеров писал).
6) если в комбинации 7 карт их складывают в стопку и отодвигают в сторону.
7) игрок сносит карту.
второй игрок делает с 4 по 7 действия и так по очереди.
9) если на руках у игрока не остается карт, например он подобавлял в комбинации, а последнюю карту снес, раунд заканчивается в независимости от того, остались ли карты в колоде.
10) считаются очки в комбинациях.
11) начинается новый раунд - действия с 1 по 10.
12) если после окончания очередного раунда, кто-то набрал больше 5000 очков, он выиграл. если оба, то ничья.
ну вот это так американцы играют судя по ютубу.
Re: "Canasta Opening" - карточная игра на Point JS
Pyro338, что-то не очень выходит пока что. Так и заглох на комбинациях. Да мой вариант (точнее моего знакомого) естественно отличается от разновидности, предложенной тобой. Да, такую "канасту" я знаю. Что-то как-то она не мне. Мало там думать надо. А вот эта "канаста", которая делается сейчас - вот она очень даже "мозговитая". И тут сдаётся по 9 карт каждому игроку изначально. Далее по своей очереди игроки берут карты из колоды. Очки будут тоже считаться по выложенным комбинациям. Ещё для улучшения можно прописать, сколько карт осталось в "закрытой" колоде.
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
ясно. ну кстати как добавлять в комбинации я придумал. примерно так
- Код:
can_info_label.text = 'Ваш ход';
if (!can_card_in_hand) {
can_player_cards.forEach(function (item, index) {
if (mouse.isPeekObject('LEFT', item)) {
can_card_active = item;
can_card_active.w = can_card_width;
can_card_active.h = can_card_height;
can_player_cards.splice(index, 1);
can_card_in_hand = true;
}
});
} else {
can_card_active.setPositionC(mouse.getPosition());
can_card_active.draw();
if (can_is_pulled == false) { //если карта не снесена
if (mouse.isPress('LEFT') && mouse.isInObject(can_deck_pull)) {
can_pull.push(can_card_active);
can_card_in_hand = false;
can_pull[can_pull.length - 1].x = can_deck_pull.x;
can_pull[can_pull.length - 1].y = can_deck_pull.y;
can_deck_pull.file = can_pull[can_pull.length - 1].file;
can_pull_count++;
can_is_pulled = true;
}
}
can_player_cells.forEach(function (item, index) {
if (mouse.isPress('LEFT') && mouse.isInObject(item) && can_player_combinations[index] != undefined) {
can_player_combinations[index].push(can_card_active);
can_card_in_hand = false;
can_player_combinations[index][can_player_combinations[index].length - 1].x = can_left_offset + (can_card_width + 5) * index;
can_player_combinations[index][can_player_combinations[index].length - 1].y = height / 2 + 40 + 20 * can_player_combinations[index].length - 1;
}
});
}
Re: "Canasta Opening" - карточная игра на Point JS
А я проще думал - "комбинации" - это ведь тоже "массивы". Берём карту из одного массива (рука игрока) и добавляем карту в массив "комбинация". По логике - всё просто, но на практике...увы. Главное чтобы ещё всё работало "как надо".)
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
да. комбинации - это тоже массивы. вот в этой строчке мы добавляем активную карту к этому массиву can_player_combinations[index].push(can_card_active);
Re: "Canasta Opening" - карточная игра на Point JS
Код возможно и правильный, только как его проверить? На счёт определения конца раунда. Можно проверку записать так: Если в "закрытой колоде" осталось 0 карт, и если в массиве рук игрока или компа после выкладки комбинаций осталось тоже 0 карт, то раунд объявляем законченным.
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Re: "Canasta Opening" - карточная игра на Point JS
именно
На счёт определения конца раунда. Можно проверку записать так: Если в "закрытой колоде" осталось 0 карт, и если в массиве рук игрока или компа после выкладки комбинаций осталось тоже 0 карт, то раунд объявляем законченным.
ну вот например как в "дураке" я делал
- Код:
function fool_checkGameOver() {
if (fool_player_cards.length == 0 && fool_comp_cards.length != 0 && fool_cards_count == 0) {
fool_wins++;
fool_wins_label.text = 'Победы: ' + fool_wins;
fool_cards_count = -1;
fool_restart_button.setPositionC(point(width / 2, height / 2));
fool_game_state = 5;
} else if (fool_player_cards.length != 0 && fool_comp_cards.length == 0 && fool_cards_count == 0) {
fool_loses++;
fool_loses_label.text = 'Поражения: ' + fool_loses;
fool_cards_count = -1;
fool_restart_button.setPositionC(point(width / 2, height / 2));
fool_game_state = 6;
} else if (fool_player_cards.length == 0 && fool_comp_cards.length == 0 && fool_cards_count == 0) {
fool_draws++;
fool_draws_label.text = 'Ничьи: ' + fool_draws;
fool_cards_count = -1;
fool_restart_button.setPositionC(point(width / 2, height / 2));
fool_game_state = 7;
} else {
return;
}
}
и каждый игровой тик вызываем fool_checkGameOver();
Re: "Canasta Opening" - карточная игра на Point JS
Конец тура: Если последняя карта была взята из "закрытой колоды" и если в массиве руки карт игрока не осталось, то есть значение равно 0 + на поле выложены его комбинации по МАСТИ и ЗНАЧЕНИЮ то объявляем выигрыш игрока по ЦУМО и присваиваем игроку бонус в 20 очков, соответственно если в массиве "руки" компьютера остались ещё какие-нибудь карты, то при подсчёте очков каждая 1 одна карта идёт "в минус". Далее ведём подсчёт очков по выложенным комбинациям. Но может же быть и другое окончание тура: Если последняя карта была взята из "закрытой колоды" и если в массиве руки карт компьютера не осталось, то есть значение равно 0 + на поле выложены его комбинации по МАСТИ и ЗНАЧЕНИЮ то объявляем выигрыш компьютера по ЦУМО и присваиваем ему бонус в 20 очков, соответственно если в массиве "руки" игрока остались ещё какие-нибудь карты, то при подсчёте очков каждая 1 одна карта идёт "в минус". Далее ведём подсчёт очков по выложенным комбинациям.
AlexeyOK- Сообщения : 50
Дата регистрации : 2018-01-08
Страница 5 из 6 • 1, 2, 3, 4, 5, 6
Страница 5 из 6
Права доступа к этому форуму:
Вы не можете отвечать на сообщения