Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
#1

делаю игру,но мешает getch - C++

10.02.2011, 17:42. Просмотров 915. Ответов 8
Метки нет (Все метки)

Здравствуйте господа програмисты!делаю игру и вот какая штука-на экране должно быть движение,но getch ждёт от меня нажатия клавиши.Как это обойти,но так что бы если я нажимал на клавишу всё работало,т.е.что бы и движение было и клавиатура работала?Заранее всем огромное спасибо!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2011, 17:42     делаю игру,но мешает getch
Посмотрите здесь:

Getch - что не так делаю? - C++
Всем привет. Не могу понять почему не выполняется getch() после верного ввода пункта. int name ::menu() { cout << "Выберите...

делаю игру,но... - C++
Здравствуйте господа програмисты!делаю всем нам знакомым игру морской бой.и вот какая проблема-как сделать,что бы когда компьютер...

Делаю игру на русском, но возникла непонятка с кодировками - C++
Делаю игру на русском языке по нахождению антонимов. Использую setlocale, но когда вызываю функцию, которая проверяет правильность ответа и...

Делаю игру. Но с работой конструктора класса что-то не то - C++
#include <iostream> #include <windows.h> #include <string> #include <conio.h> using namespace std; class Player { ...

Getch() в Visual C++ 2005 - C++
Вроде отсутствует библиотека, но я точно не уверен. Она нужна мне для getch Сам код, пробывал и <conio.h>, и <conio> не работает...

Как работать с getch()? - C++
Как использовать getch и в то же время чтобы например переменная а имплементирована на 1 (а++) Потому что обычно надо ждать пока...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
10.02.2011, 18:04     делаю игру,но мешает getch #2
kbhit() //Возвращает не ноль в случае нажатия клавиши клавиатуры и ноль в противном случае.
лежит в <conio.h>
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
10.02.2011, 18:29     делаю игру,но мешает getch #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Игорь с++, Вот например: движение звездочки по оси Ox.
Управление: клавиша "a" - в лево, "d" - в право.
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
#include <iostream>
#include <iomanip>
 
#include <conio.h>
#include <windows.h>
 
#define RIGHT 'd'
#define LEFT  'a'
 
int main(){
  int x = 0;
  for(;;){
    switch(getch()){
      case LEFT:
        while(!kbhit()){
          if(!x)
            x = 80;
          std::cout << std::setw(x--) << '*';
          Sleep(125);
          system("cls");
        }
      case RIGHT:
        while(!kbhit()){
          if(x == 80)
            x = 0;
          std::cout << std::setw(x++) << '*';
          Sleep(125);
          system("cls");
        }
    }
  }
  return 0;
}
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
10.02.2011, 18:44     делаю игру,но мешает getch #4
asics, напишите пожалуйста коментарии к вашей программе
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
10.02.2011, 18:54     делаю игру,но мешает getch #5
Sokolov, Да тут все просто, з вашего первого поста вижу, что з функцией kbhit() Вы знакомы, так что ее обяснять не буду.По сути: отлавливаем две клавиши("a" и "d"), делаем все это в бесконечном цыкле, затем в цыкле "пока не нажата клавиша("a" если мы до того нажали "d" и наоборот)" двигаем звездочку в соответствее з нажатой клавишей(ну не совсем двигаем, просто предедущую звездочку стираем, прибавляем к ширине поля 1 или удаляем, ну и задержка между этим делом - 125 милисекунд).
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
10.02.2011, 19:06     делаю игру,но мешает getch #6
asics, Эту функцию сам только сегодня узнал.
Если я правильно понял, то по оси Ох вы передвигали звездочку, просто отступая от начала спомощью setw() (если не так поправьте)
А как передвигать по Оу?
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
10.02.2011, 19:13     делаю игру,но мешает getch #7
Цитата Сообщение от Sokolov Посмотреть сообщение
Если я правильно понял, то по оси Ох вы передвигали звездочку, просто отступая от начала спомощью setw() (если не так поправьте)
Да, все правильно.
Цитата Сообщение от Sokolov Посмотреть сообщение
А как передвигать по Оу?
Увы, сам не знаю, но догадывюсь что как-то стредствами WinAPI.
Если кто знает, от примера не откажусь
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
01.03.2011, 23:45  [ТС]     делаю игру,но мешает getch #8
да так же только при помощи SetConsoleCursorPosition увеличивая или уменьшая координаты,а прежнюю стирая.я игру делал там всё великолепно работало
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 06:31     делаю игру,но мешает getch
Еще ссылки по теме:

getch () C++ подправить код - C++
Хочу сделать младшему брату небольшой решебник по математике... =)) помню что когда-то изучая getch() , мы делали менюшку чтобы стрелками...

Не определяется функция getch - C++
Ошибку выдаёт getch(); //--------------------------------------------------------------------------- #pragma hdrstop ...

не работает ни _getch(), ни getch() - C++
собственно проблема: из консоли невозможно считать клавиши: Esc, Insert, Delete ....... и самое главное не читаются стрелки... считывает...

альтернатива kbhit() и getch - C++
А кто подскажет,чем можно заменить kbhit() and getch в коде. Компилятор выдает ошибку,т.к. данные ф-ции устаревшие int i=0; enum...


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

Или воспользуйтесь поиском по форуму:
Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 92
02.03.2011, 06:31     делаю игру,но мешает getch #9
А как передвигать по Оу?
Увы, сам не знаю, но догадывюсь что как-то стредствами WinAPI.
ну если интерпретировать поле, где бегает точка как матрицу, то все просто и без привлечения WinAPI

могу для примера показать движение той же точки, но по всем осям координат, правда в пределах матрицы, но ведь ничто не мешает сделать ее в аккурат под размер консоли

все проверки выхода за границы массива на вашей совести, так же по желанию прикрутите очистку экрана ну и обсуждаемый здесь kbhit(), я бы прикрутил да мне надо бежать
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
#include <iostream>
#include <conio.h>
 
void show(int**, size_t, size_t);
 
int main()
{
    size_t n, m; //n, m - размеры матрицы
    std::cin >> n >> m;
    int **field = new int *[n];
    for (size_t i = 0; i < n; i++)
    {
        field[i] = new int[m];
        for (size_t j = 0; j < m; j++)
            field[i][j] = 0;  //будет матрицы состоящая из нулей и единицы - нашей точки
    }
 
    int x, y; //пусть x, y - координаты нашей точки
    std::cin >> x, y;
    field[x][y] = 1;
 
    while (1e-5)
    {
        switch (getch())
        {
        case 'a': //движение влево
        case 'A':
            field[x][y] = 0; //старое значение обнуляем, точки там уже нет.
            field[x][--y] = 1;
            break;
        case 'd': //движение вправо
        case 'D':
            field[x][y] = 0;
            field[x][++y] = 1;
            break;
        case 'w':  //движение вверх
        case 'W':
            field[x][y] = 0;
            field[--x][y] = 1;
            break;
        case 's': //движение вниз
        case 'S':
            field[x][y] = 0;
            field[++x][y] = 1;
            break;
        }
        show(field, n, m);
        std::cout << std::endl << "_____________________________________________" << std::endl;
    }
    return 0;
}
 
void show(int **array, size_t n, size_t m)
{
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < m; j++)
            std::cout << (array[i][j] ? "*" : " ") << " ";
        std::cout << std::endl;
    }
}
Yandex
Объявления
02.03.2011, 06:31     делаю игру,но мешает getch
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru