Oyun Projemin Yazılımı Hakkında

Başlatan Electroman, 24 Şubat 2013, 06:28:07

Electroman

Merhabalar, bugün pic ile ledleri yakarken aklıma basit bir oyun fikri geldi ve kendimide geliştireceğimi düşünerek yapmaya karar verdim,öncelikle 7 ledden oluşuyor en uçtaki ledler içeri doğru ilerliyor amaç ise ledler ortada buluştuğunda buton ile durdurabilmek ve seviye ilerledikçe delay_ms yi azaltarak ledleri hızlandıracağım ve oyun daha zorlaşacak.Basit olan ledlerin git gel kısmını yazdım normalde buton ile de input olarak giriş alabiliyorum ama kafama takılan yer ledler işlem yapıyorken aynı anda butonu nasıl okutabilirim if kullanmayı düşündüm ama butonun aktifliğini sadece döngü başlarında kontrol edebileceğim için mantıklı gelmedi.Sorularım ise ledler hareket halindeyken gerçek zamanlı butonun aktifliğini kontrol edip butona basıldığı zaman koşulları kontrol edebileceğim bir yol var mı?İkinci sorum ise gecikmeleri delay_ms(süre) ile yapabiliyorum fakat gecikmeyi değişken ile de ayarlayabiliyor muyuz?delay_ms(değişkenadı) gibi şeyler denedim ama sonuç vermedi şimdiden teşekkürler.

muhittin_kaplan


nuriozdas

#2
muhittin kaplan hocamızın dediği gibi kesmeleri araştır .
yakalama işlemini dış kesmeyle (INT_EXT) yapabilrisin






subram

#3
Kullanacağın interupt: External İneterupt (INT)
Kullanacağın picin dataheetinde INT bacağını bul,
buraya butonu bağla.
İnterupt ları aktif et
Butona bastığında program direk interupta gider, orda istediğin işlemi yapabilirsin.

Not: INT bacağı "genelde" RB0 pininide olur.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

LukeSkywalker

For ddöngüsü içerisinde if ve break kullanarak da yapabilirsin.
Amaç öğrenmekse eğer kesmeyi kullan.

z

Interrupt kullanmadan yapmak istersen;

Ledlerin yanıp sönme hızını belirleyen komutu tek çırpıda çağırmak yerine parça parça çağır.

Örneğin yarım saniyelik bekleme komutu işletmek yerine 0.01 saniyelik komutu işlet, ardından tuşa basılmışmı diye bak.
Yarım saniye içinde 0.01 sn den 50 tane olacağına göre bu işi 50 lik döngü içinde yap.

Böylece hem zamanlamayı hem de tuşa basıldımı diye bakma işlemini yapabilirsin.

Zamanlamayı değiştirmek için 50 değerini git gide küçülterek oyunu zorlaştırırsın.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

nuriozdas

#6
şu devreyi yapta görelim  güzel bir proje..

sadogan

delay_ms(x); bu tür bekleme komutları ölü zaman dan başka bir şey deyildir.
kesinlikle program içerisinde kullanılmamalıdır.
Ancak test amaclı rütinleri yazarken yazma zamanından kazanmak için tercih edilebilir.
delay_ms (); gibi bir komutun yok oldugunu düşün,beklemeleri timer kullanarak yapmaya ve programını bu şekilde yazmaya çalış.


Electroman

herkeze çok teşekkürler arkadaşlar,söylediklerinizi dikkate alarak denemelere başlıyorum becerebilirsem projeyide foruma koyarım  :)

Mr.Java

Program algoritması karışık vallahi.Tek kesmeyle olacak iş değil.Seviye nasıl ayarlanacak falan uzun hikaye kanımca.

nuriozdas

#10
Alıntı yapılan: sadogan - 24 Şubat 2013, 16:18:38
delay_ms(x); bu tür bekleme komutları ölü zaman dan başka bir şey deyildir.
kesinlikle program içerisinde kullanılmamalıdır.
Ancak test amaclı rütinleri yazarken yazma zamanından kazanmak için tercih edilebilir.
delay_ms (); gibi bir komutun yok oldugunu düşün,beklemeleri timer kullanarak yapmaya ve programını bu şekilde yazmaya çalış.



ÖLÜ ZAMAN NEDİR?


subram

Alıntı yapılan: Fkarizmatik - 25 Şubat 2013, 00:08:26
Program algoritması karışık vallahi.Tek kesmeyle olacak iş değil.Seviye nasıl ayarlanacak falan uzun hikaye kanımca.

yok hocam o kadar da uzun değil.  olay basit ledleri sağa/sola kaydırma programı. Sadece ek olarak butona bastığında o anda hangi pin aktif ise ona baacaksın. Ortada ise seviye atlatacaksın(bu işlem sadece bekleme süresini azaltarak yapılacak)
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

sadogan

Alıntı yapılan: nuriozdas - 25 Şubat 2013, 00:18:17
ÖLÜ ZAMAN NEDİR?
İşlemçinin zamanını boşa geçirmesi.
Delay_ms(500); momutunda İşlemcimiz 500 ms hiç bir iş yapmadan zaman geçirir.
Yanlızca kesmelere cevap verir kesmelerde geçen zamanda 500ms ye ye eklenir.
Oysa 4mhz çalısan bir picxxxx 500ms neyde 500 000 adet asm komutu işleyebilirdi.

Mr.Java

Vallahi bilemiyorum yorgunluktan mı neyse artık beyin iptal.Ama takip konu ilgimi çekti.Birisi başlasın mantığı kavrayayım devamı benden  :D

papsukkal

Başarılar.  Size bir öneri bir de fikir.
Öneri delay yerine timer kullanmak. Böylece ölü zaman sıkıntısı olmaz.

Fikir ise bunu basarirsan ikinci oyunun ile ilgili.
Örnek 8 led sıra ile yanar. Oyuncu butona basar ve karşıdan yanan bir led gonderir. Yanan ledlerin karşılaştığı yer yanık kalır. Böyle 8 ledde yanik hale gelince ikinci aşamaya geçilir ve oyun biraz daha hızlanır.