網路連線的寫法
網路連線的寫法
程式素描簿(Sketch)-->使用函式庫(Library)-->Network這時候就會顯示出一行 import processing.net.*; 的程式碼
Sever端:week12_2_2_network_drawing_sever
import processing.net.*;
Server myServer;
void setup(){ size(200,200); myServer = new Server(this,5204);}void draw(){ //myServer.write("Hello");}void mouseDragged(){//拖動滑鼠時 myServer.write(mouseX); myServer.write(mouseY);}
Client端:week12_2_2_network_drawing_client
import processing.net.*;
Client myClient;
void setup(){ size(200,200); myClient = new Client(this,"127.0.0.1",5204); background(#FFFFF2);}
void draw(){ if(myClient.available()>0){ //String line = myClient.readString(); //fill(0); //text(line,100,100); int x = myClient.read(); int y = myClient.read(); ellipse(x,y,3,3); }}
射擊相關程式寫法1.射擊方向的旋轉2.碰撞的入射角等於反射角
//撞球:要使用貓狗大戰step01射擊方向的旋轉void setup(){ size(600,400);}float angle1=0,angle2=-PI;void draw(){ background(#218370); fill(255);//白色背景 rect(50,50,500,300);//最外圍的框線 fill(255,0,0);//紅色 rect(60,60,160-20,280);//紅色長方形的框線 ellipse(100,200,50,50);//畫出紅方中心的圓球 line(100,200,100+40*cos(angle1),200+40*sin(angle1));//紅方發射線 if(mousePressed && mouseButton == LEFT)angle1 += 0;//當點擊左鍵就不旋轉 else angle1 += 0.05;//如果沒有點擊左鍵發射球,發射線旋轉角度 if(bulletFly){//紅方發射的球 fill(255,80,80); ellipse(bulletX,bulletY,10,10);//座標及球的大小 bulletX+=bulletVX; bulletY+=bulletVY; } fill(0,255,0);//綠色背景 rect(540-(160-20),60,160-20,280);//綠方的框線 ellipse(500,200,50,50);//畫出綠方中心的球 line(500,200,500+40*cos(angle2),200+40*sin(angle2));//綠方的發射線 if(mousePressed && mouseButton == LEFT)angle2 += 0;//當點擊左鍵就不旋轉 else angle2 += 0.05;//若沒有點擊左鍵,發射線的旋轉角度 if(bulletFly2){//這邊概念跟紅球發射一樣 fill(80,255,80); ellipse(bulletX2,bulletY2,10,10); bulletX2+=bulletVX2; bulletY2+=bulletVY2; }}float bulletX,bulletY,bulletVX,bulletVY;//設定紅方子彈的速度boolean bulletFly=false;//預設子彈不是起飛的狀態float bulletX2,bulletY2,bulletVX2,bulletVY2;//設定綠方子彈的速度boolean bulletFly2=false;//預設子彈不是起飛的狀態void mousePressed(){//設定按鍵 if(mouseButton==LEFT){//滑鼠左鍵 bulletX=100;//紅球x座標 bulletY=200;//紅球y座標 bulletVX = cos(angle1);//紅球x方向的速度 bulletVY = sin(angle1);//紅球y方向的速度 bulletFly=true;//子彈會飛 }else if(mouseButton == RIGHT){//滑鼠右鍵 bulletX2=500;//紅球x座標 bulletY2=200;//紅球y座標 bulletVX2 = cos(angle1);//綠球x方向的速度 bulletVY2 = sin(angle1);//綠球y方向的速度 bulletFly2=true;//子彈會飛 }}
對應程式整理:背景顏色background(#218370);是墨綠色底色
白色框fill(255);//白色背景rect(50,50,500,300);//最外圍的框線
紅色框與紅球fill(255,0,0);//紅色rect(60,60,160-20,280);//紅色長方形的框線ellipse(100,200,50,50);//畫出紅方中心的圓球,(100,200)是座標位置,50,50是球的大小
綠色框與綠球,概念跟紅色球相同fill(0,255,0);//綠色背景rect(540-(160-20),60,160-20,280);//綠方的框線ellipse(500,200,50,50);//畫出綠方中心的球
發射線與旋轉角度line(100,200,100+40*cos(angle1),200+40*sin(angle1));//紅方發射線line(500,200,500+40*cos(angle2),200+40*sin(angle2));//綠方發射線
點擊對應按鍵會讓球飛出去(以紅球舉例)if(mousePressed && mouseButton == LEFT)angle1 += 0;//當點擊左鍵就不旋轉else angle1 += 0.05;//如果沒有點擊左鍵發射球,發射線旋轉角度void mousePressed(){//設定按鍵 if(mouseButton==LEFT){//滑鼠左鍵 bulletX=100;//紅球x座標 bulletY=200;//紅球y座標 bulletVX = cos(angle1);//紅球x方向的速度 bulletVY = sin(angle1);//紅球y方向的速度 bulletFly=true;//子彈會飛 }}
發射球(子彈)的射擊速度(以紅球舉例)if(bulletFly){//紅方發射的球 fill(255,80,80); ellipse(bulletX,bulletY,10,10);//座標及球的大小 bulletX+=bulletVX; bulletY+=bulletVY; }
可以看見做出來的效果如圖:當點擊左鍵,紅色方的砲管會停下來並發射紅色的砲彈當點擊右鍵,綠色方的砲管會停下來並發射綠色的砲彈
程式素描簿(Sketch)-->使用函式庫(Library)-->Network
這時候就會顯示出一行 import processing.net.*; 的程式碼
Sever端:week12_2_2_network_drawing_sever
import processing.net.*;
Server myServer;
void setup(){
size(200,200);
myServer = new Server(this,5204);
}
void draw(){
//myServer.write("Hello");
}
void mouseDragged(){//拖動滑鼠時
myServer.write(mouseX);
myServer.write(mouseY);
}
Client端:week12_2_2_network_drawing_client
import processing.net.*;
Client myClient;
void setup(){
size(200,200);
myClient = new Client(this,"127.0.0.1",5204);
background(#FFFFF2);
}
void draw(){
if(myClient.available()>0){
//String line = myClient.readString();
//fill(0);
//text(line,100,100);
int x = myClient.read();
int y = myClient.read();
ellipse(x,y,3,3);
}
}
射擊相關程式寫法
1.射擊方向的旋轉
2.碰撞的入射角等於反射角
//撞球:要使用貓狗大戰step01射擊方向的旋轉
void setup(){
size(600,400);
}
float angle1=0,angle2=-PI;
void draw(){
background(#218370);
fill(255);//白色背景
rect(50,50,500,300);//最外圍的框線
fill(255,0,0);//紅色
rect(60,60,160-20,280);//紅色長方形的框線
ellipse(100,200,50,50);//畫出紅方中心的圓球
line(100,200,100+40*cos(angle1),200+40*sin(angle1));//紅方發射線
if(mousePressed && mouseButton == LEFT)angle1 += 0;//當點擊左鍵就不旋轉
else angle1 += 0.05;//如果沒有點擊左鍵發射球,發射線旋轉角度
if(bulletFly){//紅方發射的球
fill(255,80,80);
ellipse(bulletX,bulletY,10,10);//座標及球的大小
bulletX+=bulletVX;
bulletY+=bulletVY;
}
fill(0,255,0);//綠色背景
rect(540-(160-20),60,160-20,280);//綠方的框線
ellipse(500,200,50,50);//畫出綠方中心的球
line(500,200,500+40*cos(angle2),200+40*sin(angle2));//綠方的發射線
if(mousePressed && mouseButton == LEFT)angle2 += 0;//當點擊左鍵就不旋轉
else angle2 += 0.05;//若沒有點擊左鍵,發射線的旋轉角度
if(bulletFly2){//這邊概念跟紅球發射一樣
fill(80,255,80);
ellipse(bulletX2,bulletY2,10,10);
bulletX2+=bulletVX2;
bulletY2+=bulletVY2;
}
}
float bulletX,bulletY,bulletVX,bulletVY;//設定紅方子彈的速度
boolean bulletFly=false;//預設子彈不是起飛的狀態
float bulletX2,bulletY2,bulletVX2,bulletVY2;//設定綠方子彈的速度
boolean bulletFly2=false;//預設子彈不是起飛的狀態
void mousePressed(){//設定按鍵
if(mouseButton==LEFT){//滑鼠左鍵
bulletX=100;//紅球x座標
bulletY=200;//紅球y座標
bulletVX = cos(angle1);//紅球x方向的速度
bulletVY = sin(angle1);//紅球y方向的速度
bulletFly=true;//子彈會飛
}else if(mouseButton == RIGHT){//滑鼠右鍵
bulletX2=500;//紅球x座標
bulletY2=200;//紅球y座標
bulletVX2 = cos(angle1);//綠球x方向的速度
bulletVY2 = sin(angle1);//綠球y方向的速度
bulletFly2=true;//子彈會飛
}
}
對應程式整理:
背景顏色
background(#218370);是墨綠色底色
白色框
fill(255);//白色背景
rect(50,50,500,300);//最外圍的框線
紅色框與紅球
fill(255,0,0);//紅色
rect(60,60,160-20,280);//紅色長方形的框線
ellipse(100,200,50,50);//畫出紅方中心的圓球,(100,200)是座標位置,50,50是球的大小
綠色框與綠球,概念跟紅色球相同
fill(0,255,0);//綠色背景
rect(540-(160-20),60,160-20,280);//綠方的框線
ellipse(500,200,50,50);//畫出綠方中心的球
發射線與旋轉角度
line(100,200,100+40*cos(angle1),200+40*sin(angle1));//紅方發射線
line(500,200,500+40*cos(angle2),200+40*sin(angle2));//綠方發射線
點擊對應按鍵會讓球飛出去(以紅球舉例)
if(mousePressed && mouseButton == LEFT)angle1 += 0;//當點擊左鍵就不旋轉
else angle1 += 0.05;//如果沒有點擊左鍵發射球,發射線旋轉角度
void mousePressed(){//設定按鍵
if(mouseButton==LEFT){//滑鼠左鍵
bulletX=100;//紅球x座標
bulletY=200;//紅球y座標
bulletVX = cos(angle1);//紅球x方向的速度
bulletVY = sin(angle1);//紅球y方向的速度
bulletFly=true;//子彈會飛
}
}
發射球(子彈)的射擊速度(以紅球舉例)
if(bulletFly){//紅方發射的球
fill(255,80,80);
ellipse(bulletX,bulletY,10,10);//座標及球的大小
bulletX+=bulletVX;
bulletY+=bulletVY;
}
可以看見做出來的效果如圖:
當點擊左鍵,紅色方的砲管會停下來並發射紅色的砲彈
當點擊右鍵,綠色方的砲管會停下來並發射綠色的砲彈




沒有留言:
張貼留言