黑色火柴人用DCXV來做上下左右 攻擊鍵為Q。
紅色火柴人用5213來做上下左右 攻擊鍵為7 。
賣點於有種懷舊的感覺 好像以前在電腦上玩史萊姆的家的火柴人遊戲。
從人不會變圖片的上下左右,到會變圖片的上下左右,然後再針對左右方向做攻擊的動作,到設定可扣血範圍,連動到血量的變化跟擊打聲音。圖片也都是我們一個一個畫的,最後我們利用maker_uno 與搖桿並與老師討論,借助老師的幫忙後可以攻擊跟移動。
但還是有許多紕漏可以改進 例如 增加防禦 介面腳色可以在更精細等等。
但最後拍影片介紹時,發現搖桿攻擊的按鈕好像有問題,但之前有與老師討論過後,有成功讓人物攻擊與發出聲音。
youtube連結網址:https://www.youtube.com/watch?v=S13r9_q9qD4&feature=youtu.be
youtube連結網址:https://www.youtube.com/watch?v=S13r9_q9qD4&feature=youtu.be
processing端的程式碼
import processing.sound.*;
import ddf.minim.*;
import processing.serial.*;
Serial serial;
int x, y, a, b, c, d;
Minim minim;
AudioPlayer player;
int countime=11880;
PImage imgloading, imgpressshift, imgpressnumlock;
PImage imgblackman, imgredman;
PImage imgblackmanwin, imgredmanwin;
float blackmanX=100, blackmanY=100, redmanX=1000, redmanY=100;
float blackmanVX=0, blackmanVY=0, redmanVX=0, redmanVY=0;
float blackbloodX=320, redbloodX=880;
//SoundFile soundfile1, soundfile2, soundfile3;
AudioPlayer soundfile1, soundfile2, soundfile3;
void setup() {
serial = new Serial(this, "COM3", 19200);
size(1200, 700);
imgloading = loadImage("loading.png");
imgpressshift = loadImage("pressshift.png");
imgpressnumlock = loadImage("pressnumlock.png");
imgblackman = loadImage("man1right.png");
imgredman = loadImage("man2left.png");
imgblackmanwin=loadImage("blackmanwin.png");
imgredmanwin=loadImage("redmanwin.png");
//soundfile2= new SoundFile (this, "punch.mp3");
//soundfile3= new SoundFile (this, "kick1.wav");
//soundfile3.play();
minim = new Minim(this);
soundfile2=minim.loadFile("punch.mp3");
soundfile3=minim.loadFile("kick.mp3");
//soundfile3.play();
}
void draw() {
if (serial.available()>0) {
String now=serial.readString();
String[] xyab=splitTokens(now);
x=1023-int (xyab[0]);
y=1023-int (xyab[1]);
a=1023-int (xyab[2]);
b=1023-int (xyab[3]);
c=int (xyab[4]);
d=int (xyab[5]);
if (x > 601) {
blackmanVY = +4;
bsoftBrakeY=0;
}
if (x < 401) {
blackmanVY = -4;
bsoftBrakeY=0;
}
if (x < 601 && x > 401) {
bsoftBrakeY=1;
}
if (y > 606) {
imgblackman = loadImage("man1left.png");
blackmanVX=-4;
bsoftBrakeX=0;
blackmanstatus = 2;
}
if (y < 406) {
imgblackman = loadImage("man1right.png");
blackmanVX=4;
bsoftBrakeX=0;
blackmanstatus = 1;
}
if (y < 606 && x > 406) {
bsoftBrakeX=1;
}
if (a > 612) {
redmanVY = 4;
rsoftBrakeY=0;
}
if (a < 412) {
redmanVY = -4;
rsoftBrakeY=0;
}
if (a < 612 && a > 412) {
rsoftBrakeY=1;
}
if (b > 624) {
imgredman = loadImage("man2left.png");
redmanVX=-4;
rsoftBrakeX=0;
redmanstatus = 2;
}
if (b < 424) {
imgredman = loadImage("man2right.png");
redmanVX=4;
rsoftBrakeX=0;
redmanstatus = 1;
}
if (b < 624 && b > 424) {
rsoftBrakeX=1;
}
if (c<1023) {
if (blackmanstatus==1) {
imgblackman = loadImage("man1right.png");
}
if (blackmanstatus==2) {
imgblackman = loadImage("man1left.png");
}
}
if (c==1023) {
if (blackmanstatus == 1) {
imgblackman = loadImage("blackmanattackright.png");
if (blackmanX+100>redmanX+20 && blackmanX+100<redmanX+80 && blackmanY+50>redmanY+20 && blackmanY+50<redmanY+120) {
redbloodX = redbloodX +10 ;
soundfile2.rewind();
soundfile2.play();
}
}
if (blackmanstatus == 2) {
imgblackman = loadImage("blackmanattackleft.png");
if (blackmanX>redmanX+20 && blackmanX<redmanX+80 && blackmanY+50>redmanY+20 && blackmanY+50<redmanY+120) {
redbloodX = redbloodX +10 ;
soundfile2.rewind();
soundfile2.play();
}
}
}
if (d<1023) {
if (redmanstatus==1) {
imgredman = loadImage("man2right.png");
}
if (redmanstatus==2) {
imgredman = loadImage("man2left.png");
}
}
if (d==1023) {
if (redmanstatus==1) {
imgredman = loadImage("redmanattackright.png");
if (redmanX+100>blackmanX+20 && redmanX+100<blackmanX+80 && redmanY+50>blackmanY+20 && redmanY+50<blackmanY+120) {
blackbloodX = blackbloodX-10 ;
soundfile3.rewind();
soundfile3.play();
}
}
if (redmanstatus==2) {
imgredman = loadImage("redmanattackleft.png");
if (redmanX>blackmanX+20 && redmanX<blackmanX+80 && redmanY+50>blackmanY+20 && redmanY+50<blackmanY+120) {
blackbloodX = blackbloodX-10 ;
soundfile3.rewind();
soundfile3.play();
}
}
}
}
if (countime<60) background(#ED16B0);
else {
countime--;
}
if (countime/60 > 195) {
image(imgloading, 0, 0, 1200, 700);
}
if (countime/60 <= 195 && countime/60 > 193) {
image(imgpressshift, 0, 0, 1200, 700);
}
if (countime/60 <= 193 && countime/60 > 191) {
image(imgpressnumlock, 0, 0, 1200, 700);
}
if (countime/60 <= 191) {
background(255);
fill(#4E1CE8);
rect(0, 0, 1200, 20);
rect(0, 20, 20, 700);
rect(20, 650, 1200, 680);
rect(1180, 20, 1200, 700);
fill(#DDEA28);
textSize(30);
text("Time: "+int(countime/60), 530, 685);
fill(0);
rect(20, 665, blackbloodX, 20);
fill(#D6233B);
rect(redbloodX, 665, 300, 20);
image(imgblackman, blackmanX, blackmanY, 100, 140);
image(imgredman, redmanX, redmanY, 100, 140);
}
if (blackmanX>20 && blackmanX<1080) {
blackmanX += blackmanVX;
} else if (blackmanX<=20) {
blackmanX=blackmanX+5;
} else if (blackmanX>=1080) {
blackmanX=blackmanX-5;
}
if (blackmanY>20 && blackmanY<509) {
blackmanY += blackmanVY;
} else if (blackmanY<=20) {
blackmanY=blackmanY+6;
} else if (blackmanY>=509) {
blackmanY=blackmanY-5;
}
if (redmanX>20 && redmanX<1080) {
redmanX += redmanVX;
} else if (redmanX<=20) {
redmanX=redmanX+5;
} else if (redmanX>=1080) {
redmanX=redmanX-5;
}
if (redmanY>20 && redmanY<509) {
redmanY += redmanVY;
} else if (redmanY<=20) {
redmanY=redmanY+5;
} else if (redmanY>=509) {
redmanY=redmanY-5;
}
if (bsoftBrakeX==1) {
blackmanVX *= 0.95;
}
if (bsoftBrakeY==1) {
blackmanVY *= 0.7;
}
if (rsoftBrakeX==1) {
redmanVX *= 0.95;
}
if (rsoftBrakeY==1) {
redmanVY *= 0.7;
}
if (blackbloodX<21) {
image(imgredmanwin, 0, 0, 1200, 700);
}
if (redbloodX> 1179) {
image(imgblackmanwin, 0, 0, 1200, 700);
}
if (countime/60 == 0) {
if (blackbloodX-20 > 1180-redbloodX) {
image(imgblackmanwin, 0, 0, 1200, 700);
} else if (blackbloodX-20 < 1180-redbloodX) {
image(imgredmanwin, 0, 0, 1200, 700);
} else background(#ED16B0);
}
}
int bsoftBrakeX=0, bsoftBrakeY=0;
int rsoftBrakeX=0, rsoftBrakeY=0;
void keyReleased() {
if (keyCode==86) bsoftBrakeX=1;
if (keyCode==88) bsoftBrakeX=1;
if (keyCode==68) bsoftBrakeY=1;
if (keyCode==81) {
if (blackmanstatus==1) {
imgblackman = loadImage("man1right.png");
}
if (blackmanstatus==2) {
imgblackman = loadImage("man1left.png");
}
}
if (key==51) rsoftBrakeX=1;
if (key==49) rsoftBrakeX=1;
if (key==53) rsoftBrakeY=1;
if (key==55) {
if (redmanstatus==1) {
imgredman = loadImage("man2right.png");
}
if (redmanstatus==2) {
imgredman = loadImage("man2left.png");
}
}
//if(keyCode=='DOWN') bsoftbrakeY=1;
//if(keyCode==50) rsoftBrakeY=1;
}
int blackmanstatus;
int redmanstatus;
void keyPressed() {
if (keyCode==81) {
if (blackmanstatus == 1) {
imgblackman = loadImage("blackmanattackright.png");
if (blackmanX+100>redmanX+20 && blackmanX+100<redmanX+80 && blackmanY+50>redmanY+20 && blackmanY+50<redmanY+120) {
redbloodX = redbloodX +10 ;
soundfile2.rewind();
soundfile2.play();
}
}
if (blackmanstatus == 2) {
imgblackman = loadImage("blackmanattackleft.png");
if (blackmanX>redmanX+20 && blackmanX<redmanX+80 && blackmanY+50>redmanY+20 && blackmanY+50<redmanY+120) {
redbloodX = redbloodX +10 ;
soundfile2.rewind();
soundfile2.play();
}
}
}
if (keyCode==86) {
imgblackman = loadImage("man1right.png");
blackmanVX=4;
bsoftBrakeX=0;
blackmanstatus = 1;
//if(keyCode==81) {imgblackman = loadImage("blackmanattackright.png"); }
}
if (keyCode==88) {
imgblackman = loadImage("man1left.png");
blackmanVX=-4;
bsoftBrakeX=0;
blackmanstatus = 2;
}
if (keyCode==68) {
blackmanVY = -4;
bsoftBrakeY=0;
}
if (keyCode==67) {
blackmanVY = 4;
bsoftBrakeY=0;
}
if (key==51) {
imgredman = loadImage("man2right.png");
redmanVX=4;
rsoftBrakeX=0;
redmanstatus = 1;
}
if (key==49) {
imgredman = loadImage("man2left.png");
redmanVX=-4;
rsoftBrakeX=0;
redmanstatus = 2;
}
if (key==53) {
redmanVY = -4;
rsoftBrakeY=0;
}
if (key==50) {
redmanVY = 4;
rsoftBrakeY=0;
}
if (key==55) {
if (redmanstatus==1) {
imgredman = loadImage("redmanattackright.png");
if (redmanX+100>blackmanX+20 && redmanX+100<blackmanX+80 && redmanY+50>blackmanY+20 && redmanY+50<blackmanY+120) {
blackbloodX = blackbloodX-10 ;
soundfile3.rewind();
soundfile3.play();
}
}
if (redmanstatus==2) {
imgredman = loadImage("redmanattackleft.png");
if (redmanX>blackmanX+20 && redmanX<blackmanX+80 && redmanY+50>blackmanY+20 && redmanY+50<blackmanY+120) {
blackbloodX = blackbloodX-10 ;
soundfile3.rewind();
soundfile3.play();
}
}
}
}
ARDUINO端的程式碼
void setup() {
// put your setup code here, to run once:
Serial.begin(19200);
pinMode(4,INPUT_PULLUP);
pinMode(5,INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
int x = analogRead(A0);
int y = analogRead(A1);
int a = analogRead(A2);
int b = analogRead(A3);
int c = digitalRead(2);
int d = digitalRead(3);
Serial.print(x);
Serial.print(" ");
Serial.print(y);
Serial.print(" ");
Serial.print(a);
Serial.print(" ");
Serial.print(b);
Serial.print(" ");
if(c==HIGH) Serial.print(0);//
else Serial.print(1023);//Serial.print(c);
Serial.print(" ");
if(d==HIGH) Serial.print(0);//
else Serial.print(1023);//Serial.print(d);
Serial.println();
delay(100);
}




沒有留言:
張貼留言