当前位置: 代码迷 >> 综合 >> 201604-2 俄罗斯方块(Java 100)
  详细解决方案

201604-2 俄罗斯方块(Java 100)

热度:67   发布时间:2024-02-19 12:32:59.0
  • 问题链接:俄罗斯方块

  • 问题分析:模拟法解决。

  • 程序说明:Part类存方块对象,(x,y)表示坐标;用boolean类型的数组存图像,total存方格图;part数组存新加入的板块的位置

  • 程序代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;class Reader {
    static StringTokenizer token =new StringTokenizer("");static BufferedReader  reader   =new BufferedReader (new InputStreamReader(System.in)) ;static String nextLine() throws IOException {
    return reader.readLine() ;}static  String next() throws IOException {
    while(!token.hasMoreTokens()) {
    token =new StringTokenizer(reader.readLine()) ;}return token.nextToken() ;}static int nextInt() throws IOException {
    return Integer.parseInt(next()) ;}static double nextDouble() throws IOException {
    return Double.parseDouble(next()) ;}}class Part{
    public int x;public int y;Part(int m,int n){
    this.y=m;this.x=n;}
}public class Main {
    public static void main(String[] args) throws IOException {
    boolean[][] total = new boolean[15][10];//false--0for(int i=0;i<15;i++)for(int j=0;j<10;j++) {
    if(Reader.nextInt()==1)total[i][j]=true;}Part[] part = new Part[4];//四块int block=0;for(int i=0;i<4;i++)for(int j=0;j<4;j++) {
    if(Reader.nextInt()==1) {
    part[block] = new Part(i,j);//(y,x)block++;}}int start = Reader.nextInt();part[0].x+=(start-1);//调整x至具体位置part[1].x+=(start-1);part[2].x+=(start-1);part[3].x+=(start-1);int max=part[0].y;//找板块中最大的y,确定边界for(int i=1;i<4;i++) {
    int temp=part[i].y;if(temp>max) {
    max=temp;}}boolean flag = false;for(;max<14;max++) {
    for(int j=start-1;j<start+3;j++) {
    				if(total[part[0].y+1][part[0].x]||total[part[1].y+1][part[1].x]||total[part[2].y+1][part[2].x]||total[part[3].y+1][part[3].x]) {
    //向下找,存在则停止total[part[0].y][part[0].x]=true;total[part[1].y][part[1].x]=true;total[part[2].y][part[2].x]=true;total[part[3].y][part[3].x]=true;flag=true;break;}}if(flag)break;part[0].y++;part[1].y++;part[2].y++;part[3].y++;		}if(max==14) {
    //边界total[part[0].y][part[0].x]=true;total[part[1].y][part[1].x]=true;total[part[2].y][part[2].x]=true;total[part[3].y][part[3].x]=true;	}for(int i=0;i<15;i++) {
    for(int j=0;j<10;j++) {
    if(total[i][j]==true)System.out.print(1+" ");elseSystem.out.print(0+" ");}System.out.println();}}}
  相关解决方案