利用processing 寫出一個小格鬥遊戲,可以移動 攻擊。
我們利用makeruno 連接兩個搖桿可以控制我們的人物,前後左右,但最後拍影片介紹時,發現搖桿攻擊的按鈕好像有問題,但之前有與老師討論過後,有成功讓人物攻擊與發出聲音。
-----------------------------------------------------------------------------------------------------------------------------
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); }
youtube連結: https://youtu.be/S13r9_q9qD4




沒有留言:
張貼留言