Adu Kucing: merge with upstream
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