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

📄 demohint3_p1_speed_unnumbered.java

📁 由于JAVA与平台无关的优点,现在用JAVA编写的小游戏已经非常普遍,相信对这款旋转俄罗斯方块会让大家耳目一新
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
//修改degreeBrick(要可以整除360), 可以調整方塊大小.
//修改numTrack, 可以調整軌道數目..
//以綠色方塊消除一列, 可以減速, 對玩家有利.
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

//2007W1084U9L6FBDTG25
public class DEMOHint3_P1_Speed_Unnumbered extends JFrame {

	Graphics2D g2D;

	int widthFrame, heightFrame; // 以JFrame.getSize()取得的,用以設定中心點!

	boolean gameStart = false, brickToSite = false, brickInSite = false,
			siteBrickOut = false, brickToSiteL = false, brickInSiteL = false,
			siteBrickOutL = false, freeze, newBrickIncreFlag, threeBlock, freezeL,
			newBrickIncreFlagL, threeBlockL, overR = false, overL = false,
			rotateSpeedZero, rotateState = false, rotateClockwise = false,
			nowRPlayer = true, setBrickNotInput = false, setBrickNotInputL = false,
			RPlayerChangLPlayer = false, LPlayerChangRPlayer = false,
			RBrickCanNotChange = false, LBrickCanNotChange = false;

	Boolean testCentrifugal = false, testCentrifugalL = false;// for centrifugal

	int centrifugalValue = 3;

	int zeroTimes = 0, tempRotate;

	int siteBrickType, siteBrickSubType, siteBrickTypeL, siteBrickSubTypeL;

	int rotateAngel, rotateIndex, rotateAngelL, rotateIndexL, fallingBrickL,
			brickFallingNumber = 0;

	int numDeleted, newBrickIncre, numDeletedL, newBrickIncreL;

	int freezeTime = 2000, fallingSuspendTime = 500, newBrickTime = 200,
			testTime = 100;

	int outerX = 10, outerY = 30, outerR = 300, lengthBrick = 19,
			degreeBrick = 5, numTrack = 10, numTrack1 = 14,
			numLine = (360 / (2 * degreeBrick)) - 1, innerR = outerR - numTrack1
					* lengthBrick, centerX = outerX + outerR, centerY = outerY + outerR,
			length = lengthBrick * numTrack1;// length好像沒用到

	final int cordRadiusMax = numTrack - 1,
			cordAngelMax = (360 / degreeBrick) - 1,
			numAngelMax = (360 / degreeBrick);

	// 設定遊戲區域的範圍.
	int startAngelRPlayer = 8,
			endAngelRPlayer = (int) ((cordAngelMax + 1) / 2 - startAngelRPlayer),
			startAngelLPlayer = 8, // ****
			endAngelLPlayer = (int) ((cordAngelMax + 1) / 2 - startAngelLPlayer);

	int mapGame[][] = new int[numAngelMax][numTrack]; // 0(沒有方塊)__

	int mapGameL[][] = new int[numAngelMax][numTrack];// **** -10(有方塊)__-20(要消除方塊)

	boolean clockwise = true;// clockwise

	int bricksType[][][][] = {
			{ { { 0, 0 }, { 0, -1 }, { -1, -1 }, { 0, 1 } },
					{ { 0, 0 }, { -1, 0 }, { 1, 0 }, { 1, -1 } },
					{ { 0, 0 }, { 0, -1 }, { 0, 1 }, { 1, 1 } },
					{ { 0, 0 }, { -1, 0 }, { -1, 1 }, { 1, 0 } } },
			{ { { 0, 0 }, { 0, -1 }, { -1, 1 }, { 0, 1 } },
					{ { 0, 0 }, { -1, -1 }, { -1, 0 }, { 1, 0 } },
					{ { 0, 0 }, { 0, -1 }, { 0, 1 }, { 1, -1 } },
					{ { 0, 0 }, { -1, 0 }, { 1, 1 }, { 1, 0 } } },
			{ { { 0, 0 }, { 0, -1 }, { -1, 0 }, { 0, 1 } },
					{ { 0, 0 }, { 0, -1 }, { -1, 0 }, { 1, 0 } },
					{ { 0, 0 }, { 0, -1 }, { 0, 1 }, { 1, 0 } },
					{ { 0, 0 }, { -1, 0 }, { 0, 1 }, { 1, 0 } } },
			{ { { 0, 0 }, { 0, -1 }, { -1, 0 }, { -1, 1 } },
					{ { 0, 0 }, { 0, -1 }, { -1, -1 }, { 1, 0 } } },
			{ { { 0, 0 }, { -1, -1 }, { -1, 0 }, { 0, 1 } },
					{ { 0, 0 }, { 0, -1 }, { -1, 0 }, { 1, -1 } } },
			{ { { 0, 0 }, { -1, 0 }, { 1, 0 }, { 2, 0 } },
					{ { 0, 0 }, { 0, -1 }, { 0, -2 }, { 0, 1 } } },
			{ { { 0, 0 }, { 0, -1 }, { -1, -1 }, { -1, 0 } } } };

	int bricksFallingType[][][][] = {
			{ { { 1, 1 }, { 1, 0 }, { 1, -1 } }, { { 2, 0 }, { 2, -1 } },
					{ { 2, 1 }, { 1, 0 }, { 1, -1 } }, { { 2, 0 }, { 0, 1 } } },
			{ { { 1, 1 }, { 1, 0 }, { 1, -1 } }, { { 2, 0 }, { 0, -1 } },
					{ { 2, -1 }, { 1, 1 }, { 1, 0 } }, { { 2, 1 }, { 2, 0 } } },
			{ { { 1, 1 }, { 1, 0 }, { 1, -1 } }, { { 2, 0 }, { 1, -1 } },
					{ { 2, 0 }, { 1, -1 }, { 1, 1 } }, { { 2, 0 }, { 1, 1 } } },
			{ { { 1, 0 }, { 0, 1 }, { 1, -1 } }, { { 2, 0 }, { 1, -1 } } },
			{ { { 1, 1 }, { 1, 0 }, { 0, -1 } }, { { 2, -1 }, { 1, 0 } } },
			{ { { 3, 0 } }, { { 1, 1 }, { 1, 0 }, { 1, -1 }, { 1, -2 } } },
			{ { { 1, 0 }, { 1, -1 } } } };

	int bricksLeftType[][][][] = {
			{ { { 0, 2 }, { -1, 0 } }, { { -1, 1 }, { 0, 1 }, { 1, 1 } },
					{ { 0, 2 }, { 1, 2 } }, { { -1, 2 }, { 0, 1 }, { 1, 1 } } },
			{ { { -1, 2 }, { 0, 2 } }, { { -1, 1 }, { 0, 1 }, { 1, 1 } },
					{ { 0, 2 }, { 1, 0 } }, { { -1, 1 }, { 0, 1 }, { 1, 2 } } },
			{ { { 0, 2 }, { -1, 1 } }, { { -1, 1 }, { 0, 1 }, { 1, 1 } },
					{ { 0, 2 }, { 1, 1 } }, { { 0, 2 }, { -1, 1 }, { 1, 1 } } },
			{ { { -1, 2 }, { 0, 1 } }, { { 1, 1 }, { 0, 1 }, { -1, 0 } } },
			{ { { 0, 2 }, { -1, 1 } }, { { -1, 1 }, { 0, 1 } } },
			{ { { -1, 1 }, { 0, 1 }, { 1, 1 }, { 2, 1 } }, { { 0, 2 } } },
			{ { { -1, 1 }, { 0, 1 } } } };

	int bricksRightType[][][][] = {
			{ { { -1, -2 }, { 0, -2 } }, { { 1, -2 }, { -1, -1 }, { 0, -1 } },
					{ { 0, -2 }, { 1, 0 } }, { { -1, -1 }, { 0, -1 }, { 1, -1 } } },
			{ { { 0, -2 }, { -1, 0 } }, { { -1, -2 }, { 0, -1 }, { 1, -1 } },
					{ { 0, -2 }, { 1, -2 } }, { { -1, -1 }, { 0, -1 }, { 1, -1 } } },
			{ { { 0, -2 }, { -1, -1 } }, { { 0, -2 }, { -1, -1 }, { 1, -1 } },
					{ { 0, -2 }, { 1, -1 } }, { { -1, -1 }, { 0, -1 }, { 1, -1 } } },
			{ { { 0, -2 }, { -1, -1 } }, { { -1, -2 }, { 0, -2 }, { 1, -1 } } },
			{ { { -1, -2 }, { 0, -1 } }, { { 0, -2 }, { 1, -2 }, { -1, -1 } } },
			{ { { -1, -1 }, { 0, -1 }, { 1, -1 }, { 2, -1 } }, { { 0, -3 } } },
			{ { { -1, -2 }, { 0, -2 } } } };

	boolean fallingOver, fallingOverL;// ****

	int currentBrickAngel, currentBrickRadius, currentBrickAngelL,
			currentBrickRadiusL, testEndAngel;// ****

	Color colorJPanel = Color.white, colorTrack = Color.blue,
			nextBrickColor = Color.green;

	int currentBrickType = (int) (bricksType.length * Math.random()),
			currentBrickSubType, currentBrickRotateType,

			nextCurrentBrickType = (int) (bricksType.length * Math.random()),
			nextCurrentBrickSubType = 0,
			nextCurrentBrickTypeL = (int) (bricksType.length * Math.random()),
			nextCurrentBrickSubTypeL = 0,

			next2CurrentBrickType = (int) (bricksType.length * Math.random()),
			next2CurrentBrickSubType = 0,
			next2CurrentBrickTypeL = (int) (bricksType.length * Math.random()),
			next2CurrentBrickSubTypeL = 0,

			next3CurrentBrickType = (int) (bricksType.length * Math.random()),
			next3CurrentBrickSubType = 0,
			next3CurrentBrickTypeL = (int) (bricksType.length * Math.random()),
			next3CurrentBrickSubTypeL = 0,

			increAngel, increRadius, currentBrickTypeL, currentBrickSubTypeL,
			currentBrickRotateTypeL,// ****
			increAngelL, increRadiusL;// ****

	boolean isSpeedDownBrick = false, isSpeedDownBrickL = false,
			nextIsSpeedDownBrick = false, nextIsSpeedDownBrickL = false,
			next2IsSpeedDownBrick = false, next2IsSpeedDownBrickL = false,
			next3IsSpeedDownBrick = false, next3IsSpeedDownBrickL = false;

	int outerIncreLineXArray[] = new int[numLine + 1],
			outerIncreLineXArray1[] = new int[numLine + 1],
			outerIncreLineYArray[] = new int[numLine + 1],
			outerIncreLineYArray1[] = new int[numLine + 1],
			innerIncreLineXArray[] = new int[numLine + 1],
			innerIncreLineXArray1[] = new int[numLine + 1],
			innerIncreLineYArray[] = new int[numLine + 1],
			innerIncreLineYArray1[] = new int[numLine + 1],
			ovalCordX[] = new int[numTrack1 + 1],
			ovalCordY[] = new int[numTrack1 + 1],
			ovalCordL[] = new int[numTrack1 + 1],
			ovalCordW[] = new int[numTrack1 + 1];

	int siteouterIncreLineXArray[] = new int[5],
			siteouterIncreLineXArray1[] = new int[5],
			siteouterIncreLineYArray[] = new int[5],
			siteouterIncreLineYArray1[] = new int[5],
			siteinnerIncreLineXArray[] = new int[5],
			siteinnerIncreLineXArray1[] = new int[5],
			siteinnerIncreLineYArray[] = new int[5],
			siteinnerIncreLineYArray1[] = new int[5], siteovalCordX[] = new int[5],
			siteovalCordY[] = new int[5], siteovalCordL[] = new int[5],
			siteovalCordW[] = new int[5];

	int site2outerIncreLineXArray[] = new int[5],
			site2outerIncreLineXArray1[] = new int[5],
			site2outerIncreLineYArray[] = new int[5],
			site2outerIncreLineYArray1[] = new int[5],
			site2innerIncreLineXArray[] = new int[5],
			site2innerIncreLineXArray1[] = new int[5],
			site2innerIncreLineYArray[] = new int[5],
			site2innerIncreLineYArray1[] = new int[5], site2ovalCordX[] = new int[5],
			site2ovalCordY[] = new int[5], site2ovalCordL[] = new int[5],
			site2ovalCordW[] = new int[5];

	
	int XDecre[] = new int[numLine*2+2], YDecre[] = new int[numLine*2+2];
	int XArray[] = new int[numLine*2+2] , YArray[] = new int[numLine*2+2]; 
	double outerIncreLineXX, outerIncreLineYY;
	int XDecre1[][] = new int[numLine*2+2][4], YDecre1[][] = new int[numLine*2+2][4];
	int XArray1[] = new int[numLine*2+2] , YArray1[] = new int[numLine*2+2]; 
	double outerIncreLineXX1, outerIncreLineYY1;
	int XDecre2[][] = new int[numLine*2+2][2], YDecre2[][] = new int[numLine*2+2][2];
	int XArray2[] = new int[numLine*2+2] , YArray2[] = new int[numLine*2+2]; 
	double outerIncreLineXX2, outerIncreLineYY2;
	int XDecre3[][] = new int[numLine*2+2][3], YDecre3[][] = new int[numLine*2+2][3];
	int XArray3[] = new int[numLine*2+2] , YArray3[] = new int[numLine*2+2]; 
	double outerIncreLineXX3, outerIncreLineYY3;

	void setSchelton() {
		for (int i = 0; i <= numLine*2+1; i++) {
//		if(i != 36) continue;
//	for (int i = 0; i <= 0; i++) {				
		int tempR;
		if(i >= 0 && i <= 9)	tempR = outerR - (int)(lengthBrick/1);				
		else if(i >= 10 && i <= 13)	tempR = outerR - (int)(lengthBrick/1.1);
		else if(i >= 14 && i <= 16)	tempR = outerR - (int)(lengthBrick/1.2);
		else if(i >= 17 && i <= 18)	tempR = outerR - (int)(lengthBrick/1.5);
		else if(i >= 25 && i <= 27)	tempR = outerR - (int)(lengthBrick/2);
		else if(i >= 28 && i <= 30)	tempR = outerR - (int)(lengthBrick/3);				
		else if(i >= 31 && i <= 57)	tempR = outerR - (int)(lengthBrick/4);
		else if(i >= 58 && i <= 63) tempR = outerR - (int)(lengthBrick/2);
		else if(i >= 70 && i <= 71) tempR = outerR - (int)(lengthBrick/1.2);
		else tempR = outerR - (int)(lengthBrick/1.5);
		
		outerIncreLineXX = tempR * Math.cos((2 * Math.PI) * i * degreeBrick / 360);
		int Xdecre = (int)(lengthBrick * Math.cos((2 * Math.PI) * i * degreeBrick / 360));
		
		outerIncreLineYY = tempR	* Math.sin((2 * Math.PI) * i * degreeBrick / 360);
		int Ydecre = (int)(lengthBrick * Math.sin((2 * Math.PI) * i * degreeBrick / 360));				
		
		XArray[i] = (int) (centerX + outerIncreLineXX);
		YArray[i] = (int) (centerY - outerIncreLineYY);
	}
		for (int i = 0; i <= numLine*2+1; i++) {
//		if(i != 36) continue;
//	for (int i = 0; i <= 0; i++) {				
		int tempR;
		if(i >= 0 && i <= 5)	tempR = outerR - (int)(lengthBrick/1.5) - lengthBrick;
		else if(i >= 6 && i <= 9)	tempR = outerR - (int)(lengthBrick/1.3) - lengthBrick;				
		else if(i >= 10 && i <= 13)	tempR = outerR - (int)(lengthBrick/1.3) - lengthBrick;
		else if(i >= 14 && i <= 16)	tempR = outerR - (int)(lengthBrick/1.2) - lengthBrick;
		else if(i >= 17 && i <= 22)	tempR = outerR - (int)(lengthBrick/1.3) - lengthBrick;
		else if(i >= 25 && i <= 29)	tempR = outerR - (int)(lengthBrick/1.5) - lengthBrick;
		else if(i >= 30 && i <= 33)	tempR = outerR - (int)(lengthBrick/2) - lengthBrick;
		else if(i >= 34 && i <= 37)	tempR = outerR - (int)(lengthBrick/2.5) - lengthBrick;
//		else if(i >= 28 && i <= 30)	tempR = outerR - (int)(lengthBrick/3) - lengthBrick;				
		else if(i >= 38 && i <= 41)	tempR = outerR - (int)(lengthBrick/3.5) - lengthBrick;
		else if(i >= 42 && i <= 57)	tempR = outerR - (int)(lengthBrick/4) - lengthBrick;
		else if(i >= 58 && i <= 63) tempR = outerR - (int)(lengthBrick/3) - lengthBrick;
		else if(i >= 64 && i <= 65) tempR = outerR - (int)(lengthBrick/2.5) - lengthBrick;
		else if(i >= 66 && i <= 71) tempR = outerR - (int)(lengthBrick/2) - lengthBrick;
		else tempR = outerR - (int)(lengthBrick/1.5) - lengthBrick;
		
		outerIncreLineXX1 = tempR * Math.cos((2 * Math.PI) * i * degreeBrick / 360);
		int Xdecre1 = (int)(lengthBrick * Math.cos((2 * Math.PI) * i * degreeBrick / 360));
		
		outerIncreLineYY1 = tempR	* Math.sin((2 * Math.PI) * i * degreeBrick / 360);
		int Ydecre1 = (int)(lengthBrick * Math.sin((2 * Math.PI) * i * degreeBrick / 360));				
		
		XArray1[i] = (int) (centerX + outerIncreLineXX1);
		YArray1[i] = (int) (centerY - outerIncreLineYY1);
		
		for(int j = 0; j <= 3; ++j) {
			XDecre1[i][j] = XArray1[i] - j * Xdecre1;
			YDecre1[i][j] = YArray1[i] + j * Ydecre1;
		}
	}
		
		for (int i = 0; i <= numLine*2+1; i++) {
//			if(i != 36) continue;
//		for (int i = 0; i <= 0; i++) {				
			int tempR;
			if(i >= 0 && i <= 5)	tempR = outerR - (int)(lengthBrick/1.5) - 5 * lengthBrick;
			else if(i >= 6 && i <= 9)	tempR = outerR - (int)(lengthBrick/1.3) - 5 *  lengthBrick;				
			else if(i >= 10 && i <= 13)	tempR = outerR - (int)(lengthBrick/1.3) - 5 *  lengthBrick;
			else if(i >= 14 && i <= 16)	tempR = outerR - (int)(lengthBrick/1.2) - 5 *  lengthBrick;
			else if(i >= 17 && i <= 22)	tempR = outerR - (int)(lengthBrick/1.3) - 5 *  lengthBrick;
			else if(i >= 25 && i <= 29)	tempR = outerR - (int)(lengthBrick/1.5) - 5 *  lengthBrick;
			else if(i >= 30 && i <= 33)	tempR = outerR - (int)(lengthBrick/2) - 5 *  lengthBrick;
			else if(i >= 34 && i <= 37)	tempR = outerR - (int)(lengthBrick/2.5) - 5 *  lengthBrick;
//			else if(i >= 28 && i <= 30)	tempR = outerR - (int)(lengthBrick/3) - lengthBrick;				
			else if(i >= 38 && i <= 41)	tempR = outerR - (int)(lengthBrick/3.5) - 5 *  lengthBrick;
			else if(i >= 42 && i <= 57)	tempR = outerR - (int)(lengthBrick/4) - 5 *  lengthBrick;
			else if(i >= 58 && i <= 63) tempR = outerR - (int)(lengthBrick/3) - 5 *  lengthBrick;
			else if(i >= 64 && i <= 65) tempR = outerR - (int)(lengthBrick/2.5) - 5 *  lengthBrick;
			else if(i >= 66 && i <= 71) tempR = outerR - (int)(lengthBrick/2) - 5 *  lengthBrick;
			else tempR = outerR - (int)(lengthBrick/1.5) -  5 * lengthBrick;
			
			outerIncreLineXX2 = tempR * Math.cos((2 * Math.PI) * i * degreeBrick / 360);
			int Xdecre2 = (int)(lengthBrick * Math.cos((2 * Math.PI) * i * degreeBrick / 360));
			
			outerIncreLineYY2 = tempR	* Math.sin((2 * Math.PI) * i * degreeBrick / 360);
			int Ydecre2 = (int)(lengthBrick * Math.sin((2 * Math.PI) * i * degreeBrick / 360));				
			
			XArray2[i] = (int) (centerX + outerIncreLineXX2);
			YArray2[i] = (int) (centerY - outerIncreLineYY2);

			for(int j = 0; j <= 1; ++j) {
				XDecre2[i][j] = XArray2[i] - j * Xdecre2;
				YDecre2[i][j] = YArray2[i] + j * Ydecre2;
			}
		}		
		for (int i = 0; i <= numLine*2+1; i++) {
//		if(i != 36) continue;
//	for (int i = 0; i <= 0; i++) {				
		int tempR;
		if(i >= 0 && i <= 5)	tempR = outerR - (int)(lengthBrick/1.5) - 7 * lengthBrick;
		else if(i >= 6 && i <= 9)	tempR = outerR - (int)(lengthBrick/1.3) - 7 *  lengthBrick;				
		else if(i >= 10 && i <= 13)	tempR = outerR - (int)(lengthBrick/1.3) - 7 *  lengthBrick;
		else if(i >= 14 && i <= 16)	tempR = outerR - (int)(lengthBrick/1.2) - 7 *  lengthBrick;
		else if(i >= 17 && i <= 22)	tempR = outerR - (int)(lengthBrick/1.3) - 7 *  lengthBrick;
		else if(i >= 25 && i <= 29)	tempR = outerR - (int)(lengthBrick/1.5) - 7 *  lengthBrick;
		else if(i >= 30 && i <= 33)	tempR = outerR - (int)(lengthBrick/2) - 7 *  lengthBrick;
		else if(i >= 34 && i <= 37)	tempR = outerR - (int)(lengthBrick/2.5) - 7 *  lengthBrick;

⌨️ 快捷键说明

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