2010-02-17 3 views
1

Я делаю игру с черным гнездом, и мне нужно использовать оператор case switch для преобразования A в 11 и T, Q, J и K в 10, однако я не уверен, как сделать код. Будет ли кто-то не помогать мне в решении этой проблемы?Как использовать оператор case switch для преобразования букв в числа

До сих пор у меня есть:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Console.WriteLine("Welcome to Black Jack!\n"); 
      Console.WriteLine("Pick two cards to add to your hand\n"); 
      Console.WriteLine("Cards 2, 3, 4, 5, 6, 7, 8, 9 all are worth face value\n"); 
      Console.WriteLine("Ace (A) is worth 11,Ten (T), Jack (J), Queen (Q), and King (K) are all worth 10 points\n"); 
      Console.WriteLine("Whichever sum is higher, that player is declared the winner\n"); 
      Console.WriteLine("What are player one's cards?"); 
      Console.WriteLine("Enter card1 =?"); 
      Console.WriteLine("Enter card2 =?"); 
      double card1 = Double.Parse(Console.ReadLine()); 
      double card2 = Double.Parse(Console.ReadLine()); 
      Console.WriteLine("You entered: [" + card1, card2 + "]"); 
      Console.WriteLine("What are player two's cards?"); 
      Console.WriteLine("Enter card3 =?"); 
      Console.WriteLine("Enter card4 =?"); 
      double card3 = Double.Parse(Console.ReadLine()); 
      double card4 = Double.Parse(Console.ReadLine()); 
      Console.WriteLine("You entered: [" + card3, card4 + "]"); 
      Console.ReadLine(); 

      { 

       Console.WriteLine("Calculate player 1: [" + "card1 + card2" + "]"); 
       Console.WriteLine("Calculate player 2: [" + "card3 + card4" + "]"); 
       { 
        if (card1 + card2 > card3 + card4) 
         Console.WriteLine("Player One Wins!"); 
        else if (card3 + card4 > card1 + card2) 
         Console.WriteLine("Player Two Wins!"); 
        Console.ReadLine(); 
+0

Учитывая стиль вашего кода и использование системных пространств имен, не следует ли это отмечать C#, а не Java? – jeffora

+2

Почему эта публикация отмечена как «java»? Похоже, что это о C#. –

+0

Я действительно не думаю, что нужно вставить весь код для такого простого вопроса, но я думаю, слишком много лучше, чем слишком мало. –

ответ

1

Есть много способов сделать это, но я, вероятно, не будет использовать переключатель здесь, как это будет многословным. Это один из способов сделать это:

int parseCard(char card) 
{ 
    if (card >= '2' && card <= '9') 
     return card - '0'; 
    if (card == 'T' || card == 'J' || card == 'Q' || card == 'K') 
     return 10; 
    if (card == 'A') 
     return 11; 
    throw new ArgumentException("card not valid", "card"); 
} 

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

+0

+1 для TryParse - я использую/пишу этот шаблон все время. –

2

Я не уверен, почему переключатель будет подробным.

int parseCard(char card) 
{ 
    if (card >= '2' && card <= '9') { 
     return card - '0'; 
    } 

    switch (card) { 
     case 'T': 
     case 'J': 
     case 'Q': 
     case 'K': 
      return 10; 

     case 'A': 
      return 11; 

     default: 
      throw new ArgumentException("card not valid", "card"); 
    } 
}