wemos d1でblackjack その2


概要

wemos d1でblackjackやってみた。

写真

サンプルコード


char inkey()
{
    char a = ' ';
    while (Serial.available() == 0)
    {
        delay(10);
    }
    switch (Serial.read())
    {
    case 'y':
        a = 'y';
    break;
    case 'n':
        a = 'n';
    break;
    case 'h':
        a = 'H';
    break;
    case 's':
        a = 'S';
    break;
    default:
    break;
    }
    return a;
}
int shuff(int cards[])
{
    int t;
    int i;
    int desk[52];
    for (i = 0; i < 52; i++) desk[i] = (i / 13 + 3) * 100 + i % 13 + 1;
    for (i = 0; i < 52; i++)
    {
        do
        {
            t = rand() % 52;
        } while (desk[t] == 0);
        cards[i] = desk[t];
        desk[t] = 0;
    }
    return 0;
}
int convert_jkq(int a)
{
    if ((a % 100 == 11) || (a % 100 == 12) || (a % 100 == 13)) return (a / 100) * 100 + 10;
    else return a;
}
void pic(int num)
{
    char fl;
    int po_num;
    fl = num / 100;
    po_num = num % 100;
    switch (po_num)
    {
        case 1:
        {
            Serial.print("*******\n");
            Serial.print("*     *\n");
            Serial.print("*  ");
            Serial.print(fl);
            Serial.print("  *\n*   A *\n");
            Serial.print("*     *\n");
            Serial.print("*******\n");
            break;
        }
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
        {
            Serial.print("*******\n");
            Serial.print("*     *\n");
            Serial.print("*  ");
            Serial.print(fl);
            Serial.print("  *\n*  ");
            Serial.print(po_num);
            Serial.print(" *\n*     *\n");
            Serial.print("*******\n");
            break;
        }
        case 11:
        {
            Serial.print("*******\n");
            Serial.print("*     *\n");
            Serial.print("*  ");
            Serial.print(fl);
            Serial.print("  *\n*   J *\n");
            Serial.print("*     *\n");
            Serial.print("*******\n");
            break;
        }
        case 12:
        {
            Serial.print("*******\n");
            Serial.print("*     *\n");
            Serial.print("*  ");
            Serial.print(fl);
            Serial.print("  *\n*   Q *\n");
            Serial.print("*     *\n");
            Serial.print("*******\n");
            break;
        }
        case 13:
        {
            Serial.print("*******\n");
            Serial.print("*     *\n");
            Serial.print("*  ");
            Serial.print(fl);
            Serial.print("  *\n*   K *\n");
            Serial.print("*     *\n");
            Serial.print("*******\n");
            break;
        }
    }
}
int play(void)
{
    int i;
    int psum = 0;
    int bsum = 0;
    int pcards[5] = {0};
    int bcards[5] = {0};
    int cards[52];
    char go_on;
    char d;
    Serial.print("Welcome to SimpleBlackJack!\n" "Anytime you can press Ctrl+C to exit.\n" "Enjoy! Press Enter to go on......\n");
    do
    {
        go_on = inkey();
    } while (go_on != 'y');
    Serial.print("\n");
    shuff(cards);
    pcards[0] = cards[0];
    pcards[1] = cards[1];
    bcards[0] = cards[2];
    bcards[1] = cards[3];
    Serial.print("One of computer's cards:\n");
    pic(bcards[0]);
    Serial.print("\n");
    Serial.print("Cards of player:\n");
    pic(pcards[0]);
    pic(pcards[1]);
    i = 0;
    for (i = 0; i < 2; i++)
    {
        if (pcards[i] % 100 == 1)
        {
            Serial.print("choose A value of the card ");
            Serial.print(i + 1);
            Serial.print(", input 'y' for 11 or 'n' for 1 :\n");
            do
            {
                d = inkey();
            } while (d != 'y' && d != 'n');
            if (d == 'y')
            {
                Serial.print("You've chosen value 11 for card A.\n");
                psum = psum + 11;
            }
            else if (d == 'n')
            {
                Serial.print("You've chosen value 1 for card A.\n");
                psum = psum + 1;
            }
        }
        else if (convert_jkq(pcards[i]) % 100 == 10) psum = psum + 10;
        else psum = psum + pcards[i] % 100;
        if (psum > 21)
        {
            Serial.print("Sum of player's cards now: ");
            Serial.print(psum);
            Serial.print("Computer win!\n");
            return 1;
        }
        else if (psum == 21)
        {
            Serial.print("Sum of player's cards now: ");
            Serial.print(psum);
            Serial.print("Player win!\n");
            return 0;
        }
    }
    Serial.print("Sum of player's cards now: ");
    Serial.println(psum);
    i = 0;
    for (i = 0; i < 3; i++)
    {
        char j = 'n';
        Serial.print("Want more cards? Input y or n:\n");
        do
        {
            j = inkey();
        } while (j != 'y' && j != 'n');
        if (j == 'y')
        {
            Serial.print("You've got another card now.\n");
            pcards[i + 2] = cards[i + 4];
            Serial.print("and your card is: ");
            Serial.println(i + 3);
            pic(pcards[i + 2]);
            if (pcards[i + 2] % 100 == 1)
            {
                Serial.print("Choose A value of the card ");
                Serial.print(i + 3);
                Serial.print(", input 'y' for 11 or 'n' for 1:\n");
                do
                {
                    d = inkey();
                } while (d != 'y' && d != 'n'); 
                if (d == 'y')
                {
                    Serial.print("You've chosen value 11 for card A.\n");
                    psum = psum + 11;
                }
                else if (d == 'n')
                {
                    Serial.print("You've chosen value 1 for card A.\n");
                    psum = psum + 1;
                }
            }
            else if (convert_jkq(pcards[i + 2]) % 100 == 10) psum = psum + 10;
            else psum = psum + pcards[i + 2] % 100;
            if (psum > 21)
            {
                Serial.print("Sum of player's cards now: ");
                Serial.println(psum);
                Serial.print("Computer win!\n");
                return 1;
            }
            else if (psum == 21)
            {
                Serial.print("Sum of player's cards now: ");
                Serial.println(psum);
                Serial.print("Player win!\n");
                return 0;
            }
            else 
            {
                Serial.print("Sum of player's cards now: ");
                Serial.println(psum);
            }
        }
        else
        {
            Serial.print("Sum of player's cards now: ");
            Serial.println(psum);
            break;
        }
    }
    if (i == 3)
    {
        Serial.print("Player win! Because the sum of your 5 cards is no larger than 21! So lucky!\n");
        return 0;
    }
    Serial.print("Computer's cards:\n");
    pic(bcards[0]);
    pic(bcards[1]);
    if (bcards[0] % 100 + bcards[1] % 100 == 2)
    {
        bsum = 12;
        Serial.print("Sum of computer's cards now: ");
        Serial.println(bsum);
    }
    else if ((convert_jkq(bcards[0])) % 100 + (convert_jkq(bcards[1])) % 100 ==1)
    {
        bsum = 21;
        Serial.print("Sum of computer's cards now: ");
        Serial.print(bsum);
        Serial.print("Computer win!\n");
        return 1;
    }
    else if (bcards[0] % 100 == 1 || bcards[1] % 100 == 1)
    {
        bsum=(bcards[0] + bcards[1]) % 100 + (rand() % 2) * 10;
        Serial.print("Sum of computer's cards now: ");
        Serial.println(bsum);
    }
    else
    {
        bsum = (convert_jkq(bcards[0])) % 100 + (convert_jkq(bcards[1])) % 100;
        Serial.print("Sum of computer's cards now: ");
        Serial.println(bsum);
    }
    for (i = 0; i < 3 && bsum < 17; i++)
    {
        bcards[i + 2] = cards[i + 7];
        Serial.print("Computer's card is: ");
        Serial.println(i + 3);
        pic(bcards[i + 2]);
        if (bcards[i + 2] % 100 == 1)
        {
            if (bsum + 11 <= 21)
            {
                Serial.print("Computer has chosen A as 11\n");
                bsum = bsum + 11;
                Serial.print("Sum of computer's cards now: ");
                Serial.println(bsum);
            }
            else
            {
                Serial.print("Computer has chosen A as 1\n");
                bsum = bsum + 1;
                Serial.print("Sum of computer's cards now: ");
                Serial.println(bsum);
            }
        }
        else
        {
            bsum = bsum + convert_jkq(bcards[i + 2]) % 100;
            Serial.print("Sum of computer's cards now: ");
            Serial.println(bsum);
        }
    }
    if (i == 3)
    {
        Serial.print("Computer win! Because the sum of its 5 cards is no larger than 21! So lucky!\n");
        return 1;
    }
    if (bsum > 21 || psum > bsum)
    {
        Serial.print("Player win!\n");
        return 0;
    }
    else if (psum == bsum)
    {
        Serial.print("Oh, player and computer get the same score!\n");
        return 3;
    }
    else if (psum < bsum)
    {
        Serial.print("Computer win!\n");
        return 1;
    }
    return 3;
}
void main0(void)
{
    char again;
    play();
    Serial.print("\nAnd now would you like to play again? Input 'y' or 'n':\n");
    do
    {
        again = inkey();
    } while (again != 'y' && again != 'n');
    if (again == 'y')
    {
        Serial.print("\nOK, let's go again!\n\n");
        main0();
    }
}
void setup()
{
    Serial.begin(115200);
    while (!Serial) delay(250);
    Serial.print("ok");
    main0();
}
void loop()
{
    delay(5000);
}




以上。