2023/11/23
隨機座位抽籤
1. 畫格子放文字
void setup()
{
size(600, 500);
}
void draw()
{
background(255);
for (int i=0; i<4; i++){
for (int j=0; j<6; j++){
fill(#F5B4B4); rect(j*100, i*100, 100, 100);
fill(0); text("Hello", j*100+25, i*100+50);
}
}
}
2. 隨機亂數
亂數決定數字會出現重複的數字
void setup()
{
size(600, 500);
for (int i=0; i<4; i++){
for (int j=0; j<5; j++){
value[i][j] = int(random(40));
}
}
}
int [][]value = new int[4][6];
void draw()
{
background(255);
for (int i=0; i<4; i++){
for (int j=0; j<6; j++){
fill(#F5B4B4); rect(j*100, i*100, 100, 100);
fill(0); text(value[i][j], j*100+25, i*100+50);
}
}
}
3. 挑兩個數字交換
用for (int k=0; k<2; k++)決定要交換幾次數字
void setup()
{
size(600, 500);
for (int i=0; i<4; i++){
for (int j=0; j<6; j++){
value[i][j] = i*6+j+10; // 從10開始, 數字不重複
}
}
for (int k=0; k<2; k++){
int i = int(random(4)), j = int(random(6));
int i2 = int(random(4)), j2 = int(random(6));
int tmp = value[i][j];
value[i][j] = value[i2][j2];
value[i2][j2] = tmp;
}
}
int [][]value = new int[4][6];
void draw()
{
background(255);
for (int i=0; i<4; i++){
for (int j=0; j<6; j++){
fill(#F5B4B4); rect(j*100, i*100, 100, 100);
fill(0); text(value[i][j], j*100+25, i*100+50);
}
}
}4. 5. 6. 切換場景
state=0時會在初始畫面白色背景, 按下滑鼠後會切換到紅色背景遊戲畫面,
上下鍵移動方塊到指定白色位置後, 就會跳到完成畫面藍色背景state=2
int state = 0;
void setup()
{
size(400, 400);
textSize(50);
}
int x=50, y=50;
void draw(){
if (state == 0){
background(255);
fill(0); text("Click to Start", 80, 200);
}else if (state == 1){
background(255, 0, 0);
fill(255); rect(300, 50, 50, 50);
fill(128); rect(x, y, 50, 50);
}else if (state == 2){
background(0, 0, 255);
}
}
void mousePressed(){
if (state == 0){
state = 1;
}
void keyPressed(){
if (state==1 && keyCode==RIGHT){
x+=10;
if (x==300) state=2;
}
}
7. 修正, 結束遊戲後會倒數10秒再回到初始白色畫面
int state = 0;
void setup()
{
size(400, 400);
textSize(50);
}
int x=50, y=50, t=100;
void draw(){
if (state == 0){
background(255);
fill(0); text("Click to Start", 80, 200);
x=50;
}else if (state == 1){
background(255, 0, 0);
fill(255); rect(300, 50, 50, 50);
fill(128); rect(x, y, 50, 50);
t=100;
}else if (state == 2){ // 倒數十秒鐘, 會回到第一關
background(0, 0, 255);
fill(255, 255, 0); text("Wait "+ t, 80, 200);
t--;
if (t==0) state=0;
}
}
void mousePressed(){
if (state == 0){
state = 1;
}
}
void keyPressed(){
if (state==1 && keyCode==RIGHT){
x+=10;
if (x==300) state=2;
}
}
投球機
PImage imgRack;
void setup()
{
size(300, 300);
imgRack = loadImage("rack.jpg");
}
void draw(){
background(255);
image(imgRack, 0, 0);
if (flying){
fill(#FFA652); ellipse(mouseX, mouseY, 20, 20);
x += vx;
y += vy;
vy += 0.98;
}else{
x = mouseX;
y = mouseY;
if (mousePressed){
fill(255); ellipse(posX, posY, 20, 20);
line(posX, posY, x, y);
}
}
fill(#FFA652); ellipse(x, y, 20, 20);
}
float posX=-100, posY=-100, vx, vy, x, y;
boolean flying = false;
void mousePressed(){
x = posX = mouseX;
y = posY = mouseY;
flying = false;
}
void mouseReleased(){
vx=posX-mouseX;
vy=posY-mouseY;
flying = true;
}
踩地雷
/** 踩地雷 **/
int [][]mine = new int[9][9];
void setup(){
size(450, 450);
for (int i=0; i<9; i++) mine[i][0]=9;
for (int k=0; k<1000; k++){
int i = int(random(9)), j = int(random(9));
int i2 = int(random(9)), j2 = int(random(9));
int tmp = mine[i][j];
mine[i][j] = mine[i2][j2];
mine[i2][j2] = tmp;
}
for (int i=0; i<9; i++){
for (int j=0; j<9; j++){ // 遇到紅色的地雷附近要+1
if (mine[i][j]==9){
addNumber(i-1, j-1);
addNumber(i-1, j);
addNumber(i-1, j+1);
addNumber(i, j-1);
addNumber(i, j); // 自己本身
addNumber(i, j+1);
addNumber(i+1, j-1);
addNumber(i+1, j);
addNumber(i+1, j+1);
}
}
}
}
void addNumber(int i, int j){
if (i<0 || j<0 || i>=9 || j>=9) return; // 超過範圍不做事
if (mine[i][j]!=9) mine[i][j]++; // 不是地雷就可以+1
}
void draw(){
for (int i=0; i<9; i++){
for (int j=0; j<9; j++){
if (mine[i][j]==9) fill(255, 128, 128);
else fill(255);
rect(j*50, i*50, 45, 45);
if (mine[i][j]!=0){
fill(0); text(" "+mine[i][j], j*50+23, i*50+23, 45, 45);
}
}
}
}
沒有留言:
張貼留言