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

📄 cpc.java

📁 这个游戏的关卡使用mapwin制作的
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
		return flag;
	}

	public boolean isCollosionAnything(int ax, int ay) {
		boolean flag = false;
		boolean[] br = getCollosionWithMap(ax, ay);
		if (br[0] || br[1] || br[2] || br[3]) {
			flag = true;
		}
		if (flag) {
			return flag;
		} else {
			// CPC
			for (int i = 0; i < MyGameCanvas.vecticUnits.size(); i++) {
				CPC cpc = (CPC) MyGameCanvas.vecticUnits.elementAt(i);
				if (cpc.bVar == B_VAR_MAGIC_CPC_FIRE
						|| cpc.bVar == B_VAR_MAGIC_CPC_FIRE_BALL
						|| cpc.bVar == B_VAR_MAGIC_CPC_FIRE) {
					continue;
				}

				int r1x1 = cpc.nX;
				int r1y1 = cpc.nY;
				int r1x2 = cpc.nX + 16;
				int r1y2 = cpc.nY + 16;
				if (bVar == B_VAR_BOSS_UFO) {
					r1x1 = cpc.nX + 4;
					r1y1 = cpc.nY + 4;
					r1x2 = cpc.nX + 24;
					r1y2 = cpc.nY + 24;
				}
				if (bVar == B_VAR_MAGIC_LISA_FIRE) {
					int r2x1 = ax;
					int r2y1 = ay;
					int r2x2 = ax + 8;
					int r2y2 = ay + 8;
					if (cpc.equals(this)) {
						// 不和自己比较:)
					} else {

						if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2,
								r1y2, r2x1, r2y1, r2x2, r2y2)) {
							switch (cpc.bVar) {
							case B_VAR_BOX:
							case B_VAR_NPC:
							case B_VAR_DOOR:
							case B_VAR_SAVING:
							case B_VAR_ZHEN: {
								if (cpc.bVar == B_VAR_ZHEN) {
									if (bBossState == 2) {
										flag = true;
									}
								} else {
									flag = true;
								}
							}
								break;
							default: {
								// cpc.nHP -= nAttackPower; //
								// nHP = 0;
								// flag = true;
								// // 通知那个人睡眠,自己不睡眠
								// cpc.setSleep(i << 1);
								// nHP = 0;
								flag = false;
							}
								break;
							}
						}

					}
				} else if (bVar == B_VAR_MAGIC_CPC_FIRE
						|| bVar == B_VAR_MAGIC_CPC_FIRE_BALL) {
					int r2x1 = ax;
					int r2y1 = ay;
					int r2x2 = ax + 8;
					int r2y2 = ay + 8;
					if (cpc.equals(this)) {
						// 不和自己比较:)
					} else {

						if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2,
								r1y2, r2x1, r2y1, r2x2, r2y2)) {
							switch (cpc.bVar) {
							case B_VAR_BOX:
							case B_VAR_NPC:
							case B_VAR_DOOR:
							case B_VAR_SAVING: {
								nHP = 0;
								flag = true;
							}

								break;

							}
						}

					}
				} else {
					int r2x1 = ax;
					int r2y1 = ay;
					int r2x2 = ax + 16;
					int r2y2 = ay + 16;
					if (cpc.equals(this)) {
						// 不和自己比较:)
					} else {
						if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2,
								r1y2, r2x1, r2y1, r2x2, r2y2)) {
							flag = false;
							switch (cpc.bVar) {
							case B_VAR_BOX:
							case B_VAR_NPC:
							case B_VAR_DOOR:
							case B_VAR_SAVING:
							case B_VAR_ZHEN: {
								if (cpc.bVar == CPC.B_VAR_ZHEN) {
									if (bBossState == 2) {
										flag = true;
									}
								} else {
									flag = true;
								}
							}

								break;

							}

							// 通知那个人睡眠,自己不睡眠
							// cpc.setSleep(i << 1);

						}

					}
				}

			}
			if (flag) {
				return flag;
			} else {
				int r1x1 = MyGameCanvas.instance.npcLisa.nX + 2;
				int r1y1 = MyGameCanvas.instance.npcLisa.nY + 2;
				int r1x2 = r1x1 + 16 - 4;
				int r1y2 = r1y1 + 16 - 4;
				if (bVar == B_VAR_MAGIC_LISA_FIRE) {
					//
				} else if (bVar == B_VAR_MAGIC_CPC_FIRE
						|| bVar == B_VAR_MAGIC_CPC_FIRE_BALL) {
					int r2x1 = ax;
					int r2y1 = ay;
					int r2x2 = ax + 8;
					int r2y2 = ay + 9;
					if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2, r1y2,
							r2x1, r2y1, r2x2, r2y2)) {
						MyGameCanvas.instance.npcLisa.delHp(-1);
						nHP = 0;
						// NPC
						flag = true;

					}
				} else {
					int r2x1 = ax;
					int r2y1 = ay;
					int r2x2 = ax + 16;
					int r2y2 = ay + 16;

					if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2, r1y2,
							r2x1, r2y1, r2x2, r2y2)) {
						// NPC
						if (bVar == B_VAR_BOSS_SIMPLY
								|| bVar == B_VAR_BOSS_SNAKE
								|| bVar == B_VAR_BOSS_UFO || bVar == B_VAR_OGRE
								|| bVar == B_VAR_OGRE || bVar == B_VAR_WORM) {

							MyGameCanvas.instance.npcLisa.delHp(-1);
						} else if (bVar == B_VAR_ZHEN) {
							if (bBossState == 2) {
								MyGameCanvas.instance.npcLisa.delHp(-1);
							}

						}
						flag = false;

					}
				}
				return flag;
			}

		}

	}

	//
	public boolean[] getDirCanGo(int x, int y) {
		boolean flags[] = new boolean[4];
		int t_x = 0;
		int t_y = 0;
		// up
		t_x = x;
		t_y = y - nSpeed;
		if (isCollosionAnything(t_x, t_y)) {
			flags[0] = false; // 不能走
		} else {
			flags[0] = true; // 能走
		}
		// down
		t_x = x;
		t_y = y + nSpeed;
		if (isCollosionAnything(t_x, t_y)) {
			flags[1] = false; // 不能走
		} else {
			flags[1] = true; // 能走
		}
		// left
		t_x = x - nSpeed;
		t_y = y;
		if (isCollosionAnything(t_x, t_y)) {
			flags[2] = false; // 不能走
		} else {
			flags[2] = true; // 能走
		}
		// right
		t_x = nX + nSpeed;
		t_y = nY;
		if (isCollosionAnything(t_x, t_y)) {
			flags[3] = false; // 不能走
		} else {
			flags[3] = true; // 能走
		}
		return flags;
	}

	//
	public boolean[] getCollosionWithMap(int ax, int ay) {

		boolean[] flags = new boolean[4];

		int tx[] = new int[4];
		int ty[] = new int[4];

		for (int i = 0; i < flags.length; i++) {
			flags[i] = false;
		}
		for (int i = 0; i < 4; i++) {

			for (int j = 0; j < nRectCollosion[i].length; j++) {
				boolean flag = false;
				int t_x0 = nRectCollosion[i][j][0] + ax;
				int t_y0 = nRectCollosion[i][j][1] + ay;

				int t_x1 = nRectCollosion[i][j][2] + ax;
				int t_y1 = nRectCollosion[i][j][3] + ay;

				tx[0] = t_x0 + 1;
				ty[0] = t_y0 + 1;

				tx[1] = t_x1 - 1;
				ty[1] = t_y0 + 1;

				tx[2] = t_x0 + 1;
				ty[2] = t_y1 - 1;

				tx[3] = t_x1 - 1;
				ty[3] = t_y1 - 1;
				for (int m = 0; m < 4; m++) {

					int tempx = tx[m] / Consts.SN_TILE_WIDTH;
					int tempy = ty[m] / Consts.SN_TILE_HEIGHT;

					if (!MyGameCanvas.isXYInTiles(tempx, tempy,
							MyGameCanvas.snsTiles)) {
						flags[i] = true;
						flag = true;
						break;

					} else {
						byte block_val = Consts
								.getTileVar((short) MyGameCanvas.snsTiles[tempy][tempx]);
						if (Consts.SB_TILE_NULL != block_val) {
							flags[i] = true;
							flag = true;

							break;
						}

					}
				}
				if (flag) {
					break;
				}
			}
		}

		return flags;
	}

	public void setSleep(int seed) {
		nSleepTime = MyGameCanvas.instance.getRandomInt(1, N_SLEEP_TIME, seed);
	}

	public void initAbsXY(int x, int y) {
		nX = x;
		nY = y;

		xCalc = x * 10;
		yCalc = y * 10;

	}

	public void setBoom() {
		// Consts.log("setBoom()");
		nTimer = 0;
		bBombState = B_BOMB_STATE_BOMBING;
		nHP = 0;
		//
		// 计算
		int tx = nX / Consts.SN_TILE_WIDTH;
		int ty = nY / Consts.SN_TILE_HEIGHT;
		// up down
		if (tx > 0 && tx < MyGameCanvas.snTilesWidthNum - 1) {
			int t_var = ty;
			while (t_var > 0) {
				t_var--;
				byte key = getMapsPre(tx, t_var);
				if (key == (byte) 0) {
					nAttackByBombTileNumUp++;
				} else if (key == 2 || key == 3) {
					nAttackByBombTileNumUp++;
					break;
				} else {
					break;
				}
				if (nAttackByBombTileNumUp >= nPower) {
					break;
				}
			}
			t_var = ty;
			while (t_var < MyGameCanvas.snTilesHeightNum - 1) {
				t_var++;
				byte key = getMapsPre(tx, t_var);
				if (key == 0) {
					nAttackByBombTileNumDown++;
				} else if (key == 2 || key == 3) {
					nAttackByBombTileNumDown++;
					break;
				} else {
					break;
				}
				if (nAttackByBombTileNumDown >= nPower) {
					break;
				}
			}
		}
		// left right

		if (ty > 0 && ty < MyGameCanvas.snTilesHeightNum - 1) {
			int t_var = tx;
			while (t_var > 0) {
				t_var--;
				byte key = getMapsPre(t_var, ty);
				if (key == 0) {
					nAttackByBombTileNumLeft++;
				} else if (key == 2 || key == 3) {
					nAttackByBombTileNumLeft++;
					break;
				} else {
					break;
				}
				if (nAttackByBombTileNumLeft >= nPower) {
					break;
				}
			}
			t_var = tx;
			while (t_var < MyGameCanvas.snTilesWidthNum - 1) {
				t_var++;
				byte key = getMapsPre(t_var, ty);
				if (key == 0) {
					nAttackByBombTileNumRight++;
				} else if (key == 2 || key == 3) {
					nAttackByBombTileNumRight++;
					break;
				} else {
					break;
				}
				if (nAttackByBombTileNumRight >= nPower) {
					break;
				}
			}
		}
		//
		// Consts.log("nAttackByBombTileNumLeft " + nAttackByBombTileNumLeft);
		// 放置火焰
		MyGameCanvas.instance.addFires(tx, ty);
		// up
		for (int m = 1; m <= nAttackByBombTileNumUp; m++) {
			MyGameCanvas.instance.addFires(tx, ty - m);
		}
		// down
		for (int m = 1; m <= nAttackByBombTileNumDown; m++) {
			MyGameCanvas.instance.addFires(tx, ty + m);
		}
		// left
		for (int m = 1; m <= nAttackByBombTileNumLeft; m++) {
			MyGameCanvas.instance.addFires(tx - m, ty);
		}
		// right
		for (int m = 1; m <= nAttackByBombTileNumRight; m++) {
			MyGameCanvas.instance.addFires(tx + m, ty);
		}

		// 引爆周围的炸弹
		if (MyGameCanvas.instance.vecticUnits != null) {
			int size = MyGameCanvas.instance.vecticUnits.size();
			//
			for (int i = 0; i < size; i++) {
				CPC cpc = (CPC) MyGameCanvas.instance.vecticUnits.elementAt(i);
				if (cpc.bVar == B_VAR_BOMB) {
					if (!cpc.equals(this)) {
						if (cpc.bBombState == B_BOMB_STATE_STATIC) {
							// up
							for (int m = 1; m <= nAttackByBombTileNumUp; m++) {
								if (tx == cpc.nX / Consts.SN_TILE_WIDTH
										&& ty - m == cpc.nY
												/ Consts.SN_TILE_HEIGHT) {
									cpc.setBoom();
								}
							}
							// down
							for (int m = 1; m <= nAttackByBombTileNumDown; m++) {
								if (tx == cpc.nX / Consts.SN_TILE_WIDTH
										&& ty + m == cpc.nY
												/ Consts.SN_TILE_HEIGHT) {
									cpc.setBoom();
								}
							}
							// left
							for (int m = 1; m <= nAttackByBombTileNumLeft; m++) {
								if (tx - m == cpc.nX / Consts.SN_TILE_WIDTH
										&& ty == cpc.nY / Consts.SN_TILE_HEIGHT) {
									cpc.setBoom();
								}
							}
							// right
							for (int m = 1; m <= nAttackByBombTileNumRight; m++) {
								if (tx + m == cpc.nX / Consts.SN_TILE_WIDTH
										&& ty == cpc.nY / Consts.SN_TILE_HEIGHT) {
									cpc.setBoom();
								}
							}

						}
					}
				}
			}
		}
		//
	}

	public boolean isTileXYNull(int x, int y) {
		if (x < 0 || x >= MyGameCanvas.snTilesWidthNum || y < 0
				|| y >= MyGameCanvas.snTilesHeightNum) {
			return false;
		}
		boolean isFlag = true;
		if (Consts.getTileVar(MyGameCanvas.snsTiles[y][x]) != Consts.SB_TILE_NULL) {
			isFlag = false;
		}
		if (isFlag) {
			int r1x1 = x * Consts.SN_TILE_WIDTH;
			int r1y1 = y * Consts.SN_TILE_HEIGHT;
			int r1x2 = r1x1 + Consts.SN_TILE_WIDTH;
			int r1y2 = r1y1 + Consts.SN_TILE_HEIGHT;
			for (int i = 0; i < MyGameCanvas.instance.vecticUnits.size(); i++) {
				CPC cpc = (CPC) MyGameCanvas.instance.vecticUnits.elementAt(i);
				if (cpc.bVar == CPC.B_VAR_BOX || (cpc.bVar == CPC.B_VAR_ZHEN)) {
					if (cpc.bVar == B_VAR_ZHEN) {
						if (bBossState != 2) {
							continue;
						}
					}
					int r2x1 = cpc.nX;
					int r2y1 = cpc.nY;
					int r2x2 = cpc.nX + Consts.SN_TILE_WIDTH;
					int r2y2 = cpc.nY + Consts.SN_TILE_HEIGHT;
					if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2, r1y2,
							r2x1, r2y1, r2x2, r2y2)) {

						return false;
					}
				}
			}
		}
		return isFlag;
	}

	public boolean isTilesNullForSnake(int x, int y) {
		try {
			if (Consts.getTileVar(MyGameCanvas.snsTiles[y][x]) == Consts.SB_TILE_NULL) {
				return true;

			}
		} catch (Exception ex) {
		}
		return false;
	}

	public byte getMapsPre(int x, int y) {
		// 0 -> 可以通行 1 -> 地图不能行走, 2 -> 有物体 3 -> 地图为可以爆炸的砖块
		if (x < 0 || x >= MyGameCanvas.snTilesWidthNum || y < 0
				|| y >= MyGameCanvas.snTilesHeightNum) {
			return (byte) 1;
		}
		boolean isFlag = true;
		if (Consts.getTileVar(MyGameCanvas.snsTiles[y][x]) != Consts.SB_TILE_NULL) {
			if (Consts.getTileVar(MyGameCanvas.snsTiles[y][x]) == Consts.SB_TILE_BRICK) {
				return (byte) 3;
			}
			return (byte) 1;
		}
		if (isFlag) {

			int r1x1 = x * Consts.SN_TILE_WIDTH;
			int r1y1 = y * Consts.SN_TILE_HEIGHT;
			int r1x2 = r1x1 + Consts.SN_TILE_WIDTH;
			int r1y2 = r1y1 + Consts.SN_TILE_HEIGHT;
			for (int i = 0; i < MyGameCanvas.instance.vecticUnits.size(); i++) {
				CPC cpc = (CPC) MyGameCanvas.instance.vecticUnits.elementAt(i);
				if (cpc.bVar == CPC.B_VAR_SAVING || cpc.bVar == CPC.B_VAR_BOX
						|| cpc.bVar == CPC.B_VAR_BOSS_SIMPLY
						|| cpc.bVar == CPC.B_VAR_BOSS_SNAKE) {
					int r2x1 = cpc.nX;
					int r2y1 = cpc.nY;
					int r2x2 = cpc.nX + Consts.SN_TILE_WIDTH;
					int r2y2 = cpc.nY + Consts.SN_TILE_HEIGHT;
					if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2, r1y2,
							r2x1, r2y1, r2x2, r2y2)) {
						return (byte) 2;
					}
				}
			}
			// lisa
			int r2x1 = MyGameCanvas.instance.npcLisa.nX;
			int r2y1 = MyGameCanvas.instance.npcLisa.nY;
			int r2x2 = r2x1 + Consts.SN_TILE_WIDTH;
			int r2y2 = r2y1 + Consts.SN_TILE_HEIGHT;
			if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2, r1y2, r2x1,
					r2y1, r2x2, r2y2)) {
				return (byte) 2;
			}
		}
		return (byte) 0;
	}

	public boolean isCanOGREMOVETO(int x, int y) {
		for (int i = 0; i < MyGameCanvas.instance.vecticUnits.size(); i++) {
			CPC cpc = (CPC) MyGameCanvas.instance.vecticUnits.elementAt(i);
			if (cpc.bVar == CPC.B_VAR_BOMB || cpc.bVar == CPC.B_VAR_BOX
					|| cpc.bVar == CPC.B_VAR_DOOR || cpc.bVar == CPC.B_VAR_NPC
					|| cpc.bVar == CPC.B_VAR_RABIT
					|| cpc.bVar == CPC.B_VAR_SAVING) {
				if (cpc.nX / Consts.SN_TILE_WIDTH == x
						&& cpc.nY / Consts.SN_TILE_HEIGHT == y) {
					return false;
				}
			}
		}
		return true;
	}

}

⌨️ 快捷键说明

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