Как напечатать символ » » на экране консоли с помощью клавиш со стрелками?

#c

#c

Вопрос:

 first starting point --> 
                         <--last destination
                         
                     ..  
 

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

Клавиша пробела является переключателем режимов, она определяет, можно ли свободно перемещать курсор без ввода текста на экране, или символ будет нажат до текущего положения курсора при перемещении с помощью клавиш со стрелками. Пробел не нужно использовать при каждом нажатии клавиш со стрелками!

После нажатия клавиши пробела клавиши направления можно использовать много раз и столько раз, сколько необходимо, чтобы символ можно было нажимать на экране столько раз, сколько необходимо, или курсор можно свободно перемещать по мере необходимости, ничего не записывая на экране. Чтобы добавить это дальше: был нажат пробел (активирован режим рисования, набран там, где находится курсор, красный вверху слева), затем стрелка вниз, стрелка вниз, стрелка вниз; пробел был нажат (нет рисования, т.е. активирован режим свободного перемещения); затем стрелка вправо, стрелка вправо, стрелка вправо; был нажат пробел (снова активирован режим рисования, набран там, где в тот момент находился курсор, красный внизу справа); Если используются стрелки вверх и стрелка вверх, на экране появится вывод, подобный приведенному ниже.

Клавиша esc будет использоваться для выхода из программы.

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

Я могу получить только эту распечатку:

    
      
     

Мои коды:

 #include <stdio.h>
    #include <conio.h>
    
    
        int main() {
            char button;
            
             while(1){           
                  button= getch(); 
                  if(button==77){ 
                     printf(" ");
                     button= getch();
                   }
                   else if(button==75){
                        printf(" "); 
                         button= getch();
                   }
                   else if(button==72){
                        printf(" ");
                         button= getch();
                   } 
                   else if(button==80){   
                         printf(" n");  
                         button= getch();
                  }
              }
            return 0;
        } 
 

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

1. Рассматривали ли вы возможность использования библиотеки ncurses?

2. Не использовать button==75 и так далее. Используйте button == 'K' , button == 'H' , и button == 'P' .

3. Стандарт C не предоставляет никаких возможностей для перемещения курсора по дисплею. Если вы используете Unix или Unix-подобную систему, у вас могут быть доступны ncurses , и вам нужно будет изучить это или аналогичное средство. Кроме того, вы можете узнать escape-последовательности для терминала, на который вы ориентируетесь. Обратите внимание, что при их записи вам нужно будет очистить вывод или отключить буферизацию в выходном потоке.

4. Когда я создаю его с помощью букв, я никак не могу перемещаться по экрану консоли. И я должен закодировать его, не используя дополнительную библиотеку.

5. Коды выхода ANSI должны быть доступны на большинстве терминалов, совместимых с VT100

Ответ №1:

 #include <stdio.h>
#include <conio.h>
#include <windows.h>
int main(){
    int x=30,y=10;
    char c;
    gotoxy(x,y);
    printf(" ");
    while(1){
            
            
            c=getch();
            if(c==77){
                x  ;
               }
               if(c==75){
                x--;
               }
              if(c==72){
                y--;
               } 
               if(c==80){
                y  ;
               }
               if(c==27){
                break;
               }
               gotoxy(x,y);
               printf("*");
           }
    getch();

       
   
           
            return 0;
        } 
        int gotoxy(int x, int y)
{
   int gotoxy(int x, int y)
{
    COORD coordinate;
    coordinate.X = x;
    coordinate.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coordinate);
    return 0;
}