处理:如何为我的2D阵列以不同颜色绘制正方形?
问题描述:
我正在尝试为处理二维数组的炸弹人制作游戏板。 (最终版本将有颜色或位图和每个块类型的属性,并且将确定的行走空间,该播放器具有。)处理:如何为我的2D阵列以不同颜色绘制正方形?
我想这个游戏板,其由11行和11列的有游戏中每种块类型的不同颜色的正方形。 (Ĵ是固体块,我是步行空间和ķ是一个易碎的块,因为你会在阵列中看到)
我已经成功地绘制阵列/板,但现在我需要着色它的权利。
我试图颜色在一个特定的方式一个块类型,但它只是颜色的整个董事会。
这是我的代码现在:
//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);
}
}
}
这是我的结果:
答
它不会使一吨的感觉你存储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()
报表会帮助你很多这方面的东西出来
对不起,我是个小白 – Unarmed
但作为一个较短的问题:。 为什么这不是工作?(field [i] [j] == j){ 'if(field [i] [j] == k){012,fill(200,0,0);} else if 0);} ' - 我想这会告诉程序为所有** k **的红色和** j **的蓝色着色。 – Unarmed
@Unarmed你什么时候设置过'k'的值? –