Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2011, 09:43   #11
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость

Чтобы нажать кучу клавиш, придется циклить.

Класс EventArgs - это спец-интеграрованный-делигатовский класс

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class KeyEventArgs : EventArgs {
    public char ch;
}

class KeyEvent {
    public event EventHandler<KeyEventArgs> KeyPress;

    public void OnKeyPress(char key) {
        KeyEventArgs k = new KeyEventArgs();

        if (KeyPress != null) {
            k.ch = key;
            KeyPress(this, k);
        }
    }
}

class Program
  {
      static void Main()
      {
          KeyEvent kevt = new KeyEvent();
          ConsoleKeyInfo key;

          kevt.KeyPress += (sender, e) =>
          {
              Console.WriteLine("Получено сообщение о нажатии клавиши: " + e.ch);
          };

          key = Console.ReadKey();
          kevt.OnKeyPress(key.KeyChar);


      }
  }

Последний раз редактировалось sir.andrey; 01.10.2011 в 09:45.
sir.andrey вне форума Ответить с цитированием
Старый 01.10.2011, 20:37   #12
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от tolmik Посмотреть сообщение
а есть функция ктр не ожидает нажатия клавиши, а не зависимо от место исполнения программы начнет работать?
есть функция _kbhit() она не останавливает прогу. просто если нажата клавиша возвращает 1.

я писал о этом ты не догнал _getch надо использовать вместе с kbhit.
я ка-кто писал змейку в консоли вот фрагмент кода
Код:
if(_kbhit)
{
a = _getch();
}
if(a == 75)
{
//75 это код стрелки влево
//тут должно выполнятся действие влево
}
//ну и так-же с другими клавишами
вот так не какой задержки нет
пиши если что не понятно. я писал в code::blicks не помню какой кампилятор использовал. возможно в билдере потребуется преобразование типов переменных.
да и не забудь включить #include <conio.h>

Последний раз редактировалось SAMOUCHKA; 01.10.2011 в 20:44.
SAMOUCHKA вне форума Ответить с цитированием
Старый 01.10.2011, 20:43   #13
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

на тот момент я не знал ни классов, ни даже функций. циклы и ветвления, и все. просто очень хотел написать игру.
если что не понятно пиши
SAMOUCHKA вне форума Ответить с цитированием
Старый 01.10.2011, 20:54   #14
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию


вот нашел код своего змея
Код:
#include <iostream>

#include <conio.h>

#include <windows.h>

#include <stdlib.h>

#include <time.h>



int value (int, int, int, int);



using namespace std;



int main()

{

    int xM, yM;//переменные текущих координат матрицы



    char q;

    int a;//переменные управления



    int s;//вспомогательные переменные

    int t = 100;//время



    int xS[100];//координаты

    int yS[100];//тела змеи



    int z = 1;//размер

    int g;//приросщение



    int xA, yA;//координаты яблока



    xA = 1 + rand() % 58;

    yA = 1 + rand() % 18;



    xS[0] = 5;

    yS[0] = 5;



    while (a != 27)//основной цикл программы

    {

        //писвоение значения переменной "а"

        if (_kbhit())

        {

            q = _getch();

            a = static_cast<int>(q);

            continue;

        }



        //в зависимости от величины "а" производим

        //определённые действия над xM, yM

        if (a == 72)//стрелка вверх

        {

            yS[0] = yS[0] - 1;

        }

        if (a == 80)//стрелка в низ

        {

            yS[0] = yS[0] + 1;

        }

        if (a == 75)//стрелка в лево

        {

            xS[0] = xS[0] - 1;

        }

        if (a == 77)//стрелка в право

        {

            xS[0] = xS[0] + 1;

        }

        if (a == 49)//клавиша 1

        {

            t = t - 10;

            a = 1;

        }

        if (a == 50)//клавиша 2

        {

            t = t + 10;

            a = 1;

        }



        //прсвоение координат иелу змеи

        g = z;

        while (g > 0)

        {

            xS[g] = xS[g -1 ];

            yS[g] = yS[g - 1];

            g = g - 1;

        }



        //начало цикла построения матрици

        xM = 1;//перед началом цикла устанавливаем

        yM = 1;//переменные в начальное значение

        for (int i = 1; i <= 20; i++)

        {

            yM = i;

            cout<<"        ";

            for (int j = 1; j <= 60; j++)

            {

                xM = j;

                s = 0;

                //сканируем тело змея

                for (int m = 0; m <= z; m++)

                {

                    s = s + value(xS[m], xM, yS[m], yM);

                }

                //если

                if (value(xA, xM, yA, yM) == 1)

                {

                    cout<<"o";//вывод яблока

                }

                else

                {

                    if (xM == 1 || yM == 1 || yM == 20)

                    {

                        cout<<"#";

                    }

                    else if (s > 0)

                    {

                        cout<<"@";

                    }

                    else

                    {

                        cout<<" ";

                    }

                }

            }

            cout<<"#"<<endl;

        }//конец построения матрици



        //проверка совпадения головы с яблоком

        if (value(xA, xS[0], yA, yS[0]) == 1)

        {

            //если совпадают создаём навое яблоко

            xA = 1 + rand() % 58;

            yA = 2 + rand() % 18;

            //увеличиваем размер змея

            z = z + 1;

        }

        //проверка совпадения головы с телом и стенами

        s = 0;

        for (int i = 2; i < z; i++)

        {

            s = s + value(xS[0], xS[i], yS[0], yS[i]);

        }

        if (s > 0 || xS[0] < 1 || yS[0] < 2 || xS[0] > 60 || yS[0] > 19)

        {

            system("cls");



     cout<<"-------------------------"<<endl;

     cout<<"-------------------------"<<endl;

     cout<<"              GAME  OVER";





            Sleep(2000);

            break;

        }



        cout<<"X "<<xS[0]<<" Y "<<yS[0]<<"   control "<<a<<"  T "<<t<<endl;

        cout<<"xA "<<xA<<"  yA "<<yA<<"  ZISE "<<z<<endl;

        cout<<"----------------"<<endl;

        cout<<"   EXIT - Esc  "<<endl;



        Sleep(t);//задержка изображения

        system("cls");//очмстка экрана

    }//конец основного цикла

    return 0;

}

int value (int x1, int x2, int y1, int y2)

{

    if (x1 == x2 && y1 == y2)

    {

        return 1;

    }

    else

    {

        return 0;

    }

}
SAMOUCHKA вне форума Ответить с цитированием
Старый 01.10.2011, 21:15   #15
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

да и еще я использовал GNU GCC Compiler
в студии, как говорят проблеммы были, вроде исправлял. если в билдере не пойдет пиши что нить исправим. на скок я знаю там даже функц main по другому
Код:
int main()//в GNU GCC
void main (void)// в билдере
SAMOUCHKA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нажатие клавиш san-trane C# (си шарп) 3 23.06.2011 11:44
Нажатие клавиш свр Общие вопросы по Java, Java SE, Kotlin 2 26.09.2010 18:58
Нажатие клавиш.. KoBRaAndrey Общие вопросы Delphi 3 31.01.2010 18:56
Нажатие клавиш bashkos JavaScript, Ajax 6 23.09.2008 19:01
Нажатие клавиш VanDerKeen Win Api 1 03.06.2007 21:13