2008/Jan/30

สร้างเมืองกับ myminicity.com

สร้างเมืองกับ myminicity.com

 


แนวสร้างเมืองของตัวบนเว็บ
ไม่มีไรมาก เราก็สร้างเมืองของเราขึ้นมา แล้วก็ ทุกๆคลิกที่คลิก Link เมืองเรา เมืองเราก็จะมีประชากรเพื่มขึ้นทีละคนๆ
ถ้าเกิดว่าเรามีประชากรเยอะๆแล้วเราจะสามารถออกแบบเมืองของเราเองได้อีกด้วย เกมส์ก็แนว Sim City อ่ะนะ
เวลาเล่นต่อวันโดยประมาณ : 1 นาทีก็นานแล่้ว
เวลาที่ใช้สมัคร : เกิน 1 นาทีให้เตะ
จุดประสงค์ของเกมส์ : ให้คุณมีเวลาสนุกเพิ่มขึ้น xD

ไม่ต้องสมัครสมาชิก ไม่เสียตัง เพียงแค่ใส่ชื่อเมืองที่ชอบของคุณไป คุณก็จะมีเมืองเล็กๆเป็นของตัวเองแล้ว
สามารถเลือกประเทศได้ ว่าจะเลือกสร้างเมืองที่ประเทศไหน ได้ทั่วโลกเลยครับ
วิธีพัฒนาเมือง เพียงแค่ มีคนอื่นเข้าไปชมเมืองของคุณ เมืองก็จะพัฒนา ตาม Link ที่เข้าไป เช่น

เข้า Link นี้
http://softcreate.myminicity.com/
Increase population จะเป็นการเพิ่มประชากร ของเมืองคุณ ให้มากขึ้น

และเมื่อเมืองพัฒนาไปมากๆ ก็จะมี ตัวเลือกอื่นๆเพิ่มเข้ามา เช่น
http://softcreate.myminicity.com/ind
Increase industry จะเป็นการเพิ่มอุสหากรรม โรงงาน เพิ่อให้คนมีงานทำ ถ้าโรงงานน้อยคนจะตกงานมาก
http://softcreate.myminicity.com/tra
Increase transport network เพิ่มถนนหนทาง เพื่อให้ประชากรเดินทางสะดวก สบาย มากขึ้น

http://softcreate.myminicity.com/sec
Increase security การเพิ่มความมั่นคงและปลอดภัย

และอื่นๆ

Improve environment

Increase business

และพื้นที่ของเมืองก็จะใหญ่และกว้างขึ้นด้วยครับ

อันนี้เมืองผม http://softcreate.myminicity.com/

แล้วเมืองคุณละ มาแลกเปลี่ยนกันเลยครับ

 

 

2007/May/09

คราวนี้เรามาดูวิธีการใช้คำสั่ง BitBlt ซึ่งใช้ ตัดภาพ และ คำสั่ง Mask สำหรับทำมาสค์และ Sprite.point เพื่อกำหนดจุดกันครับ
โดยโค้ดคราวนี้จะเป็นการmerge ภาพครับ สามารถDownload ได้ที่นี่นะครับ



ตั้งค่าตัวแปรและเรียกLibrary ให้เรียบร้อย
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Dim i As Integer
Dim i2 As Integer
Dim Result
Dim Step As Byte
กำหนดให้ค่า step เพิ่ม1 ทุกครั้งที่กดปุ่ม cmdnextstep
Private Sub cmdNextStep_Click()
Step = Step + 1
Select Case Step
Case 1: Step1
Case 2: Step2
Case 3: Step3
Case 4: Step4
Case 5: Step5
Case 6: Step6
Case 7: Step7
Case 8: Step8
Case 9: Step9
End Select
End Sub

Sub Step1()
'ก็อปปีภาพครับ
Result = BitBlt(Mask.hDC, 0, 0, Mask.Width, Mask.Height, Sprite.hDC, 0, 0, vbSrcCopy)
Mask.Picture = Mask.Image
End Sub

Sub Step2()
cmdNextStep.Enabled = False
'ทำมาสก์ขาวโดยกำหนดสีที่เอาออกที่จุด x,y ที่ 5,5,
Dim TransColor As Long
TransColor = Sprite.Point(5, 5)
Sprite.Picture = Sprite.Image

For i = 0 To 200
For i2 = 0 To 200
If Sprite.Point(i, i2) = TransColor Then
'ทำมาสค์ครับ กำหนดสีขาว
Mask.PSet (i, i2), vbWhite
End If
Next
DoEvents
Next
cmdNextStep.Enabled = True
End Sub

Sub Step3()
cmdNextStep.Enabled = False
'ถมดำที่อื่นนอกจากสีขาวข้างต้น
For i = 0 To 200
For i2 = 0 To 200
If Mask.Point(i, i2) <> vbWhite Then
Mask.PSet (i, i2), vbBlack
End If
Next
DoEvents
Next
cmdNextStep.Enabled = True
End Sub

Sub Step4()
'ย้ายแบ็คกราวด์เหมือนStep1)
BitBlt Final.hDC, 0, 0, Final.Width, Final.Height, Background.hDC, 0, 0, vbSrcCopy
Final.Picture = Final.Image
End Sub

Sub Step5()
'Merge ภาพโดยใช้ภาพจาก Step4 ลงบนภาพBackground
BitBlt Final.hDC, 0, 0, Final.Width, Final.Height, Mask.hDC, 0, 0, vbMergePaint
Final.Picture = Final.Image
End Sub

Sub Step6()
'ทำรีเวอสมาสก์ครับ โดยใช้ภาพจาก Step3
BitBlt ReverseMask.hDC, 0, 0, Mask.Width, Mask.Height, Mask.hDC, 0, 0, vbNotSrcCopy
ReverseMask.Picture = ReverseMask.Image
End Sub

Sub Step7()
'ก็อบปีภาพอีกที
BitBlt Foreground.hDC, 0, 0, Mask.Width, Mask.Height, Sprite.hDC, 0, 0, vbSrcCopy
Foreground.Picture = Foreground.Image
End Sub

Sub Step8()
'รีเวอสมาสก์สีขาวอีกที
BitBlt Foreground.hDC, 0, 0, Mask.Width, Mask.Height, ReverseMask.hDC, 0, 0, vbMergePaint
Foreground.Picture = Foreground.Image
End Sub

Sub Step9()
'นำภาพที่ได้มาMerge
BitBlt Final.hDC, 0, 0, Mask.Width, Mask.Height, Foreground.hDC, 0, 0, vbSrcAnd
Final.Picture = Final.Image
End Sub

จบหล่ะ

edit @ 2007/05/09 17:04:54
edit @ 2007/05/09 17:25:31

2007/May/09

คราวนี้เราก็มาวิเคราห์โค้ดกันจริงๆจังๆบ้างนะครับ คราวนี้ผมนำโค้ดการปรับความสว่างมาลองดูกัน อันนี้เขียนด้วย VB6 นะครับ เพราะมีน้องๆที่เริ่มเรียน ยังไม่ได้เรียนC อยู่เยอะเหมือนกัน ก็รุ่นน้องผมเองล่ะ ว่าแล้วก็ไม่เสียเวลา มาดูกันครับ
ก่อนชมสามารถ Download ที่นี่นะครับ


Private Declare Function SetPixelV Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Byte
Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long

Private Sub CmdBrightness_Click()
'ตั้งค่าตัวแปรสำหรับความสว่าง คำนวณสี ตำแหน่ง
Dim Brightness As Single
Dim NewColor As Long
Dim x, y As Integer
Dim r, g, b As Integer
'เปลี่ยนค่าเป็นเปอร์เซ็นต์
Brightness = TxtBrightness / 100
'รันลูปภาพทุกพิเซล
For x = 0 To Picture1.ScaleWidth
For y = 0 To Picture1.ScaleHeight
'รับค่าสี
NewColor = GetPixel(Picture1.hDC, x, y)
'ส่งค่า R,G,B values จาก long ไปโดย GetPixel
r = (NewColor Mod 256)
b = (Int(NewColor / 65536))
g = ((NewColor - (b * 65536) - r) / 256)
'เปลี่ยนค่า R,G,B ตาม brightness
r = r * Brightness
b = b * Brightness
g = g * Brightness
'เพื่อความแน่ใจว่าค่ามันจะไม่สูงเกินไป
If r > 255 Then r = 255
If r < 0 Then r = 0
If b > 255 Then b = 255
If b < 0 Then b = 0
If g > 255 Then g = 255
If g < 0 Then g = 0
'เซตpixel ใหม่
SetPixelV Picture1.hDC, x, y, RGB(r, g, b)
Next y
'รีเฟรชมันทุก 10 line (a nice progress bar effect)
If x Mod 10 = 0 Then Picture1.Refresh
Next x
'แล้วก็รีเฟรช
Picture1.Refresh
End Sub
เสร็จ ง่ายใช่มั้ยครับ แต่นี่เป็นโค้ดอย่างง่ายให้ทุกคนเข้าใจลูกเล่นของ Img Process นะครับ ขอบอกว่าจริงๆ Briness แบบที่เร็วๆ อาจจะมีแนวคิดที่ต่างจากนี้ก็ได้นะครับ

edit @ 2007/05/09 17:25:44