code.club
標題:
學習 processing 語言很不錯
[打印本頁]
作者:
return
時間:
2015-11-7 23:52
標題:
學習 processing 語言很不錯
本帖最後由 return 於 2015-11-8 00:36 編輯
最近接觸了一種視覺化的基於JAVA的語言叫 processing,覺得不算難學,很快可以上手,做一些小遊戲。
最近做了很簡單的打磚塊和幾A幾B這種猜數字的小遊戲,頗有點成就感。只是程式本身就像一個充滿了補丁的衣服一樣,缺什麼補什麼,錯哪裡再改哪裡,所以十分凌亂,但執行起來還「堪用」吧。
打磚塊的遊戲
http://q.to/pong
只有一排磚,打完了會再出現。一開始請用滑鼠點一下圖中間,然後用滑鼠或者左右鍵來移動下方的板子。球往上時比較慢,下墜時會加快。可能會有些bug,請多指教。
有興趣學程式語言的版友也不妨去玩看看。
http://processing.org
政大最近有開線上課程,
http://programming101.cs.nccu.edu.tw/index.html
作者:
return
時間:
2021-7-21 06:52
float bar_x,bar_y,ball_x,ball_y,speed_x,speed_y,brick_x,brick_y,brick_width,brick_height,i,j,up_edge,rnd;
boolean isPlaying,goLeft,goRight, show1,show2,show3,show4,show5,show6; //使用show變數來決定磚塊消失與否,可用陣列
int n=0,gameState=1,score=0,best_score=0;
PFont word;
void setup(){
size(500,400);
word = createFont("Arial",50);
textFont(word);
textAlign(CENTER);
stroke(0);
bar_x = random(100,400);//擊板起始位置X座標隨機出現
bar_y = height-10;//擊板y定在下邊界減10的地方,擊板高度為10
ball_x= width/2-8;//球出現的x座標
ball_y= random(50,height/2-50);//球出現的y座標隨機出現
//球的x移動方向隨機決定,但如果在0.8到負0.8之間時要重做,以免球會呈現幾近垂直的上下
speed_x =random(-2.5,2.5);
while(speed_x>=-0.8&&speed_x<=0.8) speed_x =random(-2.5,2.5);
speed_y = 4;
isPlaying = false;//用滑鼠點擊後球才會開始移動
background(255);
//磚塊的初始值
brick_x = 0;
brick_y = 0;
brick_width = 80;
brick_height = 20;
//brick wall 磚牆逐一設定
stroke(0);
fill(#FFFF00);
rect(brick_x,brick_y,brick_width,brick_height);
fill(#0000FF);
rect(brick_x+85,brick_y,brick_width,brick_height);
fill(#9ACD32);
rect(brick_x+85*2,brick_y,brick_width,brick_height);
fill(#EE2C2C);
rect(brick_x+85*3,brick_y,brick_width,brick_height);
fill(#ffa500);
rect(brick_x+85*4,brick_y,brick_width,brick_height);
fill(#FF00FF);
rect(brick_x+85*5,brick_y,brick_width,brick_height);
//磚塊目前全部呈現可見狀態
show1=show2=show3=show4=show5=show6=true;
//擊板的設定
noStroke();
fill(#1E90FF);
rect(bar_x,bar_y,100,15);
//球的設定
stroke(0);
fill(#DAA520);
ellipse(ball_x,ball_y,16,16);
//up_edge是指當磚塊存在時的上界,其實就是y==20,相對於磚塊消失後的上界值是y==0
up_edge = brick_y+20;
}
void draw(){
if(gameState==1){
if(keyPressed||mousePressed) isPlaying=true;
if(isPlaying){
background(255);
// brick wall
stroke(0);
//fill(#ffa500);
brick_x=0;
brick_y=0;
brick_width=80;
brick_height=20;
//如果show值為真,畫出各磚塊,可用陣列
fill(#FFFF00);
if(show1==true) rect(brick_x,brick_y,brick_width,brick_height);
fill(#0000FF);
if(show2==true) rect(brick_x+85,brick_y,brick_width,brick_height);
fill(#9ACD32);
if(show3==true) rect(brick_x+85*2,brick_y,brick_width,brick_height);
fill(#EE2C2C);
if(show4==true) rect(brick_x+85*3,brick_y,brick_width,brick_height);
fill(#ffa500);
if(show5==true) rect(brick_x+85*4,brick_y,brick_width,brick_height);
fill(#FF00FF);
if(show6==true) rect(brick_x+85*5,brick_y,brick_width,brick_height);
textFont(word,20);
fill(#CDC9C9);
text("SCORE: ",50,380);
text(score,95,380);
//ball
stroke(0);
fill(#DAA520);
ellipse(ball_x,ball_y,16,16);
ball_x+=speed_x;
ball_y+=speed_y;
//如果球朝上則速度是y=-4,如果球向下則速度是y=5
if(speed_y>0) speed_y=5;;
if(speed_y<0) speed_y=-4;
//如果score>18則上下速度加快
if(score>18){
//if(speed_x>0) speed_x=2;
//if(speed_x<0) speed_x=-2;
if(speed_y>0) speed_y=6;
if(speed_y<0) speed_y=-5;
}
if(score>54){
//if(speed_x>0) speed_x=2;
//if(speed_x<0) speed_x=-2;
if(speed_y>0) speed_y=7;
if(speed_y<0) speed_y=-5;
}
//如果球碰到某磚塊,則該磚塊的show值為false,磚塊消失
rnd=random(0.1,0.3);
if(show1==true && (ball_y-8<=up_edge||ball_y-8<=0) && ball_x>brick_x && ball_x<80) {speed_y*=-1;show1=false;score++;}
if(show2==true && (ball_y-8<=up_edge||ball_y-8<=0) && ball_x>86 && ball_x<164) {speed_y*=-1;show2=false;score++;}
if(show3==true && (ball_y-8<=up_edge||ball_y-8<=0) && ball_x>171 && ball_x<249) {speed_y*=-1;show3=false;score++;}
if(show4==true && (ball_y-8<=up_edge||ball_y-8<=0) && ball_x>256 && ball_x<334) {speed_y*=-1;show4=false;score++;}
if(show5==true && (ball_y-8<=up_edge||ball_y-8<=0) && ball_x>341 && ball_x<419) {speed_y*=-1;show5=false;score++;}
if(show6==true && (ball_y-8<=up_edge||ball_y-8<=0) && ball_x>426) {speed_y*=-1;show6=false;score++;}
//如果show值都為false時則全部變回true,磚塊全都出現
if(show1==false&&show2==false&&show3==false&&show4==false&&show5==false&&show6==false&&ball_y>=22)
{
show1=true;show2=true;show3=true;show4=true;show5=true;show6=true;}
//如果球要出界時,立即反彈
if(ball_y-8<=0) {ball_y=8;speed_y*=-1;}
if(ball_x+8>=width) speed_x*=-1;
if(ball_x-8<=0) speed_x*=-1;
//反擊時讓球的x移動以隨機處理,增加球反彈的不確定感
if(ball_x>=bar_x&&ball_x<=bar_x+100&&ball_y+8>=bar_y) {rnd=random(0.7,1.6); speed_y*=-1;speed_x*=rnd;}
if(ball_x-8==bar_x+100&&ball_y+8>=height-10&&ball_y+8>=height) {
if(speed_x>0){speed_y*=-1;rnd=random(1.1,2);speed_x*=rnd;}
if(speed_x<0){speed_y*=-1;rnd=random(1.1,2);speed_x*=-rnd;}
}
if(ball_x+8==bar_x&&ball_y+8>=height-10&&ball_y+8>=height) {
if(speed_x>0)
{speed_y*=-1;rnd=random(1.1,2);speed_x*=-rnd;
if(speed_x>2.5) speed_x=2.5;
if(speed_x<-2.5) speed_x=-2.5;
}
if(speed_x<0)
{speed_y*=-1;rnd=random(1.1,2);speed_x*=rnd;
if(speed_x>3) speed_x=3;
if(speed_x<-3) speed_x=-3; }
}
//limits the max speed of speed_x if necessary
if(speed_x>3) speed_x=3;
if(speed_x<-3) speed_x=-3;
//bar 用滑鼠或鍵盤來控制擊板左右
stroke(0);
fill(#1E90FF);
rect(bar_x,bar_y,100,10);
if(goLeft) bar_x-=5;
if(goRight) bar_x+=5;
if(bar_x<=0) bar_x=0;
if(mousePressed) {
{ if(mouseX<=bar_x)
for(int z=0;z<bar_x-mouseX;z++)
bar_x--;
}
if(mouseX>=bar_x)
for(int z=0;z<mouseX-bar_x;z++)
bar_x++;
}
bar_x=mouseX;
if(bar_x+100>=width) bar_x=width-100;
if(bar_x<=0) bar_x=0;
textFont(word,40);
fill(#0000FF);
if(ball_y-8>=height) ball_y=500;
fill(255,0,0);
//一旦球的y值大於下界表示球未被擊板接住,遊戲結束
if(ball_y>450) {text("GAME OVER",width/2,180);isPlaying = false;gameState=0;
if(score>best_score) best_score=score;
textFont(word,20);
fill(#FFA500);
text("Your scores are:",220,220);
fill(255,0,0);
text(score,310,220);
fill(#FFA500);
text("Your best scores are:",210,240);
fill(255,0,0);
text(best_score,320,240);
textFont(word,30);
fill(#006400);
text("Play again? Y/N",250,280);
}
}
}
}
void keyPressed(){
if(gameState==0)
if(key=='y'||key=='Y'){
gameState=1;
ball_x= width/2-8;//球出現的x座標
ball_y= random(50,height/2-50);//球出現的y座標隨機出現
speed_x =random(-2,2);
while(speed_x>=-0.5&&speed_x<=0.5) speed_x =random(-2,2);
bar_x=width/2;
show1=show2=show3=show4=show5=show6=true;
score=0;
}
if(gameState==0)
if(key=='n'||key=='N'){
background(0);
textFont(word,50);
fill(#ffff00);
text("Thanks for playing\n bye bye.",250,150);
}
textFont(word,20);
fill(255);
text("made by SYC @ http://code.club",250,300);
if(key==CODED)
{
switch(keyCode){
case LEFT:
goLeft= true;
break;
case RIGHT:
goRight= true;
break;
}
}
}
void keyReleased(){
if(key==CODED){
switch(keyCode){
case LEFT:
goLeft = false;
break;
case RIGHT:
goRight=false;
break;
}
}
}
void mousePressed(){
if(key=='n'||key=='N') {link("http://code.club");}
}
void mouseClicked(){
isPlaying=true;
}
複製代碼
歡迎光臨 code.club (https://code.club/)
Powered by Discuz! X3.2