23,409
社区成员




public class TetrisBlock {
public static void main( String[] args ) {
java.util.Scanner sc = new java.util.Scanner(System.in);
int[][] mainScreen = new int[25][15];
int[][] mainScreen1 = new int[25][15];
for (int i = 0 ; i <= 14 ; i++) {
for (int j = 0; j <= 24 ; j++ ) {
if (j==0||j==24) {
mainScreen[j][i]=1;
mainScreen1[j][i]=1;
} else {
mainScreen[j][i]=0;
mainScreen1[j][i]=0;
}
}
}
//int[][] mainScreen1 =mainScreen;
while ( true ) {
int a = 11, b = -1;
int random = (int)(Math.random()*7);
int[][] block1 = block(random);
reprint(a,b,block1,mainScreen1);
while ( end(mainScreen, mainScreen1) ) {
String input = sc.next();
int[][] block2 = {{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}};
switch(input) {
case "w":
if ( random == 0 || random == 1 || random == 2 || random == 3 || random ==4) {
int[][] temp = new int[3][3];
for (int i = 0; i <= 2 ; i++) {
for (int j = 0; j <= 2 ; j++ ) {
temp[j][i] = block1[i][2-j];
}
}
block1 = temp;
};
if ( random == 5) {
int[][] temp = block1;
block1 = block2;
block2 = temp;
}
if (random == 6) {
}
break;
case "a":
a-=1;
b+=1;
break;
case "s":
b+=1;
break;
case "d":
a+=1;
b+=1;
break;
default:
System.out.println("NOT AVAILABLE");
break;
}
for (int i = 0; i < mainScreen1.length; i++) {
for (int j = 0; j < mainScreen1[i].length; j++) {
mainScreen[i][j]=mainScreen1[i][j];
}
}
//mainScreen = mainScreen1;
mainScreen= border1(random, a, b, block1, mainScreen);
reprint(a,b,block1,mainScreen);
}
}
}
public static boolean end( int[][] mainScreen, int[][] mainScreen1 ) {
for (int i = 0; i < mainScreen.length; i++) {
for (int j = 0; j < mainScreen[i].length; j++) {
if (mainScreen[i][j] !=mainScreen1[i][j]) {
for (int j2 = 0; j2 < mainScreen.length; j2++) {
for (int k = 0; k < mainScreen[j2].length; k++) {
mainScreen1[j2][k] =mainScreen[j2][k];
}
}
return false;
}
}
}
/*if (mainScreen == mainScreen1 ) {
return true;
}*/
return true;
}
public static int[][] block(int random) {
if (random == 0) {
return new int[][] {{1,0,0},{1,0,0},{1,1,0}};
}
if (random == 1) {
return new int[][] {{1,1,0},{1,0,0},{1,0,0}};
}
if (random == 2) {
return new int[][] {{1,1,0},{0,1,1},{0,0,0}};
}
if (random == 3) {
return new int[][] {{0,1,1},{1,1,0},{0,0,0}};
}
if (random == 4) {
return new int[][] {{1,0,0},{1,1,0},{1,0,0}};
}
if (random == 5) {
return new int[][] {{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}};
}
if (random == 6) {
return new int[][] {{1,1,1},{1,1,1},{1,1,1}};
} else {
return new int[][] {{1,1,1},{1,1,1},{1,1,1}};
}
}
public static void reprint(int a, int b,int[][] block, int[][] mainScreen/*, int[][] block*/) {
System.out.println("Next Block");
/*for (int i = 0 ; i< length.block ; i++ )
{
for (int j = 0; j< length.block[i] ; j++ )
{
if (block[j][i] = 1)
{
System.out.print("*");
}
if (j=2)
{
System.out.print("\n");
}
else
{
System.out.print(" ");
}
}
}*/
for (int i = 0 ; i <= 14 ; i++) {
for (int j = 0; j <= 24 ; j++ ) {
if (mainScreen[j][i]==1) {
System.out.print("|");
if (j == 24) {
System.out.println();
}
continue;
}
if (mainScreen[j][i] == 2) {
System.out.print("*");
continue;
}
if (j>=a&&i>=b&&j<=(a+2)&&i<=(b+2)&&block[j-a][i-b]==1&&mainScreen[j][i] == 0) {
System.out.print("*");
continue;
} else {
System.out.print(" ");
continue;
}
}
}
System.out.println("-------------------------");
System.out.println("INSTRUCTOR: a=left b=right w=rotate s=down");
System.out.print("Command:");
}
public static int[][] border1(int random, int a, int b, int[][] block, int[][] mainScreen ) {
int temp = a;
if ( random == 0 || random == 1 || random == 2 || random == 3 || random ==4) {
for (int i = 0 ; i <= 14 ; i++) {
for (int j = 0; j <= 24 ; j++ ) {
if (j>=a && i>=b && j<=(a+2) &&i <=(b+2) && block[j-a][i-b]==1 && (mainScreen[j][i] == 2 || i == 14)) {
temp -= 1;
break;
} else {
}
}
}
}
if (random == 5) {
for (int i = 0 ; i <= 14 ; i++) {
for (int j = 0; j <= 24 ; j++ ) {
if (j>=a && i>=b && j<=(a+3) &&i <=(b+3) && block[j-a][i-b]==1 && (mainScreen[j][i] == 2 || i == 14)) {
temp -= 1;
break;
} else {
}
}
}
}
if (random == 6) {
for (int i = 0 ; i <= 14 ; i++) {
for (int j = 0; j <= 24 ; j++ ) {
if (j>=a && i>=b && j<=(a+1) && i <=(b+1) && block[j-a][i-b]==1 && (mainScreen[j][i] == 2 || i == 14)) {
temp -= 1;
break;
} else {
}
}
}
}
if (temp < a) {
a = temp;
for (int i = 0 ; i <= 14 ; i++) {
for (int j = 0; j <= 24 ; j++ ) {
if (j>=a&&i>=b&&j<=(a+2)&&i<=(b+2)&&block[j-a][i-b]==1) {
mainScreen[j+1][i]=2;
}
}
}
}
return mainScreen;
}
public static int border2(int random, int a, int b, int[][] block, int[][] mainScreen ) {
int j1 = 1;
int j2 = 24;
for (int i = 0 ; i <= 14 ; i++ ) {
if (i>=b && i <=(b+1) && block[j1-a][i-b]==1) {
return 1;
}
if (i>=b && i <=(b+1) && block[j1-a][i-b]==1) {
return 2;
}
}
return 0;
}
}