วันพฤหัสบดีที่ 6 พฤศจิกายน พ.ศ. 2557

ข้อสอบแบบสุ่ม
การสุ่มตัวเลข แล้วตัดทิ้งไป

var nums:Array = [0,1,2,3,4,5,6,7,8,9];
for(var i:Number = 0, l:Number = nums.length; i < l; i++) {
var result:Number = nums.splice(Math.floor(Math.random()*nums.length),1)[0];
trace("The result from randoming is " + result);
}

http://www.thaiflashdev.com/home/index.php?topic=10666.msg71357#msg71357

กระทู้นี้จะรวบรวมอัลกอริธึม(สูตรคำนวณ, ขั้นตอนการคำนวณ, บลาๆ :56:)เอาไว้แจกให้สำหรับผู้ที่อยากนำโค้ดไปศึกษา (หรือว่าดูดด้วย :50:)

โดยที่ทุกคนสามารถมีส่วนร่วมโดยการโพสแปะไว้แล้วผมจะนำขึ้นมาแปะตรงนี้ด้วย :22: (แจกเครดิตด้วยนะ :53:)


1. การแรนด้อมโดยไม่ซ้ำกัน

โค๊ด: (as3) [Select]
var nums:Array = [0,1,2,3];// อยากให้มีตัวเลขอะไรแรนด้อมออกมาบ้าง ใส่ไว้ตรงนี้เลย
for(var i:int = 0, l:int = nums.length; i < l; i++) {// วนลูป
    var result:Number = nums.splice(int(Math.random()*nums.length), 1)[0];
    /** ขั้นตอนการทำงานของบรรทัดด้านบน
        แรนด้อมค่า index เพื่อเป็น key อ้างถึงค่าใน nums โดยการคิดอย่างนี้ทำให้ไม่ต้องปวดหัวให้แตก
        ใส่ int ครอบแทน Math.floor เพราะว่า int เก็บทศนิยมไม่ได้ จึงหายไปเอง แต่ว่า Math.floor จะไปผ่านการคำนวณทำให้ช้ากว่า(เกือบมาก)
        คราวนี้เราได้ index มาแล้ว ก็คิดว่าจะทำอย่างไร
        ง่ายๆก็คือเราอ้างค่าใน array จาก index แล้ว splice ตัวนั้นออกซะ แล้วมันจะทำการเปลี่ยน length ให้อัตโนมัติ เวลาแรนด้อมได้ index เิดิม ก็จะได้ตัวเลขถัดไป
        splice จะ return ออกมาเป็น array เพราะมันสามารถฆ่าตัวแปรหลายๆตัวได้ แต่เราฆ่าไปตัวเดียวก็ใส่ [0] ซะ เพื่ออ้างถึงตัวแรก
        เย้ ได้แล้ว...
    **/
    trace("The result from randoming is " + result);// เทรซค่าออกมาที่ output panel
}

โค๊ด: (as2) [Select]
var nums:Array = [0,1,2,3];
for(var i:Number = 0, l:Number = nums.length; i < l; i++) {
var result:Number = nums.splice(Math.floor(Math.random()*nums.length),1)[0];
trace("The result from randoming is " + result);
}


2. การแรมด้อม(สลับตำแหน่ง)ข้อมูลในอาเรย์ - hippogo149
    อย่างเช่นการสับไพ่ในสำรับไพ่ - Knuth shuffle -> http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

โค๊ด: (as3) [Select]
function randomizeArray(ary:Array):void {
var rand_num:Number;
var i:int = ary.length;
var tmp_obj:*;
while(i > 1) {
rand_num = Math.floor(Math.random() * i--);
tmp_obj = ary[rand_num];
ary[rand_num] = ary[i];
ary[i] = tmp_obj;
}
}

โค๊ด: (as2) [Select]
function randomizeArray(ary:Array):Void {
var rand_num:Number;
var i:Number = ary.length;
var tmp_obj;
while(i > 1) {
rand_num = Math.floor(Math.random() * i--);
tmp_obj = ary[rand_num];
ary[rand_num] = ary[i];
ary[i] = tmp_obj;
}
}


...
« แก้ไขครั้งสุดท้าย: 22 มี.ค. 10, 13:32:54 โดย kabuto.boy »
 บันทึกการเข้า
แบร้
 ออฟไลน์ hippogo149
พี่ใหญ่ปอหก
*
กระทู้: 5208
Hippogo149's Wordpress

Re: Shared Algorithms
« ตอบกลับ #1 เมื่อ: 22 มี.ค. 10, 01:59:30 »
การแรมด้อม(สลับตำแหน่ง)ข้อมูลในอาเรย์ อย่างเช่นการสับไพ่ในสำรับไพ่
Knuth shuffle
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

โค๊ด: (AS3) [Select]
function randomizeArray(ary:Array):void {
var rand_num:Number;
var i:int = ary.length;
var tmp_obj:*;
while(i > 1) {
rand_num = Math.floor(Math.random() * i--);
tmp_obj = ary[rand_num];
ary[rand_num] = ary[i];
ary[i] = tmp_obj;
}
}

วันอังคารที่ 16 กันยายน พ.ศ. 2557

flash 8 ใส่เสียง background 2 เสียง

import ไฟล์เสียง 2 เสียงไว้ใน library
ที่ scene 1 คลิกที่ layer 1 ,  frame 1  เลือกไฟล์เสียง ที่ 1 เลือกเป็น start ,  loop
ก่อนไป scene 2 ใช้คำสั่ง stopAllsound

scene 2  คลิกที่ layer 1 ,  frame 1  เลือกไฟล์เสียง ที่ 1 เลือกเป็น start ,  loop
ก่อนไป scene 1 ใช้คำสั่ง stopAllsound


วันอังคารที่ 2 กันยายน พ.ศ. 2557

flash แสดงเวลา

เวลานับลด แล้วไปหน้า game over
stop();
time = 10;
startTime = getTimer();
this.onEnterFrame=function(){
timeNow=Math.floor((getTimer()-startTime)/1000)
if (txttime.text=="0")
{
gotoAndPlay("Scene 3", 1);
delete this.onEnterFrame;
}
txttime.text=time - timeNow;
}



flash แสดงเวลา นับลด

time = 60;
startTime = getTimer();
this.onEnterFrame=function(){
timeNow=Math.floor((getTimer()-startTime)/1000)
txtTime.text=time-timeNow;
}

แบบที่ 2 แสดงเวลา
function fill(xx){
if (xx<10) {
xx = "0" + xx;
}
return xx;
}

function retime() {
var mydate :Date = new Date();
time1.text = fill(mydate.getMinutes());
time2.text = fill(mydate.getSeconds());
}
intervalId = setInterval(this,"retime",500);

poke scarlet pokedex

 https://www.dualshockers.com/pokemon-scarlet-violet-full-pokedex/ [001 Sprigatito] 08000000 03075530 00000000 0000038A [002 Floragato] 0800...