วันเสาร์ที่ 21 กันยายน พ.ศ. 2556

Limited UFO



Limited UFO

ฟังก์ชั่นชุดนี้สำหรับการดัดแปลง UFO ที่เคยสร้างไปแล้ว นำมาดัดแปลงให้มีการเคลื่อนไหวที่จำกัด ไม่ว่าจะความเร็ว หรือระยะทาง ในเรื่องนี้ ต้องมีการสร้างตัวแปรหลายแบบเพื่อการเก็บค่าและใช้งาน class เพื่อการเก็บข้อมูลและการสร้าง และฟังก์ชั่นที่สร้างเองเป็นจำนวนมาก เพื่อการกำหนดทิศทาง การเคลื่อนไหว และการทำงาน รวมทั้งต้องมีการกำหนดเงื่อนไขต่างๆ ในฟังก์ชั่น เพื่อให้รูป UFO ที่ออกมาเคลื่อนไหวได้ แต่ต้องมีการจำกัดขนาดและทิศทาง ส่วนในเรื่องการตกแต่ง ยังคงเหมือนเดิม ใครจะตกแต่งตรงไหนก็ได้ตามใจชอบ ส่วนใหญ่ผมใช้วิธีเหมือนกับที่เคยทำในบล็อกที่ผ่านมา อันดับแรกควรออกแบบ UFO ในรูปแบบปกติให้เสร็จก่อน แล้วค่อยแปลงออกมาในรูปแบบของการกำหนดเงื่อนไข เพื่อให้เป็นเหมือนรูปอย่างที่เห็น

Processing Code

void setup() {  //ฟังก์ชั่นหลักที่ใช้ในการกำหนดค่า และเรียกใช้สิ่งต่างๆ เป็นฟังก์ชั่นที่ไม่มีการวกกลับ
  size(600, 600);  //ฟังก์ชั่นที่ใช้ในการกำหนดขนาดของพื้นที่ หรือ size(width, height)   
 }
 Limitedufo a = new Limitedufo(250, 250, 300, 2, "up", "red");  //สร้าง UFO a สีแดง จุดเริ่มอยู่แกน X 250 แกน Y 250 ขนาด 300 ความเร็ว 2 เริ่มด้วยการขยับขึ้น
 Limitedufo c = new Limitedufo(250, 250, 50, 4, "right", "blue");  //สร้าง UFO c สีน้ำเงิน จุดเริ่มอยู่แกน X 250 แกน Y 250 ขนาด 50 ความเร็ว 4 เริ่มด้วยการขยับไปทางขวา
 Limitedufo d = new Limitedufo(250, 250, 200, 3,"left", "green");  //สร้าง UFO d สีเขียว จุดเริ่มอยู่แกน X 250 แกน Y 250 ขนาด 200 ความเร็ว 3 เริ่มด้วยการขยับไปทางซ้าย
 void draw() {  //ฟังก์ชั่นหลักที่ใช้ในการวาด
   background(mouseX, mouseY, mouseX);  //ฟังก์ชั่นที่ใช้ในการเติมสีให้กับพื้นหลัง โดยสีที่ใส่นี้ให้เป็นไปตามการเคลื่อนไหวของเมาส์บนแกน X และ Y
   a.limi(3);  //แสดง UFO a พร้อมค่า parameter
   c.limi(3);  //แสดง UFO c พร้อมค่า parameter
   d.limi(3);  //แสดง UFO d พร้อมค่า parameter
 }
 class Ufo {  //สร้าง class นี้ขึ้นเพื่อการเก็บข้อมูล
   int x, y, w, i;  //ตัวแปรสำหรับการเก็บค่า
   String d, s;  //ตัวแปรสำหรับเก็บระยะทาง และทิศทาง
   int stop;  //ตัวแปรสำหรับการหยุด
   String colour;  //ตัวแปรสำหรับการเก็บค่าสี
   int speed;  //ตัวแปรสำหรับกำหนดความเร็ว
   void display() {  //ฟังก์ชั่นสำหรับเรียกใช้ และกำหนดการควบคุม
      contron();
    float h = this.w/3;
    noStroke();
    if(colour.equals("red")) {
    fill(255, 0, 0);
    }
    else if(colour.equals("blue")) {
    fill(0, 0, 255);
    }
    else if(colour.equals("yello")) {
    fill(255, 255, 0);  //ฟังก์ชั่นที่ใช้ในการเติมสีให้กับสิ่งต่างๆ โดยกำหนดให้เป็นไปตามแม่สี หรือเครื่องหมาย # รวมทั้งฟังก์ชั่น โดยสีที่ใส่ไปนี้คือ สีเหลือง
    }
    else if(colour.equals("green")) {  //กำหนดเงื่อนไขอีกกรณีหนึ่ง
        fill(0, 255, 0);  //เติมสีเขียว
    }
    stroke(0);  //ฟังก์ชั่นที่ใช้ในการเติมสีในเส้น โดยกำหนดให้เป็นไปตามแม่สี หรือเครื่องหมาย # รวมทั้งฟังก์ชั่น โดยสี่ที่ใส่ไปคือ สีดำ
    strokeWeight(4);  //ฟังก์ชั่นที่ใช้ในการเพิ่มความหนาในเส้น
    ellipse(this.x, this. y, this.w, h);  //ฟังก์ชั่นสำหรับการวาดวงรี หรือ ellipse(x, y, width, height)
    float q = this.y-2*h/5, p=this.w-h, u=h;
    ellipse(this.x, q, p, u);  //วงรีสองวงนี้สร้างเป็นตัว UFO
    fill(169, 233, 240);  //เติมสีฟ้าอ่อน
    float r = h/5;
    ellipse(this.x, q, r, r);
    ellipse(this.x+3*h/5, q, r, r);
    ellipse(this.x-3*h/5, q, r, r);  //ฟังก์ชั่นการสร้างวงรี 3 ชุดนี้ สร้างขึ้นเพื่อทำกระจก หรือหน้าต่างของ UFO
  }
  void contron() {
    cw();
   if(d.equals("up")) {
    y = y-this.speed;
   }
   else if(d.equals("down")) {
    y = y+this.speed;
   }
   else if(d.equals("right")) {
    x = x+this.speed;
   }
   else if(d.equals("left")) {
    x = x-this.speed;
   }else if(d.equals("stop")){
   
   }
  }
  void cw() {  //ฟังก์ชั่นสำหรับการกำหนดการเคลื่อนไหวของ Ufo
    if(x>=600-this.w/2&&y<600-this.w/6) {  //กำหนดเงื่อนไขการเคลื่อนไหว ถ้าเป็นจริงทำตามผลลัพธ์ด้านล่าง
      d = "down";
    }
    else if(y>=600-this.w/6&&x>this.w/2) {  //กำหนดเงื่อนไขอีกกรณีหนึ่ง
      d = "left";
    }
    else if(x<=this.w/2&&y>(this.w-this.w/3)/2) {
      d = "up";
    }
    else if(y<=this.w/6+2*w/15&&x<600-this.w/2) {
      d = "right";
    }
  }
 }

 class Limitedufo extends Ufo {
   int n, xx, yy;
   String q;
   Limitedufo(int x, int y, int w, int s, String d, String c) {
   this.x = x;
   this.y = y;
   this.xx = x;
   this.yy = y;
   this.w = w;
   this.d = d;
   this.q = d;
   this.i = 0;
   this.stop = 0;
   this.colour = c;
   this.speed = s;
   this.n = 0;
   }
   void limi(int round) {  //สร้างฟังก์ชั่นและการเรียกใช้ พร้อมมี parameter
     num();
     if(n<round) {
     display();
     }
   }
 
   void num() {  //ฟังก์ชั่นสำหรับการกำหนดการเคลื่อนไหวของ Ufo
     if(q.equals("up")) {
       if(this.x==this.xx&&this.y==this.w/6+2*w/15){
        n = n+1;
       }
     }
     else if(q.equals("down")) {
       if(this.x==this.xx&&this.y==500-this.w/6) {
        n = n+1; 
       }
     }
     else if(q.equals("left")) {  //กำหนดเงื่อนไขอีกกรณีหนึ่ง
       if(this.y==this.yy&&this.x==this.w/2) {
        n = n+1;
       }
     }
     else if(q.equals("right")) {
       if(this.y==this.yy&&this.x==500-this.w/2) {
        n = n+1;
       }
     }
   }
}

Canvas


ไม่มีความคิดเห็น:

แสดงความคิดเห็น