Letting triangles race

edited March 2018 in Questions about Code

For school i need to make a program where triangle's need to race by moving with random numbers. The problem is they don't move but they stutter with the random number on the same spot all together. How can i fix this?

Here i draw the triangles and with y i want to make them move but the y variable resets i think?

void tekenRobots() {
  frameRate(8);
  int robotNummer = 1;
  float x = 80;
  float stapGrootte = MARGE_SCHERM_BREEDTE * 3;
  y = height - MARGE_SCHERM_HOOGTE;
  y -= aantalGegooideOgen();
  breedte = x;
  hoogte = breedte;


  for (int i = 0; i < sliderPositieRobots; i++) {
    fill(kleur[i]);
    triangle(x, y, x + breedte / 2, y - hoogte, x + breedte, y);

    fill(WIT);
    textAlign(CENTER, CENTER);
    text(robotNummer + i, x + 40, y - 40);
    x = x + stapGrootte;
  }
}

Answers

  • This is not your entire code

    You have an array kleur[] and similarly you need an array xPos, yPos, and stapGrootte[i]

    so each triangle is different

  • i know this is not the entire code but i dont get it where it goes wrong with the movement of the triangles. So what u say is that i need to make an array for each triangle?

  • Well, when you don’t post your entire code nobody can run your sketch which is inconvenient

    An array is a list so you need an array xPos for the x-values of the triangles. One array for all triangle X.

  • When the race to the right you can code the y value as y=i*33 + 54; or so

  • At the moment when you use the same x for all triangles they just land in the same spot logically

  • float x = 100; float y; float breedte = 200; float hoogte = 300; float xOpnieuw, yOpnieuw; float xStop, yStop; final int MARGE_SCHERM_BREEDTE = 50; final int MARGE_SCHERM_HOOGTE = 80; final float ROBOTS_AANTAL = 500 / x; final String TERUG = "TERUG"; final String OPNIEUW = "OPNIEUW"; final String STOPPEN = "STOPPEN"; final String VOLGENDE = "VOLGENDE";

    int sliderPositieRobots = 4; int sliderPositieMargeGrootte = 2;

    //De geefKleur methode in de setup zorgt ervoor dat de robots //maar 1 keer een kleur krijgen en niet afwisselend een kleur. void setup () { size(700, 600); geefKleur(); }

    void draw() { tekenScherm(); }

    void mouseClicked() { schermClick(); }

    void tekenStartScherm() { final String START = "START";

    tekenWindow(LICHT_GRIJS); tekenLogo(); sliderPositieRobots = sliderPositieBepalen(x, y, int(ROBOTS_AANTAL), sliderPositieRobots, x+100, y+150); tekenSlider1(x, y, x + 100, y + 100, sliderPositieRobots, ROBOTS_AANTAL); tekenSlider2(x, y, x + 100, y + 100); tekenStartKnop(START); }

    void startSchermClick() { if (isMuisInKnop(x, y, breedte, hoogte)) { volgendeScherm(SPEL_SCHERM); } }

    color[] kleur = new int[int(sliderPositieRobots)];

    void tekenSpelScherm() { tekenWindow(BRUIN); tekenBaan(); tekenRobots(); tekenTerugKnop(TERUG); tekenStopKnop(VOLGENDE); }

    void spelSchermClick() { if (isMuisInKnop(xOpnieuw, yOpnieuw, breedte, hoogte)) { volgendeScherm(START_SCHERM); } else if (isMuisInKnop(xStop, yStop, breedte, hoogte)) { volgendeScherm(EIND_SCHERM); } }

    //Het tekenen van de baan met de baanlijnen erop. //Ik heb de programma zo gemaakt dat er maximaal 4 robots kunnen racen dus 4 banen. void tekenBaan() { float aantalLijnen = ROBOTS_AANTAL + 1; int xBaan = MARGE_SCHERM_BREEDTE; int yBaan = MARGE_SCHERM_HOOGTE; int breedteBaanLijn = MARGE_SCHERM_BREEDTE; int hoogteBaanLijn = height - MARGE_SCHERM_HOOGTE;

    int startFinishLijn = 2; int xStartFinish = MARGE_SCHERM_BREEDTE; int yStartFinish = MARGE_SCHERM_HOOGTE * 2; int breedteStartFinish = width - MARGE_SCHERM_BREEDTE; int hoogteStartFinish = MARGE_SCHERM_HOOGTE * 2;

    //Baan lijnen voor de sprinters. for (int i = 0; i < aantalLijnen; i++) { line(xBaan, yBaan, breedteBaanLijn, hoogteBaanLijn); xBaan = xBaan + 150; breedteBaanLijn = breedteBaanLijn + 150; } //Start en Finish lijnen. for (int i = 0; i < startFinishLijn; i++) { line(xStartFinish, yStartFinish, breedteStartFinish, hoogteStartFinish); yStartFinish = yStartFinish + 275; hoogteStartFinish = hoogteStartFinish + 275; } }

    //Het tekenen van de robots en het laten racen ervan. void tekenRobots() { frameRate(8); int robotNummer = 1; float x = 80; float stapGrootte = MARGE_SCHERM_BREEDTE * 3; y = height - MARGE_SCHERM_HOOGTE; y -= aantalGegooideOgen(); breedte = x; hoogte = breedte;

    for (int i = 0; i < sliderPositieRobots; i++) { fill(kleur[i]); triangle(x, y, x + breedte / 2, y - hoogte, x + breedte, y);

    fill(WIT);
    textAlign(CENTER, CENTER);
    text(robotNummer + i, x + 40, y - 40);
    x = x + stapGrootte;
    

    } }

    //Een dobbelsteen wordt gegooid //en de robots kunnen met de gegooide aantal ogen bewegen in pixels. int aantalGegooideOgen() { int dobbelstenen = 6; int[] totaal = new int[dobbelstenen]; int optelling = 0; for (int i = 0; i < dobbelstenen; i++) { int aantalOgen = floor(random(6)); totaal[i] = aantalOgen; optelling = optelling+ totaal[i]; } return optelling; }

    final String START_SCHERM = "start"; final String SPEL_SCHERM = "spel"; final String EIND_SCHERM = "eind";

    String huidigeScherm = START_SCHERM;

    void volgendeScherm(String scherm) { huidigeScherm = scherm; }

    void tekenScherm() { background(GRIJS); switch(huidigeScherm) { case START_SCHERM: tekenStartScherm(); break; case SPEL_SCHERM: tekenSpelScherm(); break; case EIND_SCHERM: tekenEindScherm(); break; } }

    void schermClick() { switch(huidigeScherm) { case START_SCHERM: startSchermClick(); break; case SPEL_SCHERM: spelSchermClick(); break; case EIND_SCHERM: eindSchermClick(); break; } }

    final color WIT = #FFFFFF; final color ZWART = #000000; final color LICHT_GRIJS = #BBBBBB; final color GRIJS = #EEEEEE; final color BRUIN = #E86507; final int xTekst = 700 / 4; final int yTekstSlider1 = 600 / 3; final int yTekstSlider2 = 600 / 3;

    Boolean isMuisInKnop(float x, float y, float breedte, float hoogte) { //Controleert door de gegeven variabelen of de muis "op" de knop staat. if (mouseX >= x && mouseX <= x + breedte && mouseY >= y && mouseY <= y + hoogte) { return true; } else { return false; } }

    color donkerder(color kleur) { final float DONKERDER = 0.9; float r = constrain(red(kleur) * DONKERDER, 0, 255); float g = constrain(green(kleur) * DONKERDER, 0, 255); float b = constrain(blue(kleur) * DONKERDER, 0, 255);

    return color(r, g, b); }

    void tekenWindow(color kleur) { x = MARGE_SCHERM_BREEDTE; y = MARGE_SCHERM_HOOGTE; breedte = width - (MARGE_SCHERM_BREEDTE * 2); hoogte = height - (MARGE_SCHERM_HOOGTE * 2);

    fill(kleur); rect(x, y, breedte, hoogte); }

    //Tekent het logo met een kader eromheen. void tekenLogo() { x = width / 4; y = height / 6; int breedte = width / 2; int hoogte = height / 4; rect(x, y, breedte, hoogte);

    PImage logo = loadImage("logo.png"); logo.resize(breedte - 1, hoogte - 1); image(logo, x + 1, y + 1); }

    //Het tekenen van de slider voor het aantal robots met de tekst ervoor. //Ik heb het zo gedaan dat er maximaal 4 robots getekend kunnen worden door de slider. void tekenSlider1(float x, float y, float breedte, float hoogte, int positie, float nPosities) { float blokjeBreedte = breedte/nPosities; float xPosBlokje = x + 60 + positie * blokjeBreedte; x = width / 3; y = height / 2; breedte = x * 1.18; hoogte = 20;

    fill(WIT); rect(x, y, breedte, hoogte); fill(#2257F0); rect(xPosBlokje - 2, y, blokjeBreedte, hoogte); fill(ZWART); textAlign(CENTER); text("Aantal Robots: " + positie , x - 50, y + 15); }

    //Het tekenen van de slider voor de marge met de tekst ervoor. //Het is me niet gelukt om de slider tot werking te stellen icm de eerste slider. void tekenSlider2(float x, float y, float breedte, float hoogte) { x = width / 3; y = height * .6;

    fill(WIT); rect(x, y, breedte, hoogte / 9);

    fill(ZWART); textAlign(CENTER); text("Marge: ", x - 25, y + 15); }

    //Het tekenen van de startknop op het startscherm. void tekenStartKnop(String titel) { final int BEWEGING_KNOP = 1;

    x = width / 3; y = height / 1.5; breedte = width / 3; hoogte = height / 8;

    color kleur = WIT;

    if (isMuisInKnop(x, y, breedte, hoogte)) { kleur = donkerder(kleur); if (mousePressed) { x = x + BEWEGING_KNOP; y = y + BEWEGING_KNOP; } }

    fill(kleur); rect(x, y, breedte, hoogte, hoogte / 4);

    fill(ZWART); textAlign(CENTER, CENTER); text(titel, x + breedte / 2, y + hoogte / 2); }

    //Het tekenen van de opnieuw knop om terug te keren naar het startscherm. void tekenTerugKnop(String titel) { final int BEWEGING_KNOP = 1;

    xOpnieuw = width * .29; yOpnieuw = height * .87; breedte = width / 8; hoogte = height / 8;

    color kleur = WIT;

    if (isMuisInKnop(xOpnieuw, yOpnieuw, breedte, hoogte)) { kleur = donkerder(kleur); if (mousePressed) { x = x + BEWEGING_KNOP; y = y + BEWEGING_KNOP; } }

    fill(kleur); rect(xOpnieuw, yOpnieuw, breedte, hoogte, hoogte / 4);

    fill(ZWART); textAlign(CENTER, CENTER); text(titel, xOpnieuw + breedte / 2, yOpnieuw + hoogte / 2); }

    //Het tekenen van de stop knop op het eindscherm om het programma af te sluiten. void tekenStopKnop(String titel) { final int BEWEGING_KNOP = 1;

    xStop = width * .59; yStop = height * .87; breedte = width / 8; hoogte = height / 8;

    color kleur = WIT;

    if (isMuisInKnop(xStop, yStop, breedte, hoogte)) { kleur = donkerder(kleur); if (mousePressed) { x = x + BEWEGING_KNOP; y = y + BEWEGING_KNOP; } }

    fill(kleur); rect(xStop, yStop, breedte, hoogte, hoogte / 4); fill(ZWART); textAlign(CENTER, CENTER); text(titel, xStop + breedte / 2, yStop + hoogte / 2); }

    //Het aanmaken van willekeurige kleuren zodat elke robot een andere kleur krijgt. void geefKleur() { for (int i = 0; i < sliderPositieRobots; ++i) { kleur[i] = color(random(255), random(255), random(255)); } }

    int bepaalPositie(float x, float breedte, int nPosities) { float blokjesBreedte = breedte / nPosities;

    if (mouseX < x) { return 0; } else if (mouseX >= breedte + x) { return nPosities -1; } else { return floor((mouseX - x) / blokjesBreedte); } }

    int sliderPositieBepalen(float beginPositieSliderTekstBreedte, float beginPositieSliderHoogte, int sliderNPosities, int sliderPositie, float sliderBreedte, float sliderHoogte) { if (mousePressed) { if (mouseX>=beginPositieSliderTekstBreedte &&mouseX<beginPositieSliderTekstBreedte+sliderBreedte &&mouseY>=beginPositieSliderHoogte&&mouseY <=beginPositieSliderHoogte+sliderHoogte) { sliderPositie=bepaalPositie(beginPositieSliderTekstBreedte, sliderBreedte, sliderNPosities); } } return sliderPositie; }

    void tekenEindScherm() { tekenWindow(LICHT_GRIJS); tekenStopKnop(STOPPEN); tekenTerugKnop(OPNIEUW); tekenUitslagWindow(GRIJS); toonUitslag(x, y); }

    void eindSchermClick() { if (isMuisInKnop(xStop, yStop, breedte, hoogte)) { exit(); } else if (isMuisInKnop(xOpnieuw, yOpnieuw, breedte, hoogte)) { volgendeScherm(START_SCHERM); } }

    //Doordat het niet is gelukt om de robots te laten bewegen, is het helaas ook niet gelukt //om de winnaar te laten zien op het eindscherm, dus maar zo geimplementeerd. void toonUitslag(float x, float y) { int afstand = 15; x = width * .5; y = (MARGE_SCHERM_HOOGTE * 2) + afstand;

    for (int i = 1; i <= sliderPositieRobots; i++) { fill(ZWART); text("Robot " + i, x, y); y = y + afstand; } }

    void tekenUitslagWindow(color kleur) { x = MARGE_SCHERM_BREEDTE * 2; y = MARGE_SCHERM_HOOGTE * 2; breedte = width - (MARGE_SCHERM_BREEDTE * 4); hoogte = height - (MARGE_SCHERM_HOOGTE * 4);

    fill(kleur); rect(x, y, breedte, hoogte); }

    this is the code

  • Did you implement my suggestions?

    You also need to learn to format your code - see sticky post at start of this forum

    Thanks!

  • Answer ✓

    here is a simple example for arrays based on what I've said

    float xArr[]=new float[9];
    float xAddArr[]=new float[9];
    
    void setup() {
      size(888, 888);
    
      for (int i = 0; i < 9; i++) {
    
        xArr[i] = 0; 
        xAddArr[i] = random(.3, 7);
      }
    
      background(0);
    }
    
    void draw() {
      background(0); 
      //frameRate(8);
      int robotNummer = 1;
    
      float x = 80;
      float stapGrootte = 1 * 3;
      float y = height - 1;
      float  breedte = x;
      float  hoogte = breedte;
    
    
      for (int i = 0; i < 9; i++) {
    
        x=xArr[i];
        y=i*123 +22;
    
        // fill(kleur[i]);
        triangle(x, y, 
          x + breedte / 2, y - hoogte, 
          x + breedte, y);
    
        fill(255);
        textAlign(CENTER, CENTER);
        text(robotNummer + i, 
          x - 40, y - 40);
    
        xArr[i] += xAddArr[i];
      }
    }
    
  • Ah thank you very much, i will try to make it from scratch with your code as help. I appreciate it, thank you mate!

  • @emsbies -- to get even more help in the forum, please edit your posts and format the code by highlighting it and pressing Ctrl+o.

    This helps people read your code, as well as copy and paste it for testing.

Sign In or Register to comment.