ايران ويج

نسخه‌ی کامل: طراحی بازی کامپیوتری با میکرو AVR
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3
خوب بعد سحر اینو نوشتم : ( 90 دقیقه کامل وقتمو گرفت )

واسه شروع بدک نیست

بازی pong با دات ماتریس 8*8

[تصویر:  59c50d36e942411f8a6d.PNG]

روالش شاید واسه شروع عجیب باشه ولی بازی کنین دستتون میاد !! ( به سمت بالایی توپه بخوره از سمت بالا بر میگرده و اگه به سمت پایین بخوره از سمت پایین بر میگرده )

دو تا هم کلید داره واسه بالا و پایین رفتن !!

من ایرادی تو بازی ندیدم ولی خوب بازی کنید و برنامشو هم یه نگاهی بندازین تا همینو ارتقا بدیم !!!!

فایل برنامه و تست پروتئوس رو در پیوست بگیرین !!
این استقبال منو کشته !!!

دوستان من تو برنامه یه تغییراتی دادم !

فکر کنم الان بهتر شده !! ( دیگه بستگی نداره به کجاش بخره )

این برنامه رو هم تست کنین :
[attachment=5469]

کد:
$regfile = "M32def.dat" : $crystal = 4000000

Ddrb = 255 : Ddra = 255

Dim Led(8) As Byte , A As Byte , B As Byte
Dim Samt As Byte , Jahat As Byte , Speed As Byte

Config Timer2 = Timer , Prescale = 8
On Timer2 Refresh : Enable Timer2 : Start Timer2
Config Timer0 = Timer , Prescale = 1024
On Timer0 Move : Enable Timer0 : Start Timer0
Enable Interrupts
Enable Int0 : On Int0 Up : Config Int0 = Rising
Enable Int1 : On Int1 Down : Config Int0 = Rising

Gosub Game_over

Do

Loop

'===============================================================================

Move:
Incr Speed
If Speed = 4 Then:
Speed = 0
If Samt = 0 And Jahat = 0 Then:
If Led(2) <> 0 And Led(2) <> 128 Then : Led(3) = Led(2) * 2 : Led(2) = 0
Elseif Led(3) <> 0 And Led(3) <> 128 Then : Led(4) = Led(3) * 2 : Led(3) = 0
Elseif Led(4) <> 0 And Led(4) <> 128 Then : Led(5) = Led(4) * 2 : Led(4) = 0
Elseif Led(5) <> 0 And Led(5) <> 128 Then : Led(6) = Led(5) * 2 : Led(5) = 0
Elseif Led(6) <> 0 And Led(6) <> 128 Then : Led(7) = Led(6) * 2 : Led(6) = 0
Elseif Led(7) <> 0 And Led(7) <> 128 Then : Led(8) = Led(7) * 2 : Led(7) = 0
Elseif Led(8) <> 0 And Led(8) <> 128 Then : Led(7) = Led(8) * 2 : Led(8) = 0 : Jahat = 1
Elseif Led(2) = 128 Then : Led(3) = Led(2) / 2 : Led(2) = 0 : Samt = 1
Elseif Led(3) = 128 Then : Led(4) = Led(3) / 2 : Led(3) = 0 : Samt = 1
Elseif Led(4) = 128 Then : Led(5) = Led(4) / 2 : Led(4) = 0 : Samt = 1
Elseif Led(5) = 128 Then : Led(6) = Led(5) / 2 : Led(5) = 0 : Samt = 1
Elseif Led(6) = 128 Then : Led(7) = Led(6) / 2 : Led(6) = 0 : Samt = 1
Elseif Led(7) = 128 Then : Led(8) = Led(7) / 2 : Led(7) = 0 : Samt = 1
Elseif Led(8) = 128 Then : Led(7) = Led(8) / 2 : Led(8) = 0 : Samt = 1 : Jahat = 1
End If
Elseif Samt = 1 And Jahat = 0 Then:
If Led(2) <> 0 And Led(2) <> 1 Then : Led(3) = Led(2) / 2 : Led(2) = 0
Elseif Led(3) <> 0 And Led(3) <> 1 Then : Led(4) = Led(3) / 2 : Led(3) = 0
Elseif Led(4) <> 0 And Led(4) <> 1 Then : Led(5) = Led(4) / 2 : Led(4) = 0
Elseif Led(5) <> 0 And Led(5) <> 1 Then : Led(6) = Led(5) / 2 : Led(5) = 0
Elseif Led(6) <> 0 And Led(6) <> 1 Then : Led(7) = Led(6) / 2 : Led(6) = 0
Elseif Led(7) <> 0 And Led(7) <> 1 Then : Led(8) = Led(7) / 2 : Led(7) = 0
Elseif Led(8) <> 0 And Led(8) <> 1 Then : Led(7) = Led(8) / 2 : Led(8) = 0 : Jahat = 1
Elseif Led(2) = 1 Then : Led(3) = Led(2) * 2 : Led(2) = 0 : Samt = 0
Elseif Led(3) = 1 Then : Led(4) = Led(3) * 2 : Led(3) = 0 : Samt = 0
Elseif Led(4) = 1 Then : Led(5) = Led(4) * 2 : Led(4) = 0 : Samt = 0
Elseif Led(5) = 1 Then : Led(6) = Led(5) * 2 : Led(5) = 0 : Samt = 0
Elseif Led(6) = 1 Then : Led(7) = Led(6) * 2 : Led(6) = 0 : Samt = 0
Elseif Led(7) = 1 Then : Led(8) = Led(7) * 2 : Led(7) = 0 : Samt = 0
Elseif Led(8) = 1 Then : Led(7) = Led(8) * 2 : Led(8) = 0 : Samt = 0 : Jahat = 1
End If
Elseif Samt = 0 And Jahat = 1 Then:
If Led(2) = 1 Then :
If Led(1) = &B00000011 Then : Led(3) = 2 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 2 Then :
If Led(1) = &B00000011 Or Led(1) = &B00000110 Then : Led(3) = 4 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 4 Then :
If Led(1) = &B00000110 Or Led(1) = &B00001100 Then : Led(3) = 8 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 8 Then :
If Led(1) = &B00001100 Or Led(1) = &B00011000 Then : Led(3) = 16 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 16 Then :
If Led(1) = &B00011000 Or Led(1) = &B00110000 Then : Led(3) = 32 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 32 Then :
If Led(1) = &B00110000 Or Led(1) = &B01100000 Then : Led(3) = 64 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 64 Then :
If Led(1) = &B01100000 Or Led(1) = &B11000000 Then : Led(3) = 128 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 128 Then :
If Led(1) = &B11000000 Then : Led(3) = 64 : Led(2) = 0 : Jahat = 0 : Samt = 1
Else : Gosub Game_over
End If
Elseif Led(3) <> 0 And Led(3) <> 128 Then : Led(2) = Led(3) * 2 : Led(3) = 0
Elseif Led(4) <> 0 And Led(4) <> 128 Then : Led(3) = Led(4) * 2 : Led(4) = 0
Elseif Led(5) <> 0 And Led(5) <> 128 Then : Led(4) = Led(5) * 2 : Led(5) = 0
Elseif Led(6) <> 0 And Led(6) <> 128 Then : Led(5) = Led(6) * 2 : Led(6) = 0
Elseif Led(7) <> 0 And Led(7) <> 128 Then : Led(6) = Led(7) * 2 : Led(7) = 0
Elseif Led(8) <> 0 And Led(8) <> 128 Then : Led(7) = Led(8) * 2 : Led(8) = 0 : Jahat = 0
Elseif Led(3) = 128 Then : Led(2) = Led(3) / 2 : Led(3) = 0 : Samt = 1
Elseif Led(4) = 128 Then : Led(3) = Led(4) / 2 : Led(4) = 0 : Samt = 1
Elseif Led(5) = 128 Then : Led(4) = Led(5) / 2 : Led(5) = 0 : Samt = 1
Elseif Led(6) = 128 Then : Led(5) = Led(6) / 2 : Led(6) = 0 : Samt = 1
Elseif Led(7) = 128 Then : Led(6) = Led(7) / 2 : Led(7) = 0 : Samt = 1
Elseif Led(8) = 128 Then : Led(7) = Led(8) / 2 : Led(8) = 0 : Samt = 1 : Jahat = 0
End If
Elseif Samt = 1 And Jahat = 1 Then:
If Led(2) = 1 Then :
If Led(1) = &B00000011 Then : Led(3) = 2 : Led(2) = 0 : Jahat = 0 : Samt = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 2 Then :
If Led(1) = &B00000011 Or Led(1) = &B00000110 Then : Led(3) = 1 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 4 Then :
If Led(1) = &B00000110 Or Led(1) = &B00001100 Then : Led(3) = 2 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 8 Then :
If Led(1) = &B00001100 Or Led(1) = &B00011000 Then : Led(3) = 4 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 16 Then :
If Led(1) = &B00011000 Or Led(1) = &B00110000 Then : Led(3) = 8 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 32 Then :
If Led(1) = &B00110000 Or Led(1) = &B01100000 Then : Led(3) = 16 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 64 Then :
If Led(1) = &B01100000 Or Led(1) = &B11000000 Then : Led(3) = 32 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over : Return
End If
Elseif Led(2) = 128 Then :
If Led(1) = &B11000000 Then : Led(3) = 64 : Led(2) = 0 : Jahat = 0
Else : Gosub Game_over
End If
Elseif Led(3) <> 0 And Led(3) <> 1 Then : Led(2) = Led(3) / 2 : Led(3) = 0
Elseif Led(4) <> 0 And Led(4) <> 1 Then : Led(3) = Led(4) / 2 : Led(4) = 0
Elseif Led(5) <> 0 And Led(5) <> 1 Then : Led(4) = Led(5) / 2 : Led(5) = 0
Elseif Led(6) <> 0 And Led(6) <> 1 Then : Led(5) = Led(6) / 2 : Led(6) = 0
Elseif Led(7) <> 0 And Led(7) <> 1 Then : Led(6) = Led(7) / 2 : Led(7) = 0
Elseif Led(8) <> 0 And Led(8) <> 1 Then : Led(7) = Led(8) / 2 : Led(8) = 0 : Jahat = 0
Elseif Led(3) = 1 Then : Led(2) = Led(3) * 2 : Led(3) = 0 : Samt = 0
Elseif Led(4) = 1 Then : Led(3) = Led(4) * 2 : Led(4) = 0 : Samt = 0
Elseif Led(5) = 1 Then : Led(4) = Led(5) * 2 : Led(5) = 0 : Samt = 0
Elseif Led(6) = 1 Then : Led(5) = Led(6) * 2 : Led(6) = 0 : Samt = 0
Elseif Led(7) = 1 Then : Led(6) = Led(7) * 2 : Led(7) = 0 : Samt = 0
Elseif Led(8) = 1 Then : Led(7) = Led(8) * 2 : Led(8) = 0 : Samt = 0 : Jahat = 0
End If
End If
End If
Return

'===============================================================================

Game_over:
Disable Interrupts : Speed = 0 : Timer0 = 0 : Samt = 0 : Jahat = 0
Disable Timer0 : Enable Interrupts
For B = 1 To 8
Led(b) = 255 : Waitms 20 : Led(b) = 0
Next
Led(1) = &B00011000 : Led(2) = &B00010000
Return

'===============================================================================

Up:
If Led(1) <> &B11000000 Then Led(1) = Led(1) * 2
Enable Timer0
Return

'-------------------------------------------------------------------------------

Down:
If Led(1) <> &B00000011 Then Led(1) = Led(1) / 2
Enable Timer0
Return

'===============================================================================

Refresh:
Porta = 0 : Incr A
If A = 1 Then :
Portb = Not Led(1) : Porta = 1
Elseif A = 2 Then :
Portb = Not Led(2) : Porta = 2
Elseif A = 3 Then :
Portb = Not Led(3) : Porta = 4
Elseif A = 4 Then :
Portb = Not Led(4) : Porta = 8
Elseif A = 5 Then :
Portb = Not Led(5) : Porta = 16
Elseif A = 6 Then :
Portb = Not Led(6) : Porta = 32
Elseif A = 7 Then :
Portb = Not Led(7) : Porta = 64
Elseif A = 8 Then :
Portb = Not Led(8) : Porta = 128
A = 0
End If
Return

فقط نمی دونم چرا توقف تایمرها تو پروتئوس کار نمی کنه و مجبورم وقفه شون رو غیر فعال کنم !!!! ( نگین برنامه من کار عجیب و اضافه کرده , عیب از پروتوسه که انجوری فقط کار می کنه )

دیدم سایت های خارجی فیلم هم می ذارم و گفتیم ما هم یه فیلم ازش بذاریم !! ( فقط فول اسکرینش نکنین و کوچولو نگاش کنین )
[attachment=5470]
حالا که مطمئن شدیم میشه یه کارهای تو این زمینه انجام داد پیشنهاد ابتدا یه برد بزنیم و بعد ادامه بدیم !!!!

دات ماتریس دو رنگ جایی سراغ دارین داشته باشه ؟

این روبوکیو که فقط قرمز داره ! http://roboeq.com/modules.php?op=modload...ink&cid=43
سایزش رو هم نگفته !!

[تصویر:  1203006.gif]

بقیه فروشگاهای اینترنتی هم چیزی نداشتن !!

پیشنهاد من ساخت یه چیزی شبیه مدار زیر است :

[تصویر:  ledgame.jpg]

البته واسه میکرو از ATmega32 استفاده کنیم و دات ماتریکس دو رنگ هم بذاریم !!
4 تا کلید جهتی سمت چپ و دو کلید سمت راست و دو تا کلید هم وسط !! ( شبیه دسته میکرو یه جورایی )

اگه هم قطعات SMD باشه که عالیه !!!! ( فقط 74573 و ULN2803 گیر بیاد !!! )

واسه تولید هم صدا فقط PWM به درد می خوره اینجا !! ( در حد صداهای آتاری )
حیف که فقط یکی از تایمرها رو میگیره و البته وقت برنامه رو تلف نمی کنه !! ( با مقایسه با دستور sound )

یه تایمر هم واسه اسکن ( رفرش ) استفاده میشه و عملا فقط از یه تایمر دیگه می تونیم واسه زمان بندی های بازی استفاده کنیم !!!

تو همون بازی پونگ بالای دقت کنین از تایمر صفر و دو و استفاده شده !!!
کلید ها هم به وقفه خارجی وصل شده !!


شاید بعدا که حرفگی شدیم مجبور بشیم از اتمگا 128 استفاده کنیم !!!
فلان که هنوز مشکل دات ماتریکس مون حل نشده !!!
واسه کلید از جوی استیک هم میتونیم استفاده کنیم ها...
چون میتونه کار 5 کلید رو انجام بده وهمچنین جای کمتری هم میگیره ....خودش هم SMD هستش

[تصویر:  43787667991446711697.jpg]

[تصویر:  12757757585199943951.jpg]
سلام

من امروز یه مدل دات ماتریس 8*8 دو رنگ ( سبز و قرمز ) گرفتم !!
قیمت هر عدد هزار تومان !
اندازه 38 میلی متر در 38 میلی متر !

[تصویر:  4d238a299a404a7fabd3.JPG]

[تصویر:  1519a37ddb8b45879797.JPG]


و وقتی چهارتاشون رو کنار هم بچینی میشه اندازه 76 میلی متر در 76 میلیمتر که خوب فکر می کنم یه خورده بزرگه !

[تصویر:  3daf98cab20440e79af0.JPG]


آیا مدل ها کوچکتری هم تو بازار هستش ( من که تو مشهد پیدا نکردم )
اگه بتونیم ریز ریز گیر بیاریم و 24 در 24 درست کنیم که عالی میشه !!! ( نشد همون 16 در 16 )

آیا فقط همین دورنگ هستش !! ( سبز و قرمز )
مثلا قرمز و ابی هم پیدا میشه یا نه !!!

واسه جوی استیک من موافق نیستم چون زود خراب میشه و یه جوریه !
با کلید من راحت ترم !!! ( راستش گوشی فعلیم S500 هستش و قدیمها یه K310 داشتم و با کلید های جهتی S500 خیلی راحت ترم نسبت به جوی استیک K310 . )

البته فکر کنم بشه کنترل مادون قرمز هم واسش بذاریم !!!!
و حتی کنترل دسته پلی استیشن بهش وصل کنیم !! ( البته این یکی دنگ و فنگ داره ولی شنیدم با رابط SPI میشه با دسته پلی استیشن ارتباط برقرار کرد )

حالا مگا 32 بذاریم یا 64 !
دقت کنین چون قراره ما SMD کار کنیم قیمتشون زیاد فرقی نمی کنه و البته اتمگا 64 خیلی پایه بیشتر داره و البته یه تایمر هم بیشتر داره !!!!

فقط اگه بتونیم طوری طراحی کنیم که برد متالیزه نشه خیلی عالیه !!!

تو سایتهای فارسی هم سرچ کنین کلا دو تا بازی هستش که با AVR نوشتن !
مرتب سازی عکس و بازی Ricochet که هردوشون با GLCD هستش !!!





سنسور شتاب سنج رو که راه اندازی کردم، ارتباطش دادم به کامپیوتر و تو متلب به شکل سه بعدی شبیه سازی کردم... خیلی جالب شده بود! استادمون گرفته بود باهاش بازی میکرد! (جمشیدی، همون که علی تو تاپیک درایور آمپر بالا یه لینک از مدارش گذاشته بود)
خلاصه پیشنهاد این بازی رو بهم داد که تابستون درست کنم:
گوشی هایی که سنسور شتاب سنج دارن رو دیدین، یه بازی هایی هست که توپ رو باید هدایت کنین تا به مقصد برسه...
با یه ال سی دی گرافیکی و یه سنور adxl202 راحت میشه درست کرد. تابستون من که در نهایت بطالت گذشت! این ایده ماله شما Biggrin
سید می تونی از این کاری که کردی یه عکس و فیلمی بذاری !!
چون یادمه بیشترین نکته جالب گوشی آیفون اون زمانی که اومده بود همین قضیه بودش !!!!!
فقط یه خورده سنسورش گیرونه !!
http://roboeq.com/modules.php?op=modload...ink&cid=67
ماژولش تو مشهد 30 تومان بودش !!!


پس وسایل مورد نظر تا حالا اینها شده
اتمگا 128 یکی
74573 هشت تا ( واسه 16*16 دورنگ )
2803 یکی ( دوتا باشه بهتره )
adxl202 یکی ! ( فکر کنم بشه یه چیزی شبیه بازی ماشین باهاش درست کنیم )
دات مارتیکس دو رنگ کوچک چهار تا
کلید ده تا !! ( ممکنه عوض بشه )
باتری موبایل دو عدد !! ( شاید از یه باتری دیگه استفاده کردیم و فلان حساسیت روش نیست )


ایده و روش چند تا بازی هم به سرم زده که وقتم خالی بشه حتما می رم سراغشون !!!
مثلا بازی زیر واقعا ساده است و خیلی راحت میشه درستش کرد !!
[تصویر:  game7.gif]

LCD گرافیکی رو اصلا من پیشنهاد نمی کنم !
چون خیلی باهاش کار کردم و می دونم چقدر سرعتش پایینه و چقدر دستمون بسته است !!!
موقع حرکت یه شکل یه جوری نشون می ده و اصلا جالب نیست !!

فقط یه چیزی :
فکر کنم یه گوشی N-Gage ارزون تر بیاد تا اینکه بخواد سخت افزار هم خودمون درست کنیم !! ( ولی خوب علاقه یه چیز دیگست )

پیشنهادات و ایده ها و نکاتتون رو حتما بگین که بریم سراغ طراحی مدار !!!


نه متاسفانه فیلم نگرفتم! (خیلی پشیمونم) مدار هم رو برد بورد بود...

اما یه فیلم از مدار اولیه که duty cycle موج های خروجی adxl202 رو lcd نمایش میداد گرفتم. البته چیز خاصی معلوم نیست. 15 مگ نمیتونم آپلود کنم! Biggrin باید دو هفته صبر کنین تا اینترنت پرسرعت بیاد دستم!
سلام
این طرحی که دادین خیلی باحاله(ساخت بازی با avr)
البته من که در ستحش نیستم ولی یه چیزایی به ذهنم رسید گفتم شاید بدرد بخوره
اول این بازیس که اصولا خیلی راحتی و فقط یه کلید داری برای گاز داد بهتره برید یه نگا بکنید(نیازی به دانلودش نیست)
هلی کوپتر
بعدشم اینکه تو کتاب چهارم آقای بخت آور یه مدار هست با نام گیرنده 950هرتز(رسیور خودمون) که به تلویزیون وصل میشه
به نظر شما نمیشه از یه بخشایی از مدار اون الهام گرفت؟
البته همه اینا فقط پیشنهاد بود
[تصویر:  231943.jpg]


علی جون چرا ادامه نمیدی ... من بازی میخوام
سلام بچه ها من یه تازه وارد و تازه کارم ولی می خوام یه حال اساسی به همتون بدم یه آموزش انگلیسی البته به زبان ساده به صورت فیلم و مولتی مدیا ساخت یک کنسول بازی شخصی اطلاعات بیشتر در لینک زیر :
http://www.gameinstitute.com/Video_Game_...esign.html
لینکهاش در پست بعد اگه خواستین براتون میزارم
صفحه‌ها: 1 2 3