2013-05-06 1 views
0

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

if (cardsinhand < 7 && newcard != firstcard && newcard != secondcard) 

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

cardsinhand = 2 
firstcard = Math.floor(Math.random() * 1000 % 52) 
secondcard = Math.floor(Math.random() * 1000 % 52) 
newcard = Math.floor(Math.random() * 1000 % 52) 

function hitCard() 
{ 
    if (cardsinhand < 7 && newcard != firstcard && newcard != secondcard) 
    { 
    document.images[cardsinhand].src = "http://www.biogow/images/cards/gbCard" + newcard + ".gif" 

    cardsinhand++ 
    } 
} 

любая идея, почему это не работает правильно?

ответ

4

Это не проблема с вашим заявлением if. Оказывается, что это:

newcard = Math.floor(Math.random() * 1000 % 52) 

делается раз, а не каждый раз, когда вы попали. Это означает, что вы будет получить ту же карту снова и снова.

Вы должны, вероятно, пересчитывать новую карту каждый раз, когда выполняете операцию хита.


Вы, вероятно, следует также изучить как вы генерируете карты. Обычно вы используете колоду (содержащую одну или несколько «реальных» колод), чтобы вероятности менялись, когда карты удалялись, как в реальной жизни.

Это также поможет устранить любую проблему перекоса при использовании * 1000 % 52, которая, как правило, предпочитает карты на одном конце «колоды».

+0

Спасибо, что это была моя проблема в конце концов – Dolbyover

1

Это потому, что вы только генерируете newcard один раз, вне тела функции. Что вы хотите, чтобы новая карта будет генерироваться каждый раз при вызове функции, и поэтому эта строка: newcard = Math.floor(Math.random() * 1000 % 52) должна быть внутри функции, например, так:

cardsinhand = 2 
firstcard = Math.floor(Math.random() * 1000 % 52) 
secondcard = Math.floor(Math.random() * 1000 % 52) 


function hitCard() 
{ 
    var newcard = Math.floor(Math.random() * 1000 % 52) 
    if (cardsinhand < 7 && newcard != firstcard && newcard != secondcard) 
    { 
     document.images[cardsinhand].src = "http://www.biogow/images/cards/gbCard"+newcard+".gif" 

     cardsinhand++ 
    } 
} 

Кроме того, для чего это стоит, если вы вы можете просто начать поиск с помощью Array для хранения карт вашей руки. Что произойдет с этим if, когда вашей новой картой может быть первая карта, вторая карта или третья карточка?

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