L3soft Studio

圆自己一个开发梦



# include <dos.h>
# include <time.h>
# include <stdio.h>
# include <stdlib.h>

# define  BYTE         unsigned char
# define  BOOL         BYTE
# define  WORD         unsigned int
# define  DWORD        unsigned long

# define  TRUE         1
# define  FALSE        !TRUE

# define  MOUSE        0x33
# define  LBUTTON      1
# define  RBUTTON      2
# define  SX           35
# define  SY           7

# define  MINE         9

BOOL InitMouse();
BYTE Scr(int,int);
BYTE MouseState();
void Edge(int,int);
void TurnBack(int,int);
void InitArrow();
void InitCursor();
void MouseShow();
void MouseHide();
void CursorShow();
void CursorHide();
void SetRange(int,int,int,int);
void GetXY(int*,int*);
void SetXY(int,int);
void WaitMouse();
void WaitKey();
void Prt(int,int,BYTE,BYTE);
void Locate(BYTE,BYTE);
void FailExitGame();
void ExitGame();

BOOL Turn[10][10];
BYTE Mine[10][10];
BYTE Mark[10][2];
WORD CursorMode;
int  x,y;

void main()
{
  int  i;
  int  Total=0;
  BYTE Button;
  BOOL QUIT=FALSE;

  if (!InitMouse())
  {
     printf("Mouse not installed!");
     exit(0);
  }
  clrscr();
  CursorHide();

  /*
  InitArrow();
  InitCursor();
  */

  randomize();
  Locate(36,20);
  printf("Mines:%d ",0);

  for (y=0;y<10;y++)
      for (x=0;x<10;x++)
      {
   Mine[y][x]=NULL;
   Turn[y][x]=FALSE;
      }

  for (i=0;i<10;i++)
  {
      x=random(10);
      y=random(10);
      while (Mine[y][x])
      {
x=random(10);
y=random(10);
      }
      Mine[y][x]=MINE;
  }

  for (y=0;y<10;y++)
      for (x=0;x<10;x++)
      {
          i=0;
   if (Mine[y][x]!=MINE)
          {
             if ((Mine[y][x-1]==MINE)&&((x-1)>=0)) i++;
             if ((Mine[y][x+1]==MINE)&&((x+1)<10)) i++;
             if ((Mine[y-1][x]==MINE)&&((y-1)>=0)) i++;
             if ((Mine[y+1][x]==MINE)&&((y+1)<10)) i++;
             if ((Mine[y-1][x-1]==MINE)&&((x-1)>=0)&&((y-1)>=0)) i++;
             if ((Mine[y-1][x+1]==MINE)&&((x+1)<10)&&((y-1)>=0)) i++;
             if ((Mine[y+1][x+1]==MINE)&&((x+1)<10)&&((y+1)<10)) i++;
             if ((Mine[y+1][x-1]==MINE)&&((x-1)>=0)&&((y+1)<10)) i++;
             Mine[y][x]=i;
          }
   Prt(x+SX,y+SY,'?',9) ;
      }

  MouseShow();
  while(!QUIT)
  {
    if (kbhit()) if (getch()==27) QUIT=TRUE;
    Button=MouseState()&3;
    if (Button)
    {
       GetXY(&x,&y);
       WaitMouse();
       x>>=3;
       y>>=3;
       x-=SX;
       y-=SY;
       if (x>=0&&x<10&&y>=0&&y<10)
       {
          if (Button&LBUTTON)
          {
      if (Mine[y][x]==MINE)
  FailExitGame();
      if (Mine[y][x]==NULL)
                Edge(x,y);
             else
                TurnBack(x,y);
          }
          if (Button&RBUTTON)
   {
      if (!(Turn[y][x]&1))
      {
  switch (Turn[y][x])
                {
    case 0:
         Turn[y][x]=2;
                       MouseHide();
                       Prt(x+SX,y+SY,'*',15);
         Locate(36,20);
                       printf("Mines:%d ",++Total);
                       MouseShow();
         Mark[Total][0]=x;
         Mark[Total][1]=y;
         if (Total==10) ExitGame();
                       break;
    case 2:
         Turn[y][x]=0;
                       MouseHide();
         Prt(x+SX,y+SY,'?',9) ;
         Locate(36,20);
                       printf("Mines:%d ",--Total);
         MouseShow();
         break;
                }
      }
   }
       }
    }
  }
  WaitKey();
  MouseHide();
  CursorShow();
}

BYTE MouseState()
{
  union REGS regs;
  regs.x.ax = 3;
  int86(MOUSE, &regs, &regs);
  return(regs.x.bx);
}

void MouseShow()
{
   union REGS regs;
   regs.x.ax = 1;
   int86(MOUSE, &regs, &regs);
}

void MouseHide()
{
   union REGS regs;
   regs.x.ax = 2;
   int86(MOUSE, &regs, &regs);
}

void InitArrow()
{
  /*
  BYTE   shape[16]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xf0,0xd8,0x98,0x0c,0x0c,0x06,0x07,0x03};
  D(_DS,shape,3,1);
  */
}

void InitCursor()
{
  union REGS regs;
  regs.x.ax = 10;
  regs.x.bx = 0;
  regs.x.cx = 0;
  regs.x.dx = (7 * 16 + 15) * 256 +3;
  int86(MOUSE, &regs, &regs);
}

BOOL InitMouse()
{
  union REGS regs;
  regs.x.ax = 0;
  int86(MOUSE, &regs, &regs);
  return (regs.x.ax);
}
void SetRange(int start_x,int start_y,int end_x,int end_y)
{
  union REGS r;
  r.x.ax=7;
  r.x.cx=start_x;
  r.x.dx=end_x;
  int86(0x33,&r,&r);
  r.x.ax=8;
  r.x.cx=start_y;
  r.x.dx=end_y;
  int86(MOUSE,&r,&r);
}
void GetXY(int *x,int *y)
{
  union REGS ireg,oreg;
  ireg.x.ax=3;
  int86(MOUSE,&ireg,&oreg);
  *x=oreg.x.cx;
  *y=oreg.x.dx;
}
void SetXY(int x,int y)
{
  union REGS ireg;
  ireg.x.ax=4;
  ireg.x.cx=x;
  ireg.x.dx=y;
  int86(MOUSE,&ireg,&ireg);
}

/* Waiting for releasing the mouse button */
void WaitMouse()
{
  int xx,yy;
  while (MouseState())
  {
GetXY(&xx,&yy);
if (xx!=x||yy!=y)
    SetXY(x,y);
  }
}

void Prt(int x,int y,BYTE ch,BYTE color)
{
  pokeb(0xb800,y*160+x*2,ch);
  pokeb(0xb800,y*160+x*2+1,color);
}

BYTE Scr(int x,int y)
{
  return peekb(0xb800,y*160+x*2);
}

void CursorHide()
{
  _AH=3;
  geninterrupt(0x10);
  CursorMode=_CX;
  _AH=1;
  _CH=32;
  geninterrupt(0x10);
}
void CursorShow()
{
  _AH=1;
  _CX=CursorMode;
  geninterrupt(0x10);
}

void WaitKey()
{
  _AH=0;
  geninterrupt(0x16);
}

void Edge(int xx,int yy)
{
  if (xx<0||xx>9||yy<0||yy>9||Turn[yy][xx]) return;
  TurnBack(xx,yy);
  if (Mine[yy][xx]==NULL)
  {
     Edge(xx+1,yy);
     Edge(xx-1,yy);
     Edge(xx,yy+1);
     Edge(xx,yy-1);
  }
}

void TurnBack(int xx,int yy)
{
  if (!Turn[yy][xx])
  {
     MouseHide();
     Prt(xx+SX,yy+SY,Mine[yy][xx]+48,12);
     MouseShow();
     Turn[yy][xx]=Turn[yy][xx]||1;
  }
}

void Locate(BYTE Col,BYTE Line)
{
  pokeb(0x0,0x450,Col);
  pokeb(0x0,0x451,Line);
}

void FailExitGame()
{
  sound(1000);
  delay(500);
  nosound();
  for (y=0;y<10;y++)
      for (x=0;x<10;x++)
   if (Mine[y][x]==MINE) Prt(x+SX,y+SY,'*',14+128);
  MouseHide();
  CursorShow();
  printf("\nFail!\n");
  exit(0);
}

void ExitGame()
{
  int i,m=0;
  for (i=0;i<10;i++)
      if (Mine[Mark[i][1]][Mark[i][0]]) m++;
  if (m<9) FailExitGame();
  MouseHide();
  CursorShow();
  printf("\nOK,Good!\n");
  exit(0);
}



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=387093


[点击此处收藏本文]  发表于2005年05月19日 12:39 AM




正在读取评论……

发表评论

大名:
网址:
验证码
评论 
   

news

点击这里给我发消息

导航

blog stats

文章

收藏

相册

友情链接

存档


正在读取评论……