📄 demohint3_p1_speed_unnumbered.java
字号:
//修改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 + -