PDA

View Full Version : سوال: بازی دایره گرسنه



alinini
سه شنبه 01 شهریور 1390, 14:40 عصر
سلام به همه ی دوستان من دارم یه بازی می سازم که یک دایره است که با خوردن امیازات بزرگ میشه امتیازات در حقیقت مربع های قرمز هستند ولی هر کار کردم راه فهمیدن بر خورد دایره با مربع ها رو نفهمیدم این هم کد برنامه لطفا کمک کنید

Dim y As Long
Dim x, xd, yd, r, q As Long

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Circle (x, y), r, &H8000000F

If KeyCode = 37 Then Timer4.Enabled = True: Timer3.Enabled = False: Timer2.Enabled = False: Timer1.Enabled = False
If KeyCode = 38 Then Timer2.Enabled = True: Timer1.Enabled = False: Timer3.Enabled = False: Timer4.Enabled = False
If KeyCode = 39 Then Timer3.Enabled = True: Timer1.Enabled = False: Timer2.Enabled = False: Timer4.Enabled = False
If KeyCode = 40 Then Timer1.Enabled = True: Timer2.Enabled = False: Timer3.Enabled = False: Timer4.Enabled = False
If x > Form1.ScaleWidth - 300 Then x = r
If x < 300 Then x = Form1.ScaleWidth - r
If y > Form1.ScaleHeight - 300 Then y = r
If y < 300 Then y = Form1.ScaleHeight - r
If KeyCode = 27 Then Timer2.Enabled = False: Timer3.Enabled = False: Timer4.Enabled = False: Timer1.Enabled = False

Circle (x, y), r

For i = 1 To 360
xd = r * Cos(i)
yd = r * Sin(i)
c = Point(xd + 2, yd + 2)
If c = q Then q = &H8000000F: r = r + 50
Next

End Sub

Private Sub Form_Load()
x = 800: y = 1200: r = 300: q = &HFF&
Circle (x, y), 300
Line (300, 600)-(600, 300), q, BF


For i = 1 To 360
xd = r * Cos(i): xd = Int(xd)
If xd < 0 Then xd = xd + xd

yd = r * Sin(i): yd = Int(yd)
If yd < 0 Then yd = yd + yd
Next
For i = 300 To 600
For t = 300 To 600

If xd = i And yd = t Then q = &H8000000F: r = r + 50
Next
Next

End Sub

Private Sub Timer1_Timer()

Circle (x, y), r, &H8000000F
If x > Form1.ScaleWidth - 300 Then x = r
If x < r Then x = Form1.ScaleWidth - r
If y > Form1.ScaleHeight - 300 Then y = r
If y < r Then y = Form1.ScaleHeight - r
y = y + 50
Circle (x, y), r
End Sub

Private Sub Timer2_Timer()
Circle (x, y), 300, &H8000000F
If x > Form1.ScaleWidth - 300 Then x = r
If x < r Then x = Form1.ScaleWidth - r
If y > Form1.ScaleHeight - 300 Then y = r
If y < r Then y = Form1.ScaleHeight - r
y = y - 50
Circle (x, y), 300

End Sub

Private Sub Timer3_Timer()
Circle (x, y), 300, &H8000000F
If x > Form1.ScaleWidth - 300 Then x = r
If x < r Then x = Form1.ScaleWidth - r
If y > Form1.ScaleHeight - 300 Then y = r
If y < r Then y = Form1.ScaleHeight - r

x = x + 50
Circle (x, y), 300
End Sub

Private Sub Timer4_Timer()
Circle (x, y), r, &H8000000F
If x > Form1.ScaleWidth - 300 Then x = r
If x < r Then x = Form1.ScaleWidth - r
If y > Form1.ScaleHeight - 300 Then y = r
If y < r Then y = Form1.ScaleHeight - r
x = x - 50
Circle (x, y), r
End Sub

setroyd
سه شنبه 01 شهریور 1390, 15:05 عصر
شما باید محاسبه کنی که اگر left و top مربع ها در محدوده ی دایره بودن دایره بزرگ بشه . با این روش راحته

IamOverlord
سه شنبه 01 شهریور 1390, 16:21 عصر
فاصله ی مرکز دایره از هر کدام از چهار گوشه ی مربع رو پیدا کن، اگر حداقل یکیشون کم تر از شعاع دایره ات شد یعنی مربع توی دایره است.

alinini
چهارشنبه 02 شهریور 1390, 11:50 صبح
کسی راه دیگه ای سراغ نداره؟؟؟؟؟؟؟؟؟

IamOverlord
چهارشنبه 02 شهریور 1390, 13:45 عصر
مشکل این راه چیه؟!

محسن واژدی
چهارشنبه 02 شهریور 1390, 15:09 عصر
کسی راه دیگه ای سراغ نداره؟؟؟؟؟؟؟؟؟



راه دیگر استفاده از Direct-X است که این نیازمند داشتن اطلاعات کافی در زمینه برنامه نویسی direct-x است

در کل روشی که جناب IamOverlord روشی مناسب است؛ کافیست اشیاء اطراف دایره را کنترل آرایه کرده و برای جلوگیری از تکرار، تابعی نوشته که با ارسال نام اندیکس شی مورد نظر به آن بررسی کند که آیا این شی در محدوده ی دایره قرار دارد یا خیر

alinini
چهارشنبه 02 شهریور 1390, 15:58 عصر
ممنون از همه ی دوستان مشکل حل شد به زودی پروژه بازی را همین جا خواهم گذاشت

محسن واژدی
چهارشنبه 02 شهریور 1390, 15:59 عصر
سورس زیر را که نمونه ای از پست قبل است را بررسی کنید

البته زیاد دقیق نیست اما میتوانید با برنامه نویسی بیشتر آنرا کاملتر کنید

موفق باشید

IamOverlord
چهارشنبه 02 شهریور 1390, 18:06 عصر
اوه اوه یه کم پیچیده تر از این حرفاس، بیش تر مربوط به ریاضی می شه، اون راهی که گفتم خیلی خیلی دقیق نیست، ببینم راه دقیق تری هست یا نه.

setroyd
چهارشنبه 02 شهریور 1390, 19:57 عصر
دیگه از این ساده تر نمیتونی بنویسی !!!!!! پس سعی کن با کد نویسی کمی اشنا بشی .