如何通过处理将代码变成类



我正在上编码课,我正在努力做以下事情:

用Snake类将下面的代码重写为面向对象的样式,并使用数组使第二条蛇出现。这是我目前得到的。这不是作业,不要担心。这是我在线上的课

int[] xpos = new int[50];
int[] ypos = new int[50];

void setup() {
size(800,600);
// Initialize
for (int i = 0; i < xpos.length; i++){
xpos[i] = 0;
ypos[i] = 0;
}
}
void draw() {
background(255);

// Shift Array Values
for (int i = 0; i < xpos.length - 1; i++){
xpos[i] = xpos[i + 1];
ypos[i] = ypos[i + 1];
}

// New location
xpos[xpos.length - 1] = mouseX;
ypos[ypos.length - 1] = mouseY;   
// Draw Everything
for (int i = 0; i < xpos.length - 1; i++){
noStroke();
fill(255 - i*5);
ellipse(xpos[i], ypos[i], i, i);
}
}

所以我不知道你已经知道多少关于对象是处理,所以我希望你能理解这个

对象只是类的一个实例。类可以包含变量和函数。当您从一个类创建一个对象时,您可以设置对象的变量,这样两个不同的对象可以对同一个变量有两个不同的值。当你运行一个对象的函数时,它将只对来自该对象的变量执行函数(而不是来自其他对象的变量)。

要创建一个类,只需将代码包装在class [class name here] { [your code here] }中。

你可以把你不想多次执行的东西,比如background(255);,剪掉,然后粘贴到draw函数中。

现在你必须重命名函数:对于setup函数,你可以使用一个构造函数,它只是一个没有返回类型的函数(如void),并且与类的名称相同。这将在稍后创建对象时自动运行。draw函数您可以随意命名(我将其命名为update)。

那么在这一点上你应该有这个:

class Snake{
private int[] xpos = new int[50];
private int[] ypos = new int[50];
Snake(){
for (int i = 0; i < xpos.length; i++){
xpos[i] = 0;
ypos[i] = 0;
} 
}

void update(){
// Shift Array Values
for (int i = 0; i < xpos.length - 1; i++){
xpos[i] = xpos[i + 1];
ypos[i] = ypos[i + 1];
}

// New location
xpos[xpos.length - 1] = mouseX;
ypos[ypos.length - 1] = mouseY;   

// Draw Everything
for (int i = 0; i < xpos.length - 1; i++){
noStroke();
fill(255 - i*5);
ellipse(xpos[i], ypos[i], i, i);
}
}
}

那么现在你可以创建一个蛇的数组并对它们运行update函数(或者你给它起的任何名字)(当然,我会用循环来做,但我认为这样更明显)

Snake[] snakes = {new Snake(), new Snake()};
void setup() {
size(800,600);
// Initialize
}
void draw() {
background(255);

snakes[0].update();
snakes[1].update();

}

现在你有两条蛇,但是你看不到它们,因为它们在彼此的上面。这就是为什么我添加了一个变量offset,它将抵消两条蛇和r, g, b变量的蛇的颜色。当然,当您创建对象并在构造函数中接收它时,您必须将变量传递给对象。

所以当你完成后,你应该有这样的东西:

Snake[] snakes = {new Snake(0,0,255, 0), new Snake(255,0,0, 50)};
void setup() {
size(800,600);
// Initialize
}
void draw() {
background(255);

snakes[0].update();
snakes[1].update();

}
class Snake{
private int[] xpos = new int[50];
private int[] ypos = new int[50];
private int r;
private int g;
private int b;
private int offset;
Snake(int r, int g, int b, int offset){
this.r = r;
this.g = g;
this.b = b;
this.offset = offset;
for (int i = 0; i < xpos.length; i++){
xpos[i] = 0;
ypos[i] = 0;
} 
}

void update(){
// Shift Array Values
for (int i = 0; i < xpos.length - 1; i++){
xpos[i] = xpos[i + 1];
ypos[i] = ypos[i + 1];
}

// New location
xpos[xpos.length - 1] = mouseX +offset;
ypos[ypos.length - 1] = mouseY +offset;   

// Draw Everything
for (int i = 0; i < xpos.length - 1; i++){
noStroke();
fill(r - i*5, g - i*5, b - i*5);
ellipse(xpos[i], ypos[i], i, i);
}
}
}

最后应该是这样的:两条红蓝相间的蛇

我希望我能帮到你!

相关内容

最新更新