Reach Üzerinde Taş Kağıt Makas Oyunu Yapma Bölüm 2

Spread the love

Taş, kağıt , makas oyununa devam ediyoruz. Bu bölüm için de Ubuntu üzerinde tut-2 isimli bir klasör oluşturup için index.rsh dosyasını açıyoruz.

Dosyanın içine aşağıdaki kodu giriyoruz.

'reach 0.1';

const Player =
      { getHand: Fun([], UInt),
        seeOutcome: Fun([UInt], Null) };

export const main =
  Reach.App(
    {},
    [['Alice', Player], ['Bob', Player]],
    (A, B) => {
      A.only(() => {
        const handA = declassify(interact.getHand()); });
      A.publish(handA);
      commit();

      B.only(() => {
        const handB = declassify(interact.getHand()); });
      B.publish(handB);

      const outcome = (handA + (4 - handB)) % 3;
      commit();

      each([A, B], () => {
        interact.seeOutcome(outcome); });
      exit(); });

Bu kodda ilk örnekte olduğu gibi reach 0.1 ile başlıyoruz. Fakat burada main metodu yerine Player diye bir sınıf tanımlıyoruz. Bu oyuncunun hamleleri ile ilgili bilgileri içeriyor. Gethand kısmıyla oyuncunun hamlesini al, seeOutcome kısmıyla da bu hamlenin sonucunda ne olacağını söyle kısımlarını belirtiyoruz.

Bu metoddan sonra ana metodumuza geçiyoruz. Burada da ilk örnekten farklı olarak Alice ve Bob’un yanında dikkat ederseniz Player ifadesi var. Bu Alice ile Bob’un sınıfının Player olduğunu gösteriyor

A.only() ve B.only() ile başlayan kısımlarda ise hamleyi alıyor ve ağa yayınlıyor.

Burada işin matematiği ise const outcome = (handA + (4 – handB)) % 3; kısmında oluşturulmuş. Şöyle düşünün. Bir taş,kağıt,makas oyununda kaç sonuç ihtimali vardır ? Ya birinci oyuncu ya  ikinci oyuncu kazanır veyahut berabere kalınır. Yani 3 durum vardır. İşte bunun için mod 3’e göre sonuç döndüren bir kod yazılmış.

Alice’in seçimini alıp, (4-Bob’un seçimi) ile topluyor ardından da bunun mod 3’e göre sonucuna bakıyor.

Şimdi ikinci dosyamız olan index.mjs ye geçelim. Kodumuz aşağıdaki şekilde.

Bu kod WordPress’de sorun çıkardığı için buradan bakabilirsiniz.

Ubuntu üzerinde dosyamızı oluşturup bu kodları içine koyuyoruz.


Son olarak ilk örnekte olduğu gibi backend kullanımlarımızı gösterip kodumuzu bitiriyoruz.

Bu iki dosyayı ./reach run diyerek çalıştırıyoruz.

Oyunumuz oynandı. Alic Scissors yani makas, Bob Rock yani taş seçti. Dolayısıyla oyunu Bob kazandı.

Kodu ./reach run ile her çalıştırdığımızda farklı bir sonuç dönebileceğini görüyoruz.


You may also like...