using System.Collections.Generic;
public abstract class FungsiKartu
public abstract void TampilkanIdentitas(string nama);
public void ShowKartu(List<string> KartuPemain)
int LenKartuPemain = KartuPemain.Count;
for(int i=0;i<LenKartuPemain;i++)
if(i==LenKartuPemain-1) Console.Write("|{0}|{1}|",KartuPemain[i][0],KartuPemain[i][1]);
else Console.Write("|{0}|{1}| ~ ",KartuPemain[i][0],KartuPemain[i][1]);
for(int i=0;i<LenKartuPemain;i++){
if(i==LenKartuPemain-1) Console.Write(" {0} ",i);
else Console.Write(" {0} ~ ",i);
public string InputUser(char SideL,char SideR,List<string> KartuPemain)
input=Console.ReadLine();
if(SideL ==KartuPemain[pilihan-'0'][1])
result=KartuPemain[pilihan-'0'];
else if(SideL ==KartuPemain[pilihan-'0'][0])
result=""+KartuPemain[pilihan-'0'][1]+KartuPemain[pilihan-'0'][0];
else Console.WriteLine("Kartu Tidak Cocok, mohon masukan kartu yang cocok");
if(SideR ==KartuPemain[pilihan-'0'][0])
result=KartuPemain[pilihan-'0'];
else if(SideR ==KartuPemain[pilihan-'0'][1])
result=""+KartuPemain[pilihan-'0'][1]+KartuPemain[pilihan-'0'][0];
else Console.WriteLine("Kartu Tidak Cocok, mohon masukan kartu yang cocok");
else Console.WriteLine("Input tidak sesuai, mohon ikuti aturan");
return result+input[1]+input[0];
public int Matcher(List<string> PapanKartu,List<string> KartuPemain,int JumlahKartuDiPapan)
int lenkartu= KartuPemain.Count;
for(int i=0;i<lenkartu;i++){
if(PapanKartu[0][0]==KartuPemain[i][0]) KartuMatch++;
if(PapanKartu[0][0]==KartuPemain[i][1]) KartuMatch++;
if(PapanKartu[JumlahKartuDiPapan-1][1]==KartuPemain[i][1])KartuMatch++;
if(PapanKartu[JumlahKartuDiPapan-1][1]==KartuPemain[i][0])KartuMatch++;
public class KartuDomino : FungsiKartu
public List<string> KartuPemain= new List<string>();
public int JumlahKartuPemain{get; set;}
public KartuDomino(List<string> kartupemain,int jumlah)
JumlahKartuPemain=jumlah;
public override void TampilkanIdentitas(string nama)
Console.WriteLine("User name "+nama);
public class Pemain: KartuDomino,Sapa
public string Nama{set;get;}
private static int JumlahPemain=0;
public Pemain(string nama="",List<string> kartupemain = null ,int jumlahKartu=7):base(kartupemain,jumlahKartu)
public static int Jumlah()
public void TampilkanSisaKartu()
Console.WriteLine("Jumlah sisa kartu pada {0} adalah {1} ",this.Nama,this.JumlahKartuPemain);
public void TampilkanSisaKartu(string additional)
Console.WriteLine("Jumlah sisa kartu pada {0} adalah {1} sehingga kamu ",this.Nama,this.JumlahKartuPemain,additional);
Console.WriteLine("Halo ! Selamat datang User name "+this.Nama);
public static void Main()
Console.WriteLine("Halo Selamat Datang di Permainan Kartu Domino Sederhana");
Pemain Pemain1= new Pemain();
Pemain Pemain2= new Pemain();
Pemain Pemain3= new Pemain();
Pemain Pemain4= new Pemain();
Console.WriteLine("Silakan Memasukkan Nama untuk Pemain {0}",y+1);
inputNama=Console.ReadLine();
if(y==0) Pemain1.Nama=inputNama;
else if (y==1) Pemain2.Nama=inputNama;
else if (y==2) Pemain3.Nama=inputNama;
else if (y==3) Pemain4.Nama=inputNama;
Pemain1.KartuPemain=new List<string>{"55","22","41","63","62","61","00"};
Pemain2.KartuPemain=new List<string>{"66","54","53","52","51","50","60"};
Pemain3.KartuPemain=new List<string>{"43","42","64","40","33","32","31"};
Pemain4.KartuPemain=new List<string>{"30","65","21","20","11","10","44"};
Console.WriteLine("Pemain1 teregistrasi dengan nama ~ {0} dan kartu:",Pemain1.Nama);
Pemain1.ShowKartu(Pemain1.KartuPemain);
Console.WriteLine("Pemain2 teregistrasi dengan nama ~ {0} dan kartu:",Pemain2.Nama);
Pemain2.ShowKartu(Pemain2.KartuPemain);
Console.WriteLine("Pemain3 teregistrasi dengan nama ~ {0} dan kartu:",Pemain3.Nama);
Pemain3.ShowKartu(Pemain3.KartuPemain);
Console.WriteLine("Pemain4 teregistrasi dengan nama ~ {0} dan kartu:",Pemain4.Nama);
Pemain4.ShowKartu(Pemain4.KartuPemain);
var PapanKartu = new List<string>();
int JumlahKartuDiPapan=0;
int UrutanKartuPertama=0;
Console.WriteLine("*****************Mempersiapkan dan Memulai Permainanan*****************");
if (JumlahKartuDiPapan==0)
Console.WriteLine("************Tidak ada kartu di Papan***************");
Console.WriteLine("************Mencari Pemain dengan kartu |0|0| ***************");
if(Pemain1.KartuPemain[x]=="00")
if(Pemain2.KartuPemain[x]=="00")
UrutanPemain=i;UrutanKartuPertama=x;
if(Pemain3.KartuPemain[x]=="00")
UrutanPemain=i;UrutanKartuPertama=x;
if(Pemain4.KartuPemain[x]=="00")
UrutanPemain=i;UrutanKartuPertama=x;
Console.WriteLine("Kartu |0|0| terdapat pada Pemain {0} sehingga Pemain {0} Otomatis mengeluarkan kartu |0|0| nya",UrutanPemain+1);
PapanKartu.Add(Pemain1.KartuPemain[UrutanKartuPertama]);Pemain1.KartuPemain.RemoveAt(UrutanKartuPertama);
PapanKartu.Add(Pemain2.KartuPemain[UrutanKartuPertama]);Pemain2.KartuPemain.RemoveAt(UrutanKartuPertama);
PapanKartu.Add(Pemain3.KartuPemain[UrutanKartuPertama]);Pemain3.KartuPemain.RemoveAt(UrutanKartuPertama);
PapanKartu.Add(Pemain4.KartuPemain[UrutanKartuPertama]);Pemain4.KartuPemain.RemoveAt(UrutanKartuPertama);
Console.WriteLine("************PAPAN PERMAINAN***************");
for(int i=0;i<JumlahKartuDiPapan;i++){
Console.WriteLine("|{0}|{1}|",PapanKartu[i][0],PapanKartu[i][1]);
Console.WriteLine("******************************************");
if(UrutanPemain>=3) UrutanPemain=0;
Console.WriteLine("************PAPAN PERMAINAN***************");
for(int i=0;i<JumlahKartuDiPapan;i++){
if(i==JumlahKartuDiPapan-1) Console.Write("|{0}|{1}|",PapanKartu[i][0],PapanKartu[i][1]);
else if(i==0) Console.Write("|{0}|{1}|",PapanKartu[i][0],PapanKartu[i][1]);
else Console.Write("+|{0}|{1}|+",PapanKartu[i][0],PapanKartu[i][1]);
Console.WriteLine("******************************************");
Console.WriteLine("Giliran Pemain {0} ~ Silakan pilih nomer urutan kartu yang ingin di mainkan sesuai kartu dibawah ini : (nomer dimulai dari 0)",UrutanPemain+1);
Pemain1.ShowKartu(Pemain1.KartuPemain);
int KartuMatch=Pemain1.Matcher(PapanKartu,Pemain1.KartuPemain,JumlahKartuDiPapan);
Console.WriteLine("\nMasukkan pilihan urutan kartu dan posisi (L=Left , R=Right) ex.(4R) : (Langkah yang dapat dilakukan adalah {0})",KartuMatch);
if(JumlahKartuDiPapan==1) input = Pemain1.InputUser(PapanKartu[0][0],PapanKartu[0][1],Pemain1.KartuPemain);
else input = Pemain1.InputUser(PapanKartu[0][0],PapanKartu[JumlahKartuDiPapan-1][1],Pemain1.KartuPemain);
if(input[2]=='L') PapanKartu.Insert(0, ""+input[0]+input[1]);
else PapanKartu.Add(""+input[0]+input[1]);
Pemain1.KartuPemain.RemoveAt(input[3]-'0');
Pemain1.JumlahKartuPemain--;
if (Pemain1.JumlahKartuPemain==0)
Console.WriteLine("Pemain 1 ~ dengan user name {0} Menang !! SELAMAT !!",Pemain1.Nama);
Console.WriteLine("\nPemain {0} tidak mempunyai kartu yang cocok",UrutanPemain+1);
Pemain2.ShowKartu(Pemain2.KartuPemain);
int KartuMatch=Pemain2.Matcher(PapanKartu,Pemain2.KartuPemain,JumlahKartuDiPapan);
Console.WriteLine("\nMasukkan pilihan urutan kartu : (Langkah yang dapat dilakukan adalah {0})",KartuMatch);
if(JumlahKartuDiPapan==1) input = Pemain2.InputUser(PapanKartu[0][0],PapanKartu[0][1],Pemain2.KartuPemain);
else input = Pemain2.InputUser(PapanKartu[0][0],PapanKartu[JumlahKartuDiPapan-1][1],Pemain2.KartuPemain);
if(input[2]=='L') PapanKartu.Insert(0, ""+input[0]+input[1]);
else PapanKartu.Add(""+input[0]+input[1]);
Pemain2.KartuPemain.RemoveAt(input[3]-'0');
Pemain2.JumlahKartuPemain--;
if (Pemain2.JumlahKartuPemain==0)
Console.WriteLine("Pemain 2 ~ dengan user name {0} Menang !! SELAMAT !!",Pemain2.Nama);
Console.WriteLine("\nPemain {0} tidak mempunyai kartu yang cocok",UrutanPemain+1);
Pemain3.ShowKartu(Pemain3.KartuPemain);
int KartuMatch=Pemain3.Matcher(PapanKartu,Pemain3.KartuPemain,JumlahKartuDiPapan);
Console.WriteLine("\nMasukkan pilihan urutan kartu : (Langkah yang dapat dilakukan adalah {0})",KartuMatch);
if(JumlahKartuDiPapan==1) input = Pemain3.InputUser(PapanKartu[0][0],PapanKartu[0][1],Pemain3.KartuPemain);
else input = Pemain3.InputUser(PapanKartu[0][0],PapanKartu[JumlahKartuDiPapan-1][1],Pemain3.KartuPemain);
if(input[2]=='L') PapanKartu.Insert(0, ""+input[0]+input[1]);
else PapanKartu.Add(""+input[0]+input[1]);
Pemain3.KartuPemain.RemoveAt(input[3]-'0');
Pemain3.JumlahKartuPemain--;
if (Pemain3.JumlahKartuPemain==0)
Console.WriteLine("Pemain 3 ~ dengan user name {0} Menang !! SELAMAT !!",Pemain3.Nama);
Console.WriteLine("\nPemain {0} tidak mempunyai kartu yang cocok",UrutanPemain+1);
Pemain4.ShowKartu(Pemain4.KartuPemain);
int KartuMatch=Pemain4.Matcher(PapanKartu,Pemain4.KartuPemain,JumlahKartuDiPapan);
Console.WriteLine("\nMasukkan pilihan urutan kartu : (Langkah yang dapat dilakukan adalah {0})",KartuMatch);
if(JumlahKartuDiPapan==1) input = Pemain4.InputUser(PapanKartu[0][0],PapanKartu[0][1],Pemain4.KartuPemain);
else input = Pemain4.InputUser(PapanKartu[0][0],PapanKartu[JumlahKartuDiPapan-1][1],Pemain4.KartuPemain);
if(input[2]=='L') PapanKartu.Insert(0, ""+input[0]+input[1]);
else PapanKartu.Add(""+input[0]+input[1]);
Pemain4.KartuPemain.RemoveAt(input[3]-'0');
Pemain4.JumlahKartuPemain--;
if (Pemain4.JumlahKartuPemain==0)
Console.WriteLine("Pemain 4 ~ dengan user name {0} Menang !! SELAMAT !!",Pemain4.Nama);
Console.WriteLine("\nPemain {0} tidak mempunyai kartu yang cocok",UrutanPemain+1);
if(UrutanPemain>=4) UrutanPemain=0;