1. Reklam


    1. dikeysro

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


  1. K0mpedan

    K0mpedan olduser

    Kayıt:
    15 Mart 2013
    Mesajlar:
    1.136
    Beğenilen Mesajlar:
    56
    Ödül Puanları:
    48
    atlanta
    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)
    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 :)
     
  2. ExcI

    ExcI rank8

    Kayıt:
    17 Kasım 2016
    Mesajlar:
    1.150
    Beğenilen Mesajlar:
    168
    Ödül Puanları:
    73
    Meslek:
    S.D

    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̶
     
  3. sarkolata

    sarkolata zaa xD

    Kayıt:
    15 Temmuz 2009
    Mesajlar:
    8.875
    Beğenilen Mesajlar:
    170
    Ödül Puanları:
    73
    Şehir:
    Los Angeles

    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?
     
  4. K0mpedan

    K0mpedan olduser

    Kayıt:
    15 Mart 2013
    Mesajlar:
    1.136
    Beğenilen Mesajlar:
    56
    Ödül Puanları:
    48

    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.
     
  5. K0mpedan

    K0mpedan olduser

    Kayıt:
    15 Mart 2013
    Mesajlar:
    1.136
    Beğenilen Mesajlar:
    56
    Ödül Puanları:
    48

    Karışık mı oldu bilmiyorum uygunsa ne zaman istersen tw yada skype verebilirim göz atman için^^
     
  6. sarkolata

    sarkolata zaa xD

    Kayıt:
    15 Temmuz 2009
    Mesajlar:
    8.875
    Beğenilen Mesajlar:
    170
    Ödül Puanları:
    73
    Şehir:
    Los Angeles

    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 bunu beğendi.
  7. K0mpedan

    K0mpedan olduser

    Kayıt:
    15 Mart 2013
    Mesajlar:
    1.136
    Beğenilen Mesajlar:
    56
    Ödül Puanları:
    48

    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.

     
  8. sarkolata

    sarkolata zaa xD

    Kayıt:
    15 Temmuz 2009
    Mesajlar:
    8.875
    Beğenilen Mesajlar:
    170
    Ödül Puanları:
    73
    Şehir:
    Los Angeles

    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.