210 likes | 279 Views
พื้นหญ้า. พื้นทราย. +10. +7. +14. +14. +4. +4. +10. +10. +7. +7. +14. +4. +14. +4. +10. +7. AI 2009 Homework#2. งานกลุ่ม แก้ไข map ใหม่ ให้สวยงาม เพิ่มพื้นทราย(มีรูปให้แล้ว) แก้ไขโปรแกรม เส้นทางการเดิน ที่ใช้ A* ดังนี้ กำหนดส่ง วันที่ 20 มกราคม 2553
E N D
พื้นหญ้า พื้นทราย +10 +7 +14 +14 +4 +4 +10 +10 +7 +7 +14 +4 +14 +4 +10 +7 AI 2009 Homework#2 • งานกลุ่ม • แก้ไข map ใหม่ ให้สวยงาม เพิ่มพื้นทราย(มีรูปให้แล้ว) • แก้ไขโปรแกรม เส้นทางการเดิน ที่ใช้ A* ดังนี้ • กำหนดส่ง วันที่ 20 มกราคม 2553 • รูปเล่มรายงาน อธิบาย • หลักการทำงานของ A* • ส่วนของโปรแกรมที่ได้ปรับปรุงแก้ไข
การเรียกโปรแกรม 1.ลง C# 2.ลง XNA 3. unrar TileMap7 4. double click Tilemap.sln
เกี่ยวกับไฟล์ • Game1 โปรแกรมหลัก • Mymap ส่วนจัดการ map และ A* • Myview ส่วนจัดการ view (แสดงผลส่วนย่อยๆ ของ map) • Mypath ส่วนเก็บข้อมูลเส้นทาง path ที่ตัวละครเดิน • Myobject ส่วนจัดการตัวละคร ตำแหน่งของตัวละคร • Mysprite ส่วนจัดการวาดรูปตัวละคร การเคลื่อนไหว • Myutils ฟังก์ชั่นย่อยๆ ต่างๆ
MyMap.cs ตัวละครเดินได้หรือไม่ ขึ้นอยู่กับค่า mapenum // ค่าสถานะของ map public enum mapenum { map_none = 0, map_walk = 1, map_obstracle = 2 }; ภาพในฉากแผนที่ ขึ้นกับค่า mapenumimage public enum mapenumimage { empty=0, block, pira, chest, doorclose, dooropen, //5 grass, grassshadow, rocks, sandgrass1, sandgrass2, //10 sandgrass3, sandgrass4, sandgrass, sandgrass6, sandgrass7, //15 sandgrass8, sandgrass9, sand, wall1, waterwall, //20 watergrass, water, waterref2, waterref3, waterref //25 };
MyMap.cs.2 แต่ล่ะตำแหน่งของ map จะเก็บค่าดังนี้ public struct mapelement { public mapenum maptype; // ประเภทของ map public mapenumimage mapimage; // รูปของ map public float g; // ตัวแปร A* public float h; // ตัวแปร A* public float f; // ตัวแปร A* public int parentX; // ตัวแปร A* public int parentY; // ตัวแปร A* public bool isopenlist; // ตัวแปร A* public bool iscloselist; // ตัวแปร A* public int count; // ตัวแปร A* } public mapelement[,] mapdata; array 2D ของ map public Texture2D[] mappic; array ของ รูป public mypath pathdata; path ที่สร้างโดย A*
Clearmap() ล้างข้อมูล Createmap() สร้างข้อมูลแผนที่ drawmap(Vector2 startpos) วาดแผนที่ clearAstarParams() ล้างข้อมูล A* // A* fn g : g fn มีค่าเพิ่มขึ้นจากการเคลื่อนที่ public float fn_g(int px, int py, int fromX, int fromY) // A* fn h : heuristic fn มีค่าลดลงเมื่อเข้าใกล้ target public float fn_h(int px, int py, int targetX, int target AstarAB(Vector2 a)คำนวณ A จาก ตำแหน่ง a ไปยัง targetX, targetY คือค่าเป็น path
C# XNA : 2D Map Scrollingand others related useful functions RTS + RPG Dr.Yodthong Rodkaew
2D Map in XNA • Map as 2D array • 1 block of map is struct 64,64 800,600 If map area is larger than screen area ?
2D Map in XNA If map area is larger than screen area ? 64,64 SCREEN AREA 800,600 MAP AREA
2D Map Scrolling MAP AREA Map[0,0] Screen(0,0) Map[w,h] SCREEN AREA Viewport Screen(800,600)
Screen(0,0) 2D Map Scrolling Map[20,20] Screen(800,600)
Screen(0,0) 2D Map Scrolling Map[10,20] Screen(800,600)
Screen(0,0) 2D Map Scrolling Map[10,20] Screen(800,600)
Screen(0,0) 2D Map to Block Map[10,20] Mouse Pointer = Map[x,y] ?? Mouse pointer at (400,250) Screen(800,600)
การใช้ view • View สำหรับควบคุม การเลื่อนหน้าจอ
Map RTS, select & move view map View.position Mouse.position View.width View.height [Need] -View center at mapblock(x,y) -View moving: up/down/left/right -map mouse to view position, to real mapblock -is_position_in_view(x,y) Map.width Map.height
view ต้องการหา viewxyทราบ mapxy view width height View (viewx,viewy) View.position map (mapx,mapy) Center of view View.width View.height View.center_at_mapblock(int mapx, int mapy) viewx = ________________? viewy = ________________?
view ต้องการหา mapxyทราบ mousexy view width height Screen(0,0) View (viewx,viewy) View.position map (mapx,mapy) View.width View.height Mouse Screen (800,600) View.mouse_to_viewblock(int mousex, int mousey) mapx = ________________? mapy = ________________?
view ต้องการหา mapxyอยู่ใน view หรือไม่ทราบ mapxy,viewxy, view width height map (mapx,mapy) View (viewx,viewy) View.position map (mapx,mapy) View.width View.height View.is_position_in_view(int mapx, int mapy) In_view = ________________________?
view map View.position Move right View.width View.height Move down Task.I: arrow key move view If ( ______ ) { _______________ } Task.II: mouse near border move view If ( ______ ) { _______________ } Map.width Map.height
view View.position Step3&4 step1 step2 View.width View.height Click & Move Step1: find what hero is clicked [source+hero] Step2: find what area is clicked [target] Step3: get path from A* Step4: make hero move follow a path