ฟอรั่ม PSsix

Would you like to react to this message? Create an account in a few clicks or log in to continue.

ฟอรั่มของบล็อก http://pssix.blogspot.com


2 posters

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    avatar
    offxo2591
    สมาชิกทั่วไป
    สมาชิกทั่วไป


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 11
    ความนิยม : 0
    เข้าร่วมเมื่อ : 23/07/2014

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by offxo2591 05/11/15, 07:37 pm

    คือผมกำลังเขียนสคริปนึง มันเป็นสคริป For ใน While อะครับ
    ขออธิบายไว้ว่า เนื้อหาด้านล่างนี้ ผมได้บอกไว้ 2 ลูป คือลูปใหญ่(While) และลูปย่อย(For) ฉะนั้น พยายามอย่างงนะครับ 555+

    While $w1 <<<(ลูปใหญ่)
    ToolTip("รอบที่1",0,0,"")
    For $w1 = 6 To 1 Step -1 <<<(ลูปย่อย)
    PixelSearch(210,100,267,148,0x840000)
    If not @error Then
    ExitLoop
    Elseif $w1 = 1 Then
    $w1 = not $w1
    EndIf
    sleep(1000)
    Next
    PixelSearch(210,100,267,148,0x8AB912)
    If not @error then
    MouseClick("Left",381,12,1,10)
    ExitLoop
    EndIf
    Sleep(2000)
    WEnd

    ตามสคริปด้านบนนะครับ คือผม จะให้ For เนี่ย ทำการตรวจสอบบริเวณสีที่กำหนด ท่าเจอ ให้ออกจากลูปของ For ท่าไม่เจอ และ จำนวนรอบของ For มาถึงรอบสุดท้าย ให้เปลี่ยนตัวแปร $w1 เป็นเป็นเท็จ จากนั้น ลูปทั้งหมด จะหยุดทำงาน ซึ่ง พอเจอ สีที่กำหนดเนี่ย มันจะออกจากลูปของ For และมาอยู่ที่บรรทัด PixelSearch ใช่ไหมครับ และบรรทัดนั้นก็จะทำการตรวจสีในบริเวณนั้นๆ คือท่ามันจะ ก็จะสั่งเมาส์คลิก และออกจากลูป(While) แต่คือท่ามันไม่เจอเนี่ย มันก็ต้องย้อนกลับไปเริ่มลูปไหมใช่ไหมครับ พอมันเริ่มใหม่ มันก็จะมาเปิด ลูปของ For อีก! เนี่ยแหละครับปัญหาของผม คือผมจะทำให้ไอลูป For เนี่ย มันเปิดใช้ครั้งเดียว และทิ้งไปเลยครับ ไม่ต้องเปิดใช้อีก จะทำอย่างไรครับ ผมยังไม่รู้ทางออกของปัญหาเลย

    ขอขอบคุณล่วงหน้า
    avatar
    ironsulfide
    มือใหม่เพิ่งสมัคร
    มือใหม่เพิ่งสมัคร


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 9
    ความนิยม : 3
    เข้าร่วมเมื่อ : 09/05/2013

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty Re: มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by ironsulfide 11/11/15, 01:44 pm

    ไม่ลองกำหนดค่า Bolean ใช้ในการกำกับการเข้า Loop ก่อนอีกทีล่ะครับ
    เช่น ตั้ง ตัวแปรBooolean ชื่อ First กำหนดไว้ว่า จะให้มันทำงานเพียงครั้งแรกของการเปิดใช้งานโปรแกรม

    เมื่อจะเข้าลูป For คุณก็ใส่ If ไว้ก่อนว่า ถ้า First เป็น True นะจะเข้าเงื่อนไขใช้ For
    พอคุณ ถึงส่วนทีจะออกจาก For คุณก็กำหนดค่าใช้ First เป็นFalse แค่นี้ หลังจาก Loop ใหญ่กลับมาวน เมื่อมาถึงส่วนของ If First มันก็จะข้าม ลูป For ไปแล้วนี่ครับ ถ้าผมเข้าใจตรงไหนผิดก็อธิบายเพิ่มไว้ละกันครับ แล้วจะมาช่วยกัน งงใหม่ 55555
    avatar
    offxo2591
    สมาชิกทั่วไป
    สมาชิกทั่วไป


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 11
    ความนิยม : 0
    เข้าร่วมเมื่อ : 23/07/2014

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty Re: มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by offxo2591 19/11/15, 06:46 pm

    ironsulfide พิมพ์ว่า:ไม่ลองกำหนดค่า Bolean ใช้ในการกำกับการเข้า Loop ก่อนอีกทีล่ะครับ
    เช่น ตั้ง ตัวแปรBooolean ชื่อ First กำหนดไว้ว่า จะให้มันทำงานเพียงครั้งแรกของการเปิดใช้งานโปรแกรม

    เมื่อจะเข้าลูป For คุณก็ใส่ If ไว้ก่อนว่า ถ้า First เป็น True นะจะเข้าเงื่อนไขใช้ For
    พอคุณ ถึงส่วนทีจะออกจาก For  คุณก็กำหนดค่าใช้ First เป็นFalse  แค่นี้ หลังจาก Loop ใหญ่กลับมาวน เมื่อมาถึงส่วนของ If First มันก็จะข้าม ลูป For ไปแล้วนี่ครับ   ถ้าผมเข้าใจตรงไหนผิดก็อธิบายเพิ่มไว้ละกันครับ แล้วจะมาช่วยกัน งงใหม่ 55555

    ขอบคุณครับ ผมหาทางออกแล้ว ความจริง For มันก็เป็นลูปอย่างนึงเช่นกันแต่แค่กำหนดรอบไว้เท่านั้นเอง พอผมเอา for ไปใส่ไว้ในwhile มันก็เลยทำงานผิดพลาด พอผมเอา while ออกแล้วใส่ for เดี่ยวๆเลย ทำงานปกติครับ หาค่าสีได้ปกติ ขอบคุณครับผม! แต่ก็มีคำถามมาใหม่ ผมกำลังหาวิธีเข้าไปทำงานลูปเดิมอะครับ กำลังงงเลยตอนนี้ คือเมื่อผมออกจากลูปปกติใช่ไหมครับ สคลิปจะทำงาน บน ลง ล่าง ซึ่งพอมันผ่านลูปหนึ่งมาแล้วเนี่ย คือผมอยากจะให้มันกลับไปทำงานที่ลูปที่มันผ่านมาอะครับต้องใช้คำสั่งอะไรหรอครับ ผมยังหาคำสั่งไม่ได้เลย ตอนนี้ต้องมานั่งก๊อปคำสั่งต่อกัน 1000 กว่าบรรทัดแทน เพราะไม่สามารถกลับไปใช้ลูปเก่าได้ ต้องมานั่งสร้างลูปแบบเดียวกัน ต่อกันแทน -0- (ผมอาจจะอธิบายไม่เข้าใจ ก็ขออภัยด้วยครับ)
    avatar
    ironsulfide
    มือใหม่เพิ่งสมัคร
    มือใหม่เพิ่งสมัคร


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 9
    ความนิยม : 3
    เข้าร่วมเมื่อ : 09/05/2013

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty Re: มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by ironsulfide 20/11/15, 04:00 pm

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

    ข้อสังเกตุตัวโปรแกรมท่านที่จะเสี่ยงทำให้เกิดปัญหาคือ
    ลอจิกที่ใช้สร้างให้ค่า Sw เป็นเท็จนั้น จะไม่ใช้แบบนั้นนะครับ ปกติใช้ $var = False  หรือ $var = True  มากกว่าครับ
    และการที่ท่านพยายามใช้ตัวแปรเดิมแต่แปลงชนิดของตัวแปร  แม้ใน Autoit จะทำได้ แต่ผมแนะนำให้เลี่ยงดีกว่าครับไว้ยามจำเป็นค่อยใช้เพราะโอกาสที่จะเกิดปัญหามันเยอะกว่าการกำหนดตัวแปร แยกประเภทกันไป
    avatar
    offxo2591
    สมาชิกทั่วไป
    สมาชิกทั่วไป


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 11
    ความนิยม : 0
    เข้าร่วมเมื่อ : 23/07/2014

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty Re: มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by offxo2591 20/11/15, 07:56 pm

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

    ข้อสังเกตุตัวโปรแกรมท่านที่จะเสี่ยงทำให้เกิดปัญหาคือ
    ลอจิกที่ใช้สร้างให้ค่า Sw เป็นเท็จนั้น จะไม่ใช้แบบนั้นนะครับ ปกติใช้ $var = False  หรือ $var = True  มากกว่าครับ
    และการที่ท่านพยายามใช้ตัวแปรเดิมแต่แปลงชนิดของตัวแปร  แม้ใน Autoit จะทำได้ แต่ผมแนะนำให้เลี่ยงดีกว่าครับไว้ยามจำเป็นค่อยใช้เพราะโอกาสที่จะเกิดปัญหามันเยอะกว่าการกำหนดตัวแปร แยกประเภทกันไป

    ขอบคุณครับที่แนะนำปกติพอผมจะปิดลูปผมจะใช้ not กลับข้างมัน แต่ผมเพิ่งรู้ว่าใช้ = flase หรือ = true ได้ ขอบคุณที่แนะนำครับ แต่คืออย่างหนึ่งผมยังไม่เข้าใจคือ "ใช้ลูปครอบเพื่อตรวจสอบเงื่อนไขและย้อนกลับไปทำ" กับ "แยกฟังชั่นและเรียกใช้ฟังชั่นจากจุดจุดใดก็ได้" มันทำอย่างไรหรอครับ ผมไม่เคยทำเลยอะครับ ปกติใช้แค่ HotKeySet("{F1}","exit") ใช้เป็นคำสั่ง HotKeySetเพื่อเรียกใช้ฟังชั่น Func exit()
    exit
    endfunc

    ตามที่ผมเข้าใจแค่นั้นอะครับ O_O หรือผมเข้าใจความหมายของ ฟังก์ชั่นผิดกันนะ รบกวนด้วยนะครับ!!!(ยกตัวอย่างด้วยผมจะเข้าใจง่ายขึ้น)
    avatar
    ironsulfide
    มือใหม่เพิ่งสมัคร
    มือใหม่เพิ่งสมัคร


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 9
    ความนิยม : 3
    เข้าร่วมเมื่อ : 09/05/2013

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty Re: มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by ironsulfide 24/11/15, 01:12 pm

    Code เดิมของท่าน เป็นการสร้างลูปครอบลูปอีกที ถือว่าถูกแล้วครับในกรณีการเรียกลูปมาใช้งาน
    ส่วนการเรียกฟังก์ชั่นนั้น  ผมจะลงตัวอย่างการใช้ฟังก์ชั่นเบื้องต้นนะครับ
    ตัวอย่างนี้จะเขียนเลข เป็นแถว จำนวน 10 แถวแถวละ 5 ตัว โดยปกติเราจะสร้างมันด้วยการซ้อนลูป  แต่การซ้อนลูปจะไม่สามารถเรียกใช้จากจุดอื่นๆได้ครับ ในตัวอย่างมีการเรียกใช้ฟังก์ชั่นสร้างคอลัมน์ จากฟังก์ชั่นrow และในตอนท้าย ใช้ฟังก์ชั่นเมนเรียกใช้งานโดยตรง โดยในตอนท้ายเราจะเปลี่ยนค่าให้ฟังก์ชั่นเป็น 10 ครับ

    Global $c_number =1   ;สร้างตัวแปรโกบอล ที่ทุกฟังก์ชั่นสามารถใช้งานและเขียนตัวแปรนี้ได้



    Func make_row() ;ฟังก์ชั่นสำหรับสร้างแถว ไม่มีการรับค่าเข้าในฟังก์ชั่น
      $i = 1                 ;ประกาศตัวแปรในฟังก์ชั่น(เมื่อออกจากฟังก์ชั่นตัวแปรนี้จะหายไป
      For $i = 1 to 10
     make_column(5)    ;ฟังก์ชั่นเรียกใช้ฟังก์ชั่นกันเอง
     ConsoleWrite(@CRLF)
      Next

    EndFunc

    Func make_column($column_count) ;ฟังก์ชั่นสำหรับสร้างคอลัมน์ ตามจำนวนที่ระบุ  โดยรับค่าเข้ามาในฟังก์ชั่น
    for $i = 1 to $column_count
      ConsoleWrite('    ' & $c_number)
      $c_number += 1
    Next
    Return $c_number   ;คืนค่าตัวแปรกลับไป  หากไม่คืนค่า ตัวแปรหลักจะไม่เปลี่ยนแปลงค่าตามในฟังก์ชั่น
    EndFunc


    ;main function
    make_row()
    ConsoleWrite(@CRLF &'Test Call Column Function' &@CRLF &@CRLF)
    make_column(10)   ;เรียกใช้ซับฟังก์ชั่นโดยตรง
    ConsoleWrite(@CRLF)
    avatar
    offxo2591
    สมาชิกทั่วไป
    สมาชิกทั่วไป


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 11
    ความนิยม : 0
    เข้าร่วมเมื่อ : 23/07/2014

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty Re: มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by offxo2591 01/12/15, 05:59 pm

    ironsulfide พิมพ์ว่า:Code เดิมของท่าน เป็นการสร้างลูปครอบลูปอีกที ถือว่าถูกแล้วครับในกรณีการเรียกลูปมาใช้งาน
    ส่วนการเรียกฟังก์ชั่นนั้น  ผมจะลงตัวอย่างการใช้ฟังก์ชั่นเบื้องต้นนะครับ
    ตัวอย่างนี้จะเขียนเลข เป็นแถว จำนวน 10 แถวแถวละ 5 ตัว โดยปกติเราจะสร้างมันด้วยการซ้อนลูป  แต่การซ้อนลูปจะไม่สามารถเรียกใช้จากจุดอื่นๆได้ครับ ในตัวอย่างมีการเรียกใช้ฟังก์ชั่นสร้างคอลัมน์ จากฟังก์ชั่นrow และในตอนท้าย ใช้ฟังก์ชั่นเมนเรียกใช้งานโดยตรง  โดยในตอนท้ายเราจะเปลี่ยนค่าให้ฟังก์ชั่นเป็น 10 ครับ

    Global $c_number =1   ;สร้างตัวแปรโกบอล ที่ทุกฟังก์ชั่นสามารถใช้งานและเขียนตัวแปรนี้ได้



    Func make_row() ;ฟังก์ชั่นสำหรับสร้างแถว ไม่มีการรับค่าเข้าในฟังก์ชั่น
      $i = 1                 ;ประกาศตัวแปรในฟังก์ชั่น(เมื่อออกจากฟังก์ชั่นตัวแปรนี้จะหายไป
      For $i = 1 to 10
     make_column(5)    ;ฟังก์ชั่นเรียกใช้ฟังก์ชั่นกันเอง
     ConsoleWrite(@CRLF)
      Next

    EndFunc

    Func make_column($column_count) ;ฟังก์ชั่นสำหรับสร้างคอลัมน์ ตามจำนวนที่ระบุ  โดยรับค่าเข้ามาในฟังก์ชั่น
    for $i = 1 to $column_count
      ConsoleWrite('    ' & $c_number)
      $c_number += 1
    Next
    Return $c_number   ;คืนค่าตัวแปรกลับไป  หากไม่คืนค่า ตัวแปรหลักจะไม่เปลี่ยนแปลงค่าตามในฟังก์ชั่น
    EndFunc


    ;main function
    make_row()
    ConsoleWrite(@CRLF &'Test Call Column Function' &@CRLF &@CRLF)
    make_column(10)   ;เรียกใช้ซับฟังก์ชั่นโดยตรง
    ConsoleWrite(@CRLF)

    ขอบคุณมากครับผมเข้าใจละ แต่ติดอยู่ตรงหนึ่งอะครับ ตรงReturn อะครับ คืนค่ากลับไป นี้มันหมายความว่าอย่างไรหรอครับ ผมลองทดสอบโดยเอาreturnออกและreturnอยู่ปกติผลลัพท์ก็ออกมาเหมือนเดิมอะครับ กำลังงงอยู่
    avatar
    ironsulfide
    มือใหม่เพิ่งสมัคร
    มือใหม่เพิ่งสมัคร


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 9
    ความนิยม : 3
    เข้าร่วมเมื่อ : 09/05/2013

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty Re: มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by ironsulfide 07/12/15, 08:54 pm

    คำสั่ง Return คือการออกจากฟังก์ชั่นย่อย โดยจะมีสองรูปแบบคือ ออกโดยไม่ส่งค่ากลับ
    รูปแบบคือ Return

    กับแบบส่งค่ากลับ รูปแบบคือ Return วรรค ตามด้วยค่าที่จะส่งกลับ เช่น Return 1 เป็นต้น

    การใช้งานฟังก์ชั่นจะมีสองรูปแบบคือใช้งานกระบวนการภายในฟังก์ชั่นเพียวๆ หรือ ใช้งานค่าที่ส่งกลับมาด้วย ยกตัวอย่างฟังก์ชั่นที่เราใช้กันบ่อยๆคือ $_coordinade = Pixelsearch(x,y,x2,y2,0x00FFFF) จะเห็นว่าไม่ได้ใช้แค่กระบวนการ แต่มีการรับค่ามาที่ตัวแปร _coordinade ด้วย ซึ่งก็ได้มาจากการ Return ค่ามานั่นเอง

    การรีเทรินค่า จะใช้ได้หลายกรณี พื้นๆมักใช้คืนค่าว่าฟังก์ชั่นทำงานสำเร็จให้คืนค่า 1 ไม่สำเร็จให้คืนค่า 0 หรือจะใช้ส่งค่าอย่างอื่นอย่างฟังก์ชั่น Pixelsearch ก็ไม่ได้ส่งค่าสำเร็จหรือล้มเหลวกลับมาที่หัวฟังก์ชั่น แต่ส่งค่าพิกัดที่ค้นหาสีที่ต้องการเจอกลับมาใส่ตัวแปร _coordinade นั่นเองครับ
    avatar
    ironsulfide
    มือใหม่เพิ่งสมัคร
    มือใหม่เพิ่งสมัคร


    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty
    จำนวนข้อความ : 9
    ความนิยม : 3
    เข้าร่วมเมื่อ : 09/05/2013

    มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน) Empty Re: มีวิธีทำให้ปิดลูปถาวรไหมครับ (รายละเอียดด้านใน)

    ตั้งหัวข้อ by ironsulfide 07/12/15, 09:03 pm

    ส่วนบรรทัดที่สงสัย พอดีก่อนหน้านี้ผมเขียนในอีกทิศทางนึงแล้วลืมลบออกครับ 5555555..

      เวลาขณะนี้ 26/04/24, 11:48 pm