?? gridin.java
字號(hào):
//內(nèi)部邏輯層GridIn類
public class GridIn{
int[] grid_oldx;
int[] grid_oldy;//記錄方塊對(duì)象的上一次坐標(biāo)
int[] grid_x;
int[] grid_y;//當(dāng)前方塊對(duì)象坐標(biāo)值,取相對(duì)坐標(biāo)
int grid_type;//方塊類型7種:1-T,2-Z,3-Z',4-L,5-L',6-I,7-O
int grid_angle;//方塊旋轉(zhuǎn)角度類型4種:1-0度,2-90度,3-180度,4-270度
boolean can=true;//是否可操作,若是方塊對(duì)象落到底部,則不可操作
//******************************************************************
public GridIn(){
grid_oldx=new int[4];
grid_oldy=new int[4];
grid_x=new int[4];
grid_y=new int[4];
grid_type=1;
grid_angle=1;
}
//*************************************************************************
public boolean rotate(boolean[][] position){
int init_rotatex[][][]={
{{1,0,1,-1}, {1,0,-1,-1}, {-1,0,-1,1}, {-1,0,1,1}}, //1-T
{{1,0,1,0}, {1,0,-1,-2}, {0,1,0,1}, {-2,-1,0,1}}, //2-Z
{{2,1,0,-1}, {0,-1,0,-1}, {-1,0,1,2}, {-1,0,-1,0}}, //3-Z'
{{-1,0,1,0}, {1,0,-1,-2}, {1,0,-1,0}, {-1,0,1,2}}, //4-L
{{2,1,0,-1}, {0,-1,0,1}, {-2,-1,0,1}, {0,1,0,-1}}, //5-L'
{{-1,0,1,2}, {1,0,-1,-2}, {2,1,0,-1}, {-2,-1,0,1}}, //6-I
{{0,1,0,-1}, {1,0,-1,0}, {0,-1,0,1}, {-1,0,1,0}} //7-O
};
int init_rotatey[][][]={
{{1,0,-1,-1}, {0,1,0,2}, {-2,-1,0,0}, {1,0,1,-1}}, //1-T
{{1,0,-1,-2}, {0,1,0,1}, {-2,-1,0,1}, {1,0,1,0}}, //2-Z
{{0,-1,0,-1}, {-1,0,1,2}, {-1,0,-1,0}, {2,1,0,-1}}, //3-Z'
{{2,1,0,-1}, {0,-1,-2,-1}, {-1,0,1,2}, {-1,0,1,0}}, //4-L
{{0,-1,0,1}, {-2,-1,0,1}, {1,2,1,0}, {1,0,-1,-2}}, //5-L'
{{3,2,1,0}, {0,-1,-2,-3}, {0,1,2,3}, {-3,-2,-1,0}},//6-I
{{1,0,-1,0}, {0,-1,0,1}, {-1,0,1,0}, {0,1,0,-1}} //7-O
};
int maxx,maxy,minx;
int[] grid_tempx=new int[4];
int[] grid_tempy=new int[4];;//中間坐標(biāo)代理量
for(int i=0;i<4;i++){//初始化要旋轉(zhuǎn)以后的值
grid_tempx[i]=this.grid_x[i]+
init_rotatex[this.grid_type-1][this.grid_angle-1][i];
grid_tempy[i]=this.grid_y[i]+
init_rotatey[this.grid_type-1][this.grid_angle-1][i];
}
maxx=10;maxy=24;minx=1;
//如果旋轉(zhuǎn)后有格子的x坐標(biāo)小于1或大于10,則相應(yīng)右移或左移
for(int i=0;i<4;i++){
if(grid_tempx[i]>maxx){
maxx=grid_tempx[i];
}
}
for(int i=0;i<4;i++){
grid_tempx[i]=grid_tempx[i]-(maxx-10);
}
for(int i=0;i<4;i++){
if(grid_tempx[i]<minx){
minx=grid_tempx[i];
}
}
for(int i=0;i<4;i++){
grid_tempx[i]=grid_tempx[i]-(minx-1);
}
//如果旋轉(zhuǎn)后有格子坐標(biāo)大于20,則相應(yīng)上移
for(int i=0;i<4;i++){
if(grid_tempy[i]>maxy){
maxy=grid_tempy[i];
}
}
for(int i=0;i<4;i++){
grid_tempy[i]=grid_tempy[i]-(maxy-24);
}
for(int i=0;i<4;i++){//如果旋轉(zhuǎn)后有方塊與其他方塊位置沖突,則不予旋轉(zhuǎn)
if((position[grid_tempy[i]-1][grid_tempx[i]-1]==true)&&
((grid_tempx[i]==grid_x[0])&&(grid_tempy[i]==grid_y[0])||
(grid_tempx[i]==grid_x[1])&&(grid_tempy[i]==grid_y[1])||
(grid_tempx[i]==grid_x[2])&&(grid_tempy[i]==grid_y[2])||
(grid_tempx[i]==grid_x[3])&&(grid_tempy[i]==grid_y[3]))
==false){
return false;
}
}
//修改方塊參數(shù)
for(int i=0;i<4;i++){
grid_oldx[i]=grid_x[i];
grid_oldy[i]=grid_y[i];
grid_x[i]=grid_tempx[i];
grid_y[i]=grid_tempy[i];
}
grid_angle=grid_angle%4+1;
for(int i=0;i<4;i++){//方塊旋轉(zhuǎn)前的位置隱藏
if(grid_oldx[i]>=1&&grid_oldx[i]<=10&&
grid_oldy[i]>=1&&grid_oldy[i]<=24){
position[grid_oldy[i]-1][grid_oldx[i]-1]=false;
}
}
for(int i=0;i<4;i++){
if(grid_x[i]>=1&&grid_x[i]<=10&&
grid_y[i]>=1&&grid_y[i]<=24){
position[grid_y[i]-1][grid_x[i]-1]=true;
}
}
return true;
}//rotate()方法
//**********************************************************************
public boolean moveLeft(boolean[][] position){//方塊對(duì)象左移一格
int[] grid_tempx=new int[4];
int[] grid_tempy=new int[4];//左移后的代理值
for(int i=0;i<4;i++){
grid_tempx[i]=grid_x[i]-1;
grid_tempy[i]=grid_y[i];
}
for(int i=0;i<4;i++){//左移后若x坐標(biāo)小于1,則不予處理
if(grid_tempx[i]<1){
return false;
}
}
for(int i=0;i<4;i++){//如果左移后有方塊與其他方塊位置沖突,則不予旋轉(zhuǎn)
if((position[grid_tempy[i]-1][grid_tempx[i]-1]==true)&&
((grid_tempx[i]==grid_x[0])&&(grid_tempy[i]==grid_y[0])||
(grid_tempx[i]==grid_x[1])&&(grid_tempy[i]==grid_y[1])||
(grid_tempx[i]==grid_x[2])&&(grid_tempy[i]==grid_y[2])||
(grid_tempx[i]==grid_x[3])&&(grid_tempy[i]==grid_y[3]))
==false){
return false;
}
}
//修改方塊參數(shù)
for(int i=0;i<4;i++){
grid_oldx[i]=grid_x[i];
grid_oldy[i]=grid_y[i];
grid_x[i]=grid_tempx[i];
grid_y[i]=grid_tempy[i];
}
for(int i=0;i<4;i++){//方塊左移前的位置隱藏
if(grid_oldx[i]>=1&&grid_oldx[i]<=10&&
grid_oldy[i]>=1&&grid_oldy[i]<=24){
position[grid_oldy[i]-1][grid_oldx[i]-1]=false;
}
}
for(int i=0;i<4;i++){
if(grid_x[i]>=1&&grid_x[i]<=10&&
grid_y[i]>=1&&grid_y[i]<=24){
position[grid_y[i]-1][grid_x[i]-1]=true;
}
}
return true;
}//moveLeft()方法
//**********************************************************************
public boolean moveRight(boolean[][] position){//方塊對(duì)象右移一格
int[] grid_tempx=new int[4];
int[] grid_tempy=new int[4];//右移后的代理值
for(int i=0;i<4;i++){
grid_tempx[i]=grid_x[i]+1;
grid_tempy[i]=grid_y[i];
}
for(int i=0;i<4;i++){//右移后若x坐標(biāo)大于10,則不予處理
if(grid_tempx[i]>10){
return false;
}
}
for(int i=0;i<4;i++){//如果右移后有方塊與其他方塊位置沖突,則不予旋轉(zhuǎn)
if((position[grid_tempy[i]-1][grid_tempx[i]-1]==true)&&
((grid_tempx[i]==grid_x[0])&&(grid_tempy[i]==grid_y[0])||
(grid_tempx[i]==grid_x[1])&&(grid_tempy[i]==grid_y[1])||
(grid_tempx[i]==grid_x[2])&&(grid_tempy[i]==grid_y[2])||
(grid_tempx[i]==grid_x[3])&&(grid_tempy[i]==grid_y[3]))
==false){
return false;
}
}
//修改方塊參數(shù)
for(int i=0;i<4;i++){
grid_oldx[i]=grid_x[i];
grid_oldy[i]=grid_y[i];
grid_x[i]=grid_tempx[i];
grid_y[i]=grid_tempy[i];
}
for(int i=0;i<4;i++){//方塊右移前的位置隱藏
if(grid_oldx[i]>=1&&grid_oldx[i]<=10&&
grid_oldy[i]>=1&&grid_oldy[i]<=24){
position[grid_oldy[i]-1][grid_oldx[i]-1]=false;
}
}
for(int i=0;i<4;i++){
if(grid_x[i]>=1&&grid_x[i]<=10&&
grid_y[i]>=1&&grid_y[i]<=24){
position[grid_y[i]-1][grid_x[i]-1]=true;
}
}
return true;
}//moveLeft()方法
//*****************************************************************
public boolean moveDown(boolean[][] position){
int[] grid_tempx=new int[4];
int[] grid_tempy=new int[4];//下移后的代理值
for(int i=0;i<4;i++){
grid_tempx[i]=grid_x[i];
grid_tempy[i]=grid_y[i]+1;
}
for(int i=0;i<4;i++){//下移后若x坐標(biāo)小于1,則不予處理
if(grid_tempy[i]>24){
return false;
}
}
for(int i=0;i<4;i++){//如果下移后有方塊與其他方塊位置沖突,則不予旋轉(zhuǎn)
if((position[grid_tempy[i]-1][grid_tempx[i]-1]==true)&&
((grid_tempx[i]==grid_x[0])&&(grid_tempy[i]==grid_y[0])||
(grid_tempx[i]==grid_x[1])&&(grid_tempy[i]==grid_y[1])||
(grid_tempx[i]==grid_x[2])&&(grid_tempy[i]==grid_y[2])||
(grid_tempx[i]==grid_x[3])&&(grid_tempy[i]==grid_y[3]))
==false){
return false;
}
}
//修改方塊參數(shù)
for(int i=0;i<4;i++){
grid_oldx[i]=grid_x[i];
grid_oldy[i]=grid_y[i];
grid_x[i]=grid_tempx[i];
grid_y[i]=grid_tempy[i];
}
for(int i=0;i<4;i++){//方塊下移前的位置隱藏
if(grid_oldx[i]>=1&&grid_oldx[i]<=10&&
grid_oldy[i]>=1&&grid_oldy[i]<=24){
position[grid_oldy[i]-1][grid_oldx[i]-1]=false;
}
}
for(int i=0;i<4;i++){
if(grid_x[i]>=1&&grid_x[i]<=10&&
grid_y[i]>=1&&grid_y[i]<=24){
position[grid_y[i]-1][grid_x[i]-1]=true;
}
}
return true;
}//moveDown()方法
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -