ตัวอย่างของบทความชิ้นนี้ จะว่าไปแล้วแทบจะไม่ต้องใช้ตรรกะ (Logic) อะไรที่มันยุ่งยากเลยครับพี่น้อง เพียงแต่ผมอยากนำเสนองานแบบ CAI (Computer Assisted Instruction) ในลักษณะของการโต้ตอบกับผู้เรียนได้ (Interactive) ในอีกรูปแบบหนึ่ง อย่างน้อยๆก็หวังให้ครูผู้สอนรุ่นใหม่ หรือ ครูพันธุ์ใหม่ทั้งหลาย ได้มีแนวคิด หรือ เกิดแรงบันดาลใจ ในการนำคอมพิวเตอร์มาช่วยประยุกต์ใช้งานในการเรียน การสอนให้เกิดประโยชน์มากขึ้น ทีแรกผมก็กะจะทำให้เห็นเป็นตัวอย่างบางส่วนเท่านั้นแหละครับ ... พี่น้อง ทำไปทำมาก็เอ้า ... เอาให้มันสมบูรณ์แบบไปเลยดีกว่า และผมก็ทำเป็นชุดติดตั้งเอาไว้ให้กับบรรดาพ่อแม่ ผู้ปกครอง ดาวน์โหลดของฟรี ไม่เสียกะตังค์ ไปให้ลูกให้หลานได้ลองเล่นดูกัน ... อนึ่ง ... พี่น้องครับ อย่าแค่ไปหวังให้เด็กกดแป้นคีย์บอร์ด และลากเมาส์เป็นแค่นั้นน่ะครับ ต้องสอน และแนะนำเด็กๆให้หัดเขียนตัวเลขลงบนกระดาษด้วยล่ะ ... เหอๆๆๆๆ ... ประเดี๋ยวเด็กๆจะเขียนหนังสือกันไม่เป็น
หน้าตาโปรแกรม
การบวกเลข
|
Component ที่เลือกมาใช้งาน ... คราวนี้ผมเลือก Flash เข้ามาช่วยด้วยครับ
|
สาระสำคัญในการบวกเลข
' โปรแกรมย่อยเพื่อใช้ในการสุ่มตัวเลข ... ผมเลือกใช้งานฟังค์ชั่นการสุ่มที่ผมเคยนำเสนอมาแล้วน่ะครับ
' ดูได้จากโมดูล gRandom.bas
' จากฟังค์ชั่นการสุ่มนี้ มันมีประสิทธิภาพที่ดีกว่าการสั่ง Randomize ที่ติดมากับ Visual Basic ครับพี่น้อง ...
Sub RandomNumber()
Dim MaxNumber As Integer
' เลือกจำนวนหลักที่ต้องการ
Select Case Digit
Case 1:
MaxNumber = 9
lblCarry.Visible = False
Case 2:
MaxNumber = 99
lblCarry.Visible = True
Case 3:
MaxNumber = 999
lblCarry.Visible = True
Case 4:
MaxNumber = 9999
lblCarry.Visible = True
End Select
' สุ่มค่าวันเวลาก่อน ... สำมะคัญน่ะครับตัวนี้
RandShuffle Date$ + Time$ + Str$(Timer)
' ส่งค่าต่ำสุด และ ค่า สูงสุดไปยังฟังค์ชั่นสุ่มตัวเลขจำนวนเต็ม
lblSetNumber.Caption = RandInteger(1, MaxNumber)
lblOperand.Caption = RandInteger(1, MaxNumber)
End Sub
' การตรวจคำตอบ
Private Sub cmdAnswer_Click()
Dim i As Byte
Dim Result As Integer
' หากยังไม่มีคำตอบให้ออกจากโปรแกรมย่อย พร้อมกับ Focus ไปยัง Control ที่ยังไม่ได้ตอบ
For i = 0 To Digit - 1
If Trim(txtAnswer(i).Text) = "" Or Len(Trim(txtAnswer(i).Text)) = 0 Then
MsgBox "น้องๆต้องกรอกตัวเลขในช่องที่ " & i + 1 & " ก่อนด้วยน่ะค่ะ.", vbOKOnly + vbExclamation, "รายงานสถานะ"
txtAnswer(i).SetFocus
Exit Sub
End If
Next
' การนำตัวอักขระ (Character) มาเรียงต่อๆกันไปด้วยเครื่องหมาย +
' จากนั้นแปลงค่าให้อยู่ในรูปแบบของตัวเลข (Number)
Select Case Digit
Case 1:
Result = Val(txtAnswer(1).Text + txtAnswer(0).Text)
Case 2:
Result = Val(txtAnswer(2).Text + txtAnswer(1).Text + txtAnswer(0).Text)
Case 3:
Result = Val(txtAnswer(3).Text + txtAnswer(2).Text + txtAnswer(1).Text + txtAnswer(0).Text)
Case 4:
Result = Val(txtAnswer(4).Text + txtAnswer(3).Text + txtAnswer(2).Text + txtAnswer(1).Text + txtAnswer(0).Text)
End Select
' ทำได้ถูกต้อง
' ก็ไม่มีอะไรมาก ก็นำค่าใน Label Control ของตัวตั้งกับตัวบวกมารวมกัน แล้วไปเปรียบเทียบกับค่าใน TextBox Control ที่เด็กตอบลงไป
If (Val(lblSetNumber.Caption) + Val(lblOperand.Caption)) = Result Then
'MsgBox "เก่งจังเลยค่ะ ... หนูทำได้ถูกต้องแล้วค่ะ.", vbOKOnly + vbInformation, "รายงานสถานะ"
' การใช้งาน Shockwave Flash ...
' พี่น้องลองไปแก้ไขเพิ่มเติมเพื่อให้มันมีการแสดงผลกาีรสุ่ม Flash (มีอยู่ในบทความของผมแล้ว)
' เพื่อสร้างแรงจูงใจ หรือ กำลังใจให้กับเด็กผู้เรียนด้วยน่ะครับ
' เสียงที่พี่น้องได้ยินน่ะ เป็นเสียงของผมเองครับ ...
' ผมใช้โปรแกรมง่ายๆอย่าง Acoustica กับ GoldWave เข้าช่วย ... โอกาสหน้าก็จะทำการสาธยายให้ฟังอีกทีนึงครับ
Flash.Playing = True
Flash.Movie = App.Path & "\Right.swf"
Right = Right + 1
' ทำผิด
Else
'MsgBox "หนูทำไม่ถูกน่ะค่ะ ... พยายามทำใหม่ด้วยค่ะ.", vbOKOnly + vbExclamation, "รายงานสถานะ"
Flash.Playing = True
Flash.Movie = App.Path & "\Wrong.swf"
Wrong = Wrong + 1
End If
' เริ่มต้นตั้งโจทย์ใหม่
Call SetupScreen
Call RandomNumber
txtAnswer(0).SetFocus
End Sub
|
สาระสำคัญในการลบเลข
Sub RandomNumber()
Dim Temp As Integer
Dim MaxNumber As Integer
Select Case Digit
Case 1:
MaxNumber = 9
lblCarry.Visible = False
Case 2:
MaxNumber = 99
lblCarry.Visible = True
Case 3:
MaxNumber = 999
lblCarry.Visible = True
Case 4:
MaxNumber = 9999
lblCarry.Visible = True
End Select
' สุ่มค่าวันเวลาก่อน
RandShuffle Date$ + Time$ + Str$(Timer)
' ส่งค่าต่ำสุด และ ค่า สูงสุดไปยังฟังค์ชั่นสุ่มตัวเลขจำนวนเต็ม
lblSetNumber.Caption = RandInteger(1, MaxNumber)
lblOperand.Caption = RandInteger(1, MaxNumber)
' *** เทคนิคของการสลับค่า หรือ Swap ***
' ตรวจสอบว่าตัวตั้งมีค่าน้อยกว่า ตัวกระทำหรือไม่
' หากใช่ก็ทำการสลับเปลี่ยน (SWAP) ค่าทั้งคู่ซ่ะก็หมดเรื่อง ...
' ซึ่งไม่ต้องการให้ตัวตั้งมีค่าน้อยกว่าตัวลบนั่นเอง
' ดังนั้นเพื่อไม่ให้เสียเวลา เราจึงไม่ต้องไปทำการสุ่มค่าใหม่ก็ได้น่ะครับ ... พี่น้อง
If Val(lblSetNumber.Caption) < Val(lblOperand.Caption) Then
Temp = lblOperand.Caption
lblOperand.Caption = lblSetNumber.Caption
lblSetNumber.Caption = Temp
End If
End Sub
|
เพิ่มเติม:
' พี่น้องครับ ... เนื่องจากผมใช้ MDI Form ซึ่งทำให้ฟอร์มของการบวกและลบสามารถทำการปิดหน้าจอได้
' ผมอยากให้พี่น้องทำการทดสอบค่าของตัวแปรทั้ง 3 ทางด้านล่างนี้ โดยใส่ Comment ให้มัน พร้อมกับ
' ใส่ Comment เอาไว้ที่ Form_Unload แล้วพี่น้องลองดูซิครับว่าจะเกิดอะไรขึ้น ?????
Private Sub Form_Load()
' ต้องกำหนดค่าเริ่มต้น ให้กับตัวแปร กรณีที่โหลดฟอร์มขึ้นมาใหม่ทุกครั้ง
' แต่ที่ผมทำ Comment เอาไว้ ก็เพื่อให้พี่น้องไปสังเกตในเหตุการณ์ Form_Unload ด้วย
' ใน Form_Unload ผมมีโค้ด Set frmSubtract = Nothing เอาไว้ ซึ่งหากไม่มีโค้ดตัวนี้ (ใส่ ' Comment ให้มัน)
' ค่าในตัวแปรจะยังคงอยู่ ... ลองเล่นดูเอาเถิดครับ ... พี่น้อง
'Right = 0
'Wrong = 0
'Total = 0
' เลือกจำนวนหลักก่อน ... จากนั้นในโปรแกรมย่อย optDigit_Click จะทำการเคลียร์หน้าจอเอง
Call optDigit_Click(0)
Call RandomNumber
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Set frmAdd = Nothing
End Sub
|
เป็นอย่างไรกันบ้างล่ะครับ ... โปรแกรมเล็กๆกระทัดรัดแบบนี้ สามารถนำมาประยุกต์ใช้งานกับระบบการเรียนการสอนได้ดีขนาดไหนล่ะ เอาไว้โอกาสหน้าผมจะนำเสนอ Visual Basic 6.0 ผสมกับ Flash ใ้ห้สมบูรณ์แบบยิ่งขึ้นไปกว่านี้ ... โปรดติดตามชมกันได้ในตอนต่อไป ... สู้เขาต่อไปทาเคชิ
|