Создание библиотеки
Я правильно понимаю, что это синтаксис библиотеки в javascript с ключом rank и значением suit?
var hand = [
{ "rank":"семерка", "suit":"пик" },
{ "rank":"четверка", "suit":"червей" },
{ "rank":"двойка", "suit":"треф" },
{ "rank":"семерка", "suit":"пик" },
{ "rank":"восьмерка", "suit":"бубен" }
];
Тогда как мне создать такую же библиотеку по ходу выполнения кода. Т.е. у меня есть текстовые поля, куда рандомно закидываются значения карт (номинал и масть, например, восьмерка черви или туз треф). Теперь, чтобы работать с этими значениями, мне нужно присвоить переменной hand значения текстовых полей так, как показано выше, чтобы я мог обращаться к номиналам (hand.rank) и к мастям (hand.suit) <input type="button" value="Кликни!" onclick="func1()"> <p><input type="text" id="random1" readonly></p> <p><input type="text" id="random2" readonly></p> <input type="text" id="random3" readonly> <p><input type="text" id="random4" readonly></p> <input type="text" id="random5" readonly> <p><input type="button" value="Кликни!" onclick="ANSWER"></p> <p><input type="text" id="solve"></p>
var ranks = ["двойка","тройка","четверка","пятерка","шестерка",
"семерка","восьмерка","девятка","десятка","валет","дама","король","туз"];
var suits = ["пик","червей","треф","бубен"];
function func() {
return {
rank: ranks[Math.floor(Math.random() * ranks.length)],
suit: suits[Math.floor(Math.random() * suits.length)]
};
}
var hand = [];
function func1() {
for (var i = 0; i < 5; i++) {
var card = func();
hand[i] = card;
document.getElementById("random" + (i + 1)).value = card.rank + " " + card.suit;
}
}
function containsNTimes(handRanks, rank, n) {
//.............
}
function containsNMasti_1(handRanks, suit, n) {
//..............
}
function containsNMasti_2(handRanks1, rank) {
//.............
}
}
function FullHouse(hand) {
//............
}
function StreetFlesh(hand) {
//............
}
function ANSWER() {
// ЗДЕСЬ НУЖНО СОЗДАТЬ ТУ САМУЮ БИБЛИОТЕКУ hand
try {
while(true) {
if (FullHause(hand)) {
document.getElementById('solve').value = 'Комбинация - Фулл-Хауз';
}
else if (StreetFlesh(hand)) {
document.getElementById('solve').value = 'Комбинация - Стрит-Флеш';
}
else {
document.getElementById('solve').value = 'Нет известной комбинации';
}
}
} catch (e) {
alert( 'No game!' );
} finally {
if (confirm("Продолжить?")) break;
else break;
}
}
Буду очень благодарен за помощь! |
Цитата:
Цитата:
|
Malleys,
Да, в этой строчке создается объект: var hand = []; Но он пустой. Или когда рандомно заполняются поля, то и заполняется сам объект с ключом и значением? Я не знаю, как вот передать все это в функцию ANSWER... |
Цитата:
Цитата:
function ANSWER() {
// ЗДЕСЬ НУЖНО СОЗДАТЬ ТУ САМУЮ БИБЛИОТЕКУ hand
alert(hand);
try {
while(true) {
|
Malleys,
проблема в том, что у меня ничего не происходит, когда нажимаю на кнопку "кликни!": <p><input type="button" value="Кликни!" onclick="ANSWER()"></p> Я думал, это из-за того, что массив объектов пустой, но видимо дело в другом... |
Malleys,
Я закомментировал try,catch и finally, вот что вывелось: [object Object],[object Object],[object Object],[object Object],[object Object] Почему так? |
Потому что по умолчанию строковое представление объектов так выглядит!
Можно так... alert(JSON.stringify(hand)); А можно своё собственное, которое я уже писал вам...
alert(hand.map(function(card) { return card.rank + " " + card.suit; }).join(", "));
А это...
function ANSWER() {
// ЗДЕСЬ НУЖНО СОЗДАТЬ ТУ САМУЮ БИБЛИОТЕКУ hand
try {
while(true) {
if (FullHause(hand)) {
document.getElementById('solve').value = 'Комбинация - Фулл-Хауз';
}
else if (StreetFlesh(hand)) {
document.getElementById('solve').value = 'Комбинация - Стрит-Флеш';
}
else {
document.getElementById('solve').value = 'Нет известной комбинации';
}
}
} catch (e) {
alert( 'No game!' );
} finally {
if (confirm("Продолжить?")) break;
else break;
}
}
Оно у вас застревает в вечном цикле... и зачем вам тут try,catch и finally, ошибок не предвидится... может это также как с библиотекой, вы думаете одно, а оно означает другое? |
Malleys,
вот-вот, сам понимаю, что ошибок не может быть, если все автоматически задается, но у меня такая лабораторная - обязательное использование этой конструкции. |
Цитата:
Может так?
function ANSWER() {
// ЗДЕСЬ НУЖНО СОЗДАТЬ ТУ САМУЮ БИБЛИОТЕКУ hand
try {
if (FullHause(hand)) {
document.getElementById('solve').value = 'Комбинация - Фулл-Хауз';
}
else if (StreetFlesh(hand)) {
document.getElementById('solve').value = 'Комбинация - Стрит-Флеш';
}
else {
document.getElementById('solve').value = 'Нет известной комбинации';
throw new Error("Нет известной комбинации");
}
} catch (e) {
alert( 'No game!' );
} finally {
if (confirm("Продолжить?")) func1(); // а здесь заново запустить
}
}
|
Malleys,
Теперь понял, зачем эта конструкция. Но все равно ничего не происходит при нажатии на вторую кнопку Первая тоже перстала работать |
Цитата:
Однако, вот пример целиком! Вам только дописать функции FullHouse, StreetFlesh...
<input type="button" value="Начать!" onclick="func1();">
<p><input type="text" id="random1" readonly></p>
<p><input type="text" id="random2" readonly></p>
<p><input type="text" id="random3" readonly></p>
<p><input type="text" id="random4" readonly></p>
<p><input type="text" id="random5" readonly></p>
<input type="button" value="Проверить!" onclick="ANSWER();">
<p><input type="text" id="solve"></p>
<script>
// это все возможные номиналы
var ranks = ["двойка", "тройка", "четверка", "пятерка", "шестерка",
"семерка", "восьмерка", "девятка", "десятка", "валет", "дама", "король", "туз"
];
var suits = ["пик", "червей", "треф", "бубен"];
function func() {
return {
rank: ranks[Math.floor(Math.random() * ranks.length)],
suit: suits[Math.floor(Math.random() * suits.length)]
};
}
var hand = [];
function func1() {
for (var i = 0; i < 5; i++) {
var card = func();
hand[i] = card;
document.getElementById("random" + (i + 1)).value = card.rank + " " + card.suit;
}
document.getElementById("solve").value = hand.map(function(card) {
return card.rank + " " + card.suit;
}).join(", ");
}
function containsNTimes(handRanks, rank, n) {
//.............
}
function containsNSuit_1(handRanks, suit, n) {
//..............
}
function containsNSuit_2(handRanks1, rank) {
//.............
}
function FullHouse(hand) {
//............
}
function StreetFlesh(hand) {
//............
}
function ANSWER() {
try {
if (FullHause(hand)) {
document.getElementById('solve').value = 'Комбинация - Фулл-Хауз';
} else if (StreetFlesh(hand)) {
document.getElementById('solve').value = 'Комбинация - Стрит-Флеш';
} else {
document.getElementById('solve').value = 'Нет известной комбинации';
throw new Error("Нет известной комбинации");
}
} catch (e) {
alert('No game!');
} finally {
if (confirm("Продолжить?")) func1();
}
}
</script>
UPD Это, конечно, была особая жемчужина!
if (confirm("Продолжить?")) break;
else break;
|
Malleys,
Спасибо большое! Все получилось! Функции у меня уже были готовы, не смог связать эти два клика) А почему у меня ваш код не работал, фиг знает, скопировал заново, добавил свои функции и заработало |
| Часовой пояс GMT +3, время: 21:55. |