我正在尝试使用2D阵列制作炸弹人的游戏板。 (最终版本将具有颜色或位图以及每种块类型的属性,并将定义玩家拥有的行走空间。)
我希望这个由11行11列组成的游戏板在游戏中为每种块类型提供不同颜色的方块。 ( j 是一个实体块,我是行走空间而 k 是一个可破坏的块,正如你将在数组中看到的那样)
我已经设法绘制了阵列/电路板,但现在我需要对它进行着色。
我试图以某种方式为一种块类型着色,但它只是为整个板着色。
这是我现在的代码:
//Amnt of Columns & Rows
int cols = 11;
int rows = 11;
//Block types
int i;
int j;
int k;
void setup() {
size(440, 440);
//Game Board
int [][] field = {
{j, j, j, j, j, j, j, j, j, j, j},
{j, i, i, i, i, k, i, i, i, i, j},
{j, i, j, i, j, i, j, i, j, k, j},
{j, k, k, i, i, i, i, i, i, i, j},
{j, i, j, i, j, k, j, i, j, i, j},
{j, i, i, i, i, k, i, i, i, i, j},
{j, k, j, k, j, i, j, k, j, i, j},
{j, i, k, i, i, i, i, i, i, i, j},
{j, i, j, i, j, k, j, i, j, i, j},
{j, i, i, i, i, k, i, i, i, k, j},
{j, j, j, j, j, j, j, j, j, j, j} };
// Draw Board
for ( i = 0; i < cols; i+=1) {
for ( j = 0; j < rows; j+=1) {
if(field[i][j]==1)
if(field[i][j]==i){
fill(0);}
if(field[i][j]==k){
fill(200,0,0);} else
if(field[i][j]==j){
fill(0,200,0);}
rect(i * 40, j * 40, 40, 40);
}
}
}
这是我的结果:
答案 0 :(得分:0)
将i
,j
和k
变量存储在草图顶部,然后将它们用作循环并不是很有意义变量。你在这些if
陈述中究竟有什么比较?请养成debugging你的程序的习惯,这样你才能准确理解它正在做什么。
但基本上,你应该使用两组不同的变量,你应该将它们命名为更有意义的东西。像这样的东西:
int spaceType = 0;
int blockType = 1;
int bombType = 2;
然后在for
循环中,您可能希望使用不同的变量,这些变量同样具有更多描述性名称:
for (int cellX = 0; cellY < cols; cellX++) {
for (int cellY = 0; cellY < rows; cellY++) {
最后,您的if
语句需要检查单元格是否为特定类型。请注意,您当前的if
语句没有多大意义:
if(field[i][j]==1)
if(field[i][j]==i){
fill(0);
}
首先检查单元格是否为1
,然后检查它是否等于i
,这是一个循环变量。
另外,请养成在每个{}
语句和if
循环周围使用适当的缩进和大括号for
的习惯。我猜你上面想要两个单独的if
语句,但由于它没有大括号,所以不是它的工作方式。再次,使用调试器(或者甚至只添加println()
语句来逐步执行此操作将有助于您了解很多这些内容。