Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Листинг 3.8. Работа с мышью (MOUSE.C)





// ВКЛЮЧАЕМЫЕ ФАЙЛЫ ///////////////////////////////////////

#include <dos.h>

#include <bios.h>

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include <graph.h>

// ОПРЕДЕЛЕНИЯ ///////////////////////////////////////////

// вызовы функций мыши

#define MOUSE_INT 0х33 // Номер прерывания мыши

#define MOUSE_RESET 0х00 // Инициализация драйвера

#define MOUSE_SHOW 0х01 // Показать курсор мыши

#define MOUSE_HIDE 0х02 // Спрятать курсор мыши

#define MOUSE_BUTT_POS 0х03 // Получение полного статуса

#define MOUSE_SET_SENSITIVITY Ox1A // Установка чувствительности

#define MOUSE_MOTION_REL ОхОВ // Получить значение счетчика

// микки

#define MOUSE_LEFT_BUTTON 0х01 // левая кнопка

#define MOUSE_RIGHT_BUTTON 0х02 // правая кнопка

#define MOUSE_CENTER_BUTTON 0х04 // средняя кнопка

// ФУНКЦИИ ////////////////////////////////////////////////

int Squeeze_Mouse(int command, int *x, int *y,int *buttons)

{

// Мы будем использовать _int86 вместо встроенного ассемблера

// Почему? И сам не знаю

union _REGS inregs, outregs;

switch(command) {

case MOUSE_RESET:

{

inregs.x.ax = 0х00; // подфункция 0 – инициализация

_int86(MOUSE_INT, &inregs, &outregs};

*buttons = outregs.x.bx; // возвратить количество кнопок

return(outregs.x.ax); // возвратить общий результат

} break;

case MOUSE_SHOW:

{

// эта функция инкрементирует счетчик драйвера. Когда значение

// счетчика становится больше или равно 0, курсор появляется

// на экране

inregs.х.ах = 0х01; // подфункция 1 - показать курсор

_int86(MOUSE_INT, &inregs, &outregs);

return (1);

} break;

case MOUSE_HIDE:

{

// эта функция декрементирует счетчик драйвера; когда его

// значение становится меньше 0, курсор исчезает с экрана

inregs.х.ах = 0х02; // подфункция 2 - спрятать курсор

_int86(MOUSE_INT, &inregs, &outregs);

return(1);

} break;

case MOUSE_BUTT_POS:

{

// эта функция позволяет получить полный статус состояния мыши,

// включая абсолютную позицию курсора в координатах (х,у) и

// состояние кнопок

inregs.х.ах = 0х03; // подфункция 3 - получить статус мыши

_int86(MOUSE_INT, &inregs, &outregs);

// извлечь информацию и вернуть ее через указатели

*х = outregs.х.сх;

*у = outregs.x.dx;

*buttons = outregs.x.bx;

return(1);

} break;

case MOUSE_MOTION_REL:

{

// эта функция позволяет получить относительное изменение

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

inregs.х.ах = 0х03; // подфункция 1 – получить

// относительную позицию

_int86(MOUSE_INT, &inregs, &outregs);

// результат при помощи указателей помещается в переменные х и у

*х = outregs.x.cx;

*у = outregs.x.dx;

return(1);

} break;

case MOUSE_SET_SENSITIVITY:

{

// эта функция устанавливает чувствительность мыши. Перед

// вызовом необходимо установить переменные х и у в значения

// из диапазона 1-100. Переменная "buttons" используется для

// установки значения порога удвоения скорости

// (из диапазона 1-100)

inregs.x.bx = *х;

inregs.x.cx = *у;

inregs.x.dx = *buttons;

inregs.x.ax = 0x1A; // подфункция 26 - установка

// чувствительности

_int86(MOUSE INT, &inregs, &outregs);

return(1);

} break;

default:break;

} // конец оператора switch

} // конец функции

// ОСНОВНАЯ ПРОГРАММА /////////////////////////////////////////////////////////////////////////////

void main(void)

{

int x,y,buttons,num_buttons;

int color=l;

_setvideomode(_VRES16COLOR}; // 640х480, 16 цветов

// инициализация драйвера мыши

Squeeze_Mouse(MOUSE_RESET,NULL,NULL,&num_buttons);

//показать курсор

Squeeze_Mouse(MOUSE_SHOW,NULL,NULL,NULL);

while(!kbhit())

{

_settextposition(2,0);

Squeeze_Mouse(MOUSE_BUTT_POS,&x,&у,&buttons);

printf("mouse x=%d y=%d buttons=%d ",х,у,buttons);

// рисование

if (buttons==1)

{

_setcolor(color);

_setpixel(x-1,y-2);

_setpixel(х,y-2);

_setpixel(x-1,y-1);

_setpixel(х,y-1);

} // конец обработки нажатия левой кнопки

// выбор цвета

if (buttons==2)

{

if (++color>15) color=0;

// ждем отпускания правой кнопки

while(buttons==2)

{

Squeeze_Mouse(MOUSE_BUTT_POS,&x,&y,&buttons);

} // конец ожидания

} // конец графической работы

} // конец цикла while

// назад в текстовый режим

_setvideomode(_DEFAULTMODE);

} // конец функции main

 

ИТОГ

В этой главе мы изучили разные устройства ввода, которые могут использоваться в видеоиграх: клавиатура, джойстик, мышь. Более того, мы даже написали функции для работы с этими устройствами. Еще мы выяснили, что не стоит использовать BIOS для работы с устройствами ввода, за исключением клавиа­туры.


Date: 2015-09-18; view: 435; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.009 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию