⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 koules.cpp

📁 Clear Mine扫雷游戏: 这是一个模拟扫雷游戏的vc编码程序 编码思想: 通过几个数组设定好雷区的位置
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			if(show_player>nrockets)
			{
				show_player=0;
				show_playerdata=FALSE;
			}
			else
				show_playerdata=TRUE;
			while(IsPressed (SCANCODE_TAB))
				UpdateInput();
		}
		for (i = 0; i < nrockets; i++)
		{
			if (i == mouseplayer)
				continue;
			if (object[i].type != ROCKET)
				continue;
			if (rotation[i])
			{
				char            s = 0;
				if (IsPressing (keys[i][1]))
					s = 1;
				if (IsPressing (keys[i][2]))
					s |= 2;
				if (IsPressing (keys[i][0]))
					s |= 4;
				controls[i].type = C_RKEYBOARD;
				controls[i].mask = s;
			}
			else
			{
				int             s = 0;
				if (IsPressing(keys[i][2]) && IsPressing(keys[i][0]))
					s = 1;
				else if (IsPressing(keys[i][3]) && IsPressing(keys[i][0]))
					s = 2;
				else if (IsPressing(keys[i][1]) && IsPressing(keys[i][3]))
					s = 3;
				else if (IsPressing(keys[i][1]) && IsPressing(keys[i][2]))
					s = 4;
				else if (IsPressing(keys[i][2]))
					s = 5;
				else if (IsPressing(keys[i][3]))
					s = 6;
				else if (IsPressing(keys[i][0]))
					s = 7;
				else if (IsPressing(keys[i][1]))
					s = 8;
				controls[i].type = C_KEYBOARD;
				controls[i].mask = s;
			}
		}
		break;
	}
}

#define MIN(a,b) ((a)>(b)?(b):(a))
/*
 * Make creations happen as coalescing circular cloud.  Do this by
 * creating random points within circle defined from center of screen, and
 * giving them velocity towards desired final point.
 */

void creators_points (int radius, int x1, int y1, int color1)
{
    int             z, x, y, x2, y2;
    double r;
    int             time = 50;
    int             midX, midY, r2,r1;

    midX = GAMEWIDTH / 2;
    midY = GAMEHEIGHT / 2;
    r2 = r1 = MIN(midX, midY);
    r2 *= r2;

    z =(int)( radius * radius * M_PI / DIV / DIV);
    while (z--) {
	do {
	    x = rand() % GAMEWIDTH;
	    y = rand() % GAMEHEIGHT;
	} while (((x-midX)*(x-midX) + (y-midY)*(y-midY)) > r2);
	r=sqrt((double)((x-midX)*(x-midX) + (y-midY)*(y-midY)));
	r=(r*radius/r1)/r*0.9;
	x2=x1+(int)((x-midX)*r);
	y2=y1+(int)((y-midY)*r);

	addpoint(x * 256, y * 256,
		    (x2 - x) * 256 / (time),
		    (y2 - y) * 256 / (time),
		    color1 + (rand() % (DIV == 1 ? 16 : 32)),
		    time);
    }
}

void creator (CONST int type)
{
  int             i;
  int             color1 = color (type, 0, 0);
  for (i = nrockets; i < nobjects && (object[i].live ||
				      object[i].type == CREATOR);
       i++);
  if (i >= MAXOBJECT)
    return;
  if (!find_possition (&object[i].x, &object[i].y, radius (type)))
    return;
  if (i >= nobjects)
    nobjects = i + 1;
  object[i].live = 0;
  object[i].live1 = 1;
  object[i].lineto = -1;
  object[i].ctype = type;
  object[i].fx = 0.0;
  object[i].fy = 0.0;
  object[i].time = 50;
  object[i].rotation = 0;
  object[i].type = CREATOR;
  object[i].M = M (type);
  object[i].radius = radius (type);
  object[i].accel = ROCKET_SPEED;
  object[i].letter = ' ';
    creators_points ((int)(object[i].radius),(int)( object[i].x),(int)( object[i].y), color1);
  Effect (S_CREATOR1);
}


void creator_rocket (CONST int i)
{
  int             type = ROCKET;
  int             color1 = color (ROCKET, i, 0);
  if (!find_possition (&object[i].x, &object[i].y, radius (type)))
    return;
  if (sound)
    object[i].live1 = object[i].live;
  object[i].live = 0;
  object[i].thief = 0;
  object[i].ctype = type;
  object[i].lineto = -1;
  object[i].fx = 0.0;
  object[i].fy = 0.0;
  object[i].time = 50;
  object[i].rotation = 0;
  object[i].type = CREATOR;
  object[i].M = ROCKETM;
  object[i].radius = ROCKET_RADIUS;
  object[i].accel = ROCKET_SPEED;
  object[i].letter = ' ';
    creators_points (ROCKET_RADIUS, (int)(object[i].x), (int)(object[i].y), color1);
}

static void update_forces ()
{
  int             i;
  int             r;
  double           d;
  double           xp, yp;
  int             frocket = 0;
  for (i = 0; i < nobjects; i++)
    {
      if (object[i].live)
	{
	  if (object[i].lineto != -1)
	    {
	      if (!object[object[i].lineto].live)
		object[i].lineto = -1;
	      else if (object[i].lineto == i)
		object[i].lineto = -1;
	      else
		{
		  int             force;
		  xp = object[i].x - object[object[i].lineto].x;
		  yp = object[i].y - object[object[i].lineto].y;
		  force =(int)( sqrt (xp * xp + yp * yp));
		  if (force >= 2 * SPRINGSIZE || gameplan == COOPERATIVE)
		    {
		      force = force - SPRINGSIZE;
		      if (force < 0)
			force *= 3;
		      force = force / SPRINGSTRENGTH;
		      normalize (&xp, &yp, force * BALL_SPEED / object[i].M);
		      object[i].fx -= xp;
		      object[i].fy -= yp;
		      normalize (&xp, &yp, force * BALL_SPEED / object[object[i].lineto].M);
		      object[object[i].lineto].fx += xp;
		      object[object[i].lineto].fy += yp;
		    }
		}
	    }
	  if (object[i].type == ROCKET && object[i].time)
	    object[i].time--;
	  if (object[i].type == ROCKET && !object[i].time)
	    {
	      d = 640 * 640;
	      frocket = -1;
	      for (r = 0; r < nobjects; r++)
		{
		  if (object[r].live && !object[r].time && object[r].type == EHOLE)
		    {
		      int             distance;
		      double           gravity;
		      xp = object[r].x - object[i].x;
		      yp = object[r].y - object[i].y;
		      distance =(int)( sqrt (xp * xp + yp * yp));
		      gravity = BALL_SPEED * (gameplan == COOPERATIVE ? 200 : 50) / distance;
		      if (gravity > BALL_SPEED * 4 / 5)
			gravity = BALL_SPEED * 4 / 5;
		      normalize (&xp, &yp, gravity);
		      object[i].fx += xp;
		      object[i].fy += yp;
		    }
		}

	    }
	  if (object[i].type == BALL || object[i].type == LBALL || object[i].type == BBALL || object[i].type == LUNATIC)
	    {
	      frocket = -1;
	      d = 640 * 640;
	      for (r = 0; r < nrockets; r++)
		{
		  if (object[r].live && !object[r].time)
		    {
		      xp = object[r].x - object[i].x;
		      yp = object[r].y - object[i].y;
		      if (xp * xp + yp * yp < d)
			d = xp * xp + yp * yp, frocket = r;
		    }
		}
	      if (frocket != -1)
		xp = object[frocket].x - object[i].x,
		  yp = object[frocket].y - object[i].y;
	      else
		xp = GAMEWIDTH / 2 - object[i].x,
		  yp = GAMEHEIGHT / 2 - object[i].y;
	      if (object[i].type == LUNATIC && !(rand () % 4))
		{
		  xp = rand ();
		  yp = rand () + 1;
		}
	      switch (object[i].type)
		{
		case BBALL:
		  normalize (&xp, &yp, BBALL_SPEED);
		  break;
		case BALL:
		case LUNATIC:
		case LBALL:
		  normalize (&xp, &yp, BALL_SPEED);
		  break;
		}
	      object[i].fx += xp;
	      object[i].fy += yp;
	    }
	  object[i].fx *= SLOWDOWN,
	    object[i].fy *= SLOWDOWN;
	}
    }
}

static void colisions ()
{
  int             i, y;
  int             colize = 0;
  static int      ctime = 0;
  double           xp, yp, gummfactor;
  for (i = 0; i < nobjects; i++)
    if (object[i].live)
      for (y = i + 1; y < nobjects; y++)
	if (object[y].live)
	  {
	    xp = object[y].x - object[i].x;
	    yp = object[y].y - object[i].y;
	    if (xp * xp + yp * yp < (object[y].radius + object[i].radius) *
		(object[y].radius + object[i].radius))
	      {
		colize = 1;
		if (object[i].type == HOLE || object[i].type == EHOLE)
		  {
		    if (object[y].type != APPLE)
		      destroy (y);
		    if (object[i].type == EHOLE)
		      destroy (i);
		    continue;
		  }
		if (object[y].type == HOLE || object[y].type == EHOLE)
		  {
		    if (object[i].type != APPLE)
		      destroy (i);
		    if (object[y].type == EHOLE)
		      destroy (y);
		    continue;
		  }
		if (object[i].type == ROCKET)
		  {
		    if (object[y].thief == 1 && object[i].thief == 1)
		      {
			double           tmp;
			tmp = object[i].M;
			object[i].M = object[y].M;
			object[y].M = tmp;
			object[i].thief = 0;
			object[y].thief = 0;
		      }
		    if (object[y].type == BBALL && object[i].thief == 1)
		      {
			object[i].M += object[y].M - M (BALL);
			object[i].thief = 0;
			object[y].M = M (BALL);
		      }
		    else if (object[y].type == ROCKET && object[i].thief == 1)
		      {
			object[i].M += object[y].M - M (ROCKET);
			object[i].accel += object[y].accel - ROCKET_SPEED;
			object[i].thief = 0;
			object[y].M = M (object[i].type);
			object[y].accel = ROCKET_SPEED - A_ADD;
		      }
		    if (object[i].type == ROCKET && object[y].thief == 1)
		      {
			object[y].M += object[i].M - M (ROCKET);
			object[y].accel += object[i].accel - ROCKET_SPEED;
			object[y].thief = 0;
			object[i].M = M (object[y].type);
			object[i].accel = ROCKET_SPEED - A_ADD;
		      }
		    if (gameplan == COOPERATIVE)
		      object[i].score++;
		    if (object[y].letter == L_ACCEL)
		      object[i].accel += A_ADD,
			object[i].score += 10;
		    if (object[y].letter == L_GUMM)
		      object[i].M += M_ADD,
			object[i].score += 10;
		    if (object[y].letter == L_THIEF)
		      object[i].M = M (object[i].type),
			object[i].accel = ROCKET_SPEED - A_ADD,
			object[i].score -= 30;
		    if (object[y].letter == L_FINDER)
		      {
			object[i].accel += A_ADD * (rand () % 5);
			object[i].M += M_ADD * (rand () % 10);
			object[i].score += 30;
		      }
		    if (object[y].letter == L_TTOOL)
		      {
			object[i].thief = 1;
			object[i].score += 30;
		      }

		    object[y].letter = ' ';
		    if (object[y].type == LBALL)
		      object[y].type = BALL;
		    if (object[y].type == BALL && dosprings && !(rand () % randsprings))
		      object[y].lineto = i;

		    if (gameplan == DEATHMATCH && object[y].type == ROCKET && dosprings && !(rand () % (2 * randsprings)))
		      object[y].lineto = i;
		  }
		if (object[y].type == LUNATIC)
		  {
		    gummfactor = -ROCKETM / LUNATICM;
		  }
		else if (object[i].type == LUNATIC)
		  {
		    gummfactor = -LUNATICM / ROCKETM;
		  }
		else
		  gummfactor = object[i].M / object[y].M;
		normalize (&xp, &yp, gummfactor * GUMM);
		object[y].fx += xp;
		object[y].fy += yp;
		normalize (&xp, &yp, 1 / gummfactor * GUMM);
		object[i].fx -= xp;
		object[i].fy -= yp;
		if (object[i].type == ROCKET && object[i].time)
		  object[i].fx = 0,
		    object[i].fy = 0;
		if (object[y].type == ROCKET && object[y].time)
		  object[y].fx = 0,
		    object[y].fy = 0;
		if (object[y].type == INSPECTOR && object[i].type == ROCKET)
		  {
		    object[y].fx = 0,
		      object[y].fy = 0;
		    object[i].fx *= -2,
		      object[i].fy *= -2;
		  }
	      }
	  }
  if (colize && !ctime)
    {
	  Effect (S_COLIZE);
      ctime = 4;
    }
  if (ctime)
    ctime--;
}

void gameloop(void)
{
	UpdateInput();
	process_keys ();
    sprocess_keys ();
    update_values ();
    update_game ();
    update_forces ();
    colisions ();
    move_objects ();
    check_limit ();
	draw_objects (1);
}

void		USleep(DWORD millsec)
{
	DWORD t,t1;
	t1=t=timeGetTime();
	while((t1-t)<millsec)
	{	
		t1=timeGetTime();
		UpdateInput();
		if(Pressed())
			break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -