Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Java [random]


SpiderS_DangeR

Öne çıkan mesajlar

Javayla texas holdem yazmaya çalışıyorum. Fakat mesela kartları random olarak 4 oyuncuya dağıtırken bir oyuncuya gelen kartın diğerine gelmesini nasıl engelleyebilirim? Mesela 1. oyuncunun 1. kartı a1 olsun:


Random kartlar = new Random();
a1=kartlar.nextInt(52)+1;


diye 52 sayıdan 1ini a1'e atıyorum, daha sonra bu sayıları kartlara eşitlicem. Fakat gelen bir sayıyı başka oyuncuya vermemenin kısa yolunu çözemedim. Yoksa her seferinde if kontrolü mü yapmam gerekecek?
Link to comment
Sosyal ağlarda paylaş

Kartlari random sekilde bir array'a at. Sonra sirayla kullanicilara dagit.

array_shuffle gibi bir fonksiyon mevcuttur mutlaka.

edit : varmis ve gayet de kolaymis =)

http://www.google.com.tr/search?hl=tr&q=java+array+shuffle&btnG=Google%27da+Ara&meta=&aq=0&oq=java+array+shu
Link to comment
Sosyal ağlarda paylaş

Di nin ve benim onerdigim cozum normalde oyunun isleyisi nasilsa oyle.

kartlar onceden varlar(tanimlanan arraylist), bu desteyi kariyorsun(shuffle), sonra ustten kart objesini(ister Alist, ister stack kullan) cekiyorsun.

senin soyledigin tum kartlar bi dizide, aradan cekmek istiyorsun. o isde tekrar ayni karti cekmemek veya cektigin boslugu null yapiyorsan bos yer cekmemek icin listeyi kaydirmak falan lazim galiba. illa o sekilde yapmak istiyorsan cozumu bimliyorum.

ben kafadan kart objesi icin stack kullanirdim heralde.
Link to comment
Sosyal ağlarda paylaş

Ben kaynak olarak prentice hall un introduction to java programming, comprehenseive ver. 6th ed. kullaniyorum, ebook olarak bulabilirsin. Stack gayet rahat anlatilmis.

Ama acikcasi javaya cok asina degilim, sanirim standart stack tanimi disinde kendi objene gore, array tabanli veya linked listed tabanli olarak implementation lari var. Mirage ve ekurisi daha isabetli konusur bu konuda tahminimce ben yanlis yol gostermeyeyim data structure lara hakim degilsen.

edit: evet vector/al de ayni isi goruyor daha once dedigim gibi.
Link to comment
Sosyal ağlarda paylaş

KHaRoN said:

Ama acikcasi javaya cok asina degilim, sanirim standart stack tanimi disinde kendi objene gore, array tabanli veya linked listed tabanli olarak implementation lari var. Mirage ve ekurisi daha isabetli konusur bu konuda tahminimce ben yanlis yol gostermeyeyim data structure lara hakim degilsen.


stack aynı stack sonuçta mantığı değişmiyor. ister array kullan ister vector ister list. dışarıdan stack'i kullanacak insan için birşey değişmez, ideal olanı bu yani.
Link to comment
Sosyal ağlarda paylaş

SpiderS_DangeR said:
stack kullanımını anlatan bir link verebilir misiniz acaba? ben bulamadım da veya buldum da anlamadım
edit: get ile ArrayList'den alıyorum kartları herhalde stacke gerek yok?


Stack'i masanın üstünde duran bir kart destesi olarak düşün. Temelinde iki temel metodu vardır: pop ve push. Ek olarak kolaylık olsun diye peek ve empty diye iki metod daha eklenir genelde.

void Push(Card) - Destenin en üstüne bir kart koyarsın
Card Pop() - Destenin en üstündeki kartı desteden alıp ne olduğuna bakarsın
Card Peek() - Destenin en üstündeki kartı desteden almadan ne olduğuna bakarsın
void Empty() - Destedeki tüm kartları boşaltırsın

Senin için ne yararı var? Desteni stack ile gerçekçi olarak temsil edebilirsin. Boş bir stack yaparsın. Tüm kartları sırayla destene koyarsın. Collections.shuffle kullanarak karıştırırsın. Sonra da -aynı gerçek hayatta yapacağın gibi- pop ile kartları en üstten tek tek alarak dağıtırsın. Böylece index ile uğraşman gerekmez ve kod daha anlaşılır olur.

Array kullanarak da yaparsın. Bir çok şekilde yapabilirsin. Stack en iyi yoldur diye bir iddiam da yok. Ama bence kullandığın örneğe çok iyi uyuyor ve stack öğrenmen için çok iyi bir nokta. :)

Bu arada Java 1.6 öncesi Stack class'ını kullanabilirsin. 1.6 sonrası Deque kullanın demişler. Yine deste örneğinden gidersek, Deque'da ek olarak destenin arkasındaki kartlarda da işlem yapabilirsin. Ama sadece pop, push, peek kullandığın taktirde Deque ve Stack arasında pek bir fark yok.
Link to comment
Sosyal ağlarda paylaş

Arthur'un söylediğine katılıyorum. OOP ile Java'yı birlikte öğren. OOP'yi enin seveceğin ve anlayacağın bir şekilde anlatan bir kitap bul. OOP konseptlerini öğrendikçe Java'da bunları uygula ve pekiştir.

Zaten "Java biliyorum" diyebilmek için OOP bilmek ön koşul. OOP öğrendikten sonra Java öğrenmenin en büyük kısmı Syntax ve Library öğrenmekten ibaret.
Link to comment
Sosyal ağlarda paylaş

Ilk sayfadaki mesajimda bahsettigim kitabi tavsiye ederim, basit bi sekilde en karmasik kavramlara guzel orneklerle girip cikan bi kitap. Konu ve dizin dagilimlarida agir olmayacak sekilde ihtiyaclari karsilar nitelikte.

programlamaya dair hicbirsey bilmeseydim baslayacagim kitap olurdu heralde.
Link to comment
Sosyal ağlarda paylaş

OOP mantığını php'den biliyorum. Java öğrenmeye çalışan birkaç arkadaşlarım var syntax'ı nedense bana yakın geldi. Kharon söylediğin kitap ingilizce, türkçesi oldugunu sanmamakla birlikte ingilizcemin yetersiz geleceğinden eminim =) Öyle çok ahım şahım bir ingilizcem yok.

Türkçe bi kitap e-book site v.s önerebilir misiniz bana rica etsem
Link to comment
Sosyal ağlarda paylaş

Selam,

Mirage çok güzel açıklamış eline sağlık, title ın hakkını veriyor zaten.

Benim nacizane görüşüm, Java nın Collection altında son dönem de toplanan mini API lerinden ziyade, ilk örneklerinde daha basit ama sana daha çok code yazdıracak yöntemler kullanman.

Ek kısa bir görüş olarak Obje tabanlı yazılım ile Obje ye yönelik yazılım arasındaki ince kırmızı çizginin iyi anlaşılması da çok çok çok önemli. Code a başlamadan önce 10 satır bile yazıcaksan toplamda, dizaynın hazır olmalı, yazdıkça karşına çıkabilecek sorun veyahut dar boğazları önceden görmelisin. Zamanla oluşmasını bekleme bu dürtünün, basit örneklerinde öbjeye yönelik düşünüp temellerini at, yanlış başlarsan yanlış gider.


Dealer, player, card ve table objelerin olsun. Table objen masadaki max ve min duracak para fişleri gibi sınırlamaları tutup zorlasın (enforce , türkçesi tam ne ise artık ). Dealer objenin elinde card 'array' i bulunsun ve bu array ı oluşturan kendi utility class ını yaz. Bu nokta çok önemli çünkü Java nın sana sağladığı API in tam olarak ne iş yaptığını en iyi mimik ederek sonra kullanarak öğrenirsin. Gerisini Mirage ve diğer arkadaşlar gayet güzel açıklamış. İş çok dallanmasın uğraşmıyayım dersen table objesini de uçur Dealer herşeyi bilsin player lar dealer ile takılsın.

Eğer stack, queue ve benzeri adamları şu anda derinlemesine anlamak/irdelemek için yeterli motivasyonun yok ise, sonucu görüp ilerlemek istiyor isen, boş zamanlarında Java String class ının method larını incele. Primitive Char kullanarak bunları kendin yazmaya çalış (subString vb.).

Java nın en güçlü yanlarından biri olan sunduğu sağlam API lar, başka bir dil e geçildiği zaman ne yazık ki elini kolunu bağlar. Adamların ne iş yaptıklarını ve nasıl yaptıkları anlar isen, algoritmaları her dilde her şekilde yazar işine bakarsın. Ne yazık ki sıfır dan bu işi öğrenen birisi için Java tembelik yaratan bir ortam.

Nacizane görüşler end :)

Edit: Utility class ını yazıp yaptığın işe hakim olduğun vakit Collection Framework ün deki denk API i kullanmanı öneririm. Bir işi yapmanın n tane yolu var ise, en hızlı effective ve güvenli şekilde API yapıyordur, yapmalıdır.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...