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

📄 demohint3_p1_speed_unnumbered.java

📁 由于JAVA与平台无关的优点,现在用JAVA编写的小游戏已经非常普遍,相信对这款旋转俄罗斯方块会让大家耳目一新
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		else
			next2IsSpeedDownBrick = false;
		temp = (int) (100 * Math.random());
		if (temp <= 30)
			next2IsSpeedDownBrickL = true;
		else
			next2IsSpeedDownBrickL = false;

		temp = (int) (100 * Math.random());
		if (temp <= 30)
			next3IsSpeedDownBrick = true;
		else
			next3IsSpeedDownBrick = false;
		temp = (int) (100 * Math.random());
		if (temp <= 30)
			next3IsSpeedDownBrickL = true;
		else
			next3IsSpeedDownBrickL = false;

		gameStart = true;
		fallingOver = false;
		fallingOverL = false;// ****
		rotateIndex = 0;// 伴隨rotateAngel
		rotateIndexL = 0;// 伴隨rotateAngel
		rotateAngel = 0;// ****
		rotateAngelL = 0;// ****
		numDeleted = 0;
		numDeletedL = 0;
		// while (gameStart) { // 起始一個方塊, 開始落下.
		++brickFallingNumber;
		++rotateAngel;
		++rotateAngelL;// ****
		// --rotateIndex;
		// --rotateIndexL;//****
		if (rotateIndex < 0)
			rotateIndex = rotateIndex + 360 / degreeBrick;
		if (rotateIndexL < 0)
			rotateIndexL = rotateIndexL + 360 / degreeBrick;// ****
		fallingOver = false;
		fallingOverL = false;// ****
		brickToSite = false;
		brickToSiteL = false;// ****
		currentBrickAngel = startAngelRPlayer + (2 - 1) + newBrickIncre;// 有增加newBrickIncre歐
		currentBrickAngelL = startAngelLPlayer + (2 - 1) + newBrickIncreL;// 有增加newBrickIncre歐
		currentBrickRadius = (int) ((cordRadiusMax + 1) * Math.random());
		currentBrickRadiusL = (int) ((cordRadiusMax + 1) * Math.random());// ****
		currentBrickRadius = cordRadiusMax / 2 + 1;
		currentBrickRadiusL = cordRadiusMax / 2;// ****
		if (!newBrickOK()) { // 檢查是否可以起始一個方塊, 開始落下.
			gameOver();
		}
		if (!newBrickOKL()) { // 檢查是否可以起始一個方塊, 開始落下.//****
		} // ****
		// setNewBrick(); // 在mapGame[][]與mapColor之中, 進行新方塊的初使工作.
		// setNewBrickL(); // ****
		System.out.println("Before OneLoop");
		gameOneLoop();

		try {
			Thread.sleep(newBrickTime);
		} catch (InterruptedException e) {
			// TODO 自動產生 catch 區塊
			e.printStackTrace();
		}
		// } // End of while
	} // End of goToPlay()

	boolean moreToErase;

	void markSameRow() {
		for (int i = endAngelRPlayer - 1; i >= startAngelRPlayer; --i) { // 從最底部開始往上檢查(針對各各逕向列)
			boolean findRow = true;
			for (int j = 0; j <= cordRadiusMax; ++j) {// 尋找可以消除的一列.
				if (!(mapGame[i][j] == -10 || mapGame[i][j] == -40
						|| mapGame[i][j] == -90 || mapGame[i][j] == -100)) { // 沒有要消除的逕向列.
					findRow = false;
					// 將-90回復為-10
					for (int k = 0; k <= cordRadiusMax; ++k)
						if (mapGame[i][k] == -90 || mapGame[i][k] == -100)
							mapGame[i][k] = -10;
					break;
				}
			} // 可以執行完此FOR迴圈, 表示找到要消除的一列.
			// 將-90回復為-10
			for (int k = 0; k <= cordRadiusMax; ++k)
				if (mapGame[i][k] == -90 || mapGame[i][k] == -100)
					mapGame[i][k] = -10;
			if (findRow == false)
				continue;
			// 執行消除的工作.
			++numDeleted;
			moreToErase = true;
			for (int cordAngel = i; cordAngel >= startAngelRPlayer; --cordAngel) {
				for (int cordRadius = 0; cordRadius <= cordRadiusMax; ++cordRadius) {
					if (mapGame[cordAngel - 1][cordRadius] != -50
							&& mapGame[cordAngel - 1][cordRadius] != -40
							&& (cordAngel - 1) >= 8) {
						mapGame[cordAngel][cordRadius] = mapGame[cordAngel - 1][cordRadius];
					}
				}
			}
			return;
		} // end of for
		moreToErase = false;
	}

	boolean moreToEraseL;

	void markSameRowL() {
		for (int i = endAngelLPlayer - 1; i >= startAngelLPlayer; --i) { // 從最底部開始往上檢查(針對各各逕向列)
			boolean findRow = true;
			for (int j = 0; j <= cordRadiusMax; ++j) {// 尋找可以消除的一列.
				if (!(mapGameL[i][j] == -10 || mapGameL[i][j] == -40
						|| mapGameL[i][j] == -90 || mapGameL[i][j] == -100)) { // 沒有要消除的逕向列.
					findRow = false;
					// 將-90回復為-10
					for (int k = 0; k <= cordRadiusMax; ++k)
						if (mapGameL[i][k] == -90 || mapGameL[i][k] == -100)
							mapGameL[i][k] = -10;
					break;
				}
			} // 可以執行完此FOR迴圈, 表示找到要消除的一列.
			for (int k = 0; k <= cordRadiusMax; ++k)
				if (mapGameL[i][k] == -90 || mapGameL[i][k] == -100)
					mapGameL[i][k] = -10;
			if (findRow == false)
				continue;
			// 執行消除的工作.
			++numDeletedL;
			moreToEraseL = true;
			for (int cordAngelL = i; cordAngelL >= startAngelLPlayer; --cordAngelL) {
				for (int cordRadiusL = 0; cordRadiusL <= cordRadiusMax; ++cordRadiusL) {
					if (mapGameL[cordAngelL - 1][cordRadiusL] != -50
							&& mapGameL[cordAngelL - 1][cordRadiusL] != -40
							&& (cordAngelL - 1) >= 8) {
						mapGameL[cordAngelL][cordRadiusL] = mapGameL[cordAngelL - 1][cordRadiusL];
					}
				}
			}
			return;
		} // end of for
		moreToErase = false;
	}

	void markErasedBrick() {
		moreToErase = false;
		markSameRow();
	}

	void markErasedBrickL() {
		moreToEraseL = false;
		markSameRowL();
	}

	void scanAndErase() {
		numDeleted = 0;
		moreToErase = true;
		while (moreToErase) { // 若掃描發現有方塊要消除, 則必須再進行一次掃描, 因為方塊的消除,
			markErasedBrick(); // 有可能引發更多方塊的消除.
			try {
				Thread.sleep(testTime);
			} catch (InterruptedException e) {
				// TODO 自動產生 catch 區塊
				e.printStackTrace();
			}
		}
		tetris.repaint();
	}

	void scanAndEraseL() {
		numDeletedL = 0;
		moreToEraseL = true;
		while (moreToEraseL) { // 若掃描發現有方塊要消除, 則必須再進行一次掃描, 因為方塊的消除,
			markErasedBrickL(); // 有可能引發更多方塊的消除.
			try {
				Thread.sleep(testTime);
			} catch (InterruptedException e) {
				// TODO 自動產生 catch 區塊
				e.printStackTrace();
			}
		}
		tetris.repaint();
	}

	boolean fallingOK() {
		if (overR)
			return false;
		for (int i = 0; i <= bricksFallingType[currentBrickType][currentBrickSubType].length - 1; ++i) {
			if (i == 0)// 第一組座標(i為0)是下落檢查方塊組中最底部的方塊, 其1st整數表示Angel座標.
				// 此if用以檢查是否到達mapGame底部
				if ((bricksFallingType[currentBrickType][currentBrickSubType][i][0] + currentBrickAngel) > endAngelRPlayer - 1) {
					fallingOver = true;
					return false;
				}
			int increAngel = bricksFallingType[currentBrickType][currentBrickSubType][i][0];
			int increRadius = bricksFallingType[currentBrickType][currentBrickSubType][i][1];
			if (mapGame[currentBrickAngel + increAngel][currentBrickRadius
					+ increRadius] == -10
					|| mapGame[currentBrickAngel + increAngel][currentBrickRadius
							+ increRadius] == -40) {
				fallingOver = true;
				return false;
			}
		}
		return true;
	}

	boolean fallingOKL() {
		if (overL)
			return false;
		for (int i = 0; i <= bricksFallingType[currentBrickTypeL][currentBrickSubTypeL].length - 1; ++i) {
			if (i == 0)// 第一組座標(i為0)是下落檢查方塊組中最底部的方塊, 其1st整數表示Angel座標.
				// 此if用以檢查是否到達mapGame底部
				if ((bricksFallingType[currentBrickTypeL][currentBrickSubTypeL][i][0] + currentBrickAngelL) > endAngelLPlayer - 1) {
					fallingOverL = true;
					return false;
				}
			int increAngelL = bricksFallingType[currentBrickTypeL][currentBrickSubTypeL][i][0];
			int increRadiusL = bricksFallingType[currentBrickTypeL][currentBrickSubTypeL][i][1];
			if (mapGameL[currentBrickAngelL + increAngelL][currentBrickRadiusL
					+ increRadiusL] == -10
					|| mapGameL[currentBrickAngelL + increAngelL][currentBrickRadiusL
							+ increRadiusL] == -40) {
				fallingOverL = true;
				return false;
			}
		}
		return true;
	}

	void setRPlayerFalling() {
		if (overR)
			return;
		for (int i = 0; i <= bricksType[currentBrickType][currentBrickSubType].length - 1; ++i) {
			int increAngel = bricksType[currentBrickType][currentBrickSubType][i][0];
			int increRadius = bricksType[currentBrickType][currentBrickSubType][i][1];
			mapGame[currentBrickAngel + increAngel][currentBrickRadius + increRadius] = -20;
		}
		currentBrickAngel = 1 + currentBrickAngel; // 設定方塊下落一格.
		for (int i = 0; i <= bricksType[currentBrickType][currentBrickSubType].length - 1; ++i) {
			int increAngel = bricksType[currentBrickType][currentBrickSubType][i][0];
			int increRadius = bricksType[currentBrickType][currentBrickSubType][i][1];
			if (RBrickCanNotChange)
				mapGame[currentBrickAngel + increAngel][currentBrickRadius
						+ increRadius] = -100;
			else if (isSpeedDownBrick)
				mapGame[currentBrickAngel + increAngel][currentBrickRadius
						+ increRadius] = -90;
			else
				mapGame[currentBrickAngel + increAngel][currentBrickRadius
						+ increRadius] = -10;
			// mapGame[currentBrickAngel + increAngel][currentBrickRadius +
			// increRadius] = -10;
		}
		// 設定要消除的方塊.
		mapGame[currentBrickAngel - 2][currentBrickRadius] = -20; // 設定為-30,
		// 表示要消除的方塊.
	}

	void setLPlayerFalling() {
		if (overL)
			return;
		for (int i = 0; i <= bricksType[currentBrickTypeL][currentBrickSubTypeL].length - 1; ++i) {
			int increAngelL = bricksType[currentBrickTypeL][currentBrickSubTypeL][i][0];
			int increRadiusL = bricksType[currentBrickTypeL][currentBrickSubTypeL][i][1];
			mapGameL[currentBrickAngelL + increAngelL][currentBrickRadiusL
					+ increRadiusL] = -20;
		}
		currentBrickAngelL = 1 + currentBrickAngelL; // 設定方塊下落一格.
		for (int i = 0; i <= bricksType[currentBrickTypeL][currentBrickSubTypeL].length - 1; ++i) {
			int increAngelL = bricksType[currentBrickTypeL][currentBrickSubTypeL][i][0];
			int increRadiusL = bricksType[currentBrickTypeL][currentBrickSubTypeL][i][1];
			if (LBrickCanNotChange)
				mapGameL[currentBrickAngelL + increAngelL][currentBrickRadiusL
						+ increRadiusL] = -100;
			else if (isSpeedDownBrickL)
				mapGameL[currentBrickAngelL + increAngelL][currentBrickRadiusL
						+ increRadiusL] = -90;
			else
				mapGameL[currentBrickAngelL + increAngelL][currentBrickRadiusL
						+ increRadiusL] = -10;
		}
		// 設定要消除的方塊.
		mapGameL[currentBrickAngelL - 2][currentBrickRadiusL] = -20; // 設定為-30,
	}

	void centrifugal() {// 存在的徑向列, 一定是不可消除列.
		int firstRowCentrifugal = 0, numRowCentrifugal = 0;
		boolean findBrokenRow = false;
		for (int i = startAngelRPlayer; i <= endAngelRPlayer - 1; ++i) { // 從最頂部開始往下檢查
			for (int j = 0; j <= cordRadiusMax; ++j) {// 尋找第一列.
				if (mapGame[i][j] == -10) {
					firstRowCentrifugal = i;
					findBrokenRow = true;
					break;// 找到不可以消除的逕向列, 所以跳出內部for迴圈.
				}
			} // end of inner for
			if (findBrokenRow)
				break; // 找到不可以消除的逕向列, 所以跳出外部for迴圈.
		} // end of outter for

		if (!findBrokenRow)
			return; // 很罕見, 徑向列被完全消除.
		// 執行離心作業.
		for (int cordAngel = firstRowCentrifugal; // cordAngel表示目前徑向座標,
		// 就是要進行離心作業的徑向列.
		cordAngel <= endAngelRPlayer - 1; ++cordAngel) {
			if (numRowCentrifugal >= 3)
				break;// 已經離心3個徑向列, 所以跳出.
			// 以下針對單一列, 進行離心移動.

⌨️ 快捷键说明

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