Icerige atla
Extraloob

C++ / Döngü içine sayaç koyma

· 8 Yanıt · 12K görüntüleme
K0mpedan
K0mpedan OP ⭐ 13y
#1
Arkadaşlar merhaba. Kuzenimin 1. sınıf dersi için c++ proje ödevi hazırlıyoruz. Sağ olsun biraz bana kitledi bende kıramadığım için hem öğreterek hemde anlatıp kendisine yaptırtarak giriştim bir işe.
Konuya gelecek olursak. 1. sınıf 1. dönem dersi olduğu için Nesne tabanlı bir proje yapamıyorum. Henüz classları, constructor,destructor gibi işimi kolaylaştıracak şeyleri öğrenmedikleri için bunları kullanamıyorum.

Öncelikle 2 boyutlu konsol üzerinde oynanılan visual studio kullanarak bir araba oyunu yapıyorum. (Pacman gibi aslında)
Haritayı 2 boyutlu bir array olarak tasarladım ve 16*33 lük bir array.
Arrayin üyeleri 0,1 ve 2 den oluşuyor. Örnekle;
(Array tablosu biraz saçma gözükmüş forum düzeninde)
Spoiler

int firstMap[16][33] =
{
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1 },
{ 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1 },
{ 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1 },
{ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1 }
};


1 ler duvar
0 lar arabanın gidebileceği yol
2 Fnish çizgisi

Şimdi benim hareket fonksiyonum döngüden oluşuyor ve oluşturduğum karakteri 2 ye getirene kadar devam ediyor.

İhtiyacım olan şey ise benim hareket fonksiyonumun başlangıcından döngüsü 2(fnish çizgisi) ye gelene kadar sürekli çalışan bir sayaç lazım. Kafama takılan ise hareket fonksiyonunun mantığında arabayı her ilerlettiğimde sayfa yenileniyor ve araba bastığım tuşa atadığım koordinata göre x +1/-1 veya y +1 -1 konum değiştiriyor.
Sürekli yenilenen bir konsol sayfasında ben nasıl aktif bir sayaç yaratabilirim.

İkincisi ise Pacman gibi belirli koordinatlara koyduğum yemlerin(bonus) +saniye bonus olarak ayarlamasını yapabilir miyim ? Bu sayaç üstünde direkt güncellenir mi ?


Biraz uzun tuttum ama tam ayrıntısıyla anlatmam için gerekiyordu.

Zamanını harcayıp okuyan yardımcı olmaya çalışan arkadaşlara şimdiden Teşekkür Ederim 😊
8 Yanıt
ExcI
ExcI ⭐ 10y
#2
Rica ederim okumak benim için bir zevkti.


Edit : Mesleğimi değiştiriyorum P̶r̶o̶g̶r̶a̶m̶l̶a̶m̶a̶ ̶T̶e̶k̶n̶i̶k̶e̶r̶i̶
sarkolata
sarkolata ⭐ 17y
#3
yapmak istediğin şeyi anlayamadım. oyunu yön tuşlarıyla mı oynuyorsun? yoksa otomatik olarak 2 ye kadar gidecek bir döngü mü yapmaya çalışıyorsun?
K0mpedan
K0mpedan OP ⭐ 13y
#4
Switch-case ile hazırlanan bir menüm var ve start dediğimde oyun başlıyor.
Önce map fonksiyonu sonrada hareket ettirme fonksiyonum çalışıyor.(Aslında bana lazım olan süre hareket ettirme döngüsünün bitiş süresi)
Yön tuşlarıyla oynuyorum. 2 ye ulaştığımda oyun bitiyor ve Game fnished and ur fnish time: .... yazıyor.

İstediğim oyunun başlangıcından ( start gameyi seçtikten sonra) 2 ye ulaşana kadar geçen süreyi bulmak.
Yapılabilirse oyun oynarken ekranın her hangi bir yerine saniye sayacı koymak.

Ayriyetten pacman gibi belirli koordinatlara (arraylere örneğin firstMap[7] [8] arrayini 3 yapip ) hedefe gelirsem saniye-=3 yapma gibi bir planım var.
K0mpedan
K0mpedan OP ⭐ 13y
#5
Karışık mı oldu bilmiyorum uygunsa ne zaman istersen tw yada skype verebilirim göz atman için^^
sarkolata
sarkolata ⭐ 17y
#6
yapmak istediğin şey için alsında bir sayaça ihtiyacın yok.
start game dendiğinde bir değişkende saati tutup bittiğinde saniye farkını hesaplayabilirsin.
Pacman olayı için de her hareket edildiğinde arrayin o indexinde 3 varsa bir değiken tutup onu +1 yapabilirsin, oyun bittiğinde kaç kere bonus aldıysa 3 ile çarpıp total süreden düşebilirsin.

c++ yazmıyorum bu yüzden nasıl alınır bilmiyorum ama epoch time kullanarak rahatlıkla hesaplarsın, (epoch 1970li bir tarihten bugune kadar geçen saniye sayısı) bir oyun başladığında bir oyun bittiğinde al. Aralarındaki fark = geçen süre.
time_point::time_since_epoch - C++ Reference
K0mpedan
K0mpedan OP ⭐ 13y
#7
Teşekkürler deneyeceğim şimdi. Dediğim gibi bir videoda sayaç gördüm projeye eklemek hoş ve özgün durur gibi geldi fakat. Denediğimde tam olarak saniye ile aynı hızda olmadığını fark ettim.

sarkolata
sarkolata ⭐ 17y
#8
Sayacın her tickinde bir işlem yapmayacağın için sayaç kullanmak gereksiz bu durumda. Geçen saniyeyi hesaplamak için sayaç iyi bir yöntem değil.
Videodaki eleman sayacı threadi uyutarak yapıyor. Bunu ana threadde yaparsan programın çalışması da aksar.

Yanıt yazmak için giriş yapın.

Giriş Yap
Paylaş: