2016-10-12 1 views
0

Я работаю над программой, чтобы закодировать игру под названием Дьявольские кости. У меня логика кода работает отлично, но я изо всех сил пытаюсь распечатать табло, чтобы показать ход игры. Ниже перечислены подробности назначения, а затем мой код. Я не знаю, с чего начать печатать табло, как показано на изображении, которое я связал.Печать табло со скользящей стрелкой C++ beginner

В нашей версии Dice правил будут следующие Дьяволом:

Игрок неоднократно выбрасывает 6-кубик, пока либо не будет 1 прокатки или игрок решает «держать».

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

  • Если игрок прокручивает любое другое число, он добавляется к общей сумме их хода, и ход игрока продолжается.

  • Если игрок предпочитает «удерживать», их текущая сумма очков добавляется к их счету, а дьявол получает ход.

Logic Дьявола

Если счет ничейный или дьявол побеждает, он будет катиться, пока он не имеет, по крайней мере, 21 очков (если он не достиг уже 100 баллов) Если игрок выигрывает, дьявол будет продолжать катиться, пока у него не будет как минимум 30 очков (если он уже достиг 100 очков) Если дьявол бросает 1, он также теряет очки, которые он набрал на своем ходу Если игрок выбирает " лишиться ", они проигрывают, и игра окончена. Игрок должен набрать 100 очков, прежде чем дьявол сумеет сделать это, чтобы выиграть.

Например, игрок, Энн, начинает поворот с рулоном 5. Энн может удержать и набрать 5 очков, но решает снова катиться. Энн закатывает 2 и может удерживать с разницей в 7 очков, но решает снова катиться. Энн бросает 1, и она должна закончиться своим чередом, не забив. Затем дьявол переворачивает последовательность 4-5-3-5-5, выбирает удержание и добавляет свою очередь в общей сложности 22 очка к своему счету.

Есть несколько других подробностей о логике игры, но я уверен, что я правильно ее работаю. Мне просто интересно, как получить меню с движущейся стрелкой, как показано ниже.

the scoreboard should look like this

This is an example game

Мой код выглядит следующим образом:

#include <cstdlib> 
#include <ctime> 
#include <iostream> 
#include <iomanip> 
#include <fstream> 

using namespace std; 

int main() { //just for a school grading program// 
#ifdef JARVIS 
    srand(0); 
#else 
    srand(time(NULL)); 
#endif 
// Call your functions to play your game here... 

    char userInput; 
    int diceRoll; 
    int turnScore = 0; 
    int totalScore = 0; 
    int devilScore = 0; 
    bool isItDevilsTurn = false; 
    bool winner = false; 
    int devilWins = 0; 
    int playerWins = 0; 

    cout << "---- Welcome to Devil's Dice! ----" << endl; 
    cout << "Hold[h], roll[r], or forfeit[f]: " << endl; 

    while (!winner) { 
     if (!isItDevilsTurn) { 
      cin >> userInput; 

      if (userInput == 'h') 
      { 
       totalScore = totalScore + turnScore; 
       cout << "You banked " << turnScore << " points and have a total of " << totalScore << " points" << endl; 
       isItDevilsTurn = true; 
       turnScore = 0; 
      } 

      if (userInput == 'r') 
      { 
       diceRoll = rand() % 6 + 1; 

       if (diceRoll > 1) 
       { 
        cout << "You rolled a " << diceRoll << "!" << endl; 
        turnScore = turnScore + diceRoll; 
       } 
       else 
       { 
        cout << "You rolled a 1 :(" << endl; 
        turnScore = 0; 
        isItDevilsTurn = true; 

       } 
      } 

      if (totalScore >= 100) { 
       winner = true; 
       cout << "You Win!" << endl; 
       playerWins = playerWins + 1; 
      } 

      if (userInput == 'f') { 
       cout << "Game Over!" << endl; 
      } 

     } 
     else 
     { 
      int devilGoal = 21; 

      if (totalScore > devilScore) 
      { 
       devilGoal = 30; 
      } 

      while (isItDevilsTurn) 
      { 
       diceRoll = rand() % 6 + 1; 
       if (diceRoll > 1 && turnScore < devilGoal) 
       { 
        cout << "devil rolled " << diceRoll << endl; 
        turnScore = turnScore + diceRoll; 

       } 
       else if (diceRoll > 1 && turnScore > devilGoal) 
       { 
        devilScore = devilScore + turnScore; 
        cout << "devil holds " << turnScore << " points and now has " << devilScore << " points" << endl; 
        isItDevilsTurn = false; 
        turnScore = 0; 

       } 
       else 
       { 
        cout << "devil rolled a 1" << endl; 
        isItDevilsTurn = false; 
        turnScore = 0; 
       } 

       if (devilScore >= 100) 
       { 
        cout << "Devil Wins!" << endl; 
        devilWins = devilWins + 1; 
        winner = true; 
       } 

      } 
     } 
    } 

    cout << "Total Wins: " << playerWins << endl; 
    cout << "Total Losses: " << devilWins << endl; 

    fstream output("games.txt"); 
    output << playerWins << " " << devilWins << endl; 
    return 0; 

} 
+0

Какой у вас вопрос? Пожалуйста, будьте точны. Кажется, вы пока не печатаете какую-либо часть табло. –

+0

Я не знаю, как напечатать табло, которое выглядит так. И я не знаю, как переместить «указатель», как только я это сделаю. Извините за путаницу – Walkertothe

+0

Мой вопрос заключается в том, как использовать мой существующий код для печати табло, который соответствует показанной с помощью -> переместить, чтобы соответствовать счету пользователя и дьявола. – Walkertothe

ответ

0

Я сожалею, я не слишком хорошо с закладками, так что вы просто сделать это выглядит, как вам нужно к. Я использовал тройной оператор, чтобы понять, если мне нужно написать номер или вкладку в cuurent линии

printf("\tPlayer\t\t\tDevil\n"); 
printf("\t------\t\t\t-----\n"); 
for(int i = 10; i >= 0; --i){ 
     printf((totalScore < (i+1)*10 && totalScore >=i*10) ? "%d >" : "\t", totalScore); 
     printf("--%d", i*10); 
     printf((turnScore < (i+1)*10 && turnScore >=i*10) ? "< %d" : "\t\t\t", turnScore); 
     printf((devilTotal < (i+1)*10 && devilTotal >=i*10) ? "%d >" : "\t", devilTotal); 
     printf("--%d", i*10); 
     printf((devilTurn < (i+1)*10 && devilTurn >=i*10) ? "< %d" : "\t\t", devilTurn); 
     printf("\n"); 
} 

Как это работает? сначала printf() Я оцениваю totalScore, если это меньше, чем следующее значение и больше, чем текущее Я печатаю его, иначе просто распечатайте вкладку. Второй printf() печатает текущее значение.Третий printf() evalutes turnScore, если он меньше следующего значения и больше, чем текущий, я печатаю его, иначе просто напечатайте 2 вкладки.

То же самое для дьявола.

Было бы одинаково с cin и cout, это просто, что я чувствую себя более уверенно с printf(). Если это выглядит правильно, все, что вам нужно сделать, это работать с выравниваниями.

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