2. 今天要上傳影片 (自己錄好,上傳youtube, 留下連結) (仿上學期電腦圖學課的期末作品)
=====
3. 發 Arduino Starter Kit (包含各式電子零件,及Arduino UNO板) 及 Arduino Mega 2560板
介紹:
轉珠遊戲!!贏書有兩種結果!!結束後會自動跳回起始畫面!!
不過因為玩的人有點爛!!所以它分成了兩部影片!!哈哈
import ddf.minim.*;
Minim minim;
AudioPlayer star;
int a=1;
int Xmax=7, Ymax=5;
int c[][]=new int [Xmax][Ymax];//chose color index
int Color[]=new int [5];//Chose color
int test=1, t;//read mouse event in first time
int X=-1, Y=-1;//=-1 loop unMousePressed don't do that
int Cx, Cy;//change ball X &Y value
int TC;//record move ball color
int N[][]=new int [Xmax][Ymax];
boolean clear=false;
int n;
boolean MoveBall=true;
int sum[]=new int [5];
boolean attack=false;
boolean Ustop=true;
int Blood=360, MBlood=360;
PImage background, ATTACK, win, lose, P1, P2, P3, P4, P5;
PImage play1, play2;
void setup() {
minim = new Minim(this);
background= loadImage("0.jpg");
ATTACK=loadImage("attack.jpg");
win=loadImage("win.jpg");
lose=loadImage("lose.jpg");
P1=loadImage("a.jpg");
P2=loadImage("b.jpg");
P3=loadImage("c.jpg");
P4=loadImage("d.jpg");
P5=loadImage("e.jpg");
play1=loadImage("play.png");
play2=loadImage("play2.png");
size(400, 600);
Color[0]=#E51E1E;
Color[1]=#201EE5;
Color[2]=#F6FF00;
Color[3]=#03FF00;
Color[4]=#5D1E9D;
for (int i=0;i<Xmax;i++) {
for (int j=0;j<Ymax;j++) {
c[i][j]=(int)random(5);
}
}
}
int AT=8;
boolean Win=false;
boolean Loss=false;
boolean stage=false;
int Time=20;
void draw() {
if (stage) {
if (Win||Loss) {
if (Win){image(win, 0, 0);}
else {image(lose, 0, 0);}
if(a==3){star.close();star=minim.loadFile("c.mp3");music();}
if(a==4){star.close();star=minim.loadFile("d.mp3");music();}
a=1;
if (Time<0) {
star.close();
Time=10;
AT=8;
Win=false;
Loss=false;
stage=false;
for (int i=0;i<Xmax;i++) {
for (int j=0;j<Ymax;j++) {
c[i][j]=(int)random(5);
}
}
Blood=360;
MBlood=360;
clear=false;
MoveBall=true;
attack=false;
Ustop=true;
}
Time--;
}
else {
if(a==2){star.close();star=minim.loadFile("b.mp3");music();}
a=3;
image(background, 0, 0);
image(P1, 5, 210);
image(P2, 85, 210);
image(P3, 165, 210);
image(P4, 245, 210);
image(P5, 325, 210);
stroke(0);
drawBall();
strokeCap(ROUND);
if (attack) {
if (AT>6) {
noFill();
for (int i=0;i<5;i++) {
stroke(Color[i]);
strokeWeight(10);
if (sum[i]!=0)
bezier(150+i*20, 80, i*80+20, 25, i*80+20, 100, i*80+40, 200);
}
}
else {
if (AT>4) {
for (int i=0;i<5;i++) {
Blood-=sum[i]*2;
sum[i]=0;
}
if (Blood<0) {
Blood=0;
Win=true;
}
}
else {
if (AT>2) {
image(ATTACK, 50, 5);
}
else if (AT>1) {
MBlood-=(random(20)+40);
if (MBlood<0) {
MBlood=0;
Loss=true;
a=4;
}
}
}
}
AT--;
if (AT<=0) {
attack=false;
}
}
strokeWeight(12);
stroke(#C10A0A);
strokeCap(PROJECT);
line(20, 10, 20+Blood, 10);
line(20, 320, 20+MBlood, 320);
strokeWeight(5);
stroke(#52091A);
fill(#F041B6);
ellipse(20, 10, 25, 25);
ellipse(20, 320, 25, 25);
stroke(0);
if (Ustop) {
if (MoveBall==true&&attack==false) {
frameRate(20);
if (mousePressed==true) {
fill(Color[TC]);
ellipse(mouseX, mouseY, 40, 40);
Cx=mouseX/10*10/50-1;
Cy=(mouseY-300)/10*10/50-1;
if (mouseX%50>=25&&mouseX%50<50)Cx+=1;
if ((mouseY-300)%50>=25&&(mouseY-300)%50<50)Cy+=1;
if (mouseX>350)Cx=6;//range
if (mouseY>550)Cy=4;
if (mouseX<50)Cx=0;
if (mouseY<350)Cy=0;
if (Cx!=X||Cy!=Y) {//not the same region
c[X][Y]=c[Cx][Cy];
X=Cx;
Y=Cy;
}
}
}
else {
frameRate(3);
if (n%3==0)score();
else if (n%3==1)fallBall();
else {
addBall();
Ustop=false;
}
n++;
test();
}
}
else {
score();
Ustop=true;
test();
if (MoveBall)attack=true;
}
}
}
else {
background(#13D5E5);
image(play1, 150, 150);
image(play2, 150, 280);
if (mousePressed==true) {
if (abs(mouseX-200)<100&&abs(mouseY-300)<100)
stage=true;
}
if(a==1){star=minim.loadFile("a.mp3");music();}
a=2;
}
}
void music(){
star.loop();
}
void stop() {
star.close();
minim.stop();
super.stop();
}
void mousePressed() {
if (t==0) {
X=mouseX/10*10/50-1;
Y=(mouseY-300)/10*10/50-1;
if (mouseX%50>=25&&mouseX%50<50)X+=1;
if ((mouseY-300)%50>=25&&(mouseY-300)%50<50)Y+=1;
if (mouseX>350)X=6;//range
if (mouseY>550)Y=4;
if (mouseX<50)X=0;
if (mouseY<350)Y=0;
TC=c[X][Y];
}
t=test;//read mosue event on first time
AT=8;
}
void mouseReleased() {
c[X][Y]=TC;
X=-1;
Y=-1;
t=0;
n=0;
MoveBall=false;
}
void test() {
MoveBall=true;
for (int i=0;i<Xmax;i++) {
for (int j=0;j<Ymax;j++) {
if (N[i][j]!=0)MoveBall=false;
}
}
}
void drawBall() {
for (int i=0;i<Xmax;i++) {
for (int j=0;j<Ymax;j++) {
if (i==X&&j==Y)continue;//mousePressed do
if (N[i][j]!=0)continue;
fill(Color[c[i][j]]);
ellipse((i+1)*50, (j+1)*50+300, 40, 40);
}
}
}
void addBall() {
for (int i=0;i<Xmax;i++) {
for (int j=0;j<Ymax;j++) {
if (N[i][j]==6) {
c[i][j]=(int)random(5);
N[i][j]=0;
}
}
}
}
void fallBall() {
for (int i=0;i<Xmax;i++) {
for (int j=0;j<Ymax;j++) {
if (N[i][j]!=0) {
for (int k=j;k>0;k--) {
c[i][k]=c[i][k-1];
N[i][k]=N[i][k-1];
}
N[i][0]=6;
}
}
}
}
void score() {
int count=0, count2=0;
for (int i=0;i<Xmax;i++) {
for (int j=0;j<Ymax;j++) {
for (int k=i+1;k<Xmax;k++) {
if (c[i][j]==c[k][j])count++;
else break;
}
for (int k=j+1;k<Ymax;k++) {
if (c[i][j]==c[i][k])count2++;
else break;
}
if (count>1) {
for (int k=i;k<=i+count;k++) {
N[k][j]=c[i][j]+1;
sum[c[i][j]]++;
}
}
if (count2>1) {
for (int k=j;k<=j+count2;k++) {
N[i][k]=c[i][j]+1;
sum[c[i][j]]++;
}
}
count=0;
count2=0;
}
}
}
沒有留言:
張貼留言