190 likes | 375 Views
PACMAN on Mobile. Agenda. TOOL RULE Environment PLAY AI Thinking Q & A. TOOL. ภาษาที่ใช้ในการพัฒนา : Java 2 Mobile Edition ( J2ME ) Tool ที่ใช้ในการพัฒนา : NetBeans 3.6. RULE. Pacman สามารถเดินได้ตามช่องทางที่มีไว้ Pacman สามารถกินยาจุดเล็กเพื่อเก็บคะแนน ผีจะสามารถกิน Pacman ได้
E N D
Agenda • TOOL • RULE • Environment • PLAY • AI Thinking • Q & A
TOOL • ภาษาที่ใช้ในการพัฒนา : Java 2 Mobile Edition ( J2ME ) • Tool ที่ใช้ในการพัฒนา : NetBeans 3.6
RULE • Pacman สามารถเดินได้ตามช่องทางที่มีไว้ • Pacman สามารถกินยาจุดเล็กเพื่อเก็บคะแนน • ผีจะสามารถกิน Pacman ได้ • เมื่อ Pacman กินยาเม็ดใหญ่แล้วจะสามารถกินผีได้ซึ่งจะคงสภาพได้ 6 วินาที • เมื่อ Pacman กินยาจุดเล็กหมดจึงจะผ่านด่าน
PEAS • Performance เคลื่อนที่เข้าใกล้ Pacman ให้มากที่สุด • Environment CPU มือถือ , หน่วยความจำ , หน้าจอมือถือ , ปุ่มกด , Joy Stick • Actuators สามารถเคลื่อนที่ตามทิศทางต่างๆ และกิน pacman • Sensors ปุ่มกดบนโทรศัพท์มือถือ
Environment Types • Fully Observable สามารถเข้าถึงได้ทุก state ของ Environment • Deterministic สามารถรู้ล่วงหน้าว่า Pacman จะอยู่จุดใด • Episodic การทำงานนี้สามารถแบ่งเป็นตอนๆได้ เช่น เมื่อ Pacman กินยาแล้วสามารถคงสภาวะอมตะได้ 6 วินาที • Static ระบบคงที่สามารถเข้าใจได้ทุกสถานะ • Discrete สามารถ Define แต่ละ state ได้อย่างชัดเจนในทุกๆการเคลื่อนที่ • Multi-agent มี Agent หลายตัว
PLAY • เมื่อเริ่มเกมส์จะมี Menu ดังกล่าวให้เลือก New Game เพื่อเริ่มเกมส์ใหม่
PLAY • เมื่อเริ่มเกมส์สามารถเริ่มเล่นได้ทันทีโดยใช้ลูกศร เพื่อเคลื่อนตัว Pacman
PLAY • เมื่อ Pacman กินยาเม็ดใหญ่จะสามารถกินผีได้ซึ่งสามารถคงสภาพได้ 6 วินาที
A.I. Thinking เมื่อ pacman เคลื่อนที่ ghost จะจับทิศทางที่ pacman ไป
A.I. Thinking ghost จะพยายามเคลื่อนที่เข้าใกล้ pacman ให้ได้มากที่สุด
A.I. Thinking เมื่อ ghost เคลื่อนที่ไปเจอกับเส้นกั้น ghost ก็จะหาทิศทางอื่นโดยสอดคล้องกับทิศทางที่จะเข้าใกล้ pacman ให้ได้มากที่สุด
A.I. Thinking เมื่อ ghost พบช่องทางที่จะเคลื่อนที่ไปในทิศเดียวกับ pacman, ghost ก็จะไปตามเส้นทางนั้นอีกครั้ง
A.I. Thinking if (Math.abs(pacX) > Math.abs(pacY)) { if (pacX > 0) moveTowards(RIGHT,UP,DOWN,LEFT); else moveTowards(LEFT,DOWN,UP,RIGHT); } else { if (pacY > 0) moveTowards(DOWN,LEFT,RIGHT,DOWN); else moveTowards(UP,RIGHT,LEFT,UP); }
A.I. Thinking private void moveTowards(int i1, int i2, int i3, int i4) { if (runFromPac_) { if ( goInDirection(i4) ) return; if ( goInDirection(i3) ) return; if ( goInDirection(i2) ) return; if ( goInDirection(i1) ) return; } else { if ( goInDirection(i1) ) return; if ( goInDirection(i2) ) return; if ( goInDirection(i3) ) return; if ( goInDirection(i4) ) return; } }
A.I. Thinking private boolean goInDirection(int d) { if (d == LEFT) return goToNode(myNode_.getLeft()); if (d == RIGHT) return goToNode(myNode_.getRight()); if (d == UP) return goToNode(myNode_.getUp()); if (d == DOWN) return goToNode(myNode_.getDown()); return false; }
A.I. Thinking private boolean goToNode(GridNode n) { if (n == null) return false; myNode_ = n; newPixelX_ = myNode_.pixelCenterX(); newPixelY_ = myNode_.pixelCenterY(); return true; }