Randomlar ile ilgili sorum var!

Darkless05

Demir Madencisi
Mesajlar
314
En iyi cevaplar
0
Beğeniler
74
Puanları
730
Merhaba arkadaşlar minigame kodluyordum fakat bir konuda mantığı kuramadım. Şimdi raundlar var. Her raund rastgele bir oyuncu minigame alanında oynuyor diğerleri izliyor. Ama her raund'da rastgele bi oyun alanına yolluyor. (sebebi izleyenler o oyun alanını ezberlemesinler diye)
Buraya kadar her şey müthiş fakat ben şimdi mesela ASD isimli oyuncuyu çıkarmışım rastgeleden diğer el ASD nin çıkmaması için ne yapabilirim? SonOynayan adlı bir liste oluştursak rastgeleden o listedeki isimde biri çıkarsa tekrar rastgele birini seçicek tekrar aynı çıkarsa tekrar rastgele diye gidiyor. Yani son oyuncudan başka çıkana kadar tekrarlaması gerekiyor.

Aynı sistemi oyun alanı içinde yapıcam en son oynanan oyun alanı tekrar rastgeleden çıkmasın diye. Siz örnek olarak bir kalıp atın.


Seviyorum sizi Forum MC Türk...
@IRFN @Diğer_Java_Coderlarının_İsimleri_Aklıma_Gelmiyor_Kusura_Bakmayın :)
 


Salturbone

Portal Uzmanı
Mesajlar
5,189
En iyi cevaplar
0
Beğeniler
3,716
Puanları
6,890
Ruh hali
Map(javadaki map) kullanarak harita ismine karşılık bir boolean tutabilirsin. Eğer true ise tekrar random sayı alabilirsin ,gibi...
 

Darkless05

Demir Madencisi
Mesajlar
314
En iyi cevaplar
0
Beğeniler
74
Puanları
730
Map(javadaki map) kullanarak harita ismine karşılık bir boolean tutabilirsin. Eğer true ise tekrar random sayı alabilirsin ,gibi...
hashMapdan bahsediyosan o konuda bilgim yok normal harita anlamında diyorsan çoklu arenalar aynı dünyadada olabilir.
 

Krumb069

Nether Yerlisi
Mesajlar
2,151
En iyi cevaplar
1
Beğeniler
506
Puanları
1,250
OLuşan değerleri arrayliste ekle bir daha değer aldığında arraylistte varsa yeniden değer versin
 

CoffeeBeat

Zindev
Mesajlar
501
En iyi cevaplar
0
Beğeniler
958
Puanları
1,320
hashMapdan bahsediyosan o konuda bilgim yok normal harita anlamında diyorsan çoklu arenalar aynı dünyadada olabilir.
Biraz daha tecrübe kazandıktan sonra başla bence.
Yeterli java bilgin yoksa yazacağın sistemde ki kullanacağın materyallerde azdır.
 

Darkless05

Demir Madencisi
Mesajlar
314
En iyi cevaplar
0
Beğeniler
74
Puanları
730
Biraz daha tecrübe kazandıktan sonra başla bence.
Yeterli java bilgin yoksa yazacağın sistemde ki kullanacağın materyallerde azdır.
Çalışarak öğreniyorum herkeze açık projelere başlamadım daha :)

OLuşan değerleri arrayliste ekle bir daha değer aldığında arraylistte varsa yeniden değer versin
Eleştirmeden ve üşenmeden cevap verdiğin için teşekkürler. Foruma böyleleri lazım ^_^
 

IRFN

Sonoyuncu.Network
Mesajlar
1,043
En iyi cevaplar
0
Beğeniler
1,314
Puanları
3,230
Bu gibi durumlarda oyuna giren çıkan, sunucuya giren çıkan kişileri de hesaba katmak lazım. Ben olsam bu durumda ArenaManager adlı bir listener class oluştururdum, tüm giriş çıkışları buradan ayarlardım.
İleriye dönük oyunculara birden fazla hak verme, oyundan çıkıp girmiş ise dahi, arenaya o oturum (session) içerisinde girmiş mi girmemiş mi, girmiş ise kaç defa girmiş, daha da girse nolur? Vip ise bir kez daha girme hakkı versek mi? gibi sorulara çok kolay cevap verebilirdik, çünkü HashMap sistemi işimizi kolayca çözebilirdi.
Yani değişkenler bölümünde
public static HashMap<String, Integer> ArenadaOynayanlar = new HashMap<String, Integer>;

şeklinde oluşturduğumuz ArenadaOynayanlar ismindeki hashmap içerisine arenada oynayan kişilerin adını yazabiliriz.

Oyuncuların daha önceden oynayıp oynamadığını anahtar değeri sütununda oyuncunun adını aratarak anlayabiliriz.
if (!ArenadaOynayanlar.containsKey(player.getName())){
//Arenada daha önce oynamamışsa olacaklar
}
else {
//Oynamamış ise olacaklar
}

*If bölümkündeki ünlem işareti değilse, yani yanlışsa anlamına geliyor.
Bir kişi arenada oynamamış ise, String bölümüne oyuncu adını, integer kısmına da 1 şeklinde oyuncuyu hashmap'e ekliyoruz.
ArenadaOynayanlar.put(player.getName(), 1);

Oyuncu arenada oynamış ise, ekstra ayrıcalığı var mı yok mu diye yine kontrol edebilirsin,
Arenada daha önce kaç defa oynadığını ArenadaOynayanlar.get(player.getName()) şeklinde kontrol edebilirsin, bu sana rakamı verecektir.
Eğer oyuncu VIP ise ve maksimum 2 defa oynaması gerekiyorsa, oynamış ise olan kısma 3'ten az oynadı mı diye sorabilirsin, yani değer kısmını çekip, o sayının 3'ten küçük olup olmadığını kontrol ettirirsin.
HashMap içerisinde değer kısmını integer olsa dahi arttırma yoktur, kendin çekip tekrardan üzerine ekleme yapacaksın. Örneğin IRFN 1 defa arenada oynadı, bunu 2 yapmak istiyorsun;
ArenadaOynayanlar.put(player.getName(), ArenadaOynayanlar.get(player.getName() + 1));

Gel gelelim ben senin sorunu ne kadar doğru anladım, ne kadar anlatabildim, hiçbir fikrim yok. Şu an kafam zaten kazan gibi, ancak muhakkak bu bilgilerden günün birinde birileri faydalanır. Başarılar hepinize genç Java yolcusu arkadaşlarım.
 

Darkless05

Demir Madencisi
Mesajlar
314
En iyi cevaplar
0
Beğeniler
74
Puanları
730
Gel gelelim ben senin sorunu ne kadar doğru anladım, ne kadar anlatabildim, hiçbir fikrim yok. Şu an kafam zaten kazan gibi, ancak muhakkak bu bilgilerden günün birinde birileri faydalanır. Başarılar hepinize genç Java yolcusu arkadaşlarım.
Sağolasın üstad deniycem birşeyler. Dediklerini bayağı anladım.
 

Üst