總共有三種速度(三排),有A~Z共26個英文字母隨機編排,只要按到相對應的字母就可消除,消除一個得10分,若未及時消除則game over並結算分數。
影片網址:https://www.youtube.com/watch?v=VQcOnpL-kI4&feature=youtu.be
2015年1月25日 星期日
2015年1月22日 星期四
期末作品 -遙控車
期末作品: 遙控車
透過手機藍芽傳訊號給藍芽模組後,讓模型車體可以依手機打的指令分別: 前進,後退,轉彎。
操作說明:
在手機輸入指令:
f,100 前進 ,速度:100
f,100 前進 ,速度:100
b,200 後退,速度:200
a,20 轉20度
過程:
通電後,藍芽模組開始亮紅燈。(測試線路)
過程:
將HC-06 藍芽模組的 : VCC 分別用電線接到 -----> Arduino Uno版子: 5 V
將HC-06 藍芽模組的 : GND 分別用電線接到 -----> Arduino Uno版子: GND
將HC-06 藍芽模組的 : TXD 分別用電線接到 -----> Arduino Uno版子: Pin 10(RX)
將HC-06 藍芽模組的 : RXD 分別用電線接到 -----> Arduino Uno版子: Pin 11(TX)
接完藍芽模組的線路後,接著拔掉藍芽模組,並將L293D模組疊在上方,接著伺服馬達也接在在上面,並將USB線插入Arduino的插孔與電腦上。
執行編譯Arduino 程式後
將藍芽模組接在剛剛已經設好的線路上。
連通後藍芽模組開始閃紅燈。
開啟手機的藍芽,並與藍芽模組 配對。
點入App中
搜尋藍芽,並配對藍芽。
" a,50" 讓伺服馬達轉50度。
測試減速馬達是否正常運轉,測試結果為正常。
但與 L293D模組接好後,卻無法運轉,初步判斷可能是線路差反,確定線路的正負沒錯後,
詢問過他人的想法後,在猜想有可能是馬達的電壓 9 V 與 Arduino 版的供電數 有關。
參考資料:
| Arduino 從基礎到實踐 / Michael McRoberts著 ; 杨继志, 郭敬译 |
車子模型
2015年1月19日 星期一
HW19, Week19, 期末作品
期末作品-Row, row, row your boat
(version 2-2)
[Version 2-2]遊戲規則與解說:
●操控:
◎向右=>滑左槳
◎向左=>滑右槳
●開始畫面:
◎player玩家
◎help幫助=>score+100
◎avoid避開=>score-100
◎Row to right=>Practice
向右可以進入練習模式
◎Row to left=>Start
向左可以直接遊戲
●練習模式:
◎Row to right=>good!
◎Row to left=>good!
●遊戲畫面:
◎失敗
分數為0即失敗
失敗後
Row to right=>Start
◎勝利
救到3隻水獺即可勝利
救到1隻水獺以圖式告知還需救幾隻(右下方)
勝利後
Row to right=>Start
◎遊戲中有音樂
◎碰到avoid與help均有音效
◎失敗與勝利之後
Row to right=>Start
向右均可再次遊戲
已改進:
●有練習模式,讓玩家可以先熟知玩法
●開始畫面:
向右可以進入練習模式
向左可以直接遊戲
作品第二版本影片:
Practice 模式
硬體photo:

●所有材料:
粗吸管(船桿)
海綿(船槳)
紙箱(海平面30*30*3、船高20)
鐵絲
上色用具
(version 2-2)
[Version 2-2]遊戲規則與解說:
●操控:
◎向右=>滑左槳
◎向左=>滑右槳
●開始畫面:
◎player玩家
◎help幫助=>score+100
◎avoid避開=>score-100
◎Row to right=>Practice
向右可以進入練習模式
◎Row to left=>Start
向左可以直接遊戲
●練習模式:
◎Row to right=>good!
◎Row to left=>good!
●遊戲畫面:
◎失敗
分數為0即失敗
失敗後
Row to right=>Start
◎勝利
救到3隻水獺即可勝利
救到1隻水獺以圖式告知還需救幾隻(右下方)
勝利後
Row to right=>Start
◎遊戲中有音樂
◎碰到avoid與help均有音效
◎失敗與勝利之後
Row to right=>Start
向右均可再次遊戲
已改進:
●有練習模式,讓玩家可以先熟知玩法
●開始畫面:
向右可以進入練習模式
向左可以直接遊戲
作品第二版本影片:
Practice 模式
互動概論期末作品-Row, row, row your boat (version 2-2) Demo Practice 模式
失敗畫面
互動概論期末作品-Row, row, row your boat (version 2-2) Demo 失敗畫面
勝利畫面
互動概論期末作品-Row, row, row your boat (version 2-2) Demo 勝利畫面
硬體介紹
互動概論期末作品-Row, row, row your boat (version 2-2) 硬體介紹
上課 Demo 側錄
互動概論期末作品-Row, row, row your boat (version 2-2) 上課 Demo 側錄
作品第一版本影片:
2015.0118互動概論期末作品-Row, row, row your boat (version 2-1)
硬體photo:
●船槳上的鐵絲與海平面上的鐵絲觸碰,
Arduino 即可傳送訊息給 Processing

●船槳上的鐵絲部分
藏在船槳的海綿裡與吸管裡
●船內有 Board 的固定位置
Board 才不會滑動
粗吸管(船桿)
海綿(船槳)
紙箱(海平面30*30*3、船高20)
鐵絲
上色用具
期末作品-快打旋風
遊戲名字:快打旋風
此遊戲為一個簡單的打擊遊戲,玩家可以使用箱子上的紅色按鈕,遊戲中會出現不同種臉部表情的頭,點擊不同的表情會有不同的分數,相反的點到有骨頭的圖示就會結束遊戲(影片中有介紹各個圖片對應到的分數),主要是考驗玩家的手速和反應力。
2015年1月18日 星期日
期末作品
我們期末作品是做接蘋果
做八個按鈕分別有八個道會掉蘋果
有紅色和綠色的蘋果
分數過了30分後會出現綠蘋果
綠蘋果比紅蘋果高分
遊戲時間為30秒
結束後螢幕會顯現總得分
p語言
import ddf.minim.*;
Minim m;
AudioPlayer player;
int []bz=new int[1000];
PImage imgZombie;
PImage imgRZombie;
PImage imgShoot;
PImage imgBG;
import processing.serial.*;
Serial myPort; // Create object from Serial class
int val;
void setup() {
size(800, 600);
imgZombie=loadImage("apple01.png");
imgRZombie=loadImage("apple02.png");
imgShoot=loadImage("shoot.png");
imgBG=loadImage("sky.png");
for (int i=0;i<1000;i++) {
bz[i]=int(random(8));
}
m = new Minim(this);
player = m.loadFile("apple.mp3");
//player.play();
String [] all = Serial.list();
String portName = all[all.length-1];
player.play();
myPort = new Serial(this, portName, 9600);
}
int now=0;
int a;
int total=0;
int countDown=300;
int countDown2=1860;//1860
void draw() {
background(imgBG);
print("val=" + val);
if ( myPort.available() > 0) { // If data is available,
val = myPort.read(); // read it and store it in val
}
int a=0;
if (a==0) {
if (countDown>0) {
countDown--;
textSize(100);
text(countDown/30+"Seconds", 200, 300);
return;
}
a++;
}
if (a==1) {
if (countDown2>0) {
countDown2--;
textSize(50);
text(countDown2/60+"Second", 20, 40);
for (int i=now;i<now+5;i++) {
if (now<=30)image(imgZombie, bz[i]*100, 400-(i-now)*100);
if (now>30)image(imgRZombie, bz[i]*100, 400-(i-now)*100);
}
image(imgShoot, 0, 500);
image(imgShoot, 100, 500);
image(imgShoot, 200, 500);
image(imgShoot, 300, 500);
image(imgShoot, 400, 500);
image(imgShoot, 500, 500);
image(imgShoot, 600, 500);
image(imgShoot, 700, 500);
}
a++;
}
if (a==2) {
if (countDown2/60==0)text("Score:"+total, 300, 350);
}
if (val-48==bz[now])
{
if (total<50)a=1;
if (total==50)a=2;
if (countDown2/60==0)a=0;
now++;
total=total+a;
}
}
/*void keyPressed(int val) {
//if (val==bz[now])
//{
// if (total<50)a=1;
// if (total==50)a=2;
// if (countDown2/60==0)a=0;
// now++;
// total=total+a;
// }
}*/
期末作業 貪吃小精靈
import processing.serial.*;
Serial myPort;
void draw() {
background(imgBG);
ser();
image(Elf, EX, EY);
touchGhost();
if(dir!=0){
image(ghostr, redx, redy);
ghost();
}
if(dirp!=0){
image(ghostp, pinkx, pinky);
ghostp();
}
if(dirg!=0){
image(ghostg, greenx, greeny);
ghostg();
}
}
void ser(){
if(myPort.available()>0){
int value=myPort.read();
int leftEX=EX, leftEY=EY, rightEX=EX+15, rightEY=EY+15;
if (table[leftEX][leftEY]<0)
{
if(value==82)
EY+=5;
if(value==76)
EX-=5;
}
if (table[rightEX][rightEY]<0)
{
if(value==85)
EX+=5;
if(value==68)
EY-=5;
}
println(value);
}
}
void mouseMoved() {
println(mouseX, mouseY);
}
void keyPressed()
{
int leftEX=EX, leftEY=EY, rightEX=EX+15, rightEY=EY+15;
if (table[leftEX][leftEY]<0)
{
if (keyCode == UP)
EY-=5;
if (keyCode == LEFT)
EX-=5;
}
if (table[rightEX][rightEY]<0)
{
if (keyCode == RIGHT)
EX+=5;
if (keyCode == DOWN)
EY+=5;
}
/* if (table[rightEX][rightEY]<0) println("safe");
else println("ac");*/
}
int dir= 1;
void ghost() {
float r = random(1, 5);
//if(table[redx][redy]==0)
//println("dir:"+dir+"*");
switch(dir) {
case 1:
{
if (table[redx+25][redy]<0)
{
redx+=2;
break;
}
else {
r = random(1, 5);
dir = int(r);
break;
}
}
case 2:
{
if (table[redx][redy+25]<0) {
redy+=2;
break;
}
else {
r = random(1, 5);
dir = int(r);
break;
}
}
case 3:
{
if (table[redx-5][redy]<0) {
redx-=2;
break;
}
else {
r = random(1, 5);
dir = int(r);
break;
}
}
case 4:
{
if (table[redx][redy-5]<0) {
redy-=2;
break;
}
else {
r = random(1, 5);
dir = int(r);
break;
}
}
}
println("rgb:"+table[redx][redy]);
}
int dirp= 2;
void ghostp() {
float r = random(1, 5);
//if(table[redx][redy]==0)
//println("dir:"+dir+"*");
switch(dirp) {
case 1:
{
if (table[pinkx+25][pinky]<0)
{
pinkx+=2;
break;
}
else {
r = random(1, 5);
dirp = int(r);
break;
}
}
case 2:
{
if (table[pinkx][pinky+25]<0) {
pinky+=2;
break;
}
else {
r = random(1, 5);
dirp = int(r);
break;
}
}
case 3:
{
if (table[pinkx-5][pinky]<0) {
pinkx-=2;
break;
}
else {
r = random(1, 5);
dirp = int(r);
break;
}
}
case 4:
{
if (table[pinkx][pinky-5]<0) {
pinky-=2;
break;
}
else {
r = random(1, 5);
dirp = int(r);
break;
}
}
}
}
int dirg= 3;
void ghostg() {
float r = random(1, 5);
//if(table[redx][redy]==0)
//println("dir:"+dir+"*");
switch(dirg) {
case 1:
{
if (table[greenx+25][greeny]<0)
{
greenx+=2;
break;
}
else {
r = random(1, 5);
dirg = int(r);
break;
}
}
case 2:
{
if (table[greenx][greeny+25]<0) {
greeny+=2;
break;
}
else {
r = random(1, 5);
dirg = int(r);
break;
}
}
case 3:
{
if (table[greenx-5][greeny]<0) {
greenx-=2;
break;
}
else {
r = random(1, 5);
dirg = int(r);
break;
}
}
case 4:
{
if (table[greenx][greeny-5]<0) {
greeny-=2;
break;
}
else {
r = random(1, 5);
dirg = int(r);
break;
}
}
}
}
void touchGhost()
{
println("EX"+EX+",EY"+EY+",PX"+pinkx+",PY"+pinky);
if(abs(pinkx-EX)<=10 && abs(pinky-EY)<=10)
{
dirp=0;
}
if(abs(redx-EX)<=10 && abs(redy-EY)<=10)
{
dir=0;
}
if(abs(greenx-EX)<=10 && abs(greeny-EY)<=10)
{
dirg=0;
}
if(dir==0 && dirp==0 && dirg==0)
println("YOU WIN");
}
互動技術概論_期末作業
AudioPlayer player;
AudioPlayer player1;
AudioPlayer player2;
Minim minim;//audio context
PImage img;
PImage img1;
PImage img2;
PImage img3;
PImage img4;
PImage img5;
PImage img6;
PImage win;
PImage lose;
PImage ready;
PImage GO;
int r1x=0;
int r2x=0;
float runnerx=80;
float runner2x=80;
float bgx=1500;
int checktype=-1;
int runtype=1;
int background=0;
int count=0;
int badrunner=0;
int readyt=0;
import processing.serial.*;
Serial myPort;
void setup() {
myPort=new Serial(this,"COM3",9600);
minim = new Minim(this);
player = minim.loadFile("file.mp3", 2048);
player1 = minim.loadFile("winner.wav", 2048);
player2 = minim.loadFile("loser.WAV", 2048);
img = loadImage("bg.jpg");
img1 = loadImage("2.png");
img2 = loadImage("1.png");
img3 = loadImage("3.png");
img4 = loadImage("5.png");
img5 = loadImage("4.png");
img6 = loadImage("6.png");
win = loadImage("win.jpg");
lose = loadImage("lose.jpg");
ready = loadImage("ready.png");
GO = loadImage("GO.png");
imageMode(CENTER);
size(800, 256);
}
int xx=0,zz=0;
void draw() {
//-------------------------------
if(myPort.available()>0)
{
int a=myPort.read();
if(a=='A') {xx=1;}
if(a=='B') {zz=1;}
}
if (background==1)
if (checktype!=-2)
if (xx==1) {
r1x+=20;
checktype=0;
runtype=2;
if (bgx>=-700)bgx-=20;
else runnerx+=20;
xx=0;
}
if (background==1)
if (checktype!=-3)
if (zz==1) {
r1x+=20;
checktype=11;
runtype=3;
if (bgx>=-700)bgx-=20;
else runnerx+=20;
zz=0;
}
//-------------------------------
if (background==0) {
image(img, bgx, 128);
image(img1, runnerx, 160);
image(img5, runner2x, 210);
count++;
if (count<=70)image(ready, 400, 128, 394, 150);
else image(GO, 400, 128, 394, 150);
if (count==100)background=1;
}
if (background==1) {
player.play();
image(img, bgx, 128);
if (runtype==1)image(img1, runnerx, 160);
if (checktype==10) {
runtype=1;
checktype=-2;
}
if (checktype==20) {
runtype=1;
checktype=-3;
}
if (runtype==2&&checktype<=10&&checktype>=0) {
image(img2, runnerx, 160);
checktype++;
}
if (runtype==3&&checktype<=20&&checktype>=11) {
image(img3, runnerx, 160);
checktype++;
}
badrunner++;
if ((badrunner%20)<=10&&(badrunner%20)>=0)image(img5, runner2x, 210);
if ((badrunner%20)>=11&&(badrunner%20)<=19)image(img6, runner2x, 210);
r2x+=5;
runner2x=runnerx+(r2x-r1x);
if (runnerx>=500||r2x>=2630)background=2;
}
if (background==2)
{
if (r2x<2630)
{
player1.play();
image(win, 400, 128);
} else if (r2x>=2630)
{
player2.play();
image(lose, 400, 128);
}
}
}
2015年1月12日 星期一
期末作品
小朋友過馬路
processing:
import processing.serial.*;
Serial myPort;
int savetime=20;//time
PImage people, amb, imgBG;
PImage car[]=new PImage[8];
float pX=300, pY=366;
void setup() {
size(600, 400);
frameRate(50);
myPort = new Serial(this, "COM4", 9600);
imgBG = loadImage("bg.png");
people = loadImage("super.png");//people
amb = loadImage("amb.png");//ambullance
for (int i=0;i<8;i++) {
car[i]=loadImage("car"+i+".png");
}
}
float carX[]= { 600, 0, 600, 600, 0, 0, 600, 0};//direction
float carVX[]= { -8, 4, -4, -5, 9, 5, -7, 6};//speed
int but;//button
void draw() {
background(imgBG);
image(people, pX, pY, 25, 35);
if (myPort.available()>0)
{
but = myPort.read();
}
textSize(24);//time
int passtime = millis() - savetime;
int gametime = 20-passtime/1000;
textSize(24);
text("T I M E : "+gametime, 400, 50);
for (int i=0;i<8;i++) { //car
image(car[i], carX[i], 85+i*35, 50, 35);
carX[i]+=carVX[i];
if (carX[i]>600) carX[i]=0;
if (carX[i]<0) carX[i]=+600;
}
for (int i=0;i<8;i++) {
if(dist(carX[i],85+i*35,pX,pY)<=20){
carX[i] = pX;
rect(150,100,300,200);
fill(255,255,0);
textSize(30);
text(" L O S E ",250,200);
fill(255,0,0);
}
}
//people
if (but == 'U'&& pY>50) pY-=5;//up
if (but == 'D'&& pY<365) pY+=5;//down
if (but == 'L'&& pX>15) pX-=5;//left
if (but == 'R'&& pX<565) pX+=5;//right
if( gametime <= 0 ){
//rect(150,100,300,200);
//fill(255,255,255);
background(#81FF7C);
textSize(30);
text(" T I M E I S U P ",170,200);
fill(255,0,0);
}
if(pY>35 && pY<50) {
//rect(150,100,300,200);
//fill(255,255,255);
background(#81FF7C);
textSize(30);
text(" W I N ",250,200);
fill(255,0,0);
}
}
arduino:
void setup(){
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
}
int up=0,down=0,left=0,right=0;
void loop(){
if(up==0 && digitalRead(2)==LOW){//pressed
Serial.write('u'); up=1;
}
if(up==1 && digitalRead(2)==HIGH){//not pressed
Serial.write('U'); up=0;
}
if(down==0 && digitalRead(3)==LOW){//pressed
Serial.write('d'); down=1;
}
if(down==1 && digitalRead(3)==HIGH){//not pressed
Serial.write('D'); down=0;
}
if(left==0 && digitalRead(4)==LOW){//pressed
Serial.write('l'); left=1;
}
if(left==1 && digitalRead(4)==HIGH){//not pressed
Serial.write('L'); left=0;
}
if(right==0 && digitalRead(5)==LOW){//pressed
Serial.write('r'); right=1;
}
if(right==1 && digitalRead(5)==HIGH){//not pressed
Serial.write('R'); right=0;
}
delay(10);//to avoid noise while pressing
}
訂閱:
文章 (Atom)

























.jpg)



