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