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

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

Перейти вниз

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

Сообщение автор AlexeyOK в Ср Янв 31, 2018 9:29 pm

Pyro ещё раз благодарю за информацию.)

Что-то с кодом у меня не-то...Ошибка появляется...

var BasecolCl = game.newImageObject({

file : 'card_mask.bmp',
x : 1170,
y : 400,
h : 107,
w : 74,
scale : 1.5,
userData :{['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']}
}); - что здесь не так - не пойму. ошибка - пропущенная запятая либо она лишняя...

AlexeyOK

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

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

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

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

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

userData:{
имя: значение,
имя: значение
}

то есть в твоем случае наверное будет

Код:

var BasecolCl = game.newImageObject({
  file : 'card_mask.bmp',
  x : 1170,
  y : 400,
  h : 107,
  w : 74,
  scale : 1.5,
  userData :
  {
    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']
    }
});
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор AlexeyOK в Сб Фев 03, 2018 10:11 am

Pyro, благодарю - теперь ошибку не выдаёт. Проверил функцию "pjs.math.randomFY" - создал тестовый массив и прогнал ей - работает прекрасно, но в моём случае что-то идёт не так.
Есть объект "закрытая колода":

var BasecolCl = game.newImageObject({
file : 'card_mask.bmp',
x : 1170,
y : 400,
h : 107,
w : 74,
scale : 1.5,
userData :{BaseColCl : ['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']}
});
необходимо при загрузке страницы - размешать элементы массива содержавшихся в объекте "BasecolCl" и затем верхние карты из получившегося массива раздать игрокам. Думал,думал - так и недодумал.(
На данном рисунке - синяя картинка колоды - это и есть "закрытая колода", картинка с "0" - будущая "колода для сноса". Слева вверху - должны быть игровые карты компьютера, слева внизу - карты самого игрока.
Чтобы отобразились карты компьютера и игрока, так как они получились после растасовки, что необходимо сделать? Что есть индекс переменной?

AlexeyOK

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

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

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

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

Сообщение автор Pyro338 в Сб Фев 03, 2018 10:36 am

размешать элементы массива содержавшихся в объекте "BasecolCl" и затем верхние карты из получившегося массива раздать игрокам.

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

Код:
var lastItem = my_array[my_array.length - 1]; // получить последний элемент
new_array.push(lastItem);//добавляем последний элемент из my_array в new_array
my_array.splice(my_array.length - 1, 1)//удаляем последний элемент из my_array

или еще проще
Код:

new_array.push(my_array.splice(my_array.length - 1, 1))//переносим элемент из одного массива в другой

ну и потом чтобы например отрисовать массив, перебираем его и отрисовываем

что-то типа

Код:

var card_objects = [];

player_cards.forEach(function(item, index) {
  var card_object = game.newImageObject({
    file : item + '.png',
    x : left_offset + card_width * index,
    y : top_offset,
    h : card_height,
    w : card_width,
    userData :{
        card_value: item,
    }
  });
  card_objects.push(card_object);
});

//в игровом цикле
pjs.OOP.drawArr(card_objects);//функция point js, которая отрисовывает массив объектов
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор AlexeyOK в Вс Фев 04, 2018 9:55 pm

Кто поможет разобраться, что я делаю не так?
var Coloda = ['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 TasCards = function(){
pjs.math.randomFY(Coloda);
var LastItem = Coloda [Coloda.length - 1]; // poluchaem posledniy element
PlayerOpenCards.push(LastItem);
Coloda.splice(Coloda.length - 1, 1);
CompOpenCards.push(LastItem);
Coloda.splice(Coloda.length - 1, 1);
}
game.newLoop("my game", function()
{
game.clear();
http://pjs.OOP.drawArr();
BasecolClose.draw();
DeckP.draw();
pjs.OOP.drawArr(PlayerOpenCards);
pjs.OOP.drawArr(CompOpenCards);
});
Не могу понять срабатывает ли функция растасовки и раздачи карт. Запускаю тест - вроде всё нормально, но ничего не происходит...

AlexeyOK

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

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

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

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

Сообщение автор Pyro338 в Вс Фев 04, 2018 10:26 pm

для вставки кода есть кнопочка



Код:

var Coloda = ['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 TasCards = function(){
 pjs.math.randomFY(Coloda);
 var LastItem = Coloda [Coloda.length - 1]; // здесь ты получаешь последний элемент массива
 PlayerOpenCards.push(LastItem); //запихиваешь его в массив
 Coloda.splice(Coloda.length - 1, 1);
 CompOpenCards.push(LastItem); //запихиваешь его же в другой массив
 Coloda.splice(Coloda.length - 1, 1);
}
game.newLoop("my game", function() {
 game.clear();
 BasecolClose.draw();
 DeckP.draw();
 pjs.OOP.drawArr(PlayerOpenCards); //это функция отрисовки массива объектов. у тебя же массив строк: 'c2c','c3c','c4c' и так далее
 pjs.OOP.drawArr(CompOpenCards); //здесь тоже
});

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

Код:

var Coloda = ['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 = [];
var PlayerOpenCards_objects = [];
var CompOpenCards_objects = [];
var TasCards = function(){
   var LastItem = '';
   pjs.math.randomFY(Coloda);
   LastItem = Coloda [Coloda.length - 1];
   PlayerOpenCards.push(LastItem);
   Coloda.splice(Coloda.length - 1, 1);
   LastItem = Coloda [Coloda.length - 1];
   CompOpenCards.push(LastItem);
   Coloda.splice(Coloda.length - 1, 1);
   PlayerOpenCards.forEach(function(item, index) {
      var card_object = game.newImageObject({
         file : item + '.png',
         x : left_offset + card_width * index,
         y : player_top_offset,
         h : card_height,
         w : card_width,
         userData :{
            card_value: item,
      }
      PlayerOpenCards_objects.push(card_object);
   });
   CompOpenCards.forEach(function(item, index) {
      var card_object = game.newImageObject({
         file : item + '.png',
         x : left_offset + card_width * index,
         y : comp_top_offset,
         h : card_height,
         w : card_width,
         userData :{
            card_value: item,
      }
      CompOpenCards_objects.push(card_object);
   });
});
}
game.newLoop("my game", function() {
   game.clear();
   BasecolClose.draw();
   DeckP.draw();
   pjs.OOP.drawArr(CompOpenCards_objects);
   pjs.OOP.drawArr(PlayerOpenCards_objects);
});
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор AlexeyOK в Пн Фев 05, 2018 11:17 am

Piro338, можешь подробно объяснить "что к чему" идёт? Пытаюсь разобраться в коде - теперь вообще ничего не запускается. Что где подправить надо - не пойму никак. Переменные вроде все верно обозначены, где ошибка - не ясно. Скину проект архивом в ЛС.

AlexeyOK

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

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

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

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

Сообщение автор Pyro338 в Пн Фев 05, 2018 11:24 am

где ошибка - не ясно
ну в консоли что нибудь пишет? ошибки? я мог и опечатку допустить

Скину проект архивом в ЛС.
ну кидай, гляну
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор Pyro338 в Пн Фев 05, 2018 11:53 am

Код:

  var pjs = new PointJS(1280, 1024, {backgroundColor: "GREEN"})
  var game = pjs.game;
  var system = pjs.system;
  var mouse = pjs.mouseControl.initMouseControl();
  var brush = pjs.brush;
  var width = pjs.game.getWH().w; //получаем ширину игровой области
  var height = pjs.game.getWH().h; //получаем высоту игровой области
  system.initFullScale();

  //переменные для самой игры

  var PlayerOpenCards = []; //массив со строками номиналов карт у игрока
  var CompOpenCards = []; //массив со строками номиналов карт у компьютера
  var DeckPool = [];
  var PlayerOpenCards_objects = []; //массив с объектами карт у игрока
  var CompOpenCards_objects = []; //массив с объектами карт у компьютера
  var card_height = 107; //высота карты
  var card_width = 74; //ширина карты
  var left_offset = 20; //отступ слева для "рук"
  var player_top_offset = height - 20 - card_height; //отступ сверху для "руки" игрока
  var comp_top_offset = 20; //отступ сверху для "руки" компьютера

  var Coloda = ['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 TasCards = function () {
    var LastItem = '';
    pjs.math.randomFY(Coloda);
    for (var i = 0; i < 6; i++){ //не знаю сколько в твоей игре карт сдается, но допустим по 6
      LastItem = Coloda [Coloda.length - 1]; //находим последнюю карту в колоде
      PlayerOpenCards.push(LastItem); //сдаем карту игроку
      Coloda.splice(Coloda.length - 1, 1); //убираем последнюю карту из колоды
      LastItem = Coloda [Coloda.length - 1]; //находим последнюю карту в колоде
      CompOpenCards.push(LastItem); //сдавем карту компьютеру
      Coloda.splice(Coloda.length - 1, 1); //убираем последнюю карту из колоды
    }

    PlayerOpenCards.forEach(function (item, index) { //для всех номиналов карт у игрока
      var card_object = game.newImageObject({ //создаем объект
        file    : item + '.bmp', //картинка
        x      : left_offset + card_width * index, //отступ слева + ширина карты * на порядковый номер карты в руке игрока
        y      : player_top_offset, //отступ сверху
        h      : card_height, //высота карты
        w      : card_width, //ширина карты
        userData: {
          card_value: item //номинал карты
        }
      });
      PlayerOpenCards_objects.push(card_object); //созданный объект запихиваем в массив, который потом будем отрисовывать
    });

    CompOpenCards.forEach(function (item, index) { //все тоже самое для "руки" компьютера
      var card_object = game.newImageObject({
        file    : item + '.bmp',
        x      : left_offset + card_width * index,
        y      : comp_top_offset,
        h      : card_height,
        w      : card_width,
        userData: {
          card_value: item
        }
      });
      CompOpenCards_objects.push(card_object);
    });
  }


  var BasecolClose = game.newImageObject({

    file    : 'card_mask.bmp',
    x      : 1170,
    y      : 400,
    h      : 107,
    w      : 74,
    scale  : 1.5,
    userData: {Cards: 54}
  });


  var DeckP = game.newImageObject({
    file : 'deck_pool.bmp',
    x    : 1060,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5

  });

  //карты

  // вот этот блок тебе вообще не нужен, поскольку карты мы создаем динамически
  /*var c2c = game.newImageObject({

    file : 'c2c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c3c = game.newImageObject({

    file : 'c3c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c4c = game.newImageObject({

    file : 'c4c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c5c = game.newImageObject({

    file : 'c5c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c6c = game.newImageObject({

    file : 'c6c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c7c = game.newImageObject({

    file : 'c7c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c8c = game.newImageObject({

    file : 'c8c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c9c = game.newImageObject({

    file : 'c9c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c10c = game.newImageObject({

    file : 'c10c.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cjc = game.newImageObject({

    file : 'cjc.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cqc = game.newImageObject({

    file : 'cqc.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var ckc = game.newImageObject({

    file : 'ckc.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cac = game.newImageObject({

    file : 'cac.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c2d = game.newImageObject({

    file : 'c2d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c3d = game.newImageObject({

    file : 'c3d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c4d = game.newImageObject({

    file : 'c4d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c5d = game.newImageObject({

    file : 'c5d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c6d = game.newImageObject({

    file : 'c6d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c7d = game.newImageObject({

    file : 'c7d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c8d = game.newImageObject({

    file : 'c8d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c9d = game.newImageObject({

    file : 'c9d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c10d = game.newImageObject({

    file : 'c10d.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cjd = game.newImageObject({

    file : 'cjd.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cqd = game.newImageObject({

    file : 'cqd.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var ckd = game.newImageObject({

    file : 'ckd.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cad = game.newImageObject({

    file : 'cad.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c2h = game.newImageObject({

    file : 'c2h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c3h = game.newImageObject({

    file : 'c3h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c4h = game.newImageObject({

    file : 'c4h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c5h = game.newImageObject({

    file : 'c5h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c6h = game.newImageObject({

    file : 'c6h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c7h = game.newImageObject({

    file : 'c7h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c8h = game.newImageObject({

    file : 'c8h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c9h = game.newImageObject({

    file : 'c9h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c10h = game.newImageObject({

    file : 'c10h.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cjh = game.newImageObject({

    file : 'cjh.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cqh = game.newImageObject({

    file : 'cqh.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var ckh = game.newImageObject({

    file : 'ckh.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cah = game.newImageObject({

    file : 'cah.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c2s = game.newImageObject({

    file : 'c2s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c3s = game.newImageObject({

    file : 'c3s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c4s = game.newImageObject({

    file : 'c4s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c5s = game.newImageObject({

    file : 'c5s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c6s = game.newImageObject({

    file : 'c6s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c7s = game.newImageObject({

    file : 'c7s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c8s = game.newImageObject({

    file : 'c8s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c9s = game.newImageObject({

    file : 'c9s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var c10s = game.newImageObject({

    file : 'c10s.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cjs = game.newImageObject({

    file : 'cjs.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cqs = game.newImageObject({

    file : 'cqs.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cks = game.newImageObject({

    file : 'cks.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cas = game.newImageObject({

    file : 'cas.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cjkb = game.newImageObject({

    file : 'cjkb.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });

  var cjkk = game.newImageObject({

    file : 'cjkk.bmp',
    x    : 1170,
    y    : 400,
    h    : 107,
    w    : 74,
    scale: 1.5
  });*/

  //это тоже не понтно зачем

  /*var createRect = function () {
    var tmp = game.newRectObject({
      positionC: mouse.getPosition(),
      w        : 50, h: 50,
      fillColor: 'red'
    });
http://arr.push(tmp);
  };*/

  game.newLoopFromConstructor("my game", function () { //создаем игровой цикл
    this.entry = function () { //при входе в игровой цикл
      TasCards(); //тасуем карты и раздаем их
    }
    this.update = function(){ //в игровом цикле
      game.clear(); //очищаем экран
      BasecolClose.draw(); //рисуем закрытую колоду
      DeckP.draw(); //рисуем еще что-то
      pjs.OOP.drawArr(CompOpenCards_objects); //рисуем массив объектов карт комьютера
      pjs.OOP.drawArr(PlayerOpenCards_objects); //рисуем массив объектов карт игрока

      console.log();

//var obj = false;

//if (mouse.isDown('LEFT',c2c) && mouse.isInObject(c2c))
//obj = c2c;
//if (mouse.isUp('LEFT'))
//obj = false;
//if(obj) {obj.setPositionC(mouse.getPosition());}

//if (mouse.isDown('LEFT',c2d) && mouse.isInObject(c2d))
//obj = c2d;
//if (mouse.isUp('LEFT'))
//obj = false;
//if(obj) {obj.setPositionC(mouse.getPosition());}
    }



  });


  game.setLoop("my game");
  game.start();


avatar
Pyro338
Админ

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

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

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

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

Сообщение автор Pyro338 в Пн Фев 05, 2018 1:25 pm

еще я тут посмотрел - как ты будешь считать - какая карта какую бьёт? писать простыню из пары сотен if-ов?

вот например можно так сделать

Код:

function parseCardValue(card){
    var card_properties = {};
    if(card.length == 3){
      card_properties.suite = card.charAt(2);//масть карты
      card_properties.score = card.charAt(1);//количество очков
    }else{
      card_properties.suite = card.charAt(3);
      card_properties.score = card.charAt(1) + card.charAt(2);
    }
    switch (card_properties.score){
      case 'j': card_properties.score = 11;//валет пусть будет 11 очков
      case 'q': card_properties.score = 12;//дама 12 и так далее
      case 'k': card_properties.score = 13;
      case 'a': card_properties.score = 14;
    }
    return card_properties;
  }

и потом когда создаем карту, записываем туда ее масть и количество очков

Код:

CompOpenCards.forEach(function (item, index) {
      var card_object = game.newImageObject({
        file    : item + '.bmp',
        x      : left_offset + card_width * index,
        y      : comp_top_offset,
        h      : card_height,
        w      : card_width,
        userData: {
          card_value: item,
          card_suite: parseCardValue(item).suite,
          card_score: parseCardValue(item).score
        }
      });
      CompOpenCards_objects.push(card_object);
    });
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор Pyro338 в Пн Фев 05, 2018 2:52 pm

только про брейки забыл. можно еще отсортировать карты по масти и номиналу соответственно

Код:

  var pjs = new PointJS(1280, 1024, {backgroundColor: "GREEN"})
  var game = pjs.game;
  var system = pjs.system;
  var mouse = pjs.mouseControl.initMouseControl();
  var brush = pjs.brush;
  var width = pjs.game.getWH().w; //получаем ширину игровой области
  var height = pjs.game.getWH().h; //получаем высоту игровой области
  system.initFullScale();

  //переменные для самой игры

  var PlayerOpenCards = []; //массив со строками номиналов карт у игрока
  var CompOpenCards = []; //массив со строками номиналов карт у компьютера
  var PlayerOpenCards_objects = []; //массив с объектами карт у игрока
  var CompOpenCards_objects = []; //массив с объектами карт у компьютера
  var card_height = 107 * 1.5; //высота карты
  var card_width = 74 * 1.5; //ширина карты
  var left_offset = 20; //отступ слева для "рук"
  var player_top_offset = height - 20 - card_height; //отступ сверху для "руки" игрока
  var comp_top_offset = 20; //отступ сверху для "руки" компьютера

  var Coloda = ['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'];

  function parseCardValue(card) { //функция вычисления масти и достоинства карты
    var card_properties = {};
    if(card == 'cjkb' || card == 'cjkk'){ //если джокер, даем ему максимальную масть и достоинство
      card_properties.suite = 5;
      card_properties.score = 15;
      return card_properties;
    }
    if (card.length == 3) {
      card_properties.suite = card.charAt(2);
      card_properties.score = card.charAt(1);
    } else {
      card_properties.suite = card.charAt(3);
      card_properties.score = card.charAt(1) + card.charAt(2);
    }
    switch (card_properties.suite) { //парсим масти
      case 's':
        card_properties.suite = 1;
        break;
      case 'c':
        card_properties.suite = 2;
        break;
      case 'd':
        card_properties.suite = 3;
        break;
      case 'h':
        card_properties.suite = 4;
        break;
    }
    switch (card_properties.score) { //парсим картинки
      case 'j':
        card_properties.score = 11;
        break;
      case 'q':
        card_properties.score = 12;
        break;
      case 'k':
        card_properties.score = 13;
        break;
      case 'a':
        card_properties.score = 14;
        break;
    }
    return card_properties;
  }

  function fieldSorter(fields) {//функция сортировки
    return function (a, b) {
      return fields
        .map(function (o) {
          var dir = 1;
          if (o[0] === '-') {
            dir = -1;
            o=o.substring(1);
          }
          if (a[o] > b[o]) return dir;
          if (a[o] < b[o]) return -(dir);
          return 0;
        })
        .reduce(function firstNonZeroValue (p,n) {
          return p ? p : n;
        }, 0);
    };
  }

  var TasCards = function () {//функция тасования кард
    var LastItem = '';
    pjs.math.randomFY(Coloda);
    for (var i = 0; i < 6; i++) { //не знаю сколько в твоей игре карт сдается, но допустим по 6
      LastItem = Coloda [Coloda.length - 1]; //находим последнюю карту в колоде
      PlayerOpenCards.push(LastItem); //сдаем карту игроку
      Coloda.splice(Coloda.length - 1, 1); //убираем последнюю карту из колоды
      LastItem = Coloda [Coloda.length - 1]; //находим последнюю карту в колоде
      CompOpenCards.push(LastItem); //сдавем карту компьютеру
      Coloda.splice(Coloda.length - 1, 1); //убираем последнюю карту из колоды
    }

    PlayerOpenCards.forEach(function (item) { //для всех номиналов карт у игрока
      var card_object = game.newImageObject({ //создаем объект
        file    : item + '.bmp', //картинка
        y      : player_top_offset, //отступ сверху
        h      : card_height, //высота карты
        w      : card_width, //ширина карты
        //не указываем здесь позицию карты по иксу. расчитаем ее после сортировки карт
        userData: {
          card_value: item, //номинал карты
          card_suite: parseCardValue(item).suite, //масть карты
          card_score: parseCardValue(item).score //достоинство карты
        }
      });
      PlayerOpenCards_objects.push(card_object); //добавляем объект карты в массив
    });
    PlayerOpenCards_objects.sort(fieldSorter(['card_suite', 'card_score'])); //сортируем карты по масти и по достоинству
    for(var index = 0; index < PlayerOpenCards_objects.length; index++){
      PlayerOpenCards_objects[index].x = left_offset + card_width * index; //в соответствии с сортировкой, указываем позицию по иксу
    }

    CompOpenCards.forEach(function (item) { //то же самое для компьютера
      var card_object = game.newImageObject({
        file    : 'card_mask.bmp', //ну только карты же рубашкой вверх должны лежать, правильно?
        y      : comp_top_offset,
        h      : card_height,
        w      : card_width,
        userData: {
          card_value: item,
          card_suite: parseCardValue(item).suite,
          card_score: parseCardValue(item).score
        }
      });
      CompOpenCards_objects.push(card_object);
    });
    CompOpenCards_objects.sort(fieldSorter(['card_suite', 'card_score']));
    for(var index = 0; index < CompOpenCards_objects.length; index++){
      CompOpenCards_objects[index].x = left_offset + card_width * index;
    }
  }

  var BasecolClose = game.newImageObject({
    file    : 'card_mask.bmp',
    x      : width - 20 - card_width,
    y      : height / 2 - card_height / 2,
    h      : card_height,
    w      : card_width,
    userData: {
      cards_count: 54
    }
  });
 
  var DeckP = game.newImageObject({
    file: 'deck_pool.bmp',
    x  : width - 20 - card_width * 2,
    y  : height / 2 - card_height / 2,
    h  : card_height,
    w  : card_width,
  });

  game.newLoopFromConstructor("my game", function () { //создаем игровой цикл
    this.entry = function () { //при входе в игровой цикл
      TasCards(); //тасуем карты и раздаем их
    }
    this.update = function () { //в игровом цикле
      game.clear(); //очищаем экран
      BasecolClose.draw(); //рисуем закрытую колоду
      DeckP.draw(); //рисуем еще что-то
      pjs.OOP.drawArr(CompOpenCards_objects); //рисуем массив объектов карт комьютера
      pjs.OOP.drawArr(PlayerOpenCards_objects); //рисуем массив объектов карт игрока

      console.log();
    }
  });

  game.setLoop("my game");
  game.start();
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор AlexeyOK в Пн Фев 05, 2018 7:01 pm

Благодарю за разъяснения. Самому бы было очень сложно такого добиться. Карта карту бить не может - тут надо собирать комбинации. Раздаётся изначально по 9 карт игрокам. 1-й ход определяется по жребию, затем игроки делают свои ходы по очереди.
АЛГОРИТМ ХОДА. с этим уж точно возникнут проблемы у меня. Если просто объяснить, то будет следующее:
1. Взятие карты из закрытой колоды
2. Составление подходящих комбинации из возможных карт
3. После составления комбинаций - скидывание любой карты, не включённую в комбинации в "колоду для сноса".
После 3-го пункта ход передаётся следующему игроку.

AlexeyOK

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

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

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

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

Сообщение автор AlexeyOK в Пн Фев 05, 2018 7:06 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 очков (джокер)

МАСТЬЮ считается комбинация состоящая минимум из 4-х карт по порядку. Пример: Туз пик, 2пик , 3пик, 4пик - это масть из 4-х карт. Максимум МАСТЬ может быть составлена из 14 карт. Карта "туз" является "переходящей".
ЗНАЧЕНИЕ - пример комбинации по значению - 5 буби, 5 червей, 5 треф - комбинация ЗНАЧЕНИЕ из 3х карт. Максимум по ЗНАЧЕНИЮ карт может быть 6: 4 карты основные и 2 джокера.

AlexeyOK

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

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

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

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

Сообщение автор AlexeyOK в Пн Фев 05, 2018 7:36 pm

Если комбинацию выложить после взятия карты из "закрытой колоды" или из "колоды для сноса" не удаётся, то тот игрок ,чей ход на данный момент, сносит любую карту в "колоду для сноса".
ЗАВАЛ КОЛОДЫ для сноса: если верхняя карта в колоде (кроме джокера) может пойти в комбинацию игроку, чья очерёдность хода, то тот игрок может по своему усмотрению взять верхнюю карту из "колоды для сноса" к себе в объявляемую комбинацию. Если под верхней картой в "колоде для сноса" лежат ещё какие-нибудь карты, то они автоматически идут в "руку" к тому игроку, который "завалил" колоду.
ДЖОКЕРЫ: Джокер заменяет собой любую карту в комбинациях. Красный джокер может идти только в красную МАСТЬ (буби,червы), чёрный джокер может идти только в чёрную МАСТЬ(пики, трефы). Джокер может так же пойти в комбинацию ЗНАЧЕНИЕ только при условии, что в ЗНАЧЕНИИ уже есть минимум 2 "натуральные" карты. Пример две 2-ки любых мастей и любой джокер как 3-я 2-ка.
СНОС ДЖОКЕРА. Если джокера сносит игрок в "колоду для сноса" (редко,но могут возникнуть и такие ситуации), то следующий игрок не может "завалить" "колоду для сноса". Он должен покрыть джокера любой другой своей картой, даже джокером, если таковой у него имеется.

AlexeyOK

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

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

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

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

Сообщение автор AlexeyOK в Пн Фев 05, 2018 9:31 pm

Ещё раз благодарю. Не могу понять, почему у меня ничего показываться не хочет? Пишет ошибка в 170й строке.
Код:
var pjs= new PointJS(1280,1024, {backgroundColor:"GREEN"})
var game = pjs.game;
var system = pjs.system;
var mouse = pjs.mouseControl.initMouseControl();
var brush = pjs.brush;
var width = pjs.game.getWH().w; //получаем ширину игровой области
var height = pjs.game.getWH().h; //получаем высоту игровой области
system.initFullScale();

//переменные для самой игры

var PlayerOpenCards = []; //массив со строками номиналов карт у игрока
var CompOpenCards = []; //массив со строками номиналов карт у компьютера
var PlayerOpenCards_objects = []; //массив с объектами карт у игрока
var CompOpenCards_objects = []; //массив с объектами карт у компьютера
var card_height = 107 * 1.5; //высота карты
var card_width = 74 * 1.5; //ширина карты
var left_offset = 20; //отступ слева для "рук"
var player_top_offset = height - 20 - card_height; //отступ сверху для "руки" игрока
var comp_top_offset = 20; //отступ сверху для "руки" компьютера

var Coloda = ['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'];

function parseCardValue(card) { //функция вычисления масти и достоинства карты
    var card_properties = {};
    if(card == 'cjkb' || card == 'cjkk'){ //если джокер, даем ему максимальную масть и достоинство
      card_properties.suite = 5;
      card_properties.score = 15;
      return card_properties;
    }
    if (card.length == 3) {
      card_properties.suite = card.charAt(2);
      card_properties.score = card.charAt(1);
    } else {
      card_properties.suite = card.charAt(3);
      card_properties.score = card.charAt(1) + card.charAt(2);
    }
    switch (card_properties.suite) { //парсим масти
      case 's':
        card_properties.suite = 1;
        break;
      case 'c':
        card_properties.suite = 2;
        break;
      case 'd':
        card_properties.suite = 3;
        break;
      case 'h':
        card_properties.suite = 4;
        break;
    }
    switch (card_properties.score) { //парсим картинки
      case 'j':
        card_properties.score = 11;
        break;
      case 'q':
        card_properties.score = 12;
        break;
      case 'k':
        card_properties.score = 13;
        break;
      case 'a':
        card_properties.score = 14;
        break;
    }
    return card_properties;
  }

  function fieldSorter(fields) {//функция сортировки
    return function (a, b) {
      return fields
        .map(function (o) {
          var dir = 1;
          if (o[0] === '-') {
            dir = -1;
            o=o.substring(1);
          }
          if (a[o] > b[o]) return dir;
          if (a[o] < b[o]) return -(dir);
          return 0;
        })
        .reduce(function firstNonZeroValue (p,n) {
          return p ? p : n;
        }, 0);
    };
  }

  var TasCards = function () {//функция тасования кард
    var LastItem = '';
    pjs.math.randomFY(Coloda);
    for (var i = 0; i < 6; i++) { //не знаю сколько в твоей игре карт сдается, но допустим по 6
      LastItem = Coloda [Coloda.length - 1]; //находим последнюю карту в колоде
      PlayerOpenCards.push(LastItem); //сдаем карту игроку
      Coloda.splice(Coloda.length - 1, 1); //убираем последнюю карту из колоды
      LastItem = Coloda [Coloda.length - 1]; //находим последнюю карту в колоде
      CompOpenCards.push(LastItem); //сдавем карту компьютеру
      Coloda.splice(Coloda.length - 1, 1); //убираем последнюю карту из колоды
    }

    PlayerOpenCards.forEach(function (item) { //для всех номиналов карт у игрока
      var card_object = game.newImageObject({ //создаем объект
        file    : item + '.bmp', //картинка
        y      : player_top_offset, //отступ сверху
        h      : card_height, //высота карты
        w      : card_width, //ширина карты
        //не указываем здесь позицию карты по иксу. расчитаем ее после сортировки карт
        userData: {
          card_value: item, //номинал карты
          card_suite: parseCardValue(item).suite, //масть карты
          card_score: parseCardValue(item).score //достоинство карты
        }
      });
      PlayerOpenCards_objects.push(card_object); //добавляем объект карты в массив
    });
    PlayerOpenCards_objects.sort(fieldSorter(['card_suite', 'card_score'])); //сортируем карты по масти и по достоинству
    for(var index = 0; index < PlayerOpenCards_objects.length; index++){
      PlayerOpenCards_objects[index].x = left_offset + card_width * index; //в соответствии с сортировкой, указываем позицию по иксу
    }

    CompOpenCards.forEach(function (item) { //то же самое для компьютера
      var card_object = game.newImageObject({
        file    : 'card_mask.bmp', //ну только карты же рубашкой вверх должны лежать, правильно?
        y      : comp_top_offset,
        h      : card_height,
        w      : card_width,
        userData: {
          card_value: item,
          card_suite: parseCardValue(item).suite,
          card_score: parseCardValue(item).score
        }
      });
      CompOpenCards_objects.push(card_object);
    });
    CompOpenCards_objects.sort(fieldSorter(['card_suite', 'card_score']));
    for(var index = 0; index < CompOpenCards_objects.length; index++){
      CompOpenCards_objects[index].x = left_offset + card_width * index;
    }
  }
    var BasecolClose = game.newImageObject({
    file    : 'card_mask.bmp',
    x      : width - 20 - card_width,
    y      : height / 2 - card_height / 2,
    h      : card_height,
    w      : card_width,
    userData: {
      cards_count: 54
    }
  });
    var DeckP = game.newImageObject({
    file: 'deck_pool.bmp',
    x  : width - 20 - card_width * 2,
    y  : height / 2 - card_height / 2,
    h  : card_height,
    w  : card_width,
  });

});

  game.newLoopFromConstructor("my game", function () { //создаем игровой цикл
    this.entry = function () { //при входе в игровой цикл
      TasCards(); //тасуем карты и раздаем их
    }
    this.update = function () { //в игровом цикле
      game.clear(); //очищаем экран
      BasecolClose.draw(); //рисуем закрытую колоду
      DeckP.draw(); //рисуем колоду для сноса
      pjs.OOP.drawArr(CompOpenCards_objects); //рисуем массив объектов карт комьютера
      pjs.OOP.drawArr(PlayerOpenCards_objects); //рисуем массив объектов карт игрока

      console.log();
    }
  });



game.setLoop("my game");
game.start();

AlexeyOK

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

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

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

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

Сообщение автор AlexeyOK в Пн Фев 05, 2018 9:34 pm

Piro338, всё. Добавил в список разработчиков.) Дальше надо будет прописывать уже сами комбинации, а их довольно много. Придётся видимо ставить много всяких проверок типа "IF ELSE". И прописать сам алгоритм хода, который описывал выше уже.

AlexeyOK

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

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

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

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

Сообщение автор Pyro338 в Вт Фев 06, 2018 8:38 pm

Придётся видимо ставить много всяких проверок типа "IF ELSE"

спроси у raingo - он подскажет по этому поводу. нужно сделать массив значений и использовать конструкцию "имя - обработчик" или как-то так.

Пишет ошибка в 170й строке.
170 строка - это какая?

1. Взятие карты из закрытой колоды
алгоритм точно такой-же, как и при раздаче: берем последний элемент из массива колоды, пушим в колоду игрока, удаляем этот элемент из колоды, сортируем "руку"
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор raingo в Вт Фев 06, 2018 9:45 pm

Я вообще не в контексте того, что тут происходит. Но я счастлив дружить с таким крутым чуваком, как пиро. Это в очередной раз доказывает, что все тру-кодеры по большей части альтруисты.

Добавил в список разработчиков.) Дальше надо будет прописывать уже сами комбинации, а их довольно много. Придётся видимо ставить много всяких проверок типа "IF ELSE". И прописать сам алгоритм хода, который описывал выше уже.
Если у комбинаций есть общая математическая модель, то нужно только описать её. И потом описать исключения для этой модели, можно в if else.

Насколько я понял, под комбинациями имеется ввиду это:
НАЧИСЛЕНИЕ ОЧКОВ ЗА КОМБИНАЦИИ:
МАСТЬ: ---------------ЗНАЧЕНИЕ:
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 очков (джокер)

Яж не тру-кодер. Я бы сделал это грязным, но "быстрым" способом. Вначале сортируем руку игрока по 4 разным массивам: массив пик, массив треф, массив бубны, массив черви. Затем проверяем каждый массив на последовательность комбинаций и ищем среди них наиболее длинную последовательность. + начисляем очки за то, что ты называешь "масть".

Затем снова берем руку и в цикле проверяем каждую карту по значению. Если находим одинаковые значения - начисляем очки.

Это понятно? Сейчас скажу, как сильно упростить процесс. Тебе нужно каждую карту сделать объектом с двумя полями. Поле: номинал. И поле: масть. Т.е.:
Код:
var Coloda = ['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 Coloda = {{'черви', '2'}, {'черви', '3'}, {'черви','4'}};//и т.д.
Можно объект карты усложнить. Например, первое поле - идентификатор карты (то, что у тебя - с2с и т.д.), второе поле - масть карты. Третье поле - значение карты. Четвертое поле - вес карты. Если король считается с большим кол-вом очков, т.е. его вес - 12. Пятое поле можно сделать специальную метку, чтобы когда цикл видел эту метку он производил с ней дополнительные манипуляции.

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

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

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

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

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

Сообщение автор Pyro338 в Вт Фев 06, 2018 9:52 pm

Вначале сортируем руку игрока по 4 разным массивам: массив пик, массив треф, массив бубны, массив черви.

Код:

  function parseCardValue(card) { //функция вычисления масти и достоинства карты
    var card_properties = {};
    if(card == 'cjkb' || card == 'cjkk'){ //если джокер, даем ему максимальную масть и достоинство
      card_properties.suite = 5;
      card_properties.score = 15;
      return card_properties;
    }
    if (card.length == 3) {
      card_properties.suite = card.charAt(2);
      card_properties.score = card.charAt(1);
    } else {
      card_properties.suite = card.charAt(3);
      card_properties.score = card.charAt(1) + card.charAt(2);
    }
    switch (card_properties.suite) { //парсим масти
      case 's':
        card_properties.suite = 1;
        break;
      case 'c':
        card_properties.suite = 2;
        break;
      case 'd':
        card_properties.suite = 3;
        break;
      case 'h':
        card_properties.suite = 4;
        break;
    }
    switch (card_properties.score) { //парсим картинки
      case 'j':
        card_properties.score = 11;
        break;
      case 'q':
        card_properties.score = 12;
        break;
      case 'k':
        card_properties.score = 13;
        break;
      case 'a':
        card_properties.score = 14;
        break;
    }
    return card_properties;
  }

Можно объект карты усложнить. Например, первое поле - идентификатор карты (то, что у тебя - с2с и т.д.), второе поле - масть карты. Третье поле - значение карты.

Код:

PlayerOpenCards.forEach(function (item) { //для всех номиналов карт у игрока
      var card_object = game.newImageObject({ //создаем объект
        file    : item + '.bmp', //картинка
        y      : player_top_offset, //отступ сверху
        h      : card_height, //высота карты
        w      : card_width, //ширина карты
        //не указываем здесь позицию карты по иксу. расчитаем ее после сортировки карт
        userData: {
          card_value: item, //номинал карты
          card_suite: parseCardValue(item).suite, //масть карты
          card_score: parseInt(parseCardValue(item).score) //достоинство карты
        }
      });
      PlayerOpenCards_objects.push(card_object); //добавляем объект карты в массив
    });
    PlayerOpenCards_objects.sort(fieldSorter(['card_suite', 'card_score'])); //сортируем карты по масти и по достоинству
    for(var index = 0; index < PlayerOpenCards_objects.length; index++){
      PlayerOpenCards_objects[index].x = left_offset + (card_width - 30) * index; //в соответствии с сортировкой, указываем позицию по иксу
    }
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор raingo в Вт Фев 06, 2018 9:54 pm

Ну, собсно, а какое тех задание то? Значит комбинации вы уже сделали?

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

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

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

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

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

Сообщение автор raingo в Вт Фев 06, 2018 10:03 pm

Я так понял, что сейчас Алексею нужно сделать подсчет комбинаций: это то, что написано сверху. Т.е. просто взять свойства карт card_suite и card_score. И прогнать их в цикле для подсчета очков. Монструозные if-else тут не нужны.

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

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

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

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

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

Сообщение автор Pyro338 в Вт Фев 06, 2018 10:04 pm

Ну, собсно, а какое тех задание то?

а пёс его знает

Значит комбинации вы уже сделали?

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

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

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

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

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

Сообщение автор Pyro338 в Вт Фев 06, 2018 10:05 pm

это то, что написано сверху. Т.е. просто взять свойства карт card_suite и card_score. И прогнать их в цикле для подсчета очков.

да
avatar
Pyro338
Админ

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

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

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

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

Сообщение автор raingo в Вт Фев 06, 2018 10:31 pm

AlexeyOK, я на сто проц уверен, что ты думаешь, что расписал все очень понятно и детально. Но это нихрена не так. Нихрена не понятно.

Тебе бы хотя бы выложить игру куда-нить в общий доступ. Можно договориться со сканером, чтобы в html game центр игру выложили. Так, чтобы весь коды было видно.

1. Взятие карты из закрытой колоды
2. Составление подходящих комбинации из возможных карт
3. После составления комбинаций - скидывание любой карты, не включённую в комбинации в "колоду для сноса".
Что из этого сделано?

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

Это для AI. Для игрока функции вызываются тогда, когда игрок совершает событие. Например, игрок взял карту - вызывается первая функция. Игрок выложил карту на общий стол - вызывается вторая функция.

Это разные состояния игры. Если мы используем pointjs (а мы ведь его используем?) то можно обойтись без страшных вещей, что писал на прошлой странице. Без стейт машины и деревьев условий и прочее. Одно состояние игры - один цикл.

Что такое состояние игры? Состояния игры отличаются возможностями игрока, внешним видом игры, поведение ai. Например, в состоянии игры "взятие карты" игрок может брать карты из общей колоды. Но не может трогать свои карты. Он физически не может тыкнуть мышкой на свою карту и передвинуть её.

Но в состоянии игры "скидывание карты" игрок наоборот не может трогать общую колоду, но может взять свою карту. Понимаешь? Карта в своей колоде каждый раз отличается поведением. В одном состоянии она пикабельна, в другом нет. В третьем тоже но карта видна игроку. А в четвертом она и не пикабельна и не видна.

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

Начнем с того, все карты всегда видны всем игрокам? Если нет, значит карта обладает состоянием (поведением) "видна" / не "видна". В каких случаях она видна, в каких не видна.


Последний раз редактировалось: raingo (Вт Фев 06, 2018 10:40 pm), всего редактировалось 1 раз(а)

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

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

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

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

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

Сообщение автор raingo в Вт Фев 06, 2018 10:38 pm

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

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

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

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

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

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

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


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


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

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

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

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

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