Я работаю над простой карточной игрой Blackjack. Я использую этот код для расчета оценки пользователя:Функция, которая изменяет переменную, переданную вызывающей функцией
switch (label9.Text)
{
case "J": playerTotal = playerTotal + 10; break;
case "Q": playerTotal = playerTotal + 10; break;
case "K": playerTotal = playerTotal + 10; break;
case "A": playerTotal = playerTotal + 11; break;
default: playerTotal = playerTotal + Convert.ToInt32(label9.Text); break;
}
Но я не хочу писать это снова и снова. Так что я поместил этот код внутри функции:
public void score(Label n, int m)
{
switch (n.Text)
{
case "J": m += 10; break;
case "Q": m += 10; break;
case "K": m += 10; break;
case "A": m += 11; break;
default: m += Convert.ToInt32(n.Text); break;
}
}
Теперь вот проблема: Когда я называю score(label7, playerTotal)
из другой функции, значение playerTotal
не меняется. Например:
public void hitPlayer()
{
//ilk hit
if (hitCounter == 0)
{
label7.Text = newDeck.Last();
playerHand[2] = newDeck.Last();
newDeck = newDeck.Take(newDeck.Count() - 1).ToArray();
label7.Visible = true;
pictureBox7.Visible = true;
score(label7, playerTotal); // <<===== 'playerTotal' does not change
aceFound(hitCounter);
label12.Text = playerTotal.ToString();
}
Однако, когда я использую switch/case
код без окружив его внутри функции, значение playerTotal
делает изменения. Что случилось с тем, как я называю функцию score()
?
Или вернуться м в конце функции! : P – Jite
@Jite конечно, мне тоже не нравится использовать 'out' и 'ref'. – EZI
Почему бы не присоединиться к корпусам JQK? – Andrew