📄 mainframe.java
字号:
//显示方块方法
public void show(){
for(int i=0;i<4;i++)
{
playBlocks[rows[i]][cols[i]].setBackground(color);
playBlocks[rows[i]][cols[i]].setVisible(true);
}
}
//方块下落到底部
public void downToBottom(){
while(!isToBottom)
downOneLine();
}
//方块下落一行
public void downOneLine(){
//循环处理各个小方块
for(int i=0;i<4;i++)
{
//如果方块达到底部,则设置底部标志
if(rows[i]>=19)
{
isToBottom=true;
break;
}
//如果方块下面有其他方块,则设置底部标志
if(flagBlocks[rows[i]+1][cols[i]]!=0)
{
isToBottom=true;
//如果到底底部并且上部无法在放置其他方块,则设置顶部标志
if(rows[i]<=2)
{
isToTop = true;
}
break;
}
}
//如果到顶部,则游戏结束
if(isToTop)
{
JOptionPane.showMessageDialog(jPanel1, "游戏结束!!!");
return;
}
//如果到达底部
if(isToBottom)
{
//更新游戏区方块标志
for (int j = 0; j < 4; j++)
flagBlocks[rows[j]][cols[j]] = 1;
//积分
score+=5;
//消除所有能够消除的行
for(int i=0;i<20;i++)
{
boolean isClear=true;
//判断能够消除当前行
for(int j=0;j<10;j++)
{
if(flagBlocks[i][j]==0)
{
isClear = false;
break;
}
}
//消除当前行,并更新记分
if(isClear)
{
for(int j=i;j>0;j--)
for(int k=0;k<10;k++)
{
flagBlocks[j][k] = flagBlocks[j - 1][k];
playBlocks[j][k].setBackground(playBlocks[j-1][k].getBackground());
if(flagBlocks[j][k]!=0)
playBlocks[j][k].setVisible(true);
else
playBlocks[j][k].setVisible(false);
}
score+=20;
totalLines++;
currentLines++;
if(currentLines>=20&&level<=10)
{
currentLines=0;
level++;
speed-=50;
jLabel4.setText(Integer.toString(level));
}
}
}
//更新记分显示
jLabel2.setText(Long.toString(score));
jLabel6.setText(Integer.toString(totalLines));
return;
}
//清除当前方块
clear();
//下移方块
for(int i=0;i<4;i++)
{
rows[i]++;
}
//重新显示方块
show();
}
//方块左移
public void left(){
for(int i=0;i<4;i++)
{//如果方块已经达到左边界,则返回
if(cols[i]<=0)
return;
//如果方块左边有其他方块,则返回
if(flagBlocks[rows[i]][cols[i]-1]!=0)
return;
}
//清空方块显示
clear();
//方块左移一列
for(int i=0;i<4;i++)
{
cols[i]--;
}
//重新显示方块
show();
}
//方块右移
public void right(){
for(int i=0;i<4;i++)
{
if(cols[i]>=9)
return;
if(flagBlocks[rows[i]][cols[i]+1]!=0)
return;
}
clear();
for(int i=0;i<4;i++)
{
cols[i]++;
}
show();
}
}
//类型1方块
class BlockOne extends Block{
public BlockOne() {
rows[0] = 1;
rows[1] = 1;
rows[2] = 2;
rows[3] = 2;
cols[0] = 4;
cols[1] = 5;
cols[2] = 5;
cols[3] = 6;
color = Color.GREEN;
}
public void turn() {
//根据当前方块状态,设置翻转后的状态
switch(status){
case 1:
//清空方块
clear();
//设置方块位置
rows[0]--;
rows[2]--;
cols[0]++;
cols[2]--;
cols[3]-=2;
//更新状态
status=2;
//重新显示方块
show();
break;
case 2:
if(cols[0]>=9)
break;
if(flagBlocks[rows[0]][cols[0]+1]!=0)
break;
clear();
rows[0]++;
rows[2]++;
cols[0]--;
cols[2]++;
cols[3]+=2;
status=1;
show();
break;
}
}
}
//类型2方块
class BlockTwo extends Block{
public BlockTwo() {
rows[0] = 1;
rows[1] = 1;
rows[2] = 2;
rows[3] = 2;
cols[0] = 6;
cols[1] = 5;
cols[2] = 5;
cols[3] = 4;
color = Color.blue;
}
public void turn() {
switch(status){
case 1:
clear();
rows[0]--;
rows[2]--;
cols[0]--;
cols[2]++;
cols[3]+=2;
status=2;
show();
break;
case 2:
if(cols[0]<=0)
break;
if(flagBlocks[rows[0]][cols[0]-1]!=0)
break;
clear();
rows[0]++;
rows[2]++;
cols[0]++;
cols[2]--;
cols[3]-=2;
status=1;
show();
break;
}
}
}
//类型3方块
class BlockThree extends Block{
public BlockThree() {
rows[0] = 1;
rows[1] = 1;
rows[2] = 2;
rows[3] = 2;
cols[0] = 4;
cols[1] = 5;
cols[2] = 4;
cols[3] = 5;
color = Color.cyan;
}
//类型4方块
public void turn() {}
}
class BlockFour extends Block{
public BlockFour() {
rows[0] = 1;
rows[1] = 1;
rows[2] = 1;
rows[3] = 2;
cols[0] = 4;
cols[1] = 5;
cols[2] = 6;
cols[3] = 6;
color = Color.yellow;
}
public void turn() {
switch(status){
case 1:
clear();
rows[0]++;
rows[2]--;
rows[3]-=2;
cols[0]++;
cols[2]--;
status=2;
show();
break;
case 2:
if(cols[0]<=0)
break;
if(flagBlocks[rows[0]][cols[0]-1]!=0)
break;
clear();
rows[0]--;
rows[2]++;
cols[0]++;
cols[2]--;
cols[3]-=2;
status=3;
show();
break;
case 3:
clear();
rows[0]--;
rows[2]++;
rows[3]+=2;
cols[0]--;
cols[2]++;
status=4;
show();
break;
case 4:
if(cols[0]>=9)
break;
if(flagBlocks[rows[0]][cols[0]+1]!=0)
break;
clear();
rows[0]++;
rows[2]--;
cols[0]--;
cols[2]++;
cols[3]+=2;
status=1;
show();
break;
}
}
}
//类型5方块
class BlockFive extends Block{
public BlockFive() {
rows[0] = 1;
rows[1] = 1;
rows[2] = 1;
rows[3] = 2;
cols[0] = 6;
cols[1] = 5;
cols[2] = 4;
cols[3] = 4;
color = Color.magenta;
}
public void turn() {
switch(status){
case 1:
clear();
rows[0]--;
rows[2]++;
cols[0]--;
cols[2]++;
cols[3]+=2;
status=2;
show();
break;
case 2:
if(cols[0]<=0)
break;
if(flagBlocks[rows[0]][cols[0]-1]!=0)
break;
clear();
rows[0]++;
rows[2]--;
rows[3]-=2;
cols[0]--;
cols[2]++;
status=3;
show();
break;
case 3:
clear();
rows[0]++;
rows[2]--;
cols[0]++;
cols[2]--;
cols[3]-=2;
status=4;
show();
break;
case 4:
if(cols[0]>=9)
break;
if(flagBlocks[rows[0]][cols[0]+1]!=0)
break;
clear();
rows[0]--;
rows[2]++;
rows[3]+=2;
cols[0]++;
cols[2]--;
status=1;
show();
break;
}
}
}
//类型6方块
class BlockSix extends Block{
public BlockSix() {
rows[0] = 1;
rows[1] = 1;
rows[2] = 1;
rows[3] = 2;
cols[0] = 4;
cols[1] = 5;
cols[2] = 6;
cols[3] = 5;
color = Color.darkGray;
}
public void turn() {
switch(status){
case 1:
clear();
rows[0]++;
rows[2]--;
rows[3]--;
cols[0]++;
cols[2]--;
cols[3]++;
status=2;
show();
break;
case 2:
if(cols[0]<=0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -