Pong oyununu bilen var mı?

Başlatan Mucit23, 11 Şubat 2017, 23:38:54

Mucit23

Sormak istediğim şudur.

Pong oyununda oyuncular topa vurmak için kendi tarafındaki barları sağa sola hareket ettiriyor. Bu konuda sormak istediğim birşey var.

Oyunda topun, kullanıcının kontrol ettiği bar'ın çaptığı yere göre topun sekme açısı ve sekme hızı değişiyor. Bende bir pong oyunu yaptım. Topu duvarlardan sektirebiliyorum. Ama sektirme açım daima 45 derece oluyor. Farklı açılarda sektirebilmem için topun kale olarak kullanılan barlara çarptığı yere göre farklı açılarda sektirmem gerekiyor.

Bu işlemin mantığını bilen varmı? Dediğim gibi duvarlardan sektirmek kolay ama bar üzerinden sektirme nasıl yapılır? Bilen varmı?

agora_meyhanesi42

Benim bildiğim bu çarpışma olayı şöyle oluyor. Top kac derecelik acı ile çarptı ise aynı acı ile tersi yönde (simetrik)gider.  visual basic dilinde örnek vermek gerekirse top (shape) nin sürekli x ve y koordinatları alınır. Ve bar nesnesinin height yani yüksekliğine eşit olduğu anda (carpinca) bu kaydedilen x ve y değerleri eksi yönde verilir. Biraz karışık gibi oldu ama ben olsam böyle yapardim belki daha kolay hir yöntemi vardır.
Yüksel Türk ! Senin için yükselmenin hududu yoktur...

Cemre.

45 derece konusunda hata var sanırım @Mucit23 hocam. Eğer sürtünme dikkate alınmayacaksa, duvara çarpma anında Hız vektörünün y veya x bileşeni (hangi duvar olduğuna bağlı olarak) o anki değerin eksi "-" işaretlisine eşitlenir.

Bar'ların çarpma anında açılı durma ihtimali çok yüksek. Bu durum için şuan aklıma bir yöntem gelmedi. Üzerine düşüneceğim.

Mucit23

45 derece olayı şu şekilde.

Top x ve y eksenlerinde 1'er birim artımlarla ilerliyorsa top 45 derece açıyla hareket ediyor demektir. Örneğin top X ekseninde +1'er adım artımla ve Y ekseninde -1'er adım artımlar hareket etsin. Bu durumda top sağ üst köşeye doğru hareket edecektir. Sağ sol üst veya alt kenardan herhangi birine değdiğinde sadece bu 1'er artımın işaretini değiştiriyorum. Yani sağ duvara çarptığında X eksenindeki artım +1 iken -1 oluyor. Bu yüzden top daima 45 derece açıyla sekiyor.

Benim istediğim olay şudur. Top barların kenarına veya başka bir yerine çarptığında bu artım miktarlarını daha farklı bir şekilde değiştirmek. Yani x ekseninde birer artımla, Y ekseninde 2'şer artımla hareket ederse Y eksenine doğru daha hızlı hareket edecektir. Mantık basit aslında(@cemre hocam sanırım anlamadınız topun hareket etmesindeki mantığı)

Dediğim gibi şu barlara çarpma olayını daha farklı yapmam lazım.

Cemre.

X ve Y'nin  birim zamanda 1 birim artması demek cismin hızının x ve y bileşeni 1 olan modülü [latex=inline]\sqrt{2}[/latex] olan vektör demek değil midir? Bu cisim bir nesneye çarptığında hızı nasıl etkilenir? Çarptığı nesneye dik olan hız vektörü bileşeni etki-tepki kanununa göre (eğer engel aşılamaz ve sürtünme gibi kayıplar ihmal edilirse) artık kendinin çarpmadan önceki eşleniğine eşit olacaktır. Bu mantığa dayanarak basit bir demo hazırlamıştım Processing for Android başlığında. Forumda bulabilirsiniz. Oradaki cismin hız vektörü başlangıçta random üretiliyor ve çarpma anlarında tam olarak bahsettiğim yöntemle çarpma etkisi oluşturuluyor. Hatta kaynak kodu da vermiş olmalıyım. Mobilde olduğumdan emin olamıyorum incelersiniz.
Kolay gelsin.

MC_Skywalker

aşağıdaki gibi bir yöntemle yaptın sanırım. bunu yerine random bir açı belilemek isityorsun. C# konsolu bunun için pek elverişli değil grafik ekrena yazmalısın tabi MCu ya c++'la yazmadığını varsayarak konuştum.

                if (tX <= 0) if (yön == 6) yön = 4; else yön = 2;
                if (tX >= 119) if (yön == 2) yön = 8; else yön = 6;
                if (tY <= 0) if (yön == 8) yön = 6; else yön = 4;
                if (tY == çY-1 && (tX >= çX && tX <= (çX + çG)))
                if (yön == 6) yön = 8; else yön = 2;
                
                switch (yön)
                {
                    case 1: tY--; break;
                    case 2: tY--; tX++; break;
                    case 3: tX++; break;
                    case 4: tY++; tX++; break;
                    case 5: tY++; break;
                    case 6: tY++; tX--; break;
                    case 7: tX--; break;
                    case 8: tY--; tX--; break;
                }


kitap olarak bana şu kitabı http://www.dr.com.tr/Kitap/Algoritma-Gelistirme-ve-Programlamaya-Giris/Fahri-Vatansever/Egitim-Basvuru/Bilgisayar/urunno=0000000230744 tavsiye etmişlerdi.
ftp://91.193.236.10/pub/docs/linux-support/computer%20science/data%20Structures%20&%20algorithms/%5BPearson%5D%20-%20Algorithms,%204th%20ed.%20-%20%5BSedgewick,%20Wayne%5D.pdf
http://ce.bonabu.ac.ir/uploads/30/CMS/user/file/115/EBook/Introduction.to.Algorithms.3rd.Edition.Sep.2010.pdf

Mucit23

Bu işi MCU ile yapıyorum. Aslında ben birkaç yöntem kafamda geliştirdim ama denemem lazım.

Mucit23

P10 Led panellerle bu işi yaptım.

Pong Oyununda sıkıntı yok o işi çözdüm.  :) Sadece topun küreğe çarpa olayını biraz daha düşünmek gerekiyor. Sürtünme olayı vs eklenmesi gerekiyorki toplar hızlandığında yavaşlasın. Fazla ilerlemedim. Oyun yapma gibi bir amacım yok. Ama duvara çarpma olayı çok basitmiş onu anladım.

Şimdi bir video yükledim
https://www.youtube.com/watch?v=aOdDaCui5fo
Bu videodaki topları kendi aralarında çarpıştırmak istiyorum.
Burada Mehmet hocam bir paylaşım yapmıştı.
https://www.picproje.org/index.php/topic,46031.0.html

Mucit23

Çarpışma algoritması çalışıyor.

https://www.youtube.com/watch?v=PDfSwxOxufI
Yalnız kodlardaki mantığı anlayamadım