ย้ายบ้านแล้วครับ...
Group Blog
 
All Blogs
 

รู้จัก Power Shell

Windows PowerShell 2.0

Windows PowerShell เป็นเชลล์บรรทัดคำสั่งและภาษาการเขียนสคริปต์ที่ได้รับการออกแบบสำหรับการจัดการระบบและระบบอัตโนมัติ Windows PowerShell ที่มีการสร้างบน Microsoft .NET Framework ช่วยให้ผู้เชี่ยวชาญด้านไอทีและนักพัฒนาสามารถควบคุมและดำเนินการอัตโนมัติเกี่ยวกับการจัดการของ Windows และโปรแกรมประยุกต์ต่างๆ

คุณลักษณะใหม่ที่มีการแนะนำใน Windows PowerShell 2.0 รวมถึง:
  • การใช้งานระยะไกล

    Windows PowerShell 2.0 ให้คุณเรียกใช้คำสั่งต่างๆ บนคอมพิวเตอร์ระยะไกลอย่างน้อยหนึ่งเครื่องจากคอมพิวเตอร์เครื่องเดียวที่กำลังเรียกใช้ Windows PowerShell การใช้งานระยะไกลของ PowerShell ช่วยให้ทำการเชื่อมต่อได้หลายวิธี วิธีเหล่านี้รวมถึงแบบโต้ตอบ (1:1) แบบกระจายออก (1:หลายเครื่อง) และแบบ fan-in (หลายเครื่อง:1 โดยใช้รูปแบบการโฮสต์ IIS)
  • สภาพแวดล้อมการเขียนสคริปต์แบบเบ็ดเสร็จ

    สภาพแวดล้อมการเขียนสคริปต์แบบเบ็ดเสร็จ (ISE) ของ PowerShell ช่วยให้คุณสามารถเรียกใช้คำสั่งแบบโต้ตอบ และแก้ไขรวมทั้งแก้จุดบกพร่องของสคริปต์ในสภาพแวดล้อมเชิงกราฟิก คุณลักษณะสำคัญได้แก่ ไวยากรณ์ที่ใช้รหัสสี การดำเนินการที่เลือก การแก้จุดบกพร่องเชิงกราฟิก การสนับสนุน Unicode และวิธีใช้แบบตามบริบท
  • โมดูล

    โมดูลช่วยให้นักพัฒนาสคริปต์และผู้ดูแลสามารถจัดพาร์ติชันและจัดระเบียบรหัสของ Windows PowerShell ในหน่วยที่มีข้อมูลในตัวและนำกลับมาใช้ได้ รหัสจากโมดูลจะดำเนินการในบริบทที่มีข้อมูลในตัว และไม่กระทบสถานะภายนอกโมดูล
  • ฟังก์ชันขั้นสูง

    ฟังก์ชันขั้นสูงเป็นฟังก์ชันที่มีความสามารถและลักษณะการทำงานเช่นเดียวกับ cmdlets อย่างไรก็ตาม ฟังก์ชันเหล่านี้เขียนในภาษา Windows PowerShell ทั้งหมดแทนที่จะเป็น C# ที่คอมไพล์
  • งานเบื้องหลัง

    Windows PowerShell 2.0 อนุญาตให้มีการเรียกใช้คำสั่งหรือนิพจน์แบบอะซิงโครนัส และอยู่ "ในเบื้องหลัง" โดยไม่โต้ตอบกับคอนโซล
  • เหตุการณ์

    คุณลักษณะนี้เพิ่มการสนับสนุนให้กับโครงสร้างพื้นฐานโปรแกรม Windows PowerShell สำหรับการฟัง การส่งต่อ และการดำเนินการในการจัดการและเหตุการณ์ของระบบ
  • การทำสคริปต์ให้เป็นสากล

    คุณลักษณะใหม่นี้ช่วยให้สคริปต์ Windows PowerShell สามารถแสดงข้อความในภาษาพูดที่ระบุโดยการตั้งค่า UI ในคอมพิวเตอร์ของผู้ใช้
  • การดีบักสคริปต์

    คุณลักษณะใหม่เกี่ยวกับการดีบักถูกเพิ่มเข้าไปใน Windows PowerShell ที่ช่วยให้คุณสามารถตั้งค่าจุดสั่งหยุดบนบรรทัด คอลัมน์ ตัวแปร และคำสั่ง รวมทั้งให้คุณสามารถระบุการดำเนินการที่เกิดขึ้นเมื่อถึงจุดสั่งหยุด
  • cmdlets ใหม่

    Windows PowerShell 2.0 แนะนำ cmdlets ที่มีอยู่แล้วภายในจำนวนมากกว่า 100 cmdlets เหล่านี้ที่ไม่รวมงานอื่นๆ ช่วยให้คุณสามารถทำงานที่เกี่ยวกับคอมพิวเตอร์ บันทึกเหตุการณ์ และงานการจัดการตัววัดประสิทธิภาพ
สำหรับ Windows XP อีก 365 วันจากนี้...จะหยุดการสนับสนุน...
ดังนั้นของเล่นชิ้นนี้...ดูเหมือนจะใหม่ไปสำหรับสเปคคอมพิวเตอร์ของผม




 

Create Date : 10 พฤษภาคม 2556    
Last Update : 10 พฤษภาคม 2556 16:46:32 น.
Counter : 1719 Pageviews.  

เทคนิคของ Batch File ก่อนเข้าสู่ Power Shell

ผมเป็นคนที่ถูกเรียกว่า "เด็กโข่ง" คืออยู่ซ้ำๆ กับเรื่องเก่าๆ เช่น Batch File และ VB6 ซึ่งในยุคปัจจุบัน โปรแกรมพวกนี้เหมือน "อาวุููธสงครามโลกครั้งที่ 2" ไม่มีใครเขาใช้ทำงานแล้ว...ถ้ามีก็อยู่ในแวดวงของ ระบบปฏิบัติการวินโดวส์ บน CPU Pentium x86 ซึ่งตัวของภาษาเหล่านี้เก่าแก่มาพอๆ กับอายุของเครื่อง PC เลยทีเดียว ในบางครั้งมีบางคนโพสต์ถามการเขียน VBA ใน MS Office เอง... ผมก็ยังมีคำถามคาใจอยู่ว่า... MS Office เองจะเปลี่ยนคำสั่งมาโครเป็น JAVA ไหมในอนาคต เพราะดู เทคโนโลยี JAVA เองมาแรงมาก และมีโปรแกรมเมอร์อีกหลายคนไหมที่ ผันไปเรียน JAVA โดยทิ้ง VB6 และ VBA อยู่เบื่องหลัง มองดูแล้ว...ยุคของพวกเรา...โปรแกรมเมอร์ยุค "DOS" กำลังจะจบลงจริงหรือ... ซึ่งกฎของภาษาเองตอนนี้... VB.NET เองก็มีภาพลักษณ์การเขียนที่คล้าย VB ผสม JAVA ยังไงไม่รู้ การเขียนโปรแกรม "โครงสร้าง" แบบลำดับขั้นตอนการทำงาน จะกลายเป็นพึ่งพา Events และ วัตถุ และ คลาส มาก...จนผมมองไม่ออกว่า...โปรแกรมเมอร์ยุคโครงสร้างจะทำงานที่เคยชินการจัดลำดับเหตุการณ์และวัตถุผ่าน Loop และ การตัดสินใจ... ต้องมาศึกษาภาษาที่มีศัพย์แปลกๆ และวิธีการแปลกๆ เพื่อสร้างวัตถุ ซึ่งผมเองขอบอกว่า...ไม่ถนัดเลย

อา...ถึงมันจะจบลงอย่างไร...ผมขอตายกับมันไปเลยเจ้า VB6 เนี้ย...ๆ เพราะขอบอกว่าเหนื่อยจริงๆ กับการวิ่งไล่ตามเทคโนโลยี...ที่เด็กรุ่นใหม่มองมันเป็นเรื่องง่ายๆ เขียนง่ายๆ โดยมีโค้ดหน้าตาเหมือนกัน อยู่บนแอฟสโตร์เพื่อแย่งตำแหน่ง 4 ดาว ส่วนผมขอทำหน้าที่ที่ดีที่สุดคือ...เผยแพร่กลเม็ดเคล็ดลับมัน ผ่าน "บล็อก" ก่อนที่มันจะเป็นกระทู้ตกข่าว...กระทู้ตกสำรวจ...หรือกระทู้ล่าหลังก็ตามที เพราะจากอดีต..."เรียนแค่พานิชย์ และเขียนโปรแกรมธุรกิจคือ FoxPro ด้วยการทำโปรเจ็ค แต่ทุกวันนี้...ต้องผันตัวเองมาเรียนโปรแกรมแบบ Visual คือ VB6" แต่ถ้าจะต่อยอดไปเรียน VB2008 ก็ทำได้ตามสเป็คเครื่อง แต่คงตามเทคโนโลยีไม่ได้ตลอด เพราะสุดท้ายเทคโนโลยีในปัจจุบันก็จะล้าหลังเช่นกัน...
 เข้าเรื่อง และ Batch Files มันเกี่ยวอะไร...? เพราะมันเป็นวัตถุโบราณเช่นกัน...กล่าวคือมันสามารถทงานในระดับช่้างฝีมือ...จนไปถึง "กรรมกรก่อสร้าง" มันเป็นวัตถุโบราณพอๆ กับ VB6 แต่ความสามารถของมันไม่น้อย...แต่คนเข้าใจมันก็มีน้อยสำหรับปัจจุบัน... ผมจึงเสนอทางเลือกให้อ่านใน //thaibatchfile.blogspot.com/ ส่วนเรื่องของ Power Shell ผมจะมานำเสนอให้อ่านใน บล็อกแก็งค์เราเนี้ยแหละ...เพื่อให้ทันสมัยพอจะลงเวปที่มีผู้ติดคนไทยมากที่สุดคือ "บล็อกแกงค์" และพันทิป... (และคนไทยเราชอบอะไรใหม่ๆ...เลยกลัวเป็นพวกล้าหลังกลับชาติมาเกิด)

1




 

Create Date : 04 พฤษภาคม 2556    
Last Update : 10 พฤษภาคม 2556 16:51:09 น.
Counter : 1698 Pageviews.  

เกมส์ F16 บน VB6 และฟังก์ชั่นตัดแบ๊กกาวด์ภาพ

หรืออ่านบล็อกเกอร์ //thaivb6.blogspot.com/2013/04/vb6.html เรื่องเก่าของ VB6

ทดสอบ คลิกขวาตรงนี้ และเลือก Save Target As หรือบันทึกภาพเป็น ... .ให้เปลี่ยน
นามสกุลเป็น .ZIP ถึงเปิดแฟ้มในนั้นได้


ครับ เกมส์นี้จัดทำขึ้นเพื่อ พัฒนาต่อยอดเกมส์ที่ผ่านมาเพื่อให้สามารถใช้งาน
ฟังก์ชั่้นการตัดแบ็กกาวด์ ก่อนจะเขียน เกมส์ภาพเคลื่อนไหว แบบ มาริโอ
หรือ Megaman เล่นกันในครั้งหน้า...คราวนี้...เอาโค้ดนี้ไปก่อน...
ผมนำของต่างประเทศมาพัฒนาอีกที...เพราะ ฟังก์ชั่น .Pset และ .Point นั้น
ทำงานช้ามาก... ส่วนจะอาศัย API Bitblt ก็สุดช้าเหมือนกัน... เลยไปค้นหา
การใช้งาน .PaintPicture เพื่อง่ายและเขียนเกมส์เคลื่อนไหว....ให้ไม่สะดุด
ใครจะนำไปใช้งานในการเขียน ลายเซ็นต์บนภาพ ... ก็ได้... คำสั่งแค่
บรรทัดเดียว ลายเซ็นต์ก็แนบไปกับ ภาพเรียบร้อย...
ส่วนนี้โค้ด...ตัวอย่าง...(ดาวน์โหลด Form VB6 ไปใช้งานจะง่ายกว่า...ไม่ต้อง
เดา)

Option Explicit
Dim u, d, l, r, showm As Boolean
Dim x, y As Integer
Dim mx, my As Integer
Dim x_F16, y_F16 As Integer
Dim speed As Integer
Dim Misside As String

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 32 Then Misside = "OK"
If KeyCode = vbKeyLeft Then l = True
If KeyCode = vbKeyRight Then r = True
If KeyCode = vbKeyUp Then u = True
If KeyCode = vbKeyDown Then d = True
If KeyCode = vbKeyEscape Then Unload Me: End
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyLeft Then l = False
If KeyCode = vbKeyRight Then r = False
If KeyCode = vbKeyUp Then u = False
If KeyCode = vbKeyDown Then d = False
End Sub

Private Sub Form_Load()
speed = 10
x = 0
y = 0
mx = 50
my = 40
x_F16 = Form1.ScaleWidth
y_F16 = (Rnd * 10000) Mod (Form1.ScaleHeight - F16.ScaleHeight)
End Sub

Private Sub Timer1_Timer()
If Misside = "OK" Then
mx = mx + 20
If mx > Form1.ScaleWidth Then mx = 50: Misside = "NO"
If my > y_F16 And my < (y_F16 + F16.ScaleHeight) And _
mx > x_F16 And my < (x_F16 + F16.ScaleWidth) Then
mx = 50: Misside = "NO"
Label4.Caption = Label4.Caption + 1
Call Rnd_F16
End If
Else
mx = x + 50
my = y + 40
End If
Form1.PaintPicture Picture2.Picture, mx, my, , , , , , , vbMergePaint
Form1.PaintPicture fire.Picture, mx, my, , , , , , , vbSrcAnd
End Sub

Private Sub Timer2_Timer()
If l Then
x = x - speed
If x < 0 Then x = 0
End If
If r Then
x = x + speed
If x >= Me.ScaleWidth - 100 Then x = Me.ScaleWidth - 100
End If
If u Then
y = y - speed
If y < 0 Then y = 0
End If
If d Then
y = y + speed
If y >= Me.ScaleHeight - 100 Then y = Me.ScaleHeight - 100
End If
If y_F16 >= y And y_F16 <= y + shooter.ScaleHeight And _
x_F16 >= x And x_F16 <= x + shooter.ScaleWidth Then
Label2.Caption = Label2.Caption - 1
Call Rnd_F16
End If
If Label2.Caption = 0 Then MsgBox "Game Over": End
Form1.Cls
Form1.PaintPicture Picture1.Picture, x, y, , , , , , , vbMergePaint
Form1.PaintPicture shooter.Picture, x, y, , , , , , , vbSrcAnd
End Sub

Private Sub Timer3_Timer()
x_F16 = x_F16 - 10
If x_F16 < 0 Then Call Rnd_F16
Form1.PaintPicture Picture3.Picture, x_F16, y_F16, , , , , , , vbMergePaint
Form1.PaintPicture F16.Picture, x_F16, y_F16, , , , , , , vbSrcAnd
End Sub

Function Rnd_F16()
y_F16 = (Rnd * 10000) Mod (Form1.ScaleHeight - F16.ScaleHeight)
x_F16 = Form1.ScaleWidth
End Function

ตัวอย่างภาพ




 

Create Date : 13 กุมภาพันธ์ 2555    
Last Update : 4 พฤษภาคม 2556 17:08:31 น.
Counter : 2291 Pageviews.  

แจก Source Code เกมส์ เรียงเพชร

หรืออ่านบล็อกเกอร์ //thaivb6.blogspot.com/2013/04/vb6.html เรื่องเก่าของ VB6

อาจจะมีหน้าตาไม่สวย...ลองนำไปพัฒนา Visual Efface ดูครับ...
เพราะเขียน อัลกอริทึม ให้แล้ว...


Const MaxCol = 8
Const MaxCell = 63
Dim Random As Integer
Dim Old_Index As Integer
Dim New_Index As Integer
Dim Busy As Boolean
Dim OK As Boolean
Dim Winner As Boolean

Private Sub Form_Load()
Random = 2
End Sub

Private Sub Form_Activate()
Dim N As Integer
Randomize
Random = Random + 1
Label9.Caption = Label9.Caption + 1
OK = False
For N = 0 To MaxCell
Label1(N).Caption = (Rnd * 1000) Mod Random
Label1(N).BackColor = vbBlack
Call Change_Color(N)
Next N
End Sub

Function Change_Color(N As Integer)
Select Case Label1(N).Caption
Case Is = 0
Label1(N).ForeColor = vbRed
Case Is = 1
Label1(N).ForeColor = vbGreen
Case Is = 2
Label1(N).ForeColor = vbMagenta
Case Is = 3
Label1(N).ForeColor = vbYellow
Case Is = 4
Label1(N).ForeColor = vbCyan
End Select
End Function

Private Sub Label1_Click(Index As Integer)
If Label4.Caption = "OK" Then
For N = 0 To MaxCell
If Label1(N).BackColor = vbWhite Then Label1(N).BackColor = Label2.BackColor
Next N
Label2.BackColor = Label1(Index).BackColor
Busy = Not Busy
If Busy Then
Old_Index = Index
Label1(Old_Index).BackColor = vbWhite
Else
New_Index = Index
If (Int(Old_Index / MaxCol) = Int(New_Index / MaxCol) And Old_Index + 1 = New_Index Or Old_Index - 1 = New_Index) Or _
(Int(Old_Index Mod MaxCol) = Int(New_Index Mod MaxCol) And Old_Index + MaxCol = New_Index Or Old_Index - MaxCol = New_Index) Then
Label2.Caption = Label1(New_Index).Caption
Label2.ForeColor = Label1(New_Index).ForeColor
Label1(New_Index).Caption = Label1(Old_Index).Caption
Label1(New_Index).ForeColor = Label1(Old_Index).ForeColor
Label1(Old_Index).Caption = Label2.Caption
Label1(Old_Index).ForeColor = Label2.ForeColor
If Not Chk_Same(Index) Then
Label2.Caption = Label1(Old_Index).Caption
Label2.ForeColor = Label1(Old_Index).ForeColor
Label1(Old_Index).Caption = Label1(New_Index).Caption
Label1(Old_Index).ForeColor = Label1(New_Index).ForeColor
Label1(New_Index).Caption = Label2.Caption
Label1(New_Index).ForeColor = Label2.ForeColor
Else
OK = True
End If
End If
End If
End If
End Sub

Function Chk_Same(Index As Integer) As Boolean
Chk_Same = False
If Not (Index - 1 < 0 Or Index + 1 > MaxCell) Then
If Int((Index - 1) / MaxCol) = Int(Index / MaxCol) And Int(Index / MaxCol) = Int((Index + 1) / MaxCol) And _
Label1(Index - 1).Caption = Label1(Index).Caption And Label1(Index).Caption = Label1(Index + 1).Caption Then Chk_Same = True
End If
If Not (Index + 1 > MaxCell Or Index + 2 > MaxCell) Then
If Int(Index / MaxCol) = Int((Index + 1) / MaxCol) And Int((Index + 1) / MaxCol) = Int((Index + 2) / MaxCol) And _
Label1(Index).Caption = Label1(Index + 1).Caption And Label1(Index + 1).Caption = Label1(Index + 2).Caption Then Chk_Same = True
End If
If Not (Index - 1 < 0 Or Index - 2 < 0) Then
If Int(Index / MaxCol) = Int((Index - 1) / MaxCol) And Int((Index - 1) / MaxCol) = Int((Index - 2) / MaxCol) And _
Label1(Index).Caption = Label1(Index - 1).Caption And Label1(Index - 1).Caption = Label1(Index - 2).Caption Then Chk_Same = True
End If
If Not (Index - MaxCol < 0 Or Index + (MaxCol) > MaxCell) Then
If Int((Index - MaxCol) Mod MaxCol) = Int(Index Mod MaxCol) And Int(Index Mod MaxCol) = Int((Index + MaxCol) Mod MaxCol) And _
Label1(Index - MaxCol).Caption = Label1(Index).Caption And Label1(Index).Caption = Label1(Index + MaxCol).Caption Then Chk_Same = True
End If
If Not (Index + MaxCol > MaxCell Or Index + (MaxCol * 2) > MaxCell) Then
If Int(Index Mod MaxCol) = Int((Index + MaxCol) Mod MaxCol) And Int((Index + MaxCol) Mod MaxCol) = Int((Index + (MaxCol * 2)) Mod MaxCol) And _
Label1(Index).Caption = Label1(Index + MaxCol).Caption And Label1(Index + MaxCol).Caption = Label1(Index + (MaxCol * 2)).Caption Then Chk_Same = True
End If
If Not (Index - MaxCol < 0 Or Index - (MaxCol * 2) < 0) Then
If Int(Index Mod MaxCol) = Int((Index - MaxCol) Mod MaxCol) And Int((Index - MaxCol) Mod MaxCol) = Int((Index - (MaxCol * 2)) Mod MaxCol) And _
Label1(Index).Caption = Label1(Index - MaxCol).Caption And Label1(Index - MaxCol).Caption = Label1(Index - (MaxCol * 2)).Caption Then Chk_Same = True
End If
End Function


Private Sub Timer1_Timer()
If OK Then
For N = 0 To MaxCell
If Not (N - 1 < 0 Or N + 1 > MaxCell) Then
If Int((N - 1) / MaxCol) = Int(N / MaxCol) And Int(N / MaxCol) = Int((N + 1) / MaxCol) And _
Label1(N - 1).Caption = Label1(N).Caption And Label1(N).Caption = Label1(N + 1).Caption Then
Label1(N).ForeColor = vbWhite
Label1(N - 1).ForeColor = vbWhite
Label1(N + 1).ForeColor = vbWhite
Label1(N).BackColor = vbBlue
Label1(N - 1).BackColor = vbBlue
Label1(N + 1).BackColor = vbBlue
End If
End If
If Not (N + 1 > MaxCell Or N + 2 > MaxCell) Then
If Int(N / MaxCol) = Int((N + 1) / MaxCol) And Int((N + 1) / MaxCol) = Int((N + 2) / MaxCol) And _
Label1(N).Caption = Label1(N + 1).Caption And Label1(N + 1).Caption = Label1(N + 2).Caption Then
Label1(N).ForeColor = vbWhite
Label1(N + 1).ForeColor = vbWhite
Label1(N + 2).ForeColor = vbWhite
Label1(N).BackColor = vbBlue
Label1(N + 1).BackColor = vbBlue
Label1(N + 2).BackColor = vbBlue
End If
End If
If Not (N - 1 < 0 Or N - 2 < 0) Then
If Int(N / MaxCol) = Int((N - 1) / MaxCol) And Int((N - 1) / MaxCol) = Int((N - 2) / MaxCol) And _
Label1(N).Caption = Label1(N - 1).Caption And Label1(N - 1).Caption = Label1(N - 2).Caption Then
Label1(N).ForeColor = vbWhite
Label1(N - 1).ForeColor = vbWhite
Label1(N - 2).ForeColor = vbWhite
Label1(N).BackColor = vbBlue
Label1(N - 1).BackColor = vbBlue
Label1(N - 2).BackColor = vbBlue
End If
End If
If Not (N - MaxCol < 0 Or N + MaxCol > MaxCell) Then
If Int((N - MaxCol) Mod MaxCol) = Int(N Mod MaxCol) And Int(N Mod MaxCol) = Int((N + MaxCol) Mod MaxCol) And _
Label1(N - MaxCol).Caption = Label1(N).Caption And Label1(N).Caption = Label1(N + MaxCol).Caption Then
Label1(N).ForeColor = vbWhite
Label1(N - MaxCol).ForeColor = vbWhite
Label1(N + MaxCol).ForeColor = vbWhite
Label1(N).BackColor = vbBlue
Label1(N - MaxCol).BackColor = vbBlue
Label1(N + MaxCol).BackColor = vbBlue
End If
End If
If Not (N + MaxCol > MaxCell Or N + (MaxCol * 2) > MaxCell) Then
If Int(N Mod MaxCol) = Int((N + MaxCol) Mod MaxCol) And Int((N + MaxCol) Mod MaxCol) = Int((N + (MaxCol * 2)) Mod MaxCol) And _
Label1(N).Caption = Label1(N + MaxCol).Caption And Label1(N + MaxCol).Caption = Label1(N + (MaxCol * 2)).Caption Then
Label1(N).ForeColor = vbWhite
Label1(N + MaxCol).ForeColor = vbWhite
Label1(N + (MaxCol * 2)).ForeColor = vbWhite
Label1(N).BackColor = vbBlue
Label1(N + MaxCol).BackColor = vbBlue
Label1(N + (MaxCol * 2)).BackColor = vbBlue
End If
End If
If Not (N - MaxCol < 0 Or N - (MaxCol * 2) < 0) Then
If Int(N Mod MaxCol) = Int((N - MaxCol) Mod MaxCol) And Int((N - MaxCol) Mod MaxCol) = Int((N - (MaxCol * 2)) Mod MaxCol) And _
Label1(N).Caption = Label1(N - MaxCol).Caption And Label1(N - MaxCol).Caption = Label1(N - (MaxCol * 2)).Caption Then '
Label1(N).ForeColor = vbWhite
Label1(N - MaxCol).ForeColor = vbWhite
Label1(N - (MaxCol * 2)).ForeColor = vbWhite
Label1(N).BackColor = vbBlue
Label1(N - MaxCol).BackColor = vbBlue
Label1(N - (MaxCol * 2)).BackColor = vbBlue
End If
End If
Next N
End If
End Sub

Private Sub Timer2_Timer()
Dim N As Integer
If OK Then
For N = MaxCell - MaxCol To MaxCell
For O = N To 0 Step -MaxCol
If Label1(O).ForeColor = vbWhite Then
Label3.Caption = Label3.Caption + 10 * Label9.Caption
For P = O To MaxCol Step -MaxCol
Label1(P).ForeColor = Label1(P - MaxCol).ForeColor
Label1(P).Caption = Label1(P - MaxCol).Caption
Next P
Label1(O Mod MaxCol).Caption = (Rnd * 1000) Mod Random
Call Change_Color(O Mod MaxCol)
End If
Next O
Next N
For N = MaxCell - MaxCol To MaxCell
For O = N To MaxCol Step -MaxCol
If Label1(O).ForeColor = vbWhite Then Call Timer2_Timer
Next O
Next N
End If
End Sub

Private Sub Timer3_Timer()
Winner = True
Label4.Caption = "OK"
For N = 0 To MaxCell
If Label1(N).ForeColor = vbWhite Then Label4.Caption = "NO"
If Label1(N).BackColor = vbBlack Then Winner = False
Next N
If OK And Winner Then
If Label9.Caption = 3 Then MsgBox "The Winner" & vbNewLine & "Score = " & Label3.Caption: End
MsgBox "Next Level"
Call Form_Activate
Else
If Label11.Caption = 0 Then MsgBox "Game Over": End
End If
End Sub

Private Sub Timer4_Timer()
If OK Then Label11.Caption = Label11.Caption - IIf(Label11.Caption = 0, 0, 1)
End Sub


คลิ๊กขวาตรงนี้ครับจากนั้นบันทึกภา่พในลิงค์เป็นชื่อ 1.rar จากนั้นใช้
Win RAR ในการแตก Form VB Source code

เกมส์ไม่สวยขออภัยนะครับ...ลองไปพัฒนาให้สวยขึ้นนะครับ...




 

Create Date : 23 กรกฎาคม 2554    
Last Update : 4 พฤษภาคม 2556 17:08:50 น.
Counter : 1666 Pageviews.  

แจก Source Code เกมส์ ยานอวกาศยิงUFO

หรืออ่านบล็อกเกอร์ //thaivb6.blogspot.com/2013/04/vb6.html เรื่องเก่าของ VB6

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


Form1 - 1
Const Max_UFO = 11 ' กำหนดจำนวน UFO ต่อแถว
Dim Move_UFO1(0 To Max_UFO) As Boolean ' นิยาม UFO แถว 1 บินลงมาหรือไม่
Dim Move_UFO2(0 To Max_UFO) As Boolean ' นิยาม UFO แถว 2 บินลงมาหรือไม่
Dim Move_UFO3(0 To Max_UFO) As Boolean ' นิยาม UFO แถว 3 บินลงมาหรือไม่
Dim Move_UFO4(0 To Max_UFO) As Boolean ' นิยาม UFO แถว 4 บินลงมาหรือไม่
Private Sub Form_Activate() ' เมื่อฟอร์มทำงาน
Randomize ' สุ่มค่าใหม่หมด
Ying(0).Caption = "OK" ' Misside 1 ยิงได้
Ying(1).Caption = "OK" ' Misside 2 ยิงได้
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) ' รับการกดคีย์ที่ฟอร์ม
Select Case KeyCode ' ถ้ากด
Case Is = 32 ' Space bar ยิง Misside
If Ying(0).Caption = "OK" Then Ying(0).Caption = "NO" ' Misside 1 สถานะยิงไม่ได้
If Ying(1).Caption = "OK" And Misside(0).Top <> Misside(1).Top Then Ying(1).Caption = "NO"
' ถ้า Misside 2 ยิงได้ และ Misside 1 ไม่อยู่ในตำแหน่งเดียวกับ Misside 1 กำหนดให้ Misside 2 สถานะยิงไม่ได้
Case Is = 37 ' ถ้ากด ลูกศร ซ้าย
Yan.Left = Yan.Left - IIf(Yan.Left - 100 < 0, 0, 100) ' เลื่อนยานไปทางซ้าย ถ้าสุดขอบ ให้หยุด
Case Is = 39 ' ถ้ากด ลูกศร ขวา
Yan.Left = Yan.Left + IIf(Yan.Left + 100 > Form1.Width - Yan.Width, 0, 100) ' เลื่อนยานไปทาง
ขวา ถ้าสุดขอบหยุด
End Select
End Sub
Private Sub Timer1_Timer() ' จัดการด้านการเคลื่อนที่ของ Misside
If Ying(0).Caption = "NO" Then ' ถ้า Misside 1 ถูกยิง
Misside(0).Top = Misside(0).Top - 200 ' เลื่อน Misside 1 ไปด้านบน
If Misside(0).Top < 0 Then Misside(0).Left = Yan.Left: Misside(0).Top = Yan.Top: Ying(0).C
aption = "OK"
' ถ้า Misside 1 สุดขอบ Misside 1 กลับไปที่ยาน สถานะพร้อมยิง
Else
Misside(0).Left = Yan.Left: Misside(0).Top = Yan.Top ' ถ้าไม่ถูกยิง ให้ติดไปกับยาน
End If
If Ying(1).Caption = "NO" Then ' ถ้า Misside 2 ถูกยิง
Misside(1).Top = Misside(1).Top - 200 ' เลื่อน Misside 2 ไปด้านบน
If Misside(1).Top < 0 Then Misside(1).Left = Yan.Left: Misside(1).Top = Yan.Top: Ying(1).C
aption = "OK"
' ถ้า Misside 2 สุดขอบ Misside 2 กลับไปที่ยาน สถานะพร้อมยิง
Else
Misside(1).Left = Yan.Left: Misside(1).Top = Yan.Top ' ถ้าไม่ถูกยิง ให้ติดไปกับยาน
End If
End Sub
Private Sub Timer2_Timer() ' จัดการด้านการเคลื่อนที่ ของ UFO
For N = 0 To Max_UFO ' นับ UFO ไปจนสุดแถว
UFO1(N).Left = UFO1(N).Left - 50 ' UFO แถว 1 เคลื่อนที่ไปทาง ซ้าย
UFO1(N).Left = IIf(UFO1(N).Left < -UFO1(N).Left, Form1.Width, UFO1(N).Left) ' ถ้าสุดขอบ ทะลุไป
ทางขวา
UFO2(N).Left = UFO2(N).Left + 50 ' UFO แถว 2 เคลื่อนที่ไปทาง ขวา
UFO2(N).Left = IIf(UFO2(N).Left + UFO2(N).Width > Form1.Width, 0, UFO2(N).Left) ' ถ้าสุดขอบ ท
ะลุไปทางซ้าย
UFO3(N).Left = UFO3(N).Left - 50 ' UFO แถว 3 เคลื่อนที่ไปทาง ซ้าย
UFO3(N).Left = IIf(UFO3(N).Left < -UFO3(N).Left, Form1.Width, UFO3(N).Left) ' ถ้าสุดขอบ ทะลุไป
ทางขวา
UFO4(N).Left = UFO4(N).Left + 50 ' UFO แถว 4 เคลื่อนที่ไปทาง ขวา
UFO4(N).Left = IIf(UFO4(N).Left + UFO4(N).Width > Form1.Width, 0, UFO4(N).Left) ' ถ้าสุดขอบ ท
ะลุไปทางซ้าย
Next N
End Sub
Private Sub Timer3_Timer() ' จัดการเรื่อง ทำลาย UFO และ ชนะเกมส์
Dim OK As Boolean ' กำหนดค่า OK ตรวจสอบ UFO ยังมีอยู่
For M = 0 To 1 ' นับ จำนวน Misside
For N = 0 To Max_UFO ' นับ จำนวน UFO ใน แถว
If UFO1(N).Visible Then ' ถ้า UFO แถว 1 ยังอยู่
OK = True ' เกมส์ ยังไม่ชนะ
If Misside(M).Left + Int(Misside(M).Width / 2) > UFO1(N).Left And Misside(M).Left
Form1 - 2
+ Int(Misside(M).Width / 2) < UFO1(N).Left + UFO1(N).Width And _
Misside(M).Top + Int(Misside(M).Height / 2) > UFO1(N).Top And Misside(M).Top + Int
(Misside(M).Height / 2) < UFO1(N).Top + UFO1(N).Height Then
' ถ้า จุดกึ่งกลาง Misside อยู่ใน UFO แถว 1
UFO1(N).Visible = False ' ซ่อน UFO
Score.Caption = Score.Caption + 100 ' คะแนนเพิ่มขึ้น
Ying(M).Caption = "OK" ' Misside พร้อมยิง
End If
End If
If UFO2(N).Visible Then ' ถ้า UFO แถว 2 ยังอยู่
OK = True ' เกมส์ ยังไม่ชนะ
If Misside(M).Left + Int(Misside(M).Width / 2) > UFO2(N).Left And Misside(M).Left
+ Int(Misside(M).Width / 2) < UFO2(N).Left + UFO2(N).Width And _
Misside(M).Top + Int(Misside(M).Height / 2) > UFO2(N).Top And Misside(M).Top + Int
(Misside(M).Height / 2) < UFO2(N).Top + UFO2(N).Height Then
' ถ้า จุดกึ่งกลาง Misside อยู่ใน UFO แถว 2
UFO2(N).Visible = False ' ซ่อน UFO
Score.Caption = Score.Caption + 100 ' คะแนนเพิ่มขึ้น
Ying(M).Caption = "OK" ' Misside พร้อมยิง
End If
End If
If UFO3(N).Visible Then ' ถ้า UFO แถว 3 ยังอยู่
OK = True ' เกมส์ ยังไม่ชนะ
If Misside(M).Left + Int(Misside(M).Width / 2) > UFO3(N).Left And Misside(M).Left
+ Int(Misside(M).Width / 2) < UFO3(N).Left + UFO3(N).Width And _
Misside(M).Top + Int(Misside(M).Height / 2) > UFO3(N).Top And Misside(M).Top + Int
(Misside(M).Height / 2) < UFO3(N).Top + UFO3(N).Height Then
' ถ้า จุดกึ่งกลาง Misside อยู่ใน UFO แถว 3
UFO3(N).Visible = False ' ซ่อน UFO
Score.Caption = Score.Caption + 100 ' คะแนนเพิ่มขึ้น
Ying(M).Caption = "OK" ' Misside พร้อมยิง
End If
End If
If UFO4(N).Visible Then ' ถ้า UFO แถว 4 ยังอยู่
OK = True ' เกมส์ ยังไม่ชนะ
If Misside(M).Left + Int(Misside(M).Width / 2) > UFO4(N).Left And Misside(M).Left
+ Int(Misside(M).Width / 2) < UFO4(N).Left + UFO4(N).Width And _
Misside(M).Top + Int(Misside(M).Height / 2) > UFO4(N).Top And Misside(M).Top + Int
(Misside(M).Height / 2) < UFO4(N).Top + UFO4(N).Height Then
' ถ้า จุดกึ่งกลาง Misside อยู่ใน UFO แถว 4
UFO4(N).Visible = False ' ซ่อน UFO
Score.Caption = Score.Caption + 100 ' คะแนนเพิ่มขึ้น
Ying(M).Caption = "OK" ' Misside พร้อมยิง
End If
End If
Next N
If Not OK Then MsgBox "Winner": End ' ถ้าไม่พบ UFO แสดงข้อความชนะ และ จบเกมส์
Next M
End Sub
Private Sub Timer4_Timer() ' จัดการเคลื่อนที่ลงมาของ UFO และ Game Over
For N = 0 To Max_UFO ' ไล่สุ่ม UFO ในแถว
If ((Rnd * 1000) Mod 1000) + 1 = 666 Then Move_UFO1(N) = True ' สุ่มเลข ถ้าเป็น 666 UFO แถว 1 เค
ลื่อนที่
If ((Rnd * 1000) Mod 1000) + 1 = 666 Then Move_UFO2(N) = True ' สุ่มเลข ถ้าเป็น 666 UFO แถว 2 เค
ลื่อนที่
If ((Rnd * 1000) Mod 1000) + 1 = 666 Then Move_UFO3(N) = True ' สุ่มเลข ถ้าเป็น 666 UFO แถว 3 เค
ลื่อนที่
If ((Rnd * 1000) Mod 1000) + 1 = 666 Then Move_UFO4(N) = True ' สุ่มเลข ถ้าเป็น 666 UFO แถว 4 เค
ลื่อนที่
Next N
For N = 0 To Max_UFO ' นับ UFO ในแถว
If Move_UFO1(N) = True Then ' ถ้า UFO แถว 1 ตัวที่สุ่มเคลื่อนที่
If UFO1(N).Visible Then ' ถ้า UFO ที่สุ่มยังอยู่
UFO1(N).Top = UFO1(N).Top + 200 ' UFO ที่สุ่มบินลงมา
If UFO1(N).Top > Form1.Height Then UFO1(N).Top = -UFO1(N).Height ' ถ้าสุดจอล้าง ให้เริ่มใหม่
ด้านบน
If UFO1(N).Left + Int(UFO1(N).Width / 2) > Yan.Left And UFO1(N).Left + Int(UFO1(N)
.Width / 2) < Yan.Left + Yan.Width And _
Form1 - 3
UFO1(N).Top + Int(UFO1(N).Height / 2) > Yan.Top And UFO1(N).Top + Int(UFO1(N).Heig
ht / 2) < Yan.Top + Yan.Height Then
' ถ้าจุดกึ่งกลาง UFO อยู่ใน ยานอวกาศ
Life.Caption = Left(Life.Caption, Len(Life.Caption) - IIf(Len(Life.Caption) =
0, 0, 3)) ' ลดชีวิตลง
' ( ถ้ายังมีข้อความ ดึงข้อความจากความกว้างของป้าย - 3)
End If
End If
End If
If Move_UFO2(N) = True Then ' ถ้า UFO แถว 2 ตัวที่สุ่มเคลื่อนที่
If UFO2(N).Visible Then ' ถ้า UFO ที่สุ่มยังอยู่
UFO2(N).Top = UFO2(N).Top + 200 ' UFO ที่สุ่มบินลงมา
If UFO2(N).Top > Form1.Height Then UFO2(N).Top = -UFO2(N).Height ' ถ้าสุดจอล้าง ให้เริ่มใหม่
ด้านบน
If UFO2(N).Left + Int(UFO2(N).Width / 2) > Yan.Left And UFO2(N).Left + Int(UFO2(N)
.Width / 2) < Yan.Left + Yan.Width And _
UFO2(N).Top + Int(UFO2(N).Height / 2) > Yan.Top And UFO2(N).Top + Int(UFO2(N).Heig
ht / 2) < Yan.Top + Yan.Height Then
' ถ้าจุดกึ่งกลาง UFO อยู่ใน ยานอวกาศ
Life.Caption = Left(Life.Caption, Len(Life.Caption) - IIf(Len(Life.Caption) =
0, 0, 3)) ' ลดชีวิตลง
End If
End If
End If
If Move_UFO3(N) = True Then ' ถ้า UFO แถว 3 ตัวที่สุ่มเคลื่อนที่
If UFO3(N).Visible Then ' ถ้า UFO ที่สุ่มยังอยู่
UFO3(N).Top = UFO3(N).Top + 200 ' UFO ที่สุ่มบินลงมา
If UFO3(N).Top > Form1.Height Then UFO3(N).Top = -UFO3(N).Height ' ถ้าสุดจอล้าง ให้เริ่มใหม่
ด้านบน
If UFO3(N).Left + Int(UFO3(N).Width / 2) > Yan.Left And UFO3(N).Left + Int(UFO3(N)
.Width / 2) < Yan.Left + Yan.Width And _
UFO3(N).Top + Int(UFO3(N).Height / 2) > Yan.Top And UFO3(N).Top + Int(UFO3(N).Heig
ht / 2) < Yan.Top + Yan.Height Then
' ถ้าจุดกึ่งกลาง UFO อยู่ใน ยานอวกาศ
Life.Caption = Left(Life.Caption, Len(Life.Caption) - IIf(Len(Life.Caption) =
0, 0, 3)) ' ลดชีวิตลง
End If
End If
End If
If Move_UFO4(N) = True Then ' ถ้า UFO แถว 4 ตัวที่สุ่มเคลื่อนที่
If UFO4(N).Visible Then ' ถ้า UFO ที่สุ่มยังอยู่
UFO4(N).Top = UFO4(N).Top + 200 ' UFO ที่สุ่มบินลงมา
If UFO4(N).Top > Form1.Height Then UFO4(N).Top = -UFO4(N).Height ' ถ้าสุดจอล้าง ให้เริ่มใหม่
ด้านบน
If UFO4(N).Left + Int(UFO4(N).Width / 2) > Yan.Left And UFO4(N).Left + Int(UFO4(N)
.Width / 2) < Yan.Left + Yan.Width And _
UFO4(N).Top + Int(UFO4(N).Height / 2) > Yan.Top And UFO4(N).Top + Int(UFO4(N).Heig
ht / 2) < Yan.Top + Yan.Height Then
' ถ้าจุดกึ่งกลาง UFO อยู่ใน ยานอวกาศ
Life.Caption = Left(Life.Caption, Len(Life.Caption) - IIf(Len(Life.Caption) =
0, 0, 3)) ' ลดชีวิตลง
End If
End If
End If
Next N
If Life.Caption = Empty Then MsgBox "Game Over": End ' ถ้า ป้ายแสดงชีวิตไม่มีข้อมูล แสดงข้อความแพ้ และจบเกมส์
End Sub



ลองขยายภาพ และดูตัวอย่าง From
จากนั้นลองสร้าง ฉลากขึ้นมาเพื่อให้รู้จักวิธีการทำงานของโปรแกรม
วิชวลเบสิค...ให้คุ้นเคย...
1. ต้องรู้ัจักวิธี วาง Label และ กำหนดสี และ วาดขนาดของมัน รวมถึงเืลือก
ช่อง BackStyle เลือก Tranperent เพื่อเจาะแบกกาวด์...(ส่วนนี้สำคัญมาก
เพราะในการสร้างเกมส์ที่เป็นรูปภาพ เทคนิคการเจาะแบกกาวด์ ภาพต้อง
อาศัย ฟังก์ชั่นพิเศษเพื่อให้เกมส์สมจริง และเขียนเกมส์เคลื่อนไหวได้ลงตัว
ซึ่ง จะมาสอนการเขียนเกมส์แบบรูปภาพในคราวหน้า)
2. ต้องรู้จักวาง Timer และ หน่วงเวลาในช่อง Interval
3. ต้องกำหนดสี Form พื้นหลังตามต้องการ
5. การกำหนด Index ของ Label ให้ น้อง Copy Label ตัวแรกก่อน...
จากนั้น VB6 จะถามว่า สร้าง Object แบบ อาเรย์หรือไม่ ให้ตอบ Yes
จากนั้น VB6 จะสร้าง Label ในชื่อเดียวกันมาให้ โดยแตกต่างกันเพีียง
ช่อง Index จะมี ตัวเลขที่ไล่ลำดับกันไป...ถ้าต้องการ ยกเลิก อาเรย์ตัว
นั้น ต้องลบข้อมูลในช่องนี้...ที่สำคัญ ต้องเปลี่ยนชื่อ Object เป็น ชื่ออื่น
ก่อนมิฉะนั้นมันจะไม่เปลี่ยนให้
6. อา...ไม่รู้จะเริ่มยังไงดี...กับโค้ดเพื่อให้น้องๆ เข้าใจ...เพราะก่อนจะ
เขาใจโค้ดได้...น้องต้องไปเรียนพื้นฐานของ VB6 เรื่องเครื่องมือกันก่อน..
เดียว Search ก่อนนะ...ว่า ปัจจุบัน...มีเวปไหนสอน...จะเอา Link มาแปะ
ให้... //www.ind.cru.in.th/atikhom/files/VB.pdf ลองอ่านใน
เวปนี้ก่อน...ทำความเข้าใจมัน...
7. เีดียวจะเอาความรู้มาเสริมให้... อ่านไปก่อนนะ...
8. ถ้าจะข้ามขั้น...กระโดด ไป VB.Net เลย...ก็ขอบอกว่า...บล็อกผมคง
ไม่ทันสมัยขนาดนั้นทำนะเหรอ...(เครื่องที่ใช้ สเปคไม่ถึง...อีกประการ
คือ...จะอัปไปทำไม...ในเมื่อไม่ได้ใช้เขียน Data Base ที่ต้องอาศัย
.Net ในการอัป ฐานข้อมูลสู่เวป หรือเชื่อม SQL ซึ่ง บล็อกผม ไม่ได้เขียน
เพื่อสอนคนให้เป็นโปรแกรมเมอร์ เพราะไม่เข้าท่าเลยถ้าสอนเขียนฐาน
ข้อมูลเพื่อออกผลิตภัณฑ์เดียวกันมาขายแข่งกันเอง...ต้องไปหาเวปที่
เขาแจก Source Code ด้านนี้...ซึ่งผมยังไม่เห็นใครโง่ขนาดนั้น) ฉะนั้น
ใครต้องการ .Net เขียน เกมส์ ก็เก่งกว่าผม...คงไม่ต้องมาอ่าน คนจบ
ปวส. มาสอนเขียนโปรแกรมกัน...เพราะ ผมเห็น ข้อแตกต่างของเกมส์
ที่ใช้ .Net และ VB6 ต่างกันแ่ค่ .Net มีฟังก์ชั่นใหม่ๆ แต่ใช้งานในเครื่อง
โบราณก็อืดเป็น เต่า ส่วน VB6 มันมีความสมบรูณ์ ในตัวของมันในระดับ
หนึ่ง...แต่มันก็ยังขาด กราฟฟิกที่เขียนง่ายอยู่ดี...เอาอย่างนี้...ถ้าคุณจะ
หัดเขียนโปรแกรมโดยเริ่มจาก VB.Net ก็ไม่ว่า... แต่ต้องหาเวปต่าง
ประเทศที่เขาสอนอยู่มากมาย...ส่วนใครเป็น เด็กโข่งอย่างผมที่เขียน
ภาษาและอ่านภาษาอังกฤษ งูๆ ปลาๆ ก็ มาลองเล่น VB6 ดูก่อน...เด็ก
โข่ง...ส่วนมากชอบมัน...เพราะไม่ต้อง
9. เก่งไวยกรณ์ ภาษาอังกฤษ ไม่ต้องจำสัญลักษณ์มากมายของภาษา C
ไม่ต้องเรียนรู้ Include ของ ภาษามากมายอย่างภาษา C เพราะ Vb6
ถ้าคุณเขียน .EXE หรือ Application โดยยังไม่เสริม AddIn ใดๆ มันสามารถ
ทำงานได้ตั้งแต่ Win98, WinMe , WinXP, Win7 ซึ่งไม่ต้องเสริมโปรแกรม
อะไรหรือ แพลตอะไรให้กับมัน...และเขียนเกมส์ที่ง่ายๆแบบไม่ต้องติดตั้ง
เล่นในวินโดวส์ทุกรุ่นได้...
10. และถ้าคุณเก่งเรื่องพวกนี้หมดแล้ว...ในที่สุด...VB6 ก็เป็นแค่เมียหลวง
ที่โง่ ทึม ซึมเศร้า เหงาเพราะรัก... ที่หมดความหมาย...แต่มีความสำคัญ
กับการเขียนเกมส์ในครั้งแรก


เอาล่ะ...เกมส์นี้เขียนขึ้นมายากก็...เอา From VB ไปแหละกัน...

คลิ๊กขวาตรงนี้
และบันทึกภาพ ในลิงค์ เป็นชื่อ 1.rar จากนั้นใช้
Win RAR ในการแตกไฟล์




 

Create Date : 13 กรกฎาคม 2554    
Last Update : 4 พฤษภาคม 2556 17:09:13 น.
Counter : 3225 Pageviews.  

1  2  3  

ธนัตถ์เดชน์
Location :
ขอนแก่น Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 9 คน [?]




การเรียนรู้...ไม่มีวันจบสิ้น
Friends' blogs
[Add ธนัตถ์เดชน์'s blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.