/* A simple AI demonstration presented by Teo Choon Hui */
/* Intro : An object with its own flying pattern will automatically
fly away whenever mouse pointer moved close to it
and if mouse pointer is far away, it will moves to mouse
pointer. And object's speed will change according to thedistance. */
#include
#include
#include
#include
#include
#include
#define MaxDist_1 180
#define MaxDist_2 250
#define MinDist_1 90
#define MinDist_2 50
int ResetMouse(void);/* _AX = 0x00 */
void ShowMouse(void);/* _AX = 0x01 */
void HideMouse(void);/* _AX = 0x02 */
void ReadMouse(void);/* _AX = 0x03 */
void ObRunAway(int speed);/* object runs away from mouse */
void ObCloseTo(int speed);/* object closes to mouse */
void BigPixel(int x, int y, int colour); /* this func. plot 4 pixels
once used */
int mx, my, mb;
int ox=300, oy=200;
main()
{
int speed;
int xDist, yDist;
int gdriver=DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
cleardevice();
if(!ResetMouse()) { outtext("Mouse not detected!"); exit(1); }
gotoxy(1,1);printf("Click left and right mouse buttons to quit.");
ShowMouse();
do {
speed=1;
ReadMouse();
xDist = abs(mx-ox);
yDist = abs(my-oy);
gotoxy(1,2); printf(" Distance of X (in pixel) = %3d",xDist);
gotoxy(1,3); printf(" Distance of Y (in pixel) = %3d",yDist);
if ((xDist < MinDist_1) && (yDist < MinDist_1)) {
if ((xDist < MinDist_2) && (yDist < MinDist_2))speed=3;
ObRunAway(speed);
}
else if ((xDist > MaxDist_1) || (yDist > MaxDist_1)) {
if ((xDist > MaxDist_2) || (yDist > MaxDist_2))speed=3;
ObCloseTo(speed);
}
delay(555);
}while(mb != 3);
HideMouse();
closegraph();
}
int ResetMouse()
{
int result;
_AX = 0x00;
geninterrupt(0x33);
result = _AX;
return result;
}
void ShowMouse()
{
_AX = 0x01;
geninterrupt(0x33);
}
void HideMouse()
{
_AX = 0x02;
geninterrupt(0x33);
}
void ReadMouse()
{
_AX = 0x03;
geninterrupt(0x33);
mb = _BX;
mx = _CX;
my = _DX;
return;
}
void ObRunAway(int speed)