Array help- creating new objects that move on a rectangular path
in
Programming Questions
•
2 years ago
I'm pretty new at using arrays, so bear with me... what I'm trying to do is make a railroad track situation, where every time the mouse is pressed it adds 2 new "trains" to the line of them. I only have 4 down at the moment, and something tells me this could be done with much less code than what I'm doing so far. Any help with the concept would be really appreciated.
Here's what I have (instantly recognizable problems: only the first one moves, and trainCount never goes above 4)
float[] trainX = {100, 150, 200, 250, 300, 350, 400, 450};
float[] trainY = {100, 100, 100, 100, 100, 100, 100, 100};
int trainCount;
int i = trainCount;
boolean movetrain1, movetrain2, movetrain3, movetrain4;
void setup(){
size(640, 580);
}
void draw(){
println("trainCount = " + trainCount);
background(20);
trainCount = 2;
if(mousePressed){
trainCount += 2;
}
if((trainX[i] <= 100) && (trainY[i] <= 100)){
movetrain1 = true;
movetrain2 = false;
movetrain3 = false;
movetrain4 = false;
}else if((trainX[i] >= 500) && (trainY[i] <= 100)){
movetrain1 = false;
movetrain2 = true;
movetrain3 = false;
movetrain4 = false;
}else if((trainX[i] >= 500) && (trainY[i] >= 500)){
movetrain1 = false;
movetrain2 = false;
movetrain3 = true;
movetrain4 = false;
}else if((trainX[i] <= 100) && (trainY[i] >= 500)){
movetrain1 = false;
movetrain2 = false;
movetrain3 = false;
movetrain4 = true;
}
if(movetrain1 == true){
moveTrain1();
}else if(movetrain2 == true){
moveTrain2();
}else if(movetrain3 == true){
moveTrain3();
}else if(movetrain4 == true){
moveTrain4();
}
if(trainCount >= 1){
rect(trainX[0], trainY[0], 45, 45);
}
if(trainCount >= 2){
rect(trainX[1], trainY[1], 45, 45);
}
if(trainCount >= 3){
rect(trainX[2], trainY[2], 45, 45);
}
if(trainCount >= 4){
rect(trainX[3], trainY[3], 45, 45);
}
}
void moveTrain1(){
trainX[i]++; //Need to move every member of the array, i think. Want to be able to modify/use all values of trainX and trainY at the same time
}
void moveTrain2(){
trainY[i]++;
}
void moveTrain3(){
trainX[i]--;
}
void moveTrain4(){
trainY[i]--;
}
Here's what I have (instantly recognizable problems: only the first one moves, and trainCount never goes above 4)
float[] trainX = {100, 150, 200, 250, 300, 350, 400, 450};
float[] trainY = {100, 100, 100, 100, 100, 100, 100, 100};
int trainCount;
int i = trainCount;
boolean movetrain1, movetrain2, movetrain3, movetrain4;
void setup(){
size(640, 580);
}
void draw(){
println("trainCount = " + trainCount);
background(20);
trainCount = 2;
if(mousePressed){
trainCount += 2;
}
if((trainX[i] <= 100) && (trainY[i] <= 100)){
movetrain1 = true;
movetrain2 = false;
movetrain3 = false;
movetrain4 = false;
}else if((trainX[i] >= 500) && (trainY[i] <= 100)){
movetrain1 = false;
movetrain2 = true;
movetrain3 = false;
movetrain4 = false;
}else if((trainX[i] >= 500) && (trainY[i] >= 500)){
movetrain1 = false;
movetrain2 = false;
movetrain3 = true;
movetrain4 = false;
}else if((trainX[i] <= 100) && (trainY[i] >= 500)){
movetrain1 = false;
movetrain2 = false;
movetrain3 = false;
movetrain4 = true;
}
if(movetrain1 == true){
moveTrain1();
}else if(movetrain2 == true){
moveTrain2();
}else if(movetrain3 == true){
moveTrain3();
}else if(movetrain4 == true){
moveTrain4();
}
if(trainCount >= 1){
rect(trainX[0], trainY[0], 45, 45);
}
if(trainCount >= 2){
rect(trainX[1], trainY[1], 45, 45);
}
if(trainCount >= 3){
rect(trainX[2], trainY[2], 45, 45);
}
if(trainCount >= 4){
rect(trainX[3], trainY[3], 45, 45);
}
}
void moveTrain1(){
trainX[i]++; //Need to move every member of the array, i think. Want to be able to modify/use all values of trainX and trainY at the same time
}
void moveTrain2(){
trainY[i]++;
}
void moveTrain3(){
trainX[i]--;
}
void moveTrain4(){
trainY[i]--;
}
1
