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