2 / 2 / 2
Регистрация: 05.05.2015
Сообщений: 9
1

Как реализовать движение символа по экрану? ncurses.h

17.05.2015, 21:06. Показов 3809. Ответов 11
Метки нет (Все метки)

Здравствуйте, друзья!
Нужна помощь с ncurses.
Подскажите пожалуйста, как реализовать движение символа по экрану? Т.е. как в roguelike-играх, символ @ по нажатии на кнопку j перемещается на ячейку вниз и т.д.
И еще, у меня заданы координаты для стен, хочу сделать, чтоб на них наступать было нельзя.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <ncurses.h>
 
main(int argc,char *argv[])
{
  initscr();
  noecho();
  int y,x;
  
  char ch;
  ch == getch();
  
  move(5,8);
  printw("Labyrinth of Doom");
  move(6,3);
  printw("from the creators of nothing");
  move (9,10);
  printw("Press any key");
  getch();
  clear();
 
  for (y=1;y<12;y++)
  {
    move(y,1);
      printw("#");
  };
  
  for (x=1;x<32;x++)
  {
    move(1,x);
    printw("#");
  };
   for (x=1;x<32;x++)
  {
    move(12,x);
    printw("#");
  };
    for (y=1;y<13;y++)
  {
    move(y,32);
      printw("#");
  };
  refresh();
  getch();
 
  endwin();
}
Пример простейшей программы с перемещением по экрану покажите, если можно.
И если есть что почитать по этой теме - тоже скиньте, пожалуйста. А то я совсем ноль.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2015, 21:06
Ответы с готовыми решениями:

Движение символа по экрану. Модуль Crt
Здравствуйте, мне нужна ваша помощь. Вот задача: Движение символа по экрану под управлением...

Реализовать движение звездочек по экрану
Написать программу, используя всего два цикла: в одном цикле звездочки бегут сразу по верхней и...

Реализовать движение какого-либо объекта по экрану
Графика в Паскале.  составить программу на паскале, содержащую движение какого-либо объекта по...

Getch() + ncurses = НЕ ожидает нажатие символа
Дорогие товарищи-друзья! Linux на удалённой машине, g++, установлен ncurses, код программы...

11
2 / 2 / 2
Регистрация: 05.05.2015
Сообщений: 9
19.05.2015, 13:14  [ТС] 2
Я так понял, что возможно сделать это при помощи getch()
C++
1
2
3
4
5
6
7
8
9
10
char ch == getch();
if (ch == ?); //допустим, тут кнопка, при нажатии которой персонаж поднимется на клетку вверх.
{
   move(y,x);
   printw('.');
   x=x+1;
   move(y,x);
   printw('@');
   refresh()
}
Теперь при нажатии на определенную кнопку, символ будет отрисовываться на клетку выше, а на месте, где он стоял до этого, будет отрисовываться точка.
Вопрос: что мне написать вместо вопросительного знака?
C++
1
if (ch == KEY_K)
Пишет, что KEY_K не была объявлена.

Заранее спасибо.
0
5 / 5 / 3
Регистрация: 24.08.2013
Сообщений: 67
19.05.2015, 19:19 3
StylePro, if (ch == 'символ кнопки на которую было произведено нажатие')
Лучше используй switch вместо if
0
2 / 2 / 2
Регистрация: 05.05.2015
Сообщений: 9
19.05.2015, 19:26  [ТС] 4
KaRleone, хорошо, допустим.
В любом случае, как мне считывать нажатие с клавиатуры?
Что-то вроде:
1) произведено нажатие
2) в зависимости от нажатой кнопки переменной присваивается определённое значение
3) в зависимости от значения переменной производятся определённые действия.
Так?
0
5 / 5 / 3
Регистрация: 24.08.2013
Сообщений: 67
19.05.2015, 19:29 5
StylePro, да. И после каждого шага экран должен перерисовываться с новым расположением твоего шагающего символа
0
2 / 2 / 2
Регистрация: 05.05.2015
Сообщений: 9
19.05.2015, 19:31  [ТС] 6
KaRleone, но как мне считывать нажатую кнопку? Подскажи команду, пожалуйста.
0
5 / 5 / 3
Регистрация: 24.08.2013
Сообщений: 67
19.05.2015, 19:33 7
StylePro, так ты же используешь getch()
0
2 / 2 / 2
Регистрация: 05.05.2015
Сообщений: 9
19.05.2015, 19:38  [ТС] 8
KaRleone,
C++
1
if (ch == KEY_K)
Не работало т.к. KEY_K не был найден.
Может я что-то ввожу не так?
0
5 / 5 / 3
Регистрация: 24.08.2013
Сообщений: 67
19.05.2015, 19:42 9
я же тебе уже писал
C++
1
2
3
#include "conio.h"
char a = getch(); //Или _getch();
if (a == 'символ клавиши в одинарных кавычках')
1
2 / 2 / 2
Регистрация: 05.05.2015
Сообщений: 9
19.05.2015, 20:55  [ТС] 10
KaRleone, аа, проглядел. Спасибо огромное!

Добавлено через 1 час 11 минут
Снова проблема.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <ncurses.h>
 
main(int argc,char *argv[])
{
  initscr();
  noecho();
  
  int a,y,x;
  
  char ch;
  ch == getch();
 
  for (y=1;y<12;y++)
  {
    move(y,1);
      printw("#");
  };
  
  for (x=1;x<32;x++)
  {
    move(1,x);
    printw("#");
  };
   for (x=1;x<32;x++)
  {
    move(12,x);
    printw("#");
  };
    for (y=1;y<13;y++)
  {
    move(y,32);
      printw("#");
  };
  y=15;
  x=10;
  getch();
  if (ch=='k')
  a=1;
  else if (ch=='j')
  a=2;
  else if (ch=='l')
  a=3;
  else if (ch=='h')
  a=4;
  
  switch(a)
  {
    case 1:
  {
    printw(" ");
    y=y+1;
    move (y,x);
    printw("@");
    refresh();
    break;
  }
      case 2:
  {
    printw(" ");
    y=y-1;
    move (y,x);
    printw("@");
    refresh();
    break;
  }
      case 3:
  {
    printw(" ");
    x=x+1;
    move(y,x);
    printw("@");
    refresh();
    break;
  }
      case 4:
  {
    printw(" ");
    x=x-1;
    move (y,x);
    printw("@");
    refresh();
    break;
  }
  }
  
  endwin();
  
}
Все компилируется, запускается, но при нажатии ничего на экран не выводит. В чем проблема?
0
5 / 5 / 3
Регистрация: 24.08.2013
Сообщений: 67
19.05.2015, 21:36 11
StylePro, по-моему, у тебя тело с getch() должно быть в цикле (while(true) или for(;)
1
2 / 2 / 2
Регистрация: 05.05.2015
Сообщений: 9
19.05.2015, 21:49  [ТС] 12
KaRleone,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <ncurses.h>
 
main(int argc,char *argv[])
{
  initscr();
  noecho();
  
  int n,a,y,x;
  
  char ch;
  ch == getch();
 
  for (y=1;y<12;y++)
  {
    move(y,1);
      printw("#");
  };
  
  for (x=1;x<32;x++)
  {
    move(1,x);
    printw("#");
  };
   for (x=1;x<32;x++)
  {
    move(12,x);
    printw("#");
  };
    for (y=1;y<13;y++)
  {
    move(y,32);
      printw("#");
  };
  y=15;
  x=10;
  for (n=1; n<999;n++)
  {
  n=n-1;
  getch();
  if (ch=='k')
  a=1;
  else if (ch=='j')
  a=2;
  else if (ch=='l')
  a=3;
  else if (ch=='h')
  a=4;
  
  switch(a)
  {
    case 1:
  {
    printw(" ");
    y=y+1;
    move (y,x);
    printw("@");
    refresh();
    break;
  }
      case 2:
  {
    printw(" ");
    y=y-1;
    move (y,x);
    printw("@");
    refresh();
    break;
  }
      case 3:
  {
    printw(" ");
    x=x+1;
    move(y,x);
    printw("@");
    refresh();
    break;
  }
      case 4:
  {
    printw(" ");
    x=x-1;
    move (y,x);
    printw("@");
    refresh();
    break;
  }
  }
  }
  
  endwin();
  
}
Все равно не работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2015, 21:49
Помогаю со студенческими работами здесь

Как реализовать премещение фигур по экрану?
1 вопрос glTranslated( cos(time),0,0) перемещает все объекты по x туда суда, если косинус поставить...

Как на opengl реализовать премещение фигур по экрану?
1 вопрос glTranslated( cos(time),0,0) перемещает все объекты по x туда суда, если косинус поставить...

Движение слова по экрану
Надо чтоб слово двигалось по экрану...

Движение текста по экрану
программа, управляющую движением текущего времени по экрану с помощью клавиш влево вправу вниз вверх


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru