2023年12月21日 星期四

Doing Nothing Losing Life Week15

Week15 

這周的目標是希望不要一次將所有字串顯現出來

```
import processing.sound.*;

int[][] pos = {
  {66, 532}, {205, 532}, {348, 532}, {492, 532}, {633, 532}, {773, 532}, {914, 532}
};

SoundFile Do, Re, Mi, Fa, Sol, La, Si;
PImage img, img2;
String marqueeText = "5334221234555533422135532222234333334553342213551";
String backup = "5334221234555533422135532222234333334553342213551";
float marqueeX; // 初始化文字的起始位置
int marqueeColor = 255; // 初始文字顏色為白色
int marqueeTextI=0;
void setup() {
  size(960, 540);
  img = loadImage("Piano.png");
  img2 = loadImage("Piano2.png");
  Do = new SoundFile(this, "Do.MP3");
  Re = new SoundFile(this, "Re.MP3");
  Mi = new SoundFile(this, "Mi.MP3");
  Fa = new SoundFile(this, "Fa.MP3");
  Sol = new SoundFile(this, "Sol.MP3");
  La = new SoundFile(this, "La.MP3");
  Si = new SoundFile(this, "Si.MP3");
  rectMode(CENTER);
 /* marqueeText = "5334221234555" + "5334221234555" + "5334221234555" + "5334221234555" + "5334221234555" +
    "5334221234555" + "5334221234555" + "5334221234555" + "5334221234555" + "5334221234555"; */
}

void draw() {
  background(#303030);
  image(img2, -10, 150, 1000, 540);
  fill(#616362);
  rect(480, 153, 980, 5);
  text(marqueeText.charAt(marqueeTextI),200,200);

  // 跑馬燈文字
  textSize(60);
  for (int i = 0; i < marqueeText.length(); i++) {
    char currentChar = marqueeText.charAt(i);
    fill(i == 0 ? marqueeColor : 255);//後方數字始終為白色
    text(currentChar, marqueeX + i * textWidth(currentChar), 100);
  }

  if (marqueeX < -textWidth(marqueeText)) {
    marqueeX = width;
    marqueeColor = 255;
  }

  // 檢查是否有按鍵被按下,以及該按鍵是否與跑馬燈上的數字相同
  for (int i = 0; i < 7; i++) {
    if (pressed[i]) {
      fill(#7eeffd);
      rect(pos[i][0], pos[i][1], 130, 10, 5);
    }
  }
}

boolean[] pressed = new boolean[7];

void keyPressed() {
  if(keyCode==RIGHT) marqueeTextI=(marqueeTextI+1) % marqueeText.length();
  for (int i = 0; i < 7; i++) {
    if (key == str(i + 1).charAt(0)) {
      if (marqueeText.length() > 0 && i + 1 == int(marqueeText.charAt(0) - '0')) {
        marqueeColor = color(255, 255, 0);//按下(住)顏色變為黃色
        marqueeText = marqueeText.substring(1);
        if(marqueeText.length()<1) marqueeText += backup;
        //marqueeTextI=(marqueeTextI+1) % marqueeText.length();
        break;
      }
    }
  }

  if (key == '1') {
    pressed[0] = true;
    Do.play();
  } else if (key == '2') {
    pressed[1] = true;
    Re.play();
  } else if (key == '3') {
    pressed[2] = true;
    Mi.play();
  } else if (key == '4') {
    pressed[3] = true;
    Fa.play();
  } else if (key == '5') {
    pressed[4] = true;
    Sol.play();
  } else if (key == '6') {
    pressed[5] = true;
    La.play();
  } else if (key == '7') {
    pressed[6] = true;
    Si.play();
  }
}

void keyReleased() {
  for (int i = 0; i < 7; i++) {
    if (key == str(i + 1).charAt(0)) {
      marqueeColor = color(255, 255, 255);//放開之後顏色變回白色
      pressed[i] = false;
      break;
    }
  }
}
```

if(marqueeText.length()<1) marqueeText += backup;
當字串剩下一個數字的時候加入備份
黃色部份顯示當前希望按下的數字。




沒有留言:

張貼留言