该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在一块画布上放类似俄罗斯方块的格子。
若是每一行或是每一列填满了,自动清除。
分三种情况,行满了;清除行
列满了;清除列
同时满了,同时清除;
如果分开写的话,先后顺序会导致错误,因为每个行的格子也是每一个列的格子。必须一起判断是否满了。
注:status()为判断是否被占领的方法,true为被占领,false为空。
upset()为清除当前方块的方法,画布大小为10*10; board [][]为10*10 的二维数组。
算分的话,score = score + a + 10*rowandcolumn;
然而测试之后发现有以下问题:
计分有问题,当3*3正方形被清后应该69分, 9分来自方块数量,60分来自10*6。 结果却是29分。
显然清除顺序或者判断有问题。
希望指正。
谢谢。
int v =0; // 打横满的格子数量
int h = 0; //打竖满的格子数量
int rowandcolumn = 0; // 要清除的行列总和
for (int row=0;row<10;row++){ //打横数0到9
for (int column=0;column<10;column++) { //打竖数0到9
if ((board[row][column].status() == true)){ //如果打竖的被占
h = h + 1;
}
if ((board[column][row].status() == true)){ //如果打横的被占
v = v + 1;
}
}
if(v == 10 && h ==10){ //横竖一起清
rowandcolumn = rowandcolumn + 2 ;
for (int k = 0;k <10; k++) {
board[row][k].unset();
board[k][row].unset();
}
}
if(v != 10 && h ==10){ //清横
rowandcolumn = rowandcolumn + 1 ;
for (int k = 0;k <10; k++) {
board[row][k].unset();
}
}
if(v == 10 && h !=10){ //清竖
rowandcolumn = rowandcolumn + 1 ;
for (int k = 0;k <10; k++) {
board[k][row].unset();
}
}
if(v != 10 && h !=10){
rowandcolumn = rowandcolumn + 0 ;
}
h =0; //reset
v=0;
}
score = score + p.numberofBox()+10*rowandcolumn;
}