วันศุกร์ที่ 19 กุมภาพันธ์ พ.ศ. 2559

construct 2 : Mysql to array

บทความนี้ ผมจะขอนำเสนอการอ่านข้อมูลจากฐานข้อมูล mysql มาเก็บไว้ที่ตัวแปรแบบ  array เพื่อนำไปใช้ประโยชน์ในการทำงานของเกมต่อไป  โดยเฉพาะการอ่านข้อมูลของผู้เล่นที่มีการบันทึกเอาไว้ในฐานข้อมูล  เมื่อมีการเข้าเล่นเกม โดยปกติจะต้องอ่านข้อมูลของผู้เล่นขึ้นมา เพื่อบอกว่าผู้เล่นมีชื่อว่าอะไร เล่นผ่านด่านอะไรแล้ว ได้คะแนนเท่าไรในแต่ละด่าน หรือการเก็บทักษะในการเล่นต่าง ๆ
การเชื่อมต่อกับฐานข้อมูล mysql ผมได้นำเสนอไว้ที่บทความ การเชื่อมต่อฐานข้อมูล  สามารถย้อนไปศึกษาเพิ่มเติมได้ ผมจะไม่ขอกล่าวย้อนอีกครั้งนะครับ ในบทความนี้ขอสมมุติว่า เข้าใจเรื่องการเชื่อมต่อฐานข้อมูลแล้ว และการอ่านฐานข้อมูลด้วย AJAX แล้วนะครับ  ฐานข้อมูลที่ผมจะใช้ในการนำเสนอวันนี้ คือ ตารางคะแนนเกม ชื่อ game สร้างตารางข้อมูล และใส่ข้อมูลเบื้องต้นไว้เล็กน้อยนะครับ มีรายละเอียดตาราง ดังนี้



สร้างไฟล์สำหรับอ่านข้อมูลจากฐานข้อมูล mysql เป็นไฟล์ชื่อ getuser.php ด้วยคำสั่ง ดังนี้
header('Access-Control-Allow-Origin: *');
header("Content-Type: text/html; charset=UTF-8");

$host = "localhost"; //database location
$user = "root"; //database username
$pass = "mypassword"; //database password
$db_name = "mydatabase"; //database name

//database connection
$link = mysql_connect($host, $user, $pass);
mysql_select_db($db_name);

// Retrieve data from database
$sql="SELECT gID,userID, level, score FROM game";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result)){
echo $rows['gID'] . "|" .$rows['userID'] . "|" . $rows['level']."|" . $rows['score']. ",";
}
mysql_close();
?>

อย่าลืมเปลี่ยนชื่อฐานข้อมูล ชื่อผู้ใช้และรหัสผ่าน เป็นของตัวเองนะครับ ขึ้นอยู่กับว่ากำหนดไว้ตอนติดตั้ง appserv เป็นอะไร แต่ละคนก็ไม่เหมือนกัน แล้วนำไปเก็บไว้ในตำแหน่งของ www ที่ได้ติดตั้งไว้แล้ว  กรณีของผม ผมสร้างไว้ใน /www/construct/  ทดสอบเรียนใช้งาน ดูว่ามีข้อมูลอะไรเขียนออกมาหรือเปล่า  ผมทดสอบโดยพิมพ์ http://localhost/construct/getuser.php ก็จะมีข้อมูลจากฐานข้อมูลแสดงออกมา



ข้อมูลแต่ละตัวจะคั่นด้วย |  และแต่ละชุดข้อมูลจะคั่นด้วย ,  ซึ่งอาจจะกำหนดเป็นอย่างอื่นได้ในไฟล์ getuser.php ตามที่ผู้เขียนเกมเห็นเหมาะสมนะครับ เพราะเราจะใช้เป็นตัวอ้างอิงในการตัดแบ่งข้อมูล

ต่อไปมาเริ่มงานที่โปรแกรม construct 2 สร้างโปรเจคใหม่ หรือจะใช้โปรแกรมเดิมก็ได้ครับ
เพิ่มวัตถุแบบ array เข้ามาที่เกมของเรา ตั้งชื่อเป็น datagame



แล้วแทรกวัตถุ AJAX เข้ามาในเกมของเรา



เพิ่มเหตุการณ์ เมื่อมีการทำงานกับ layout ใหม่
Add event --> System --> On start of layout
เพิ่มคำสั่งในการเชื่อมต่อฐานข้อมูลด้วย AJAX  ดังนี้
Add action --> AJAX --> Request URL
แล้วกำหนดค่า ดังนี้
Tag  = "getuser"   คือการกำหนดชื่อให้กับการทำงานของ AJAX
URL = "http://localhost/construct/getuser.php" คือ การอ่านข้อมูลจากไฟล์ php ที่เราได้สร้างไว้แล้ว



ขั้นต่อไป นำข้อมูลที่ได้จากการอ่านฐานข้อมูล mysql มาลงใน array ที่เราได้สร้างเอาไว้แล้ว
Add event --> AJAX --> on completed --> "getuser"
คือ เหตุการณ์ที่จะทำงานเมื่ออ่านข้อมูล AJAX จาก tag "getuser" สำเร็จแล้ว
กำหนดขนาดของ array ให้มีขนาดเท่ากับชุดข้อมูลที่อ่านมา
Add action --> Array datagame --> Set size
กำหนด width เท่ากับ จำนวนชุดข้อมูลจากการตัดข้อความด้วยเครื่องหมาย ,  ด้วยคำสั่งtokencount(AJAX.LastData,",")-1
Height เท่ากับ 4 คือ ให้มี 4 คอลัมน์ ตามข้อมูลที่มีในแต่ละชุด


วน loop เพื่อนำข้อมูลไปเก็บยัง array ที่สร้างไว้ ด้วยคำสั่ง ดังนี้


การกำหนดตำแหน่งของข้อมูลใน array กำหนดดังนี้


หลักการทำงานของคำสั่ง token
    คำสั่ง token จะใช้ในการตัดกลุ่มคำออกเป็นกลุ่มย่อยๆ ตามเงื่อนไขของตัวแบ่งที่กำหนด คำสั่งที่สำคัญที่ใช้บ่อย ๆ คือ
        tokencount  เป็น คำสั่งที่ใช้ในการนำจำนวนกลุ่มย่อยของคำที่แบ่งออกมาได้ เช่น tokencount("abxacxayxaz","x") คือนับจำนวนกลุ่มย่อยที่แบ่งด้วยตัว x  จะได้ค่า 4
        tokenat  เป็นคำสั่งที่อ้างถึงกลุ่มคำย่อยที่ถูกแบ่งด้วยตัวแบ่งคำ  เช่น tokenat("abxacxayxaz",0,"x")  คือ กลุ่มย่อยที่ 0 จากการแบ่งคำด้วยตัว x จะได้ข้อความ ab  ออกมา

หลักการคือ แบ่งชุดข้อมูลด้วยตัวอักษร ,  จะได้ชุดข้อมูลของผู้เล่นแต่ละคน  แล้วทำการวนซ้ำในแต่ละชุดข้อมูลด้วยการแยกข้อมูลจากตัวอักษร | จะได้ 4 ข้อมูล แล้วจัดเก็บลงใน array แต่ละตำแหน่ง
เมื่อทดสอบการทำงานของโปรแกรม จะพบข้อมูลใน array ตามข้อมูลที่ได้อ่านมาจากฐานข้อมูล



2 ความคิดเห็น: