2013-11-16 6 views
0

Извинения, если это звучит очень простой, но я полный новичок, когда дело доходит до кодирования (я стараюсь изо всех сил, чтобы стать лучше, хотя!)Как сравнить элементы в массиве (JavaScript)

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

В настоящее время у меня есть массив из 52 карт & Я использую Math.random для случайного создания карты из массива.

Я хочу сравнить ценность двух карт, но я не уверен, как это сделать. У меня такое чувство, что это может быть связано с IndexOf, но я не уверен.

Спасибо, миллион & Прошу прощения, если это не в тему или дубликат!

Вот мой массив, если он помогает.

function randomCard() 
{ 
var cardArray = ["Club0.jpg","Club1.jpg","Club3.jpg","Club3.jpg","Club4.jpg","Club5.jpg","Club6.jpg","Club7.jpg","Club8.jpg","Club9.jpg","Club10.jpg","Club11.jpg","Club12.jpg","Diamond0.jpg","Diamond1.jpg","Diamond2.jpg","Diamond3.jpg","Diamond4.jpg","Diamond5.jpg","Diamond6.jpg","Diamond7.jpg","Diamond8.jpg","Diamond9.jpg","Diamond10.jpg","Diamond11.jpg","Diamond12.jpg","Heart0.jpg","Heart1.jpg","Heart2.jpg","Heart3.jpg","Heart4.jpg","Heart5.jpg","Heart6.jpg","Heart7.jpg","Heart8.jpg","Heart9.jpg","Heart10.jpg","Heart11.jpg","Heart12.jpg","Spade0.jpg","Spade1.jpg","Spade2.jpg","Spade3.jpg","Spade4.jpg","Spade5.jpg","Spade6.jpg","Spade7.jpg","Spade8.jpg","Spade9.jpg","Spade10.jpg","Spade11.jpg","Spade12.jpg"]; 

var pickCard = cardArray[Math.floor(Math.random() * cardArray.length)]; 
document.getElementById("card").src = pickCard; 
} 
+2

Вы попробовать что-нибудь? –

+0

Можете ли вы показать код, который у вас есть? – bitoffdev

+1

Я просто застрял и понятия не имею, как это сделать. Извините, я обычно стараюсь сначала попробовать, но я очень смущен. Сожалею! – user2984273

ответ

4

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

var cardArray = ["Club0.jpg","Club1.jpg","Club3.jpg"...]; 

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

Если вы сказали: «У меня есть 4 карты, и у карт есть значение 1 - 13 (11 - это Джек до 13 король, тузы низкие), то вы можете начать понимать проблему лучше старт

Давайте, создавая палубу. - четыре масти с 14 карт каждой

var deck = { 
    heart: [1,2,3,4,5,6,7,8,9,10,11,12,13], 
    club: [1,2,3,4,5,6,7,8,9,10,11,12,13], 
    spade: [1,2,3,4,5,6,7,8,9,10,11,12,13], 
    diamond: [1,2,3,4,5,6,7,8,9,10,11,12,13] 
}; 

мы должны держать имена костюмов в отдельном массиве таким образом, мы можем получить доступ к объекту..

var suits = ['heart','club','spade','diamond']; 

Дальше, memo важен. Поскольку мы не хотим брать одну и ту же карточку в каждую ничью, нам нужно отметить, какие карты уже были сделаны; memo - это магазин выбранных карт, на которые мы ссылаемся.

var memo = []; 

Теперь для функции drawRandomCard. Он берет случайный костюм из нашего массива костюмов и число из массива выбранного костюма. Если карта находится в memo, мы рисуем снова, иначе мы добавим ее в memo и вернем карту. Однако, поскольку мы все еще хотим выполнить сравнение значений, мы собираемся вернуть массив, первый элемент - это костюм, второй - значение.

function drawRandomCard() { 
    var suit = suits[Math.floor(Math.random() * suits.length)]; 
    var number = deck[suit][Math.floor(Math.random() * 13)]; 
    if (memo[suit + number]) drawRandomCard(); 
    memo.push(suit + number) 
    return [suit, number]; 
} 

Например:

var card1 = drawRandomCard(); 
var card2 = drawRandomCard(); 

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

console.log(card1[1] > card2[1]); // true or false 

Затем, если вы хотите, вы можете сопоставить значение этих переменных для любых изображений, которые необходимо загрузить с помощью join, чтобы объединить элементы массива карт.

var img = new Image(); 
img.src = card1.join('') + '.jpg'; // eg. diamond4.jpg 

Или:

document.getElementById("card").src = card1.join('') + '.jpg'; 

Fiddle

+0

* "poncy regex test" * - * какой *? Я понимаю «poncy», но я не вижу, как это относится к «regex tests». –

+0

Плохой выбор слов. Я думал о том, что OP является новым для кодирования, регулярные выражения, вероятно, не будут стоить проблем. – Andy

+0

У вас слишком много карт в колоде. Есть 13 карт в костюме, а не 14. Я пытался отредактировать, но он был направлен модами. Кроме того, я не смог обновить своего скрипача. –

0

Я хотел бы использовать что-то вроде:

function Card(suit, number) { 
    this.suit = suit; 
    this.number = number; 
} 
Card.prototype.image = function() { 
    return this.suit + this.number + '.jpg'; 
}; 
Card.compare = function(a, b) { 
    /* Define how you want to compare cards. My guess is: */ 
    return a.number < b.number; 
}; 
Card.prototype.compareTo = function(other) { 
    return Card.compare(this, other); 
}; 

var suits = ['Club', 'Diamond', 'Heart', 'Spade'], 
    cardArray = []; 
for (var i = 0; i < suits.length; ++i) { 
    for (var j = 0; j <= 12; ++j) cardArray.push(new Card(suits[i], j)); 
} 
var currentCard = cardArray[0]; /* Or whatever initial card */ 
function randomCard() { 
    var pickCard = cardArray[Math.random() * cardArray.length | 0]; 
    if(currentCard.compareTo(pickCard)) { 
     /* Do something */ 
    } else { 
     /* Do something else */ 
    } 
    document.getElementById("card").src = pickCard.image(); 
    currentCard = pickCard; 
} 

Если вы хотите, чтобы когда-карта была выбрана, она не может быть выбран снова (как сказал @MackieeE), замените

var pickCard = cardArray[Math.random() * cardArray.length | 0]; 

с

var pickCard = cardArray.splice(Math.random() * cardArray.length | 0, 1)[0]; 

в порядке удалить выбранную карту с cardArray.

+1

ОП задает вопрос о том, является ли карта выше или ниже другой. – Andy

+1

Это не было в спецификации OP, но я упомянул об этом здесь, так как это, вероятно, лучший ответ. Просто нужно включить, что после того, как карта была выбрана, ее нельзя выбрать * снова *. – MackieeE

+0

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

0

Это позволит получить значение из строки изображения в карты, если card="Club10.jpg":

card.match(/\d+/g) 

Вернется:

10 

Например:

var cardArray = ["Club0.jpg","Club1.jpg","Club3.jpg","Club3.jpg","Club4.jpg","Club5.jpg","Club6.jpg","Club7.jpg","Club8.jpg","Club9.jpg","Club10.jpg","Club11.jpg","Club12.jpg","Diamond0.jpg","Diamond1.jpg","Diamond2.jpg","Diamond3.jpg","Diamond4.jpg","Diamond5.jpg","Diamond6.jpg","Diamond7.jpg","Diamond8.jpg","Diamond9.jpg","Diamond10.jpg","Diamond11.jpg","Diamond12.jpg","Heart0.jpg","Heart1.jpg","Heart2.jpg","Heart3.jpg","Heart4.jpg","Heart5.jpg","Heart6.jpg","Heart7.jpg","Heart8.jpg","Heart9.jpg","Heart10.jpg","Heart11.jpg","Heart12.jpg","Spade0.jpg","Spade1.jpg","Spade2.jpg","Spade3.jpg","Spade4.jpg","Spade5.jpg","Spade6.jpg","Spade7.jpg","Spade8.jpg","Spade9.jpg","Spade10.jpg","Spade11.jpg","Spade12.jpg"]; 

var pickCard1 = cardArray[Math.floor(Math.random() * cardArray.length)]; 
var pickCard2 = cardArray[Math.floor(Math.random() * cardArray.length)]; 
if(parseInt(pickCard1.match(/\d+/g)) === parseInt(pickCard2.match(/\d+/g))){ 
    /*Do something here if the first equals the second card*/ 
} else if(parseInt(pickCard1.match(/\d+/g)) > parseInt(pickCard2.match(/\d+/g))){ 
    /*Do something here if the first card is greater than the second card*/ 
}else{ 
    /*Do something here if the first card is less than the second card*/ 
} 
+0

Что делать, если карта была «club14.jpg». 'card.match (/ \ d/g)' не будет работать. – Andy

+0

@ Энди, я только что исправил это. Я хотел сделать 'card.match (/ \ d +/g)', который работает. – bitoffdev

Смежные вопросы