Как отобразить символ в виде строки с табло? - PullRequest
0 голосов
/ 21 сентября 2019

У меня проблемы с отображением символа в виде строки, которую я установил на своей доске.Как отобразить моего персонажа на доске в виде строки. Например, при вводе AABBA на выходе будет отображаться AABBA в виде строки с использованием дизайна, установленного на моей доске для A и B.

#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring> 

using namespace std ;

void display(int dimI , int dimJ, const char A[20][40])
{
    for (int i =0 ; i < dimI ; ++i)
    {
        for (int j = 0 ; j < dimJ ; ++j)
        {
            cout << A[i][j];
        }
        cout << endl ;
    }
}
void clearScreen();
void delay() ;

int main()
{

    const int dimI = 20, dimJ = 40;
    string letter ;
    string displayboard(int dimI , int dimJ, const char A[20][40]) ;

    cout << "Please enter a word or number:";   
    getline(cin, letter);


    for(int i=0; i<letter.length(); ++i)
    {

    switch(letter[i])                          
    {

    case 'A' :
    {

    char board_A[dimI][dimJ] =
       {
             {' ' , ' ' , '#' , ' ' , ' ' },
             {' ' , '#' , ' ' , '#' , ' ' },
             {'#' , ' ' , ' ' , ' ' , '#' },
             {'#' , ' ' , ' ' , ' ' , '#' },
             {'#' , '#' , '#' , '#' , '#' },
             {'#' , ' ' , ' ' , ' ' , '#' },
             {'#' , ' ' , ' ' ,' '  , '#' }
        };

    display(dimI,dimJ,board_A);
    break ;
    }

     case 'B'  :
    {

     char board_B[dimI][dimJ] =
       {
             {'#' , '#' , '#' , '#' , ' ' },
             {'#' , ' ' , ' ' , ' ' , '#' },
             {'#' , ' ' , ' ' , ' ' , '#' },
             {'#' , '#' , '#' , '#' , ' ' },
             {'#' , ' ' , ' ' , ' ' , '#' },
             {'#' , ' ' , ' ' , ' ' , '#' },
             {'#' , '#' , '#' ,'#'  , ' ' }
       };
       display(dimI,dimJ,board_B);
       break ;
    }

void display( string displayboard [20][40] ,int dimI , int dimJ )
{

    for (int i =0 ; i< dimI ; ++i)
    {
        for (int j = 0 ; j, dimJ ; ++j)
        {
            cout << displayboard[i][j];
        }

        cout << endl ;
    }
    delay();
    clearScreen();
}

void delay()  
{
    for (int i = 0 ; i < 1000000000 ; ++i) ;
}

void clearScreen() 
{
    system("cls");
}

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

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

в соответствии с ответом @Yunnosch sir, вы должны реализовать код, как показано ниже.

Показать здесь

Ваш метод отображения:

void display(string letter)
{
  const int dimI = 20, dimJ = 40;
  char board_A[dimI][dimJ] =
                   {
                         {' ' , ' ' , '#' , ' ' , ' ' },
                         {' ' , '#' , ' ' , '#' , ' ' },
                         {'#' , ' ' , ' ' , ' ' , '#' },
                         {'#' , ' ' , ' ' , ' ' , '#' },
                         {'#' , '#' , '#' , '#' , '#' },
                         {'#' , ' ' , ' ' , ' ' , '#' },
                         {'#' , ' ' , ' ' ,' '  , '#' }
                    };

char board_B[dimI][dimJ] =
                   {
                         {'#' , '#' , '#' , '#' , ' ' },
                         {'#' , ' ' , ' ' , ' ' , '#' },
                         {'#' , ' ' , ' ' , ' ' , '#' },
                         {'#' , '#' , '#' , '#' , ' ' },
                         {'#' , ' ' , ' ' , ' ' , '#' },
                         {'#' , ' ' , ' ' , ' ' , '#' },
                         {'#' , '#' , '#' ,'#'  , ' ' }
                   };
                  for (int i =0 ; i< dimI ; ++i)
                  {                       
                        for(int k=0; k<letter.length(); ++k)
                        {

                              switch(letter[k])                          
                                {
                                    case 'A' :
                                            { 
                                              cout<<board_A[i];              
                                              break;
                                            }   

                                    case 'B'  :                    
                                            {
                                              cout<<board_B[i]; 
                                              break;
                                            }
                                }                                  


                      }
                      cout<<endl;
                  }

 }
0 голосов
/ 21 сентября 2019

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

Т.е. не печатать "A"затем" B ".
Вместо этого выведите

first  line A     first  line B ...
second line A     second line B ...
third  line A     third  line B ... 
fourth line A     fourth line B ... 
print __#__  print ####_ newline
print _#_#_  print #___# newline
print #___#  print #___# newline
print #___#  print ####_ newline
print #####  print #___# newline
print #___#  print #___# newline
print #___#  print ####_ newline

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...