计算机二级C++辅导:简单图形模拟吃豆游戏
来源:优易学  2010-1-14 19:16:13   【优易学:中国教育考试门户网】   资料下载   IT书店

  这个程序主要是想了下怎么样让游戏中的敌人自己行走,但是又不会固定在两点来回徘徊,我用的方法是随机方向,而且走的一步不可以和前一部的方向相反,希望高手们多多指点.也希望高手们可以指教下编写简单游戏的一些技术.
  #include "graphics.h"
  #include "stdlib.h"
  #include "dos.h"
  #include "bios.h"
  #define LEFT 0x4b00
  #define RIGHT 0x4d00
  #define DOWN 0x5000
  #define UP 0x4800
  #define ESC 0x011b
  #define ENTER 0x1c0d
  /*2墙壁,1可以移动地方,3自己,4敌人*/
  int a[15][20]={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,1,1,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,2,
  2,1,2,2,2,1,1,2,1,1,0,0,0,1,1,4,1,1,0,2,
  2,1,1,0,2,1,1,2,0,1,1,2,2,2,2,2,0,0,0,2,
  2,4,1,0,2,1,1,2,1,1,1,0,1,1,1,1,0,1,1,2,
  2,1,2,1,2,1,1,2,1,3,2,2,1,1,1,1,2,2,1,2,
  2,1,2,1,2,1,1,1,1,1,1,1,1,0,0,0,1,1,1,2,
  2,1,2,1,0,1,1,1,1,2,1,0,1,2,2,2,1,1,1,2,
  2,1,0,1,0,1,2,1,1,2,1,0,1,2,1,1,4,1,1,2,
  2,1,0,2,0,1,2,1,1,2,1,0,1,2,1,1,1,1,1,2,
  2,1,0,2,1,1,2,1,1,2,1,0,2,2,1,0,0,0,1,2,
  2,1,1,2,1,1,2,1,1,2,1,0,2,1,1,2,2,1,1,2,
  2,1,2,2,1,2,2,1,1,1,1,0,1,4,1,2,0,0,1,2,
  2,1,0,0,0,0,0,4,0,1,1,0,1,1,1,1,0,0,1,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};/*数组就是地图*/
  strUCt play /*游戏中人物的结构体*/
  {
  int x;
  int y;
  };
  struct play you,them[5];
  int sum=0;/*统计吃的豆子个数,吃满50颗就算胜利*/
  int xx[5][2];/*判断敌人方向用的结构体*/
  int false=0;
  void TimeDelay(unsigned long microsec) /*延时函数 传入微秒数*/
  {
  union REGS r;
  r.h.ah=0x86;
  r.x.cx=microsec>>16;
  r.x.dx=microsec;
  int86(0x15,&r,&r);
  }
  drawblackdou(int x,int y)/*吃豆子的函数*/
  begain()/*开始函数*/
  {int i,j;
  sleep(1);
  for(i=0;i<15;i++)
  for(j=0;j<20;j++)
  if(a[i][j]==2)/*代表墙壁*/
  {
  setfillstyle(SOLID_FILL,BLUE);
  bar(100+j*20-10,100+i*20+10,100+j*20+10,100+i*20-10);
  }
  else if(a[i][j]==3)/*代表自己*/
  {
  setcolor(RED);
  circle(100+j*20,100+i*20,9);
  }
  else if(a[i][j]==4)/*代表敌人*/
  {
  setcolor(GREEN);
  circle(100+j*20,100+i*20,9);
  }
  else if(a[i][j]==0)/*代表豆子*/
  {
  setcolor(YELLOW);
  circle(100+j*20,100+i*20,3);
  }
  you.x=5;you.y=9;/*敌人也自己的开始坐标*/
  them[0].x=2;them[0].y=15;
  them[1].x=4;them[1].y=1;
  them[2].x=8;them[2].y=16;
  them[3].x=12;them[3].y=13;
  them[4].x=13;them[4].y=7;
  }
  void movethem(struct play *them)/*敌人移动的过程*/
  {int i,loop;
  randomize();
  for(i=0;i<5;i++)
  {
  if(you.x==them[i].x&&(them[i].y+1)==you.y)
  them[i].y++;
  else if(you.x==them[i].x&&(them[i].y-1)==you.y)
  them[i].y--;
  else if(you.y==them[i].y&&(them[i].x+1)==you.x)
  them[i].x++;
  else if(you.y==them[i].y&&(them[i].x-1)==you.x)/*只要控制者在身边就立即靠上去*/
  them[i].x--;
  else
  {
  loop:
  xx[i][0]=rand()%4+1;/*这里的方向采取随机赋值,原则是新的方向不可以和原来的方向相反*/
  if(xx[i][0]==1&&xx[i][1]==2xx[i][0]==2&&xx[i][1]==1)
  goto loop;
  if(xx[i][0]==3&&xx[i][1]==4xx[i][0]==4&&xx[i][1]==3)
  goto loop;
  xx[i][1]=xx[i][0];
  if(xx[i][0]==1)/*四个方向*/
  {them[i].x--;
  if(a[them[i].x][them[i].y]==2)/*如果碰墙壁的话就回到原来的地方等待随机的方向*/
  {them[i].x++;goto loop;}
  }
  else if(xx[i][0]==2)
  {them[i].x++;
  if(a[them[i].x][them[i].y]==2)
  {them[i].x--;goto loop;}
  }
  else if(xx[i][0]==3)
  {them[i].y++;
  if(a[them[i].x][them[i].y]==2)
  {them[i].y--;goto loop;}
  }
  else if(xx[i][0]==4)
  {them[i].y--;
  if(a[them[i].x][them[i].y]==2)
  {them[i].y++;goto loop;}
  }
  }
  }
  }

[1] [2] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训