我正在上编码课,我正在努力做以下事情:
用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);
}
}
}
最后应该是这样的:两条红蓝相间的蛇
我希望我能帮到你!