Spilleplade

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

Eksemplet her tager udgangspunkt i Arrays[1].

Bane med muse navigation

Programmets visning af spilleplade

Herunder er etableret en spilleplade med cirkler, og det laves en data-model med en 6 x 6 spilleplade.

Data-model for spilleplade

Data-modellen for spillepladen er et 2-dimensionelt Array af int, og størrelsen er 6 x 6, altså 36 heltal. I dette eksempel har de ikke fået tillagt nogen betydning.

Læg mærke til den specielle måde spillepladen oprettes på i et for-loop inde i setup, og i endnu et for-loop sættes alle værdier til 0.

Pladserne kan tælles op ved klik med musen.

Visning af Data-modellen

Arrayet vises som 6 x 6 cirkler, hvor indholdet i datamodellen printes som et tal.

Størrelsen på cirklerne er sat til en diameter på 30 pixel, og de placeres med en afstand på 40 x 40, så der kommer lidt luft imellem dem. Der laves et offset på 30 pixel, der giver lidt luft til kanten. Størrelsen af programvinduet tilpasses antallet en felter.

Optegnelsen af spillepladen sker i to for-loops (med tællere n og i), og i optegnelsen skrives også tallet i hvert felt.

Muse-interface til data-modellen

Når der klikkes med musen i programvinduet løbes alle 6 x 6 felter igennem, og med sætningen

dist = sqrt(sq(n*40 + 30 - mouseX) + sq(i*40 + 30 - mouseY));

beregnes afstanden fra museklikket til hvert centrum.

Hvis afstanden er mindre end radius på 15, så tælles det aktuelle felt i arrayet en op.

int xWidth = 6;
int yHeight = 6;
int [][] bane;
void setup() {
  bane = new int[xWidth][];
  for (int n = 0; n < xWidth; n++) {
    bane[n] = new int[yHeight];
    for (int i = 0; i < yHeight; i++) {
      bane[n][i] = 0;
    }
  }
  size(260, 260);
  strokeWeight(2);
  textSize(20);
}

void draw() {
  background(255);
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      fill(240);
      ellipse(n*40 + 30, i*40 + 30, 30, 30);
      fill(0);
      text(bane[n][i], n*40 + 23, i*40 + 38);
    }
  }
}

void mousePressed() {
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      float dist = sqrt(sq(n*40 + 30 - mouseX) + sq(i*40 + 30 - mouseY));
      if (dist < 15) {
        bane[n][i]++;
      }
    }
  }
}
Programmets visning af spilleplade

Bane med tastatur navigation

Herunder er etableret en spille plade med rektangler, og det laves en data-model med en 10 x 8 spilleplade.

Data-model for spilleplade og aktiv plads

Data-modellen for spillepladen er et 2-dimensionelt Array af int, og størrelsen er 10 x 8, altså 80 heltal. I dette eksempel har de ikke fået tillagt nogen betydning.

Læg mærke til den specielle måde spillepladen oprettes på i et for-loop inde i setup, og i endnu et for-loop sættes alle værdier til 0.

En anden del af data-modellen er at, der er en xPos og yPos, som angiver den aktive plads. Ved hjælp af piletasterne kan den navigeres rundt.

Den aktive plads kan tælles op og ned med tasterne + og -.

Visning af Data-modellen

Arrayet vises som 10 x 8 felter, hvor indholdet printes som et tal.

Felterne laves som rektangler med størrelsen 60 x 40 pixel, og de placeres med en afstand på 70 x 50, så der kommer lidt luft imellem dem. Der laves et offset på 30 pixel, der giver lidt luft til kanten. Størrelsen af programvinduet tilpasses antallet en felter.

Optegnelsen af spillepladen sker i to for-loops (med tællere n og i), og i optegnelsen skrives også tallet i hvert felt.

Den aktive plads bliver illustreret ved at sætte en grå baggrund i feltet for den aktive plads.

int xWidth = 10;
int yHeight = 8;
int [][] bane;
int xPos = 0;
int yPos = 0;
void setup() {
  bane = new int[xWidth][];
  for (int n = 0; n < xWidth; n++) {
    bane[n] = new int[yHeight];
    for (int i = 0; i < yHeight; i++) {
      bane[n][i] = 0;
    }
  }
  size(750, 450);
  strokeWeight(2);
  textSize(20);
}

void draw() {
  background(255);
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      if (n == xPos && i == yPos) {
        fill(200);
      } else {
        fill(255);
      }
      rect(n*70 + 30, i*50 + 30, 60, 40);
      fill(0);
      text(bane[n][i], n*70 + 40, i*50 + 60);
    }
  }
}

void keyPressed() {
  println(key + " " + keyCode);
  if (key == CODED) {
    if (keyCode == UP) {
      if (yPos > 0) {
        yPos--;
      }
    } else if (keyCode == DOWN) {
      if (yPos < yHeight - 1) {
        yPos++;
      }
    } else if (keyCode == LEFT) {
      if (xPos > 0) {
        xPos--;
      }
    } else if (keyCode == RIGHT) {
      if (xPos < xWidth - 1) {
        xPos++;
      }
    }
  }
  if (key == '+') {
    bane[xPos][yPos]++;
  } else if (key == '-') {
    bane[xPos][yPos]--;
  }
}

Referencer

  1. Arrays Tutorial på Processing.org