import processing.serial.*; // *
int b1, b2; // *
Serial port; // *
import ddf.minim.*;
PImage space;
int life = 3;
int score = 0;
int blink = 0;
boolean shoot = false;
int pos = 125;
int[] sphereXCoords = { randx(), randx(), randx() };
int[] sphereYCoords = { 0, 0, 0 };
int randx() {
return int( random(50, 200) );
}
int sphereDiameter = 15; // 球大小
PFont font;
AudioPlayer player;
Minim minim;
void setup() {
space = loadImage("space.jpg");
size(350, 350); // 視窗大小
font = createFont("FFScala", 10);
textFont(font);
// String portName = Serial.list()[0];
// port = new Serial(this,portName, 9600);
//port = new Serial(this, "COM5", 9600);
}
void draw() {
/* if(port.available()>0)
{
b1 = port.read(); // *
b2 = port.read(); // *
}
else
{
pos+=1;
}
frameRate(50);
if( b1 == 1 )
pos += 15;
else if( b1==0 )
pos+=15;*/
// 背景
// 背景顏色
image(space,0,0);
score++;
if( score%5==0 ) {
blink = 0;
}
else {
blink = 0;
}
// 設定字形
fill(255,0,0);
text("L I F E : "+life, 10, 20);
text("S E C O N D : "+score, 10, 35);
// 畫飛機
fill( color(192,192,192) ); // 著色
noStroke(); // 外框
ellipse(
pos, 250-15, // 圓心
5,10 // 長短軸
);
fill( color(192,192,192) );
noStroke();
triangle(
pos-5, 250-15, // x1, y1
pos+5, 250-15, // x2, y2
pos, 230-15 // x3, y3
);
triangle(
pos-15, 250-15, // x1, y1
pos+15, 250-15, // x2, y2
pos, 240-15 // x3, y3
);
smooth();
// 射子彈
if(shoot == true) {
sphereKiller(pos);
shoot = false;
}
// 隕石掉落
sphereDropper();
// 判斷遊戲是否結束
gameEnder();
}
// 隕石掉落
void sphereDropper() {
stroke(200,0,0);
fill(100,0,0);
for (int i=0; i<3; i++) {
ellipse(
sphereXCoords[i], sphereYCoords[i]++,
sphereDiameter, sphereDiameter
);
}
}
// 射子彈
void sphereKiller(int shotX) {
boolean hit = false;
for (int i=0; i<3; i++) {
if(
(shotX >= (sphereXCoords[i]-sphereDiameter/2) ) &&
(shotX <= (sphereXCoords[i]+sphereDiameter/2) )
) {
hit = true;
background(0,0,255);
strokeWeight(5);
stroke(0,0,100);
line(
pos, 230,
pos, sphereYCoords[i]
);
ellipse(
sphereXCoords[i], sphereYCoords[i],
sphereDiameter+25, sphereDiameter+25
);
sphereXCoords[i] = randx();
sphereYCoords[i] = 0;
strokeWeight(0.05);
}
}
if(hit == false) {
stroke(0,0,255);
strokeWeight(5);
line(pos, 0, pos, 230);
strokeWeight(0.05);
}
}
// 鍵盤事件
void keyPressed() {
if (key == CODED && pos<=220 && pos>=30) {
if (keyCode == RIGHT)
pos += 15;
else if (keyCode == LEFT)
pos -= 15;
else if( keyCode == UP )
shoot = true;
}
if( pos>220 )
pos = 30;
else if( pos<30 )
pos = 220;
}
// 判斷遊戲是否結束
void gameEnder() {
for (int i=0; i<3; i++) {
if(sphereYCoords[i] == 250) {
life--;
if( life==0 ) {
background( color(0,0,0) );
fill(255,0,0);
font = createFont("FFScala", 20);
textFont(font);
rotate(0);
translate(80, 50);
rotate((PI*20)/180);
translate(-80, -50);
text("G A M E O V E R", 80, 50);
font = createFont("FFScala", 12);
textFont(font);
text(" Y O U G O T "+score+" P O I N T S", 80, 70);
noLoop();
}
}
}
}
這是一個簡單的射擊遊戲,
一開始進入遊戲會出現一台灰色飛機以及數顆紅色隕石(隕石會往下移動)
左右鍵可以控制飛機,上鍵則是發射
如上圖,這是射擊到隕石的瞬間會閃一下這個畫面(看起來比較有射到東西的震撼的感覺)。
當隕石掉到最底而沒有射擊則會扣命
當命都結束時會出現GAMEOVER字樣,還有印出玩家所得到的分數。
展示影片連結:
沒有留言:
張貼留言