# Mangala

[Mangala Web Sayfası](https://clutchsoftware.github.io)

**➤Mangala Sunum Dosyası:**

[<i>Sunum Dosyası</i>](sunumLink)

**➤Mangala Tanıtım Videosu:**

<div align="left">

<a href="#"><img src="videoBanner" width="350" height="200" alt="videoBanner"></a>

</div>

[<i>Youtube Tanıtım Link</i>](videoLink)

## Yükleme Ve Çalıştırma

![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/grass.png)

```sh
$ git clone #####
$ cd Mangala
$ chmod +x script.sh
$ ./script.sh
```

# Mangala Oyunumuzun Dinamiği

> Oyunumuz da 3 tane mod bulumakta. Bunlar; <b>Çevim içi olarak oynamak, robota (Cengaver) karşı oynamak ve bilgisayar üzerinden karşılıklı oynamak.</b>

## Cengaver'in Gücü

![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/aqua.png)

<p>
Cengaver'imizin toplam 4 farklı zorluk derecesi bulunmakta. Bu zorluk derecelerini incelersek;<br/><br/>
<b>Kolay Seviye:</b> Kuyu sayıları arasından rastgele birini seçerek Cengaver'imiz hamlesini oynamakta.

```javascript
function robotEasy() {
  let array = doluHoleler();
  let len = array.length;
  if (len > 0) {
    let holeID = Math.floor(Math.random() * 100000) % len;
    tikla("user1hole" + (array[holeID] + 1).toString() + "x");
  }
}
```

<b>Orta Seviye:</b> Kuyu sayıları arasından rastgele birini seçerek Cengaver'imiz hamlesini oynamakta.

```javascript
function robotMedium() {
  let array = doluHoleler();
  let len = array.length;
  let score_ar = [];
  if (len > 0) {
    var temp1 = [];
    var temp2 = [];
    for (let i = 0; i < 7; i++) {
      temp1.push(new Hole(user1hole[i].getValue(), user1hole[i].getID()));
      temp2.push(new Hole(user2hole[i].getValue(), user2hole[i].getID()));
    }
    bosalt();

    for (let k = 0; k < array.length; k++) {
      let denenecek_hole_indis = array[k];
      bosalt();
      for (let i = 0; i < 7; i++) {
        user1hole.push(new Hole(temp1[i].getValue(), temp1[i].getID()));
        user2hole.push(new Hole(temp2[i].getValue(), temp2[i].getID()));
      }
      dagit(1, denenecek_hole_indis + 1);
      score_ar[k] = user1hole[6].getValue();
    }
    bosalt();
    for (let i = 0; i < 7; i++) {
      user1hole.push(new Hole(temp1[i].getValue(), temp1[i].getID()));
      user2hole.push(new Hole(temp2[i].getValue(), temp2[i].getID()));
    }

    let max = 0;
    let max_indis = 0;
    for (let a = 0; a < score_ar.length; a++) {
      if (score_ar[a] >= max) {
        max = score_ar[a];
        max_indis = a;
      }
    }
    player = 1;
    tikla("user1hole" + (array[max_indis] + 1).toString() + "x");
  }
}
```

<b>Zor Seviye:</b> Kuyu sayıları arasından rastgele birini seçerek Cengaver'imiz hamlesini oynamakta.

```javascript
function robotHard() {
  let array = doluHoleler();
  let len = array.length;
  let score_ar = [];
  if (len > 0) {
    var temp1 = [];
    var temp2 = [];
    for (let i = 0; i < 7; i++) {
      temp1.push(new Hole(user1hole[i].getValue(), user1hole[i].getID()));
      temp2.push(new Hole(user2hole[i].getValue(), user2hole[i].getID()));
    }
    bosalt();

    for (let k = 0; k < array.length; k++) {
      let denenecek_hole_indis = array[k];
      bosalt();
      for (let i = 0; i < 7; i++) {
        user1hole.push(new Hole(temp1[i].getValue(), temp1[i].getID()));
        user2hole.push(new Hole(temp2[i].getValue(), temp2[i].getID()));
      }
      dagit(1, denenecek_hole_indis + 1);
      while (player == 1) {
        let move = robotExpert();
        dagit(1, move);
      }
      score_ar[k] = user1hole[6].getValue();
    }
    bosalt();
    for (let i = 0; i < 7; i++) {
      user1hole.push(new Hole(temp1[i].getValue(), temp1[i].getID()));
      user2hole.push(new Hole(temp2[i].getValue(), temp2[i].getID()));
    }

    let max = 0;
    let max_indis = 0;
    for (let a = 0; a < score_ar.length; a++) {
      if (score_ar[a] >= max) {
        max = score_ar[a];
        max_indis = a;
      }
    }
    return array[max_indis] + 1;
  }
}
```

<b>Daha Ne Kadar Zor Olabilir Seviyesi:</b> Kuyu sayıları arasından rastgele birini seçerek Cengaver'imiz hamlesini oynamakta.

```javascript
function runRobotExpert(){
        let move = robotExpert()
        player = 1;
        tikla("user1hole"+(move).toString()+"x");
}
function robotExpert(){
    let array = doluHoleler();
    let len = array.length;
    let score_ar = [];
    if( len > 0){
        var temp1 = [];
        var temp2 = [];
        for (let i = 0; i < 7; i++) {
            temp1.push(new Hole(user1hole[i].getValue(),user1hole[i].getID()));
            temp2.push(new Hole(user2hole[i].getValue(),user2hole[i].getID()));
        };
        bosalt();

        for ( let k = 0; k < array.length; k++){
            let denenecek_hole_indis = array[k];
            bosalt();
            for (let i = 0; i < 7; i++) {
                user1hole.push(new Hole(temp1[i].getValue(),temp1[i].getID()));
                user2hole.push(new Hole(temp2[i].getValue(),temp2[i].getID()));
            };
            dagit(1,denenecek_hole_indis+1);
            while(player == 1){
                let move = robotExpert();
                dagit(1,move);
            }
            let karsi_skor_max = robotExpertForHumanSide(2);
            score_ar[k] = user1hole[6].getValue() - karsi_skor_max;
        }
        bosalt();
        for (let i = 0; i < 7; i++) {
            user1hole.push(new Hole(temp1[i].getValue(),temp1[i].getID()));
            user2hole.push(new Hole(temp2[i].getValue(),temp2[i].getID()));
        };

        let max = 0;
        let max_indis = 0;
        for ( let a = 0; a< score_ar.length; a++){
            if( score_ar[a] >= max){
                max = score_ar[a];
                max_indis = a;
            }
        }
        return array[max_indis]+1;
    }
}
...
```

[<i>Cengaver'in Kaynak Kodu.</i>](https://kod.pardus.org.tr/tugbaficici/mangala/blob/master/pages/robotGameArea.js)

## Çevrim İçi Moduyla Gerçek Cengaverlere Karşı

![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/aqua.png)

> SocketIO kullanarak oluştuduğumuz server ile kullanıcıların bu server üzerinde <i>oda oluşturma</i> ve <i>odaya katılma</i> fonksiyonlarıyla çevrim içi olarak oynayabilmektedir.

![OdaImage](https://kod.pardus.org.tr/tugbaficici/mangala/raw/master/assets/image/oda.png)

## Arkadaşına Karşı

![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/aqua.png)

> Hem Cengaver'e karşı hem de çevrim içi oynanabildiği gibi aynı bilgisayarda iki kişi karşılıklı oynabilmektedir.

## Ekip Üyeleri

![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/fire.png)

[@Abdülkerim Aksak](https://github.com/KerimAksak)

[@Muaz Dervent](https://github.com/muazdervent)

[@Tuğba Fıçıcı](https://github.com/tugbaficici)

## Lisans

![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/solar.png)

Mangala ### lisansı ile lisanslanmıştır.
