201604-2 俄罗斯方块 Java

大家谁能帮我看看是哪里不对,提交到系统中是0分,在Eclipse中可以得出例子中的结果

思路:
题目中有两个关键点:如何模拟下落的过程,如何判断方块下落在哪里停止。
在数据的存储上,需要保存整个“棋盘”,需要保存下落方块的坐标。模拟下落可以row++
判断在哪里停止,按照规则,方块最下部碰到底或者中间被拦住就应该停止了。在最后新增一行1可以简化判断边界。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int ROW = 15;
		int COL = 10;
		int N = 4;
		int board[][] = new int[ROW+1][COL];//整个俄罗斯方块
		int block[][] = new int[N][N];//下落的图形的方块
		int x[] = new int[4];//存储图形的横坐标
		int y[] = new int[4];//存储图形的纵坐标
		
		int row,col;
		for(int i=0;i<ROW;i++) {
			for(int j=0;j<COL;j++) {
				board[i][j] = sc.nextInt();
			}
		}
		for(int i=0;i<N;i++) {
			for(int j=0;j<N;j++) {
				block[i][j] = sc.nextInt();
			}
		}
		//初始列
		col = sc.nextInt();
		sc.close();
		
		//最下面加一行1,方便判断边界
		for(int j=0;j<COL;j++) {
			board[ROW][j] = 1;
		}
		
		//得到图形的坐标
		int k=0;
		for(int i=N-1;i>=0;i--) {
			for(int j=0;j<N;j++) {
				if(block[i][j] == 1) {
					x[k] = i;
					y[k] = j;
					k++;
				}
			}
		}
		row = 1;
		col--;
		boolean flag;
		for(;;) {
			flag = false;
			for(int i=0;i<N;i++) {
			if(board[row + x[i]][col + y[i]] == 1) {
				flag = true;
				break;
				}
			}
			if(flag) {
				break;
			}
			row++;
		}
		row--;
		
		//合并
		for(int i=0;i<N;i++) {
			board[row + x[i]][col + y[i]] = 1;
		}
		
		//输出
		for(int i=0;i<ROW;i++) {
			for(int j=0;j<COL;j++) {
				if(j != 0) {
					System.out.print(board[i][j]);
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}

}


posted @ 2020-02-24 15:28  菜鸡A  阅读(171)  评论(0编辑  收藏  举报