/* A simple AI demonstration presented by Teo Choon Hui */
/* Intro : An object which will automatically flys
away whenever mouse pointer moved close to it */
#include
#include
#include
#include
#include
#include
#define MinDistance 100
int ResetMouse(void);/* _AX = 0x00 */
void ShowMouse(void);/* _AX = 0x01 */
void HideMouse(void);/* _AX = 0x02 */
void ReadMouse(void);/* _AX = 0x03 */
void ObRunAway(void);/* object runs away from mouse */
void BigPixel(int x, int y, int colour);
int mx, my, mb;
int ox=300, oy=200;
main()
{
int xDist, yDist;
int gdriver=DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
cleardevice();
if(!ResetMouse()) {
outtext("Mouse not detected!");
exit(1);
}
ShowMouse();
do {
ReadMouse();
xDist = abs(mx-ox);
yDist = abs(my-oy);
gotoxy(1,1); printf(" Distance of X (in pixel) = %d",xDist);
gotoxy(1,2); printf(" Distance of Y (in pixel) = %d",yDist);
if ((xDist < MinDistance) && (yDist < MinDistance))
ObRunAway();
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 tmp_ox=ox, tmp_oy=oy;
if ( (mx < ox) && (ox < 639) || (ox==0))
ox++;
else if ( (mx > ox) && (ox > 0) || (ox==639))
ox--;
if ( (my < oy) && (oy < 479) )
oy++;
else if ( (my > oy) && (oy > 0) )
oy--;
BigPixel(tmp_ox, tmp_oy, 0);/* erase the old position */
BigPixel(ox, oy, 2);/* plot new position */
return;
}
void BigPixel(int x, int y, int colour)
{
putpixel(x, y, colour);
putpixel(x+1, y, colour);
putpixel(x, y+1, colour);
putpixel(x+1, y+1, colour);
return;
}