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

📄 demohint3_p1_speed_unnumbered.java

📁 由于JAVA与平台无关的优点,现在用JAVA编写的小游戏已经非常普遍,相信对这款旋转俄罗斯方块会让大家耳目一新
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
//		else if(i >= 28 && i <= 30)	tempR = outerR - (int)(lengthBrick/3) - lengthBrick;				
		else if(i >= 38 && i <= 41)	tempR = outerR - (int)(lengthBrick/3.5) - 7 *  lengthBrick;
		else if(i >= 42 && i <= 57)	tempR = outerR - (int)(lengthBrick/4) - 7 *  lengthBrick;
		else if(i >= 58 && i <= 63) tempR = outerR - (int)(lengthBrick/3) - 7 *  lengthBrick;
		else if(i >= 64 && i <= 65) tempR = outerR - (int)(lengthBrick/2.5) - 7 *  lengthBrick;
		else if(i >= 66 && i <= 71) tempR = outerR - (int)(lengthBrick/2) - 7 *  lengthBrick;
		else tempR = outerR - (int)(lengthBrick/1.5) -  7 * lengthBrick;
		
		outerIncreLineXX3 = tempR * Math.cos((2 * Math.PI) * i * degreeBrick / 360);
		int Xdecre3 = (int)(lengthBrick * Math.cos((2 * Math.PI) * i * degreeBrick / 360));
		
		outerIncreLineYY3 = tempR	* Math.sin((2 * Math.PI) * i * degreeBrick / 360);
		int Ydecre3 = (int)(lengthBrick * Math.sin((2 * Math.PI) * i * degreeBrick / 360));				
		
		XArray3[i] = (int) (centerX + outerIncreLineXX3);
		YArray3[i] = (int) (centerY - outerIncreLineYY3);
		for(int j = 0; j <= 2; ++j) {
			XDecre3[i][j] = XArray3[i] - j * Xdecre3;
			YDecre3[i][j] = YArray3[i] + j * Ydecre3;
		}
	}			

		
		double outerIncreLineX, outerIncreLineY, innerIncreLineX, innerIncreLineY;
		int innerRTemp = innerR;
		innerR = outerR - numTrack * lengthBrick;
		for (int i = 0; i <= numLine; i++) { // 繪製直線
			outerIncreLineX = outerR
					* Math.sin((2 * Math.PI) * i * degreeBrick / 360);
			outerIncreLineXArray[i] = (int) (centerX + outerIncreLineX);
			outerIncreLineXArray1[i] = (int) (centerX - outerIncreLineX);
			outerIncreLineY = outerR - outerR
					* Math.cos((2 * Math.PI) * i * degreeBrick / 360);
			outerIncreLineYArray[i] = (int) (outerY + outerIncreLineY);
			outerIncreLineYArray1[i] = (int) (outerY + 2 * outerR - outerIncreLineY);
			innerIncreLineX = innerR
					* Math.sin((2 * Math.PI) * i * degreeBrick / 360);
			innerIncreLineXArray[i] = (int) (centerX + innerIncreLineX);
			innerIncreLineXArray1[i] = (int) (centerX - innerIncreLineX);
			innerIncreLineY = innerR - innerR
					* Math.cos((2 * Math.PI) * i * degreeBrick / 360);
			innerIncreLineYArray[i] = (int) (outerY + numTrack * lengthBrick + innerIncreLineY);
			innerIncreLineYArray1[i] = (int) (outerY + 2 * outerR - numTrack
					* lengthBrick - innerIncreLineY);
		}
		innerR = innerRTemp;

		int outerR1 = outerR - numTrack * lengthBrick, outerY1 = outerY + numTrack
				* lengthBrick;
		double siteouterIncreLineX, siteouterIncreLineY, siteinnerIncreLineX, siteinnerIncreLineY;
		double site2outerIncreLineX, site2outerIncreLineY, site2innerIncreLineX, site2innerIncreLineY;
		// innerR = outerR - numTrack1 * lengthBrick
		for (int i = 7, j = 0; i <= 11; ++i, ++j) { // 繪製直線
			siteouterIncreLineX = outerR1
					* Math.sin((2 * Math.PI) * i * degreeBrick / 360);
			siteouterIncreLineXArray[j] = (int) (centerX + siteouterIncreLineX);
			siteouterIncreLineXArray1[j] = (int) (centerX - siteouterIncreLineX);
			site2outerIncreLineX = outerR1
					* Math.sin((2 * Math.PI)
							* (i + (endAngelRPlayer - startAngelRPlayer - 4)) * degreeBrick
							/ 360);
			site2outerIncreLineXArray[j] = (int) (centerX + site2outerIncreLineX);
			site2outerIncreLineXArray1[j] = (int) (centerX - site2outerIncreLineX);
			siteouterIncreLineY = outerR1 - outerR1
					* Math.cos((2 * Math.PI) * i * degreeBrick / 360);
			siteouterIncreLineYArray[j] = (int) (outerY1 + siteouterIncreLineY);
			siteouterIncreLineYArray1[j] = (int) (outerY1 + 2 * outerR1 - siteouterIncreLineY);
			site2outerIncreLineY = outerR1
					- outerR1
					* Math.cos((2 * Math.PI)
							* (i + (endAngelRPlayer - startAngelRPlayer - 4)) * degreeBrick
							/ 360);
			site2outerIncreLineYArray[j] = (int) (outerY1 + site2outerIncreLineY);
			site2outerIncreLineYArray1[j] = (int) (outerY1 + 2 * outerR1 - site2outerIncreLineY);
			siteinnerIncreLineX = innerR
					* Math.sin((2 * Math.PI) * i * degreeBrick / 360);
			siteinnerIncreLineXArray[j] = (int) (centerX + siteinnerIncreLineX);
			siteinnerIncreLineXArray1[j] = (int) (centerX - siteinnerIncreLineX);
			site2innerIncreLineX = innerR
					* Math.sin((2 * Math.PI)
							* (i + (endAngelRPlayer - startAngelRPlayer - 4)) * degreeBrick
							/ 360);
			site2innerIncreLineXArray[j] = (int) (centerX + site2innerIncreLineX);
			site2innerIncreLineXArray1[j] = (int) (centerX - site2innerIncreLineX);
			siteinnerIncreLineY = innerR - innerR
					* Math.cos((2 * Math.PI) * i * degreeBrick / 360);
			siteinnerIncreLineYArray[j] = (int) (outerY + numTrack1 * lengthBrick + siteinnerIncreLineY);
			siteinnerIncreLineYArray1[j] = (int) (outerY1 + 2 * outerR1
					- (numTrack1 - numTrack) * lengthBrick - siteinnerIncreLineY);
			site2innerIncreLineY = innerR
					- innerR
					* Math.cos((2 * Math.PI)
							* (i + (endAngelRPlayer - startAngelRPlayer - 4)) * degreeBrick
							/ 360);
			site2innerIncreLineYArray[j] = (int) (outerY + numTrack1 * lengthBrick + site2innerIncreLineY);
			site2innerIncreLineYArray1[j] = (int) (outerY1 + 2 * outerR1
					- (numTrack1 - numTrack) * lengthBrick - site2innerIncreLineY);
		}

		for (int i = 0; i <= numTrack1; i++) { // 繪製同心圓
			ovalCordX[i] = outerX + lengthBrick * i;
			ovalCordY[i] = outerY + lengthBrick * i;
			ovalCordL[i] = 2 * outerR - 2 * lengthBrick * i;
			ovalCordW[i] = 2 * outerR - 2 * lengthBrick * i;
		}
	}

	static DEMOHint3_P1_Speed_Unnumbered frame;

	public DEMOHint3_P1_Speed_Unnumbered() {
		setTitle("Hint3_P1_Speed_Unnumbered");
		setExtendedState(MAXIMIZED_BOTH);
		tetris = new Tetris();
		tetris.setBackground(colorJPanel); // JPanel背景色。
		getContentPane().add(tetris);// 將JPanel加入JFrame之中。

	}

	static Tetris tetris; // 為了在main中,讓JPanel能接收鍵盤事件而設的!

	static JTextArea txtField;

	static JPanel jplNext;

	public static void main(String[] args) {
		frame = new DEMOHint3_P1_Speed_Unnumbered();

		frame.setLayout(new BorderLayout());
		frame.add(tetris, BorderLayout.CENTER);

		// String msg = "TigerTigerTiger";
		int i = 1234;
		txtField = new JTextArea();
		// jplNext = new JPanel();
		// jplNext.setBackground(Color.red); // JPanel背景色。
		txtField.setFont(new Font("SanSerif", Font.PLAIN, 30));
		frame.add(txtField, BorderLayout.EAST);
		// frame.add(jplNext, BorderLayout.NORTH);

		// frame.add(new TextArea(msg,5,20), BorderLayout.WEST);
		// frame.add(new TextArea(msg,5,20), BorderLayout.SOUTH);

		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		frame.widthFrame = frame.getSize().width;
		frame.heightFrame = frame.getSize().height;
		frame.setSchelton();
		frame.goToPlay();
	}

	void gameOver() {
		Graphics2D g2d = (Graphics2D) this.tetris.getGraphics();
		Font fo = new Font("Serif", Font.PLAIN, 500);
		this.tetris.setFont(fo);
		for (int i = 0; i <= 100000; i++)
			;
		for (int i = 0; i <= 1000; i = i + 100)
			for (int j = 0; j <= 700; j = j + 20)
				g2d.drawString("GAME OVER", i, j);
	}

	int rotateChangeInterval = 0;

	void setNewBrick() {
		// 設定旋轉方向
		++rotateChangeInterval;
		if (rotateChangeInterval >= 3) { // 是否到達改變旋轉方向週期.
			rotateChangeInterval = 0;
			rotateState = rotateClockwise; // 紀錄之前旋轉方向.
			int temp1 = (int) (100 * Math.random());
			if (temp1 <= 50)
				rotateClockwise = true;
			else
				rotateClockwise = false;
			if (rotateState != rotateClockwise) // 紀錄旋轉方向是否有改變.
				rotateSpeedZero = true;
		}
		// 遞移減速方塊布林變數.
		isSpeedDownBrick = nextIsSpeedDownBrick;
		nextIsSpeedDownBrick = next2IsSpeedDownBrick;
		next2IsSpeedDownBrick = next3IsSpeedDownBrick;
		// 亂數取得方塊布林變數.
		int temp = (int) (100 * Math.random());
		if (temp <= 30)
			next3IsSpeedDownBrick = true;
		else
			next3IsSpeedDownBrick = false;

		// 遞移方塊型態.
		currentBrickType = nextCurrentBrickType;
		nextCurrentBrickType = next2CurrentBrickType;
		next2CurrentBrickType = next3CurrentBrickType;
		// 亂數取得方塊型態.
		next3CurrentBrickType = (int) (bricksType.length * Math.random());

		currentBrickSubType = 0;

		currentBrickRotateType = 0;

		increAngel = 0;
		increRadius = 0;
		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;
		}
		setBrickNotInput = false;
	}

	void setNewBrickL() {
		// 遞移減速方塊布林變數.
		isSpeedDownBrickL = nextIsSpeedDownBrickL;
		nextIsSpeedDownBrickL = next2IsSpeedDownBrickL;
		next2IsSpeedDownBrickL = next3IsSpeedDownBrickL;
		// 亂數取得方塊布林變數.
		int temp = (int) (100 * Math.random());
		if (temp <= 30)
			next3IsSpeedDownBrickL = true;
		else
			next3IsSpeedDownBrickL = false;

		// 遞移方塊型態.
		currentBrickTypeL = nextCurrentBrickTypeL;
		nextCurrentBrickTypeL = next2CurrentBrickTypeL;
		next2CurrentBrickTypeL = next3CurrentBrickTypeL;
		// 亂數取得方塊型態.
		next3CurrentBrickTypeL = (int) (bricksType.length * Math.random());

		currentBrickSubTypeL = 0;

		currentBrickRotateTypeL = 0;

		// currentBrickTypeL = (int) (bricksType.length * Math.random());
		currentBrickSubTypeL = 0;
		currentBrickRotateTypeL = 0;

		increAngelL = 0;
		increRadiusL = 0;
		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;
		}
		setBrickNotInputL = false;
	}

	boolean newBrickOK() {
		for (int i = startAngelRPlayer + newBrickIncre; i <= startAngelRPlayer
				+ newBrickIncre + 2; i++) {
			if (mapGame[i][currentBrickRadius] == -10) {
				return false; // 不可以起始一個新的方塊
			}
		}
		return true; // 可以起始一個新的方塊
	}

	boolean newBrickOKL() {
		for (int i = startAngelLPlayer + newBrickIncreL; i <= startAngelLPlayer
				+ newBrickIncreL + 2; i++) {
			if (mapGameL[i][currentBrickRadiusL] == -10) {
				return false; // 不可以起始一個新的方塊
			}
		}
		return true; // 可以起始一個新的方塊
	}

	void goToPlay() {
		this.tetris.requestFocus();// 讓JPanel接受鍵盤輸入

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

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

		temp = (int) (100 * Math.random());
		if (temp <= 30)
			next2IsSpeedDownBrick = true;

⌨️ 快捷键说明

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