1.雲朵、快速落地、關卡平衡
PImage[] Dino_idle = new PImage[2];PImage[] Dino_land = new PImage[3];PImage Dino_die;PImage cloud;PImage[] Saboten = new PImage[3];PImage Game_Over;int DinoAnim_Timer = 0,PlayerFrame = 2,currentFrame = 0,bad_cooldown = 0,c_bad_cooldown = 0,score = 0,distance = 0,stage_lv = 0,LandingCD = 0;int failednumber = 0;float randomX,randomY,random;float jump_force,gravity;float playerX,playerY;float c_playerX,c_playerY;int cloud_posX = -100,cloud_posY = -100;int[] saboten_if = new int[10];int[] saboten_pos = new int[10];int[] cloud_if = new int[10];int[][] cloud_pos = new int[10][2];float[] m_CollisionX = new float[10];float[] m_CollisionY = new float[10];float[] s_CollisionX = new float[10];float[] s_CollisionY = new float[10];boolean isDebug = false;boolean jumping = false,Onground = true;boolean isgameover = false;void setup(){size(1200,700);frameRate(24);//基本屬性jump_force = 40;gravity = 0;//恐龍的預設動畫圖片Dino_idle[0] = loadImage("dino_idle_0.png");Dino_idle[1] = loadImage("dino_idle_1.png");//恐龍的落地動畫圖片Dino_land[0] = loadImage("dino_land_0.png");Dino_land[1] = loadImage("dino_land_1.png");Dino_land[2] = loadImage("dino_land_2.png");//恐龍的死亡圖片Dino_die = loadImage("dino_die_0.png");//仙人掌Saboten[0] = loadImage("bad_0.png"); //65x100Saboten[1] = loadImage("bad_1.png"); //75x110Saboten[2] = loadImage("bad_2.png"); //35x120//雲cloud = loadImage("cloud_0.png");//遊戲結束Game_Over = loadImage("game_over_0.png");//玩家初始位置playerX = 100;playerY = 580;}void draw(){background(255);display();if(isgameover == false){ObjectMove();//跳躍處理if(LandingCD > 0){LandingCD -= (stage_lv + 1);if(LandingCD < 0) LandingCD = 0;}if(LandingCD == 0){if(jumping == true){playerY -= jump_force;if(jump_force > 0) jump_force -= 3;Onground = false;if(playerY <= 300) jumping = false;}if(jumping == false && Onground == false){playerY += gravity;gravity += 8;if(playerY >= 580){playerY = 580;Onground = true;jump_force = 40;gravity = 0;}}}//分數增加distance++;score = distance/2;//根據分數進行階段提升if(score > 100) stage_lv = 1;if(score > 500) stage_lv = 2;if(score > 1000) stage_lv = 3;//判定產生仙人掌random = random(0,10);random = int(random);if(random == 1 && bad_cooldown == 0){for(int i = 0;i < 10;i++){if(saboten_if[i] == 0){random = random(0,3);random = int(random);if(random == 0)saboten_if[i] = 1;if(random == 1)saboten_if[i] = 2;if(random == 2)saboten_if[i] = 3;saboten_pos[i] = 1300;if(stage_lv == 0) bad_cooldown = 30;if(stage_lv == 1) bad_cooldown = 25;if(stage_lv == 2) bad_cooldown = 15;if(stage_lv == 3) bad_cooldown = 15;break;}}}else failednumber++;//判定生成雲朵random = random(0,25);random = int(random);if(c_bad_cooldown == 0){for(int i = 0;i < 10;i++){if(random == 5){if(cloud_if[i] == 0) cloud_if[i] = 1;else continue;}for(int j = 0;j < 2;j++){if(cloud_if[i] == 1){if(cloud_pos[i][j] == 0 && j == 0) cloud_pos[i][j] = 1300;if(cloud_pos[i][j] == 0 && j == 1){random = random(200,400);cloud_pos[i][j] = int(random);c_bad_cooldown = 60;break;}}}if(cloud_if[i] == 1) break;}}}}void display(){//debugif(isDebug == true) debug();//雲for(int i = 0;i < 10;i++){if(cloud_if[i] == 0) continue;for(int j = 0;j < 2;j++){if(j == 0){cloud_posX = cloud_pos[i][j];continue;}if(j == 1){cloud_posY = cloud_pos[i][j];image(cloud,cloud_posX,cloud_posY);}}}//遊戲結束if(isgameover) image(Game_Over,600,350);//分數顯示textSize(80);fill(0);String m_score = nf(score, 4);text(m_score,950,100);//text(cloud_pos[0][0],950,300);//text(cloud_pos[0][1],950,400);//恐龍動畫DinoAnim_Timer++;imageMode(CENTER);if(isgameover){image(Dino_die,playerX,playerY);}else if(LandingCD == 0){if(DinoAnim_Timer % PlayerFrame == 0){currentFrame++;if(currentFrame == PlayerFrame) currentFrame = 0;DinoAnim_Timer = 0;}image(Dino_idle[currentFrame],playerX,playerY);}else if(LandingCD > 0){if(LandingCD > LandingCD/2){image(Dino_land[0],playerX,playerY);}if(LandingCD > (LandingCD/2)/2){image(Dino_land[1],playerX,playerY);}if(LandingCD > 0){image(Dino_land[2],playerX,playerY);}}//地面stroke(0);line(0,600,1200,600);//仙人掌for(int i = 0;i < 10;i++){if(saboten_if[i] != 0){if(saboten_if[i] == 1) image(Saboten[0],saboten_pos[i],580);if(saboten_if[i] == 2) image(Saboten[1],saboten_pos[i],580);if(saboten_if[i] == 3) image(Saboten[2],saboten_pos[i],580);}}}void ObjectMove(){//根據階段有不同的移動速度//仙人掌移動for(int i =0;i < 10;i++){if(saboten_pos[i] < -50) saboten_if[i] = 0;saboten_pos[i] -= 20 * ((stage_lv/1.8) + 1);}if(bad_cooldown > 0) bad_cooldown--;CollisionDet();for(int i = 0;i < 10;i++){if(cloud_if[i] == 0) continue;for(int j = 0;j < 2;j++){if(j == 1) cloud_pos[i][j] = 0;if(j == 0){if(cloud_pos[i][j] < -100){cloud_pos[i][j] = 0;cloud_if[i] = 0;continue;}cloud_pos[i][j] -= 20;break;}}}if(c_bad_cooldown > 0) c_bad_cooldown--;}void keyPressed(){if(key == 32){if(Onground && LandingCD == 0){jumping = true;Onground = false;}if(isgameover == true){restart();}return;}if(key == CODED){if(keyCode == DOWN){if(jumping) jumping = false;if(!Onground) Onground = true;LandingCD = 8 - stage_lv;jump_force = 40;gravity = 0;playerY = 580;}return;}/*if(key == 's'){stop();}*/}void CollisionDet(){c_playerX = playerX;c_playerY = playerY;for(int i = 0;i < 10;i++){if(saboten_if[i] == 1){s_CollisionX[i] = saboten_pos[i] - 32.5 + 5;s_CollisionY[i] = 580 - 50;m_CollisionX[i] = saboten_pos[i] + 32.5 - 5;m_CollisionY[i] = 580 + 50;}if(saboten_if[i] == 2){s_CollisionX[i] = saboten_pos[i] - 37.5 + 8;s_CollisionY[i] = 580 - 55;m_CollisionX[i] = saboten_pos[i] + 37.5 - 8;m_CollisionY[i] = 580 + 55;}if(saboten_if[i] == 3){s_CollisionX[i] = saboten_pos[i] - 17.5 + 3;s_CollisionY[i] = 580 - 60;m_CollisionX[i] = saboten_pos[i] + 17.5 - 3;m_CollisionY[i] = 580 + 60;}if(saboten_if[i] != 0 && c_playerX + 30 >= s_CollisionX[i] && c_playerX + 30 <= m_CollisionX[i] && c_playerY + 40 >= s_CollisionY[i] && c_playerY + 40 <= m_CollisionY[i]){//撞到了isgameover = true;textSize(40);text(c_playerX,0,100);text(c_playerY,0,200);text(s_CollisionX[i],200,100);text(m_CollisionX[i],200,200);text(s_CollisionY[i],200,300);text(m_CollisionY[i],200,400);}else if(saboten_if[i] != 0 && c_playerX - 30 >= s_CollisionX[i] && c_playerX - 30 <= m_CollisionX[i] && c_playerY + 40 >= s_CollisionY[i] && c_playerY + 40 <= m_CollisionY[i]){//撞到了isgameover = true;textSize(40);text(c_playerX,0,100);text(c_playerY,0,200);text(s_CollisionX[i],200,100);text(m_CollisionX[i],200,200);text(s_CollisionY[i],200,300);text(m_CollisionY[i],200,400);}}}void restart(){for(int i = 0;i < 10;i++){saboten_if[i] = 0;saboten_pos[i] = 0;}distance = 0;stage_lv = 0;for(int i = 0;i < 10;i++){saboten_if[i] = 0;saboten_pos[i] = 0;cloud_if[i] = 0;}for(int i = 0;i < 10;i++){for(int j = 0;j < 2;j++){cloud_pos[i][j] = 0;}}isgameover = false;}void debug(){textSize(40);text(c_playerX,0,100);text(c_playerY,0,200);text(failednumber,400,100);}
沒有留言:
張貼留言