android平台俄罗斯方块游戏完整代码
2012-12-02 14:31:58 来源:WEB开发网核心提示: public void move() // 移动时,必须对屏幕数组和颜色数组校正 {for(int i=0;i<4;i++){ for(int j=0;j<4;j++) {if(statefang.state[k][i][j] != 0){ m_screen[i+of_x][j+of_y] = 1; m_
public void move() // 移动时,必须对屏幕数组和颜色数组校正
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
m_screen[i+of_x][j+of_y] = 1;
m_color[i+of_x][j+of_y] = state;
}
}
}
}
public boolean moveRightOn() // 能否右移动
{
buttonRight = true;
for(int i=0;i<4;i++)
{
for(int j =0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
while(j<3 && statefang.state[k][i][j+1] != 0)
j++;
if(!isSpace(of_x+i,of_y+j+1))
return false;
}
}
}
return true;
}
public boolean moveLeftOn() // 能否左移动
{
buttonLeft = true;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
if(!isSpace(of_x+i,of_y+j-1))
return false;
else
break;
}
}
}
return true;
}
public int fastDown(int log) //能否快速下落,此函数有两种状态 一种是返回阴影的值 另一种是下落所学值
{
int a[] = {100,100,100,100};
int n=0,s = 0,m = 0;
for(int i=0;i<4;i++)
{
for(int j =0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
m = i;
while(m<3 && statefang.state[k][m+1][j] != 0)
m++;
if(isSpace(of_x+m+1,of_y+j))
{
n = 1;
while(isSpace(of_x+m+(++n),of_y+j));
a[s++] = n-1;
}
}
}
}
switch(log) // 一个是下方透明方块的距离值,一个是实际下落方块的距离
{
case 1:of_x_x = of_x+min(min(a[0],a[1]),min(a[2],a[3]));return of_x_x;
case 2:s = of_x;
of_x += min(min(a[0],a[1]),min(a[2],a[3]));break;
}
return s;
}
public int min(int a,int b)
{
if(a>=b)
return b;
else
return a;
}
public void cleanstate(int x,int y) // 清楚函数状态
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
m_screen[x+i][y+j] = 0;
m_color[x+i][y+j] = -1;
}
}
}
}
public void Court(int grade) // 计分
{
line += grade;
switch(grade)
{
case 1:gradeCourt+=100;break;
case 2:gradeCourt+=300;break;
case 3:gradeCourt+=500;break;
case 4:gradeCourt+=800;break;
}
}
public boolean GameOver() // 游戏结束
{
for(int i=0;i<of_Height;i++)
{
if(m_screen[4][i] != 0)
return true;
}
return false;
}
public void Right() // 右移函数
{
cleanstate(of_x,of_y);
of_y++;
move();
}
public void Left() // 左移函数
{
cleanstate(of_x,of_y);
of_y--;
move();
}
public void Down() // 下落函数
{
cleanstate(of_x,of_y);
of_x++;
move();
}
public void FastDown() // 快速下落函数
{
add_dis_y = 5;
cleanstate(fastDown(2),of_y);
move();
}
public void rate() // 旋转函数
{
cleanstate(of_x,of_y);
move();
}
public void NotDown() // 方块下落到地步 对屏幕数组进行一系列的处理
{
of_x_x = 0;
colorstate(of_x, of_y,state); // 保存颜色值
Court(cleanFullLine()); // 消行计分
}
public void newState()
{
k = a; // 交换方块值
state = statenext; //交换颜色值
a = Math.abs(m_Random.nextInt()%28); // 产生方块值
statenext = Math.abs(m_Random.nextInt()%7); // 产生颜色值
of_y = 3; // 重置下落位置
of_x = 0;
}
}
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
m_screen[i+of_x][j+of_y] = 1;
m_color[i+of_x][j+of_y] = state;
}
}
}
}
public boolean moveRightOn() // 能否右移动
{
buttonRight = true;
for(int i=0;i<4;i++)
{
for(int j =0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
while(j<3 && statefang.state[k][i][j+1] != 0)
j++;
if(!isSpace(of_x+i,of_y+j+1))
return false;
}
}
}
return true;
}
public boolean moveLeftOn() // 能否左移动
{
buttonLeft = true;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
if(!isSpace(of_x+i,of_y+j-1))
return false;
else
break;
}
}
}
return true;
}
public int fastDown(int log) //能否快速下落,此函数有两种状态 一种是返回阴影的值 另一种是下落所学值
{
int a[] = {100,100,100,100};
int n=0,s = 0,m = 0;
for(int i=0;i<4;i++)
{
for(int j =0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
m = i;
while(m<3 && statefang.state[k][m+1][j] != 0)
m++;
if(isSpace(of_x+m+1,of_y+j))
{
n = 1;
while(isSpace(of_x+m+(++n),of_y+j));
a[s++] = n-1;
}
}
}
}
switch(log) // 一个是下方透明方块的距离值,一个是实际下落方块的距离
{
case 1:of_x_x = of_x+min(min(a[0],a[1]),min(a[2],a[3]));return of_x_x;
case 2:s = of_x;
of_x += min(min(a[0],a[1]),min(a[2],a[3]));break;
}
return s;
}
public int min(int a,int b)
{
if(a>=b)
return b;
else
return a;
}
public void cleanstate(int x,int y) // 清楚函数状态
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(statefang.state[k][i][j] != 0)
{
m_screen[x+i][y+j] = 0;
m_color[x+i][y+j] = -1;
}
}
}
}
public void Court(int grade) // 计分
{
line += grade;
switch(grade)
{
case 1:gradeCourt+=100;break;
case 2:gradeCourt+=300;break;
case 3:gradeCourt+=500;break;
case 4:gradeCourt+=800;break;
}
}
public boolean GameOver() // 游戏结束
{
for(int i=0;i<of_Height;i++)
{
if(m_screen[4][i] != 0)
return true;
}
return false;
}
public void Right() // 右移函数
{
cleanstate(of_x,of_y);
of_y++;
move();
}
public void Left() // 左移函数
{
cleanstate(of_x,of_y);
of_y--;
move();
}
public void Down() // 下落函数
{
cleanstate(of_x,of_y);
of_x++;
move();
}
public void FastDown() // 快速下落函数
{
add_dis_y = 5;
cleanstate(fastDown(2),of_y);
move();
}
public void rate() // 旋转函数
{
cleanstate(of_x,of_y);
move();
}
public void NotDown() // 方块下落到地步 对屏幕数组进行一系列的处理
{
of_x_x = 0;
colorstate(of_x, of_y,state); // 保存颜色值
Court(cleanFullLine()); // 消行计分
}
public void newState()
{
k = a; // 交换方块值
state = statenext; //交换颜色值
a = Math.abs(m_Random.nextInt()%28); // 产生方块值
statenext = Math.abs(m_Random.nextInt()%7); // 产生颜色值
of_y = 3; // 重置下落位置
of_x = 0;
}
}
更多精彩
赞助商链接