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