顯示具有 08160634_李昀洋 標籤的文章。 顯示所有文章
顯示具有 08160634_李昀洋 標籤的文章。 顯示所有文章

2022年1月17日 星期一

week13-哭啊轉守為攻(期末作品Geometry Dash完成)

 


聆聽輕快的音樂再搭配上緊張刺激的跑酷遊戲!💥

Geometry Dash是我很喜歡玩的遊戲💗
每次死掉重來都令人懊惱但又激發了玩家不服輸的性格😈
雖然我們的重製沒能做出像原作般與音樂的完美契合
但緊張刺激的跑酷部分還是有還原到😱
也搭配上原作的首關音樂
希望可以讓更多人認識這款遊戲🙏🙏

上鍵跳躍
下鍵作弊模式(不死)

每20分換背景與更新評價 40分封頂
隨著遊戲進行速度會越來越快

遊戲影片:

前面是正常遊玩 後半部作弊模式看40分以上

程式碼這邊看👈


import ddf.minim.*;
Minim minim;
AudioPlayer bgm,jump,gameover;
PImage img1,img2,img3,img4,img5,img6,img7;
PFont myFont;
float []badx,bubblex,bubbley,boardx,boardy,boardw,hboardx,hboardy,hboardw,trix,triy,rx,ry,md,mdt;
int now,score,now2;
int boardID=0;
int hboardID=0;
int rID=0;
void setup(){
  size(600,400);
  myFont = createFont("微軟正黑體",30);
  img1=loadImage("bg.jpg");
  img2=loadImage("gg.png");
  img3=loadImage("good.png");
  img4=loadImage("bg2.jpg");
  img5=loadImage("bg3.png");
  img6=loadImage("start.jpg");
  img7=loadImage("block.png");
  minim = new Minim(this);
  gameover = minim.loadFile("gameover.wav");
  jump = minim.loadFile("jump.mp3");
  bgm = minim.loadFile("BGMG.mp3");
  textSize(40);
  badx=new float[1000];
  badx[0]=350+250;
  for(int i=1;i<1000;i++){
    if(i%5==0 || i%8==0 || i%11==0) {badx[i]=badx[i-1]+random(200,300);}
    else {badx[i]=badx[i-1]+random(50,55);}
  }
  boardx=new float[100];
  boardx[0]=380+250;
  for(int i=1;i<100;i++){
    boardx[i]=boardx[i-1]+random(360,440);
  }
  boardy=new float[100];
  boardy[0]=260;
  for(int i=1;i<100;i++){
    if(boardy[i-1]>=270){boardy[i]=boardy[i-1]-20;}
    else if(boardy[i-1]<=230){boardy[i]=boardy[i-1]+20;}
    else boardy[i]=boardy[i-1]+random(-20,10);
  }
  boardw=new float[100];
  boardw[0]=140;
  for(int i=1;i<100;i++){
    boardw[i]=boardw[i-1]+random(-20,10);
    if(boardw[i-1]<=80){boardw[i]=boardw[i-1]+30;}
  }
  hboardx=new float[90];
  //hboardx[0]=boardx[2]+160;
  for(int i=0;i<90;i++){
    //hboardx[i]=hboardx[i-1]+random(300,380);
    hboardx[i]=boardx[i+2]+random(200,210);
  }
  trix=new float[180];
  for(int i=0;i<180;i++){
   if(i%2==0) trix[i]=hboardx[i/2]+50;
   else trix[i]=hboardx[(i-1)/2]+50+50;
  }
  hboardy=new float[90];
  hboardy[0]=150;
  for(int i=1;i<90;i++){
    if(hboardy[i-1]>=170){hboardy[i]=hboardy[i-1]-20;}
    else if(hboardy[i-1]<=120){hboardy[i]=hboardy[i-1]+20;}
    else hboardy[i]=hboardy[i-1]+random(-20,10);
  }
  triy=new float[180];
  triy[0]=150+20;
  for(int i=1;i<180;i++){
   if(i%2==0) triy[i]=hboardy[i/2]+20;
   else triy[i]=hboardy[(i-1)/2]+20;
  }
  hboardw=new float[90];
  hboardw[0]=150;
  for(int i=1;i<90;i++){
    hboardw[i]=hboardw[i-1];
  }
  rx=new float[50];
  for(int i=0;i<50;i++){
    rx[i]=boardx[i+8]+boardw[i+8]+10;
  }
  ry=new float[50];
  for(int i=0;i<50;i++){
    ry[i]=170;
  }
  md=new float[90];
  for(int i=0;i<90;i++){
    md[i]=random(0.3,0.6);
  }
  mdt=new float[180];
  for(int i=0;i<180;i++){
    mdt[i]=(md[i/2]/0.4001)*0.1335;
  }
  bubblex=new float[10];
  bubbley=new float[10];
  for(int i=0;i<10;i++){
    bubblex[i]=0;
    bubbley[i]=300;
  }
  
}
float usery=300, vy=0, bgx=0, speed=0;
//md=0.4001,mdt=0.1335;
boolean gameOver=false;
boolean onBoard=false;
boolean onhBoard=false;
boolean onr=false;
int condition=0;
int wait=0;
void mousePressed(){///場景切換
  if (mouseButton == LEFT) condition=1;
}
void draw(){
  if(condition==0){
    image(img6,0,0,600,400);
    fill(255);
    text("按下滑鼠左鍵開始遊戲",150,50);
    text("上鍵跳躍 下鍵無敵",170,350);
    textFont(myFont);
    wait=millis()/1000;
  }
  if(condition==1){
    if(gameOver && hacking==false) bgm.pause();
    else bgm.play();
    if(score>=0 && score<30) image(img1,0,0,600,400);
    if(score>=20 && score<40) image(img4,0,0,600,400);
    if(score>=40) image(img5,0,0,600,400);
    
    speed=(score/4)*0.2;
    bgx=bgx+3+speed;
    fill(#F5ADCF);
    for(int i=0;i<1000;i++){
      now=i;
      if(collision()) gameOver=true;
      triangle(badx[i]-bgx,310,badx[i]-25-bgx,350,badx[i]+25-bgx,350);
  }
    fill(#F5ADCF);
    for(int i=0;i<180;i++){
      now2=i;
      if(collision2()) gameOver=true;
      triangle(trix[i]+25-bgx,(triy[i]+=mdt[i])+40,trix[i]-bgx,triy[i]+=mdt[i],trix[i]+50-bgx,triy[i]+=mdt[i]);
      if(triy[i]<130) mdt[i]=abs(mdt[i]);
      if(triy[i]>280) mdt[i]=-abs(mdt[i]);
    }
    fill(#003E6C); rect(0,350,600,400);
    fill(#FFEC17);
    image(img7,150,usery,50,50);
    if(jumping){
      usery+=vy;
      vy+=0.98/2.5;
      if(usery>300){
        jumping=false;
        usery=300;
      }
    }
    fill(#AD0051);
    for(int i=0;i<100;i++){
      rect(boardx[i]-bgx,boardy[i],boardw[i],20);
      if(boardID==i){
        if(onBoard==true && (boardx[i]+boardw[i]<150+bgx) ){
          onBoard=false;jumping=true;
        }
      }
      if(jumping && usery+50<boardy[i] && usery+50+vy>boardy[i] && boardx[i]<150+50+bgx && 150+bgx<boardx[i]+boardw[i]){
        usery=boardy[i]-50;vy=0;jumping=false;onBoard=true;boardID=i;
      }
    }
    fill(#AD0051);
    for(int i=0;i<90;i++){
      hboardy[i]+=md[i];
      rect(hboardx[i]-bgx,hboardy[i],hboardw[i],20);
      if(hboardy[i]<110) md[i]=abs(md[i]);
      if(hboardy[i]>260) md[i]=-abs(md[i]);
      if(hboardID==i){
        if(onhBoard==true && (hboardx[i]+hboardw[i]<150+bgx) ){
          onhBoard=false;jumping=true;
        }
      }
      if(jumping && usery+50<hboardy[i] && usery+50+vy>hboardy[i] && hboardx[i]<150+50+bgx && 150+bgx<hboardx[i]+hboardw[i]){
        usery=hboardy[i]-50;vy=0;jumping=false;onhBoard=true;hboardID=i;
      }
    }
    if(onhBoard==true) usery+=md[hboardID];
    fill(#AD0051);
    for(int i=0;i<50;i++){
      rect(rx[i]-bgx,ry[i],70,20);
      if(rID==i){
        if(onr==true && (rx[i]+70<150+bgx) ){
          onr=false;jumping=true;
        }
      }
      if(jumping && usery+50<ry[i] && usery+50+vy>ry[i] && rx[i]<150+50+bgx && 150+bgx<rx[i]+70){
        usery=ry[i]-50;vy=0;jumping=false;onr=true;rID=i;
      }
    }
    for(int i=9;i>0;i--){
      bubblex[i]=bubblex[i-1];
      bubbley[i]=bubbley[i-1];
      fill(#FFF586);
      rect(bubblex[i]+150-bgx,bubbley[i]+40,10,10);
    }
    bubblex[0]=bgx;
    bubbley[0]=usery;
    if(hacking){
      fill(255,0,0);
      text("作弊中",150,100);
    }
    if(gameOver==false || hacking){
    score=millis()/1000-wait;
    if(score<20) text("分數: "+score+"分  你好菜",150,50);
    else if(score<40) text("分數: "+score+"分  還不錯",150,50);
    else if(score>=40) text("分數: "+score+"分  不可思議",150,50);
    }
    else if(gameOver && hacking==false){
      gameover.play();
      background(255);
      image(img2,0,0,600,350);
      fill(255,0,0);
      if(score<20) text("評價:你好菜",220,50);
      else if(score<40) text("評價:還不錯",220,50);
      else if(score>=40) text("評價:不可思議",220,50);
      text("最終得分: "+score+"分",200,350);
    }
  }
}
boolean jumping=false;
boolean hacking=false;
void keyPressed(){
  if(keyCode==DOWN){
    if(hacking==false){
      hacking=true;
    }
  }
  if(keyCode==UP){
    jump.rewind();
    jump.play();
    if(jumping==false){
      jumping=true;
      vy=-10;
    }
  }
}
boolean collision(){
   boolean b1=insideTriangle(150,usery);
   boolean b2=insideTriangle(200,usery);
   boolean b3=insideTriangle(200,usery+50);
   boolean b4=insideTriangle(150,usery+50);
   if(b1 || b2 || b3 || b4) return true;
   else return false;
}
boolean insideTriangle(float x,float y){
    float c1=cross(x,y,badx[now]-bgx,310,badx[now]-25-bgx,350);
    float c2=cross(x,y,badx[now]-25-bgx,350,badx[now]+25-bgx,350);
    float c3=cross(x,y,badx[now]+25-bgx,350,badx[now]-bgx,310);
    if(c1>=0 && c2>=0 && c3>=0) return true;
    else return false;
}
boolean collision2(){
   boolean t1=insideTriangle2(150,usery);
   boolean t2=insideTriangle2(200,usery);
   boolean t3=insideTriangle2(200,usery+50);
   boolean t4=insideTriangle2(150,usery+50);
   if(t1 || t2 || t3 || t4) return true;
   else return false;
}
boolean insideTriangle2(float x,float y){
    float tc1=cross(x,y,trix[now2]+25-bgx,triy[now2]+40,trix[now2]-bgx,triy[now2]);
    float tc2=cross(x,y,trix[now2]-bgx,triy[now2],trix[now2]+50-bgx,triy[now2]);
    float tc3=cross(x,y,trix[now2]+50-bgx,triy[now2],trix[now2]+25-bgx,triy[now2]+40);
    if(tc1<=0 && tc2<=0 && tc3<=0) return true;
    else return false;
}
float cross(float xp,float yp,float x0,float y0,float x1,float y1){
  return (xp-x0)*(y1-y0)-(yp-y0)*(x1-x0);
}

2021年12月27日 星期一

week12-哭啊轉守為攻

解決跳上平台及掉下去問題
教學:

int []boardX={300, 400};//
int []boardY={100, 50}; 
int []boardW={800, 300};
void setup() {
  size(500, 300);
}
float x=30, y=150, vx=3, vy=0; 
float scrolling=0; 
boolean jumping=false, onBoard=false; 
int boardID=0;// 
void draw(){
  background(#162390);
  line(0, 200, 500, 200); 
  rect(x-scrolling, y, 50, 50); 
  x += vx; 
  if(jumping) {
    y += vy; 
    vy += 0.98; 
    if(y>150){
      y=150; vy=0; jumping=false;
    }
  }
  
  scrolling=(x-30); 
  for(int i=0; i <2; i++){
    rect(boardX[i]-scrolling, boardY[i], boardW[i], 20); 
    if (boardID==i){
      if (onBoard==true && (boardX[i]+boardW[i] < x)){
        onBoard=false; jumping=true;
       }
    }
    if( jumping && y+50<boardY[i] && y+50+vy>boardY[i] && boardX[i]<x+50 && x <boardX[i]+boardW[i] ){
      y=boardY[i]-50; vy=0; jumping=false; onBoard=true; boardID=i;
     }
   }
}

void keyPressed(){ 
  if(keyCode==UP) {
    jumping=true; 
    vy=-15;
  }
}


    

  

2021年12月20日 星期一

week11-哭啊轉守為攻


float [] badX, bubbleX, bubbleY;
void setup(){
  size(600,400);
  badX = new float[100];
  badX[0]=300+random(200,300);
  for(int i=1; i<100; i++){
    badX[i]=badX[i-1]+random(200,250);
  }
  bubbleX=new float[10];
  bubbleY=new float[10];
  for(int i=0; i<10; i++){
    bubbleX[i]=0;
    bubbleY[i]=300;
  }
}
float userY=300, vy=0, bgX=0;
void draw(){
  background(#1A73FF); 
  fill(#F5ADCF);
  for(int i=0; i<100; i++){
    triangle(badX[i]-bgX, 300, badX[i]-25-bgX,350, badX[i]-bgX+25,350); 
    rect(badX[i]-bgX, 20, 200,50);
    
  }
  fill(#FFAFF6); rect(0, 350, 600,400);
  rect(150, userY, 50,50);
  if(jumping){
    userY+=vy;
    vy += 0.98/2;//gravity
    if(userY>300){
      jumping=false;
      userY=300;
    }
  }
  for(int i=9; i>0; i--){
    bubbleX[i]=bubbleX[i-1];
    bubbleY[i]=bubbleY[i-1];
    fill(#FFF2F2);
    
    rect(bubbleX[i]+150-bgX,bubbleY[i],40,40);
  }
  bubbleX[0]=bgX;
  bubbleY[0]=userY;
  bgX+=3;
}
boolean jumping=false;
void keyPressed(){
  if(jumping==false){
    jumping=true;
    vy=-10;//jump upward
  }
}

2021年12月13日 星期一

week10-哭啊轉守為攻


float [] badX, bubbleX, bubbleY;
void setup(){
  size(600,400);
  badX = new float[100];
  badX[0]=300+random(200,300);
  for(int i=1; i<100; i++){
    badX[i]=badX[i-1]+random(200,250);
  }
  bubbleX=new float[10];
  bubbleY=new float[10];
  for(int i=0; i<10; i++){
    bubbleX[i]=0;
    bubbleY[i]=300;
  }
}
float userY=300, vy=0, bgX=0;
void draw(){
  background(#1A73FF); 
  fill(#F5ADCF);
  for(int i=0; i<100; i++){
    triangle(badX[i]-bgX, 300, badX[i]-25-bgX,350, badX[i]-bgX+25,350); 
    rect(badX[i]-bgX, 20, 200,50);
    
  }
  fill(#FFAFF6); rect(0, 350, 600,400);
  rect(150, userY, 50,50);
  if(jumping){
    userY+=vy;
    vy += 0.98/2;//gravity
    if(userY>300){
      jumping=false;
      userY=300;
    }
  }
  for(int i=9; i>0; i--){
    bubbleX[i]=bubbleX[i-1];
    bubbleY[i]=bubbleY[i-1];
    fill(#FFF2F2);
    
    rect(bubbleX[i]+150-bgX,bubbleY[i],40,40);
  }
  bubbleX[0]=bgX;
  bubbleY[0]=userY;
  bgX+=3;
}
boolean jumping=false;
void keyPressed(){
  if(jumping==false){
    jumping=true;
    vy=-10;//jump upward
  }
}

2021年12月6日 星期一

week09-哭啊轉守為攻

 

float [] badX, bubbleX, bubbleY;
void setup(){
  size(600,400);
  badX = new float[100];
  badX[0]=300+random(200,300);
  for(int i=1; i<100; i++){
    badX[i]=badX[i-1]+random(200,250);
  }
  bubbleX=new float[10];
  bubbleY=new float[10];
  for(int i=0; i<10; i++){
    bubbleX[i]=0;
    bubbleY[i]=300;
  }
}
float userY=300, vy=0, bgX=0;
void draw(){
  background(#5174FA); 
  fill(#F5ADCF);
  for(int i=0; i<100; i++){
    fill(#3124FF);triangle(badX[i]-bgX, 300, badX[i]-25-bgX,350, badX[i]-bgX+25,350); 
    fill(#F0F0F0);triangle(badX[i]-bgX, 300, badX[i]-25-bgX,450, badX[i]-bgX+25,450); 
  }
  fill(#3124FF); rect(0, 350, 600,400);
  rect(150, userY, 50,50);
  if(jumping){
    userY+=vy;
    vy += 0.98/2;//gravity
    if(userY>300){
      jumping=false;
      userY=300;
    }
  }
  for(int i=9; i>0; i--){
    bubbleX[i]=bubbleX[i-1];
    bubbleY[i]=bubbleY[i-1];
    fill(#DEF4FA);rect(bubbleX[i]+150-bgX,bubbleY[i],40,40);
  }
  bubbleX[0]=bgX;
  bubbleY[0]=userY;
  bgX+=3;
}
boolean jumping=false;
void keyPressed(){
  if(jumping==false){
    jumping=true;
    vy=-10;//jump upward
  }
}

2021年11月29日 星期一

week08-哭啊轉守為攻



人物行走
程式碼:



PImage img;
void setup(){
  size(500,500);
  img=loadImage("img.jpg");
  imageMode(CENTER);
}
int a=0, b=0, x=250, y=250;
void draw(){
  background(255);
  //image( img, 0,0);
  image(  img.get(141*a, 211*b, 141,211), x,y);
  if(frameCount%30==0) a = (a+1)%4;
}
void keyPressed(){
  if(keyCode==RIGHT){ b=3; x++; }
  if(keyCode==LEFT) { b=2; x--; }
  if(keyCode==UP) { b=1; y--; }
  if(keyCode==DOWN){ b=0; y++; }
}


期末規劃
Geometry Dash


橫向卷軸跑酷音樂遊戲

場景自動向右移動

按下按鍵跳躍躲避障礙

如碰到障礙則死亡回歸起點

2021年11月22日 星期一

week07-哭啊轉守為攻

 

球球練習



float []x={250,150,350,300};
float []y={0,50,80,100};
float []vx={0,0,0,0};
float []vy={3,2,2.5,4};
boolean[]dead={false,false,false,false};
//false 0, true 1 
///boolean 
void setup(){ 
  size(500,600);
}
void draw(){ 
  background(255); 
  for(int i=0;i<4 continue="" dead="" dist="" ellipse="" fill="" i="" if="" mousex="" mousey="" true="" vy="" x="" y="">600) vy[i]=-vy[i]; 
    if(y[i]<0 ellipse="" fill="" i="" mousex="" mousey="" pre="" vy="">
布林變數的練習 True & false
boolean down;
void setup()
{
  size(500,300);
}
void draw()
{
  if(mousePressed) down = true;
  else down=false;
  print(down);
  if(down) background(255,0,0);
  else background(0,255,0);
}
更多球球 float []x; float []y; float []vy; boolean[]dead; int N=20; void setup() { size(500,600); x=new float[N]; y=new float[N]; vy=new float[N]; dead=new boolean[N]; for(int i=0;i<N;i++) { x[i]=random(500); y[i]=random(100,200); vy[i]=random(3,4); dead[i]=false; } } void draw(){ background(255); for(int i=0;i<N;i++){ if(dist(mouseX,mouseY,x[i],y[i])<=50){ dead[i]=true; } if(dead[i]==true) continue; fill(255,255,0);ellipse(x[i],y[i],50,50); y[i]=y[i]+vy[i]; if(y[i]>600) vy[i]=-vy[i]; if(y[i]<0) vy[i]=-vy[i]; } fill(255,0,0);ellipse(mouseX,mouseY,50,50); }

2021年11月15日 星期一

week06-哭啊轉守為攻

首先創建視窗 熟悉draw
加上Framecount 做出簡易文字時鐘
利用millis 長出一個時鐘
使用PFont印出電腦內字型
使用PFont 成功顯示中文
做出一個下課倒數計時! 程式碼如下:
PFont QQ;
void setup()
{
  size(1000,1000);
  QQ = createFont("標楷體",100);
  textFont(QQ);
  fill(255,0,0);
  textSize(80);
}
void draw()
{
  background(#075BB2);
  String hh=nf(hour(),2);
  String mm=nf(minute(),2);
  String ss=nf(second(),2);
  
  text("現在:"+hh+":"+mm+":"+ss,50,100);
  text("下課:15:40:00",50,200);
  
  int now = hour()*60*60 + minute()*60+ second();
  int next = 15 *60*60+40 *60+0;
  int remain = next-now;
  if(remain<0) remain +=24*60*60;
  text("剩下:"+remain,50,300);
  hh = nf(remain/60/60,2);
  mm = nf(remain/60%60,2);
  ss = nf(remain%60,2);
  text("剩下:"+hh+":"+mm+":"+ss,50,400);

  
}

2021年11月1日 星期一

week05-哭啊轉守為攻

一開始先安裝video函式庫 使用它寫出會Loop播放影片的程式
接下來寫可以顯示出視訊鏡頭的程式
github建置

2021年10月25日 星期一

week04-哭啊轉守為攻

今天要做圍棋/五子棋 認識二維陣列
回到棋盤
嘗試用滑鼠下棋 但會怪怪的 因為會無條件捨去 4.84>>>4
解決問題 先加一半再讓他無條件捨去
使用滑鼠左中右鍵分別控制 黑棋 取消 白棋
程式
int [][]go = 
{
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0} 
};
void setup()
{
  size(500,500);
}
void draw()
{
  background(253,236,180);
  for(int i=0;i<9 ellipse="" fill="" for="" go="" i="" if="" int="" j="" line="" mousebutton="=CENTER)" mousepressed="" pre="" void="" x="" y="">



    

畫一個圓
openprocessing
藝術畫圓

調顏色 讓他更酷

2021年10月18日 星期一

week03-哭啊轉守為攻

今天一開始先練習如何讀入網路圖片
加參數使圖片能以較適大小顯示
顯示兩張圖片,一張當背景,一張隨滑鼠移動
去背
使用CORNER與CENTER兩個imageMode使兩個圖片都能在各自的位置置中

2021年10月4日 星期一

week02-哭啊轉守為攻

一開始先寫一個按滑鼠背景會變色
void setup(){ size(500,500); } void draw(){ if(mousePressed) background(255,0,0); else background(0,255,0); } 接下來改成類似小畫家的畫線程式
void setup(){ size(500,500); } void draw(){ if(mousePressed) line(mouseX,mouseY,0,0); } 真正變成小畫家
void setup(){ size(500,500); } void draw(){ if(mousePressed) line(mouseX,mouseY,pmouseX,pmouseY); }

2021年9月27日 星期一

week01-哭啊轉守為攻

//第一個程式 size(600,600);//(1) 大小 background(#17B5FC);//(2)背景色 //(2) 顏色: 背景色、畫的顏色 rect(100,100,400,400);//(3)方塊 rect rectangle ellipse(200,300,30,30);//(4)圓 //橢圓
企鵝