Bir oyun algoritması

Başlatan Eren Eraslan, 09 Ekim 2014, 09:47:17

Eren Eraslan

Merhaba forum. Elimde bir oyun projesi var . Şöyleki alttaki resimdeki gibi kırmızı top hareket ettirilerek finish çizgisine getirilip bitirilecek. Amaç siyah duvarlara çarpmadan potansiyometre kontrolü ile (yukarı aşşağı sağ sol)yürütmek.Bunu tft ekran ile yapacağım. Tft konusunda hiç sorunum yok . Bu topun hareketini vs yapabiliyorum. Sorunum ise topun siyah duvarlara çarptığını nasıl algılayabilirim?
Şekil daha karmaşık aslında paint ile bu kadarı oldu (paint görüntü bozukluğu içinde ayrıca özür dilerim :) )

insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

kimlenbu

Ben olsam potansiyometre yerine rotary encoder kullanırdım, boş yere adc kullanmamış olursun. hatta telefon navigasyon joystickleri var, onlardan kullanırdım. potansiyometre gereksiz hamallık olur bence.

Ekranda duvarlara çarptığını 2 şekilde anlayabilirsin, ilki zor olan, siyah sınırların koordinatını bilirsin ve topun çapı belli olduğundan x,y değerlerini kontrol edip sınırlarla karşılaştırırsın. Bu level hazırlamayı zorlaştırır, programı hantallaştırır.

Mantıklı yöntemse şu : ekrandaki piksellerin değerlerini okuyabiliyorsun, topun çapı 10 diyelim, x ve y koordinatının +-10 yakınlarında siyah piksel var mı kontrol edersin, varsa yandığını anlarsın.

XX_CİHAN_XX

CGRAM den piksel okursan işler kolay olur ve hata riski azalır. Okumazsan da ilerlediğin noktayı hafızanda tutup her bir hamlede hareket alanının dışına çıkılıp çıkılmadığını sorgulaman gerekir. Ayrıca Potansiyometre kullandığında POTun sınır noktalarına ulaşıldığında sıkıntı yaşayabilirsin. Joyistik daha pratik bir çözüm olabilir.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

makdeniz

Ekrana 16x16 pixellik resimlerden oluşan bir harita oluşturursun. Bunlar aşağıdaki gibi Taş böcek yeşillik bile olabilir.



her 16 pixellik sütunda ne kadar tile oldugunu hesaplatırsın ve collision olaylarını hesaplarsın
Karanlık olmadan aydınlık, Ölüm olmadan yaşam mantıksız.

Eren Eraslan

Alıntı yapılan: kimlenbu - 09 Ekim 2014, 09:56:02
Ben olsam potansiyometre yerine rotary encoder kullanırdım, boş yere adc kullanmamış olursun. hatta telefon navigasyon joystickleri var, onlardan kullanırdım. potansiyometre gereksiz hamallık olur bence.

Ekranda duvarlara çarptığını 2 şekilde anlayabilirsin, ilki zor olan, siyah sınırların koordinatını bilirsin ve topun çapı belli olduğundan x,y değerlerini kontrol edip sınırlarla karşılaştırırsın. Bu level hazırlamayı zorlaştırır, programı hantallaştırır.

Mantıklı yöntemse şu : ekrandaki piksellerin değerlerini okuyabiliyorsun, topun çapı 10 diyelim, x ve y koordinatının +-10 yakınlarında siyah piksel var mı kontrol edersin, varsa yandığını anlarsın.
joystick kısmıda tamam , ama ssd1963 te get pixel data gibi bir komut bulamadım hocam
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

XX_CİHAN_XX

Datasheet'te "Read Memory Continue " Komutu var. Bu komutu gönderdikten sonra LCD üzerindeki pixel datalarını istediğin adresten itabaren sırayla çekebiliyorsun. Bu LCD ile ilgili yazılmış kütüphanelerde ReadData fonksiyonlarını incelersen işin daha da kolaylaşır. Bu sadece bir yöntem. Böyle yapmak yerine sınır olarak belirlediğin pixel bölgelerini hafızanda tutabilir ve bunları topun ulaşıp ulaşmadığını kontrol ederek de yapabilirsin.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Eren Eraslan

Alıntı yapılan: XX_CİHAN_XX - 09 Ekim 2014, 10:43:48
Datasheet'te "Read Memory Continue " Komutu var. Bu komutu gönderdikten sonra LCD üzerindeki pixel datalarını istediğin adresten itabaren sırayla çekebiliyorsun. Bu LCD ile ilgili yazılmış kütüphanelerde ReadData fonksiyonlarını incelersen işin daha da kolaylaşır. Bu sadece bir yöntem. Böyle yapmak yerine sınır olarak belirlediğin pixel bölgelerini hafızanda tutabilir ve bunları topun ulaşıp ulaşmadığını kontrol ederek de yapabilirsin.


anladım peki dataları nasıl okuyoruz , fsmc kullanıyorum fsmc bacakları input mu olacak çok kafam karıştı , hep data gönderiyoruz birşey almadık :)
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

XX_CİHAN_XX

Yani okumaya geçtiğin de FSMC data hattı input olmalı. Bu şekilde hiç kullanmadığım için örnek kod gösteremem. Ancak nette örnekler vardır.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Eren Eraslan

Burda tosladık işte çok fazla örnek bulamadım
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

kimlenbu

Kendi ssd1963 kütüphanemi kontrol ettim, getpixel fonksiyonu yok, ihtiyacım da olmadı hiç. Şöyle bir link buldum, belki işine yarar :

http://www.microchip.com/forums/m641540.aspx

Eren Eraslan

hocam bende buraya baktım renk okuma kodu güzel ama herifler fsmc kullanmadığı için paralel porttan direk datayı okuyordur diye düşünüyorum. zaten okuma fonksiyonunuda yazmamış
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

kimlenbu

Üşenmedim ssd1963 datasheetini açtım komut tablosunda şöyle bir komut var :

0x 2E  read_memory_start
Transfer image data from the peripheral to the host processor
interface starting at the location provided by
set_column_address and set_page_address

ne yazık ki azıcık kurcalaman gerekecek :/

Eren Eraslan

hocam orada sıkıntı yok anladım ben okuma algoritmasını , sıkıntı fsmc de artık , stm tarafında nasıl okuma yapıcam ona bakıyorum
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

kimlenbu


z

Kirmizi top siyah bolgeye gecerse siyah pixellerin sayisi azalir.

Her defasinda siyah pixellerin miktarini say.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com