Печать табло со скользящей стрелкой C для начинающих

#c #printing #menu

#c #печать #меню

Вопрос:

Я работаю над программой для кодирования игры под названием Devil’s Dice. У меня логика кода работает отлично, но я изо всех сил пытаюсь распечатать табло, чтобы показать ход игры. Ниже приведена подробная информация о назначении, за которой следует мой код. Я не знаю, с чего начать печать табло, как показано на изображении, которое я связал.

В нашей версии Devil’s Dice правила будут следующими:

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

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

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

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

Дьявольская логика

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

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

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

табло должно выглядеть следующим образом

Это пример игры

Мой код выглядит так:

 #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 amp;amp; turnScore < devilGoal)
                {
                    cout << "devil rolled " << diceRoll << endl;
                    turnScore = turnScore   diceRoll;

                }
                else if (diceRoll > 1 amp;amp; 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;

}
  

Комментарии:

1. В чем ваш актуальный вопрос? Пожалуйста, будьте точны. Похоже, вы еще не печатаете какую-либо часть табло.

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

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

4. Ваш существующий код не печатает табло, вам нужно будет написать новый код.

Ответ №1:

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

 printf("tPlayertttDeviln");
printf("t------ttt-----n");
for(int i = 10; i >= 0; --i){
      printf((totalScore < (i 1)*10 amp;amp; totalScore >=i*10) ? "%d >" : "t", totalScore);
      printf("--%d", i*10);
      printf((turnScore < (i 1)*10 amp;amp; turnScore >=i*10) ? "< %d" : "ttt", turnScore);
      printf((devilTotal < (i 1)*10 amp;amp; devilTotal >=i*10) ? "%d >" : "t", devilTotal);
      printf("--%d", i*10);
      printf((devilTurn < (i 1)*10 amp;amp; devilTurn >=i*10) ? "< %d" : "tt", devilTurn);
      printf("n");
}
  

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

То же самое для devil.

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