Skip to content

Adu Kucing: merge with upstream

ElangT requested to merge ElangT/ProgExam2017:master into master

Add Adu Kucing

Identitas

Nama: Ahmad Elang Islam Belanaby NPM: 1506689105 Kelompok: MICin

Deskripsi Fitur Mengadu 2 kucing berdasarkan random. Kucing yang menang akan mendapatkan medali yang disimpan sebagai sebuah variable. Fitur juga akan mengecek apakah kedua kucing itu ada atau tidak, dan apakah kedua kucing tersebut namanya sama atau tidak (karena kucing tidak bisa bertarung melawan diri sendiri)

Implementasi Tambah Kucing dengan Medal

add_cat_with_medal(Pid, Name, Color, Description, Medal)->
    my_server:call(Pid, {add_with_medal, Name, Color, Description, Medal}).

handle_call({add_with_medal, Name, Color, Description, Medal}, From, Cats) ->
    Is_integer = is_integer(Medal),
    if Is_integer ->
         if 
            Medal >= 0 ->
                my_server:reply(From, {ok, "success add cat"}),
                Cats ++ [make_cat_with_medal(Name, Color, Description, Medal)];
            Medal < 0 ->
                my_server:reply(From, {error, "Medal is in integer"}),
                Cats
         end;
      true -> 
        my_server:reply(From, {error, "Write medal in integer"}),
        Cats
   end;
make_cat_with_medal(Name, Col, Desc, Medal) ->
    #cat{name=Name, color=Col, description=Desc, medal=Medal}.

Cek kucing

handle_call({cat_vs_cat, Cat1, Cat2}, From, Cats) ->
    TuanRumah = [C || C <- Cats, C#cat.name =:= Cat1],
    Penantang = [C || C <- Cats, C#cat.name =:= Cat2],
    if Cat1 =:= Cat2 ->
        my_server:reply(From, {error, "Nama petarung tidak boleh sama"}),
        Cats;
    TuanRumah =:= [] ->
        R= io_lib:format("~p",[Cat1]),
        Temp = "Tidak ada nama "++lists:flatten(R)++" di server",
        my_server:reply(From, {error, Temp}),
        Cats;
    Penantang =:= [] ->
        R= io_lib:format("~p",[Cat2]),
        Temp = "Tidak ada nama "++lists:flatten(R)++" di server",
        my_server:reply(From, {error, Temp}),
        Cats;
    true ->
        Pemenang = duel(hd(TuanRumah), hd(Penantang)),
        Nama = Pemenang#cat.name,
        Medal = Pemenang#cat.medal + 1,
        PemenangBaru = Pemenang#cat{medal = Medal},
        R= io_lib:format("~p",[Nama]),
        Temp = "Kucing "++lists:flatten(R)++" Menang!!",
        my_server:reply(From, {ok, Temp}),
        [PemenangBaru| lists:delete(Pemenang, Cats)]
    end;

Private Function Duel

duel(Cat1, Cat2) ->
    hd([X||{_,X} <- lists:sort([ {rand:uniform(), N} || N <- [Cat1, Cat2]])]).

Melakukan Testing Sukses

c(kitty_services).
f().
Pid = kitty_services:start_link().                       
kitty_services:add_cat_with_medal(Pid, kucing, hitam, "kucing garang", 3).
kitty_services:add_cat_with_medal(Pid, cat, merah, "kucing ga garang", 2).
kitty_services:cat_vs_cat(Pid, kucing, cat).                

Melakukan Testing Tidak Sukses Bertarung

c(kitty_services).
f().
Pid = kitty_services:start_link().                       
kitty_services:add_cat_with_medal(Pid, kucing, hitam, "kucing garang", 3).
kitty_services:cat_vs_cat(Pid, kucing, cat).                

Melakukan Testing Tidak Sukses Menambah kucing karena medal bukan angka

c(kitty_services).
f().
Pid = kitty_services:start_link().                       
kitty_services:add_cat_with_medal(Pid, kucing, hitam, "kucing garang", tiga).
kitty_services:cat_vs_cat(Pid, kucing, cat).                

Write medal in integer

Merge request reports