2016-03-22 24 views
0

Ben bir terminal oyunu yazıyorum. Oyun alanını her saniye yeniden yazar. Bir tuşa basarak bir kullanıcının etkileşim kurmasını istiyorum. İşte ben ile geldi ne basitleştirilmiş bir örnektir: Çalışır gibiRuby'ye bir giriş yapın

require 'io/console' 

move = true 

thr = Thread.new do 
    while move do 
    puts "Foo" 
    sleep(1) 
    end 
end 

loop do 
    input = $stdin.getch 
    if input == "a" 
    move = false 
    break 
    end 
end 

görünüyor.

game field

+1

Eğer oyun yapıyorsanız, ['curses'] (https://github.com/ruby/curses) kütüphanesini kullanmak ve klavyenizin okunabilir durumunu kontrol eden bir olay döngüsüne sahip olmak isteyebilirsiniz. Burada iş parçacığı için bir sebep yok. – tadman

+0

Bir iş parçacığı tarafından doğru çıktı nasıl yapılır? –

+0

Kodunuzu denediğimde, "Foo" her zaman satırın başına yazılır, sizin durumunuzda olduğu gibi eklenmez. Bu muhtemelen terminal ayarlarındaki bir farklılıktan kaynaklanmaktadır. "koyar" dizenin sonunda bir satır beslemesi yazar ve kullandığınız terminal, satır beslemesini bir, iyi, satır besleme olarak yorumlar. Çıktısı ne zaman "koyar" diye yazıyor Foo \ r "'? – user1934428

cevap

0

puts otomatik ekrana dize çıktısı sonra bir yeni satır (\n) ekler: Ama bütün oyun alanını karıştıran biridir thr garip bir çıkışı vardır. Bu çoğu durumda yararlıdır, ancak her zaman değil.

Eğer Yeni satır istemiyorsanız

Kullanım print :

print "Foo" 

Bu durumda, muhtemelen de mevcut hattını temizlemek istiyorum; - bu sadece imleci geri hareket Bu geri Sütun 0 imleci o olacak değil net herhangi karakterler unutmayın edecektir

print "Foo\r" 

: siz ("satırbaşı" için) \r ile yapabilirsiniz sütun 0 böylece karakterleri geçersiz kılabilir. Yani, örneğin bunun için: - Ekranda bu iki eksik, Foo yana

Foolo 

sadece üç karakter verir:

print "Hello\r" 
print "Foo\r" 

neden olacaktır. geri imleci bir karakter hareket ettirmek için (backspace) ayrıca \b var

print "Foo \r" 

: biz boşluk eklemek gerekir ki düzeltmek için

print "Foo" 
print "\b\bee" 

sonuçlanacaktır içinde:

Fee 

Tümü bununla çalışmak oldukça yorucu ve tam olarak neden curses kütüphane var ;-) Tüm bu doğru stu silmeyle uğraşan sarıcı işlevlerinde sarar ff ve aslen böyle ASCII oyunları için geliştirilmiştir ;-) kullanmanızı öneririm!

+0

Detaylı açıklama için teşekkürler. Taşıyıcı dönüş sorunumu çözdü. Gelecek sefer curses kütüphanesini kullanacağım sanırım. Bunun için bazı öğretici olması harika olurdu. –

İlgili konular