Hello ENGINEER, Welcome to Electrical's Corner

Juni 12, 2015

KOMUNIKASI ETHERNET - PRAKTIKUM

Assalamualaikum Wr. Wb
hai guyyssss, kali ini laras bakalan bahas tentang komunikasi ethernet, contohnya kirim sms atau chat guys. 
Komunikasi Ethernet  merupakan  salah  satu  jenis  komunikasi  yang  paling  sering ditemui saat ini. Penggunaannya juga beragam, bisa digunakan untuk komunikasi antar PC, PC dengan mikrokontroller, PC dengan PLC, PLC dengan PLC dan sebagainya. Komunikasi Ethernet  dapat menggunakan  media  berupa  kabel  maupun  nirkabel. Media kabel yang digunakan biasanya berupa kabel UTP yang ditiap ujungnya terdapat konektor RJ45, sedangkan yang nirkabel biasanya memanfaatkan router wireless. Untuk mengenali tujuan pengiriman data, komunikasi ini menggunakan IP address dan port. IP Address  dianalogikan  sebagai  kompleks  perumahan,  dan port  dianalogikan  sebagai nomor  rumah.  Jika  IP  Address  dan  port  yang  digunakan  asal-asalan, maka  paket  data yang dikirimkan juga tidak akan pernah sampai ke device tujuan.  Pada komunikasi Ethernet terdapat 2 jenis protocol pengiriman data, yaitu TCP dan UDP. Kedua protocol tersebut memiliki kelebihan dan kekurangan masing-masing. Pada praktikum  kali  ini,  kita  akan  membuat sebuah  aplikasi  chatting  teks  sederhana menggunakan protocol UDP.
okey, sekarang lanjut yowww ke praktikumnya
1. Buka Visual studio 2012, pilih new project dan pilih windows form. 
2. Susun Form seperti dibawah ini:
3. tambahkan program dibawah ini.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Laras_Komunikasi_Ethernet
{
    public partial class Form1 : Form
    {
        delegate void AddMessage(string message);
        string name;
        int port = 11000;
        const string broadcastAddress= "192.168.0.255"; // IP address tujuan
        UdpClient receivingClient = new UdpClient(11000); //port yg digunakan
        UdpClient sendingClient;
        Thread receivingThread;
        public Form1()
        {
            InitializeComponent();
            this.Load  += new EventHandler (Form1_Load);
            button1.Click +=new EventHandler (button1_Click);

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.Focus();
            InitializeSender();
            InitializeReceiver();
        }

        private void InitializeSender()
        {
            sendingClient = new UdpClient(broadcastAddress, port);
            sendingClient.EnableBroadcast = true;
        }

        private void InitializeReceiver()
        {
            ThreadStart start = new ThreadStart(Receiver);</port>
            receivingThread =new Thread (start);</port>
            receivingThread.IsBackground=true;
            receivingThread.Start();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text.TrimEnd();
            if (!string.IsNullOrEmpty(textBox1.Text))
            {
                string toSend = "<" + Environment.MachineName + ">:" + textBox1.Text;
                byte[] data = Encoding.ASCII.GetBytes(toSend);
                sendingClient.Send(data, data.Length);
                textBox1.Text = " ";
            }
            textBox1.Focus();
        }
        private void Receiver()
        {
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port);
            AddMessage messageDelegate = messageReceived;
            while (true)
            {
                byte[] data = receivingClient.Receive(ref endPoint);
                string message = Encoding.ASCII.GetString(data);
                Invoke(messageDelegate, message);
                System.Console.Beep(1500, 300);
            }
        }
        private void messageReceived(string message)
        {
            richTextBox1.Text += message + "\n";
        }
    }
}
4. Compile dan jalankan :)


Mei 31, 2015

SERIAL PORT TUGAS - MENYALAKAN 3 LED DI ARDUINO

Assalamualaikum Wr. Wb
hai gaesss, kita coba pengaplikasian dari transmit data yg sudah laras buat sebelumnya yaaa. contohnya ya ini, menyalakan 3 LED dalma arduino (aplikasinya saja)
pertama-tama siapkan visual studio 2012 hehe, habis itu siapkan aplikasi arduino atau HTERM

1. Buka Visual Studio 2012 , pilih new project habis itu namai project anda

2. Susun Form- form seperti punya saya

3. Atur timer 1 di interval properties nya, menjadi 500. lalu, simpan picture sbg LED nya, kalau punya saya memakai warna hitam dan merah. hitam artinya OFF, merah artinya ON

4. kemudian ikuti saja program yang saya buat
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LED
{
    public partial class Form1 : Form
    {
        Image laras = Properties.Resources.laras;
        Image Hanisa = Properties.Resources.Hanisa;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.Open();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write("1");
                pictureBox1.BackgroundImage = Hanisa;
            }
            catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write("0");
                pictureBox1.BackgroundImage = laras;
            }
            catch (Exception ex)
            {
                   MessageBox.Show(ex.Message);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Write(textBox1.Text);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (serialPort1.BytesToRead != 0)
            {
                textBox2.Text = serialPort1.ReadExisting();
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write("2");
                pictureBox2.BackgroundImage = Hanisa;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write("3");
                pictureBox2.BackgroundImage = laras;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write("4");
                pictureBox3.BackgroundImage = Hanisa;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write("5");
                pictureBox3.BackgroundImage = laras;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        
    }
}

5. Lalu jalankan aplikasi HTERM seperti ini, lalu setting COM berlawanan dengan COM yang               terdapat pada visual studio dan setting baud nya menjadi 9600 lalu kemudian klik connect.




Komunikasi Serial Chapter 2 - Transmit Data

Assalamualaikum Wr. Wb

hai gaesss, kali ini kita bakaan bahas seperti postingan yang komunikasi serial chapter 1 tapi ini mengirim data. misalkan, aplikasinya itu ada di SMS, pasti sering dong sms-an????? nah itu salah satu contohnya gaess. mau tau gimana caranya?? ayow laras kasih tau:)
Pengiriman data melalui serial port sangat sederhana, cukup menggunakan method Write dengan parameter berupa string yang ingin dikirim, gaesss. Tujuan  praktikum  ini membuat  aplikasi  chating  antara  dua komputer menggunakan port serial.
ikutin ya langkah-langkah nya:
1. Buka solution baru di visual studio 2012 pilih windows form application.
2. Susun Form seperti dibawah ini
3. Komponen Timer ada  di Windows  Form  toolbar.  Sedangkan komponen SerialPort ada  di               Components  toolbar.  Jangan  lupa, setting properties Enabled  di  komponen Timer menjadi true.       Kemudian properties Interval di-setting menjadi 500 ms.

4. Double  click  tombol  (button)  dengan  text  “kirim”.  Ketikkan statemen di bawah ini di dalam         fungsi ButtonClick :
                       serialPort1.Write(textBox1.Text);
    Kode  di  atas  tujuannya  adalah  untuk  menuliskan  isi  dari textBox1 ke  port  serial.                         Sebelumnya  kita  harus  membuka  port  dulu  dengan statemen :
                       serialPort1.Open();
    Double click untuk timer. Ketikkan statemen di bawah ini di dalam fungsi TimerTick :
                        if (serialPort1.BytesToRead != 0){
                        textBox2.Text = serialPort1.ReadExisting();
                        }

5. Kode di atas tujuannya adalah untuk membaca data yang ada di buffer serial port. Compile dan           jalankan program.

6. Buka hyperterminal, kemudian amati data yang tampil pada hyperterminal saat anda mengirim           data.

7. Buka Arduino.exe.

8. Ketikkan program dibawah ini pada Arduino IDE.

9. Koneksikan Arduino ke computer, pilih port dan tipe Arduino terlebih dahulu. Kemudian upload         program tersebut dengan cara mengeklik tanda 

10. Tunggu sampai ada tulisan “Done Uploading” pada Arduino IDE.

11. Jalankan aplikasi anda, dengan mengatur port serial sesuai dengan port Arduino yang terdeteksi           pada computer.

12. Coba kirim data karakter dari aplikasi.

13. Amati hasilnya pada Arduino.

Komunikasi Serial Chapter 1 - Receive Data (Menerima Data)

Assalamualaikum Wr. Wb
hai, gaesssss first of all thank you for visiting my beauty blog hehe.
okay, sekarang laras akan memberikan sebuah tutorial mengenai komunikasi serial untuk menerima data. hmm, secara umum sih pengaplikasiannya untuk memonitoring sesuatu, misalnya memonitoring ikan, tumbuhan dan masih banyak lagi pengaplikasiannya.
       Secara teorinya mulai dr serial portnya yaaaa, Port merupakan kumpulan jalur elektronik untuk menyalurkan data. Port ada yang untuk input saja, output saja atau input/output. Port dipakai untuk komunikasi antara CPU dengan monitor, keyboard,mouse dll.
       Proses pengiriman data dapat langsung sekaligus secara paralel dengan menggunakan beberapa kabel, atau satu-persatu secara berurutan (serial) dengan menggunakan sepasang kabel. Contoh transmisi data secara paralel adalah komunikasi harddisk IDE dengan
CPU, komunikasi printer dengan komputer. Contoh transmisi data secara serial adalah komunikasi harddisk SATA dengan CPU, komunikasi USB dll.
       Mikrokontroller umumnya menggunakan standar komunikasi serial RS232 untuk koneksi dengan perangkat lain. Komputer juga memiliki port standar serialport, paralelport, USB, VGA dan PS/2. Pada praktikum ini kita akan mempelajari penggunaan serial port.

sekarang, langsung saja ya ke praktikum nya gaess.
1. Buka visual studio 2012, pilih windows form application, jangan lupa diberi nama filenya gaes
2. Tujuan praktikum ini adalah untuk menerima data dari mikrokontroller melalui port serial. Data         yang dikirim oleh mikrokontroller adalah kondisi dari potensiometer. Nilai analog
    tegangan akan dikonversi oleh mikro ke nilai digital dalam range 0 - 1023. Kemudian nilai digital       ini yang dikirim ke komputer melalui port serial. Program pada mikro (kita akan menggunakan           arduino) cukup sederhana:
    void setup()
    {
          Serial.begin(9600);
    }
    void loop()
   {
        int sensorValue = analogRead(A1);
        delay(500);
        Serial.println(sensorValue, DEC);
   }

3. Buat solution baru. Susun form dengan control-control seperti terlihat pada gambar:

 4. Atur properties "Series" seperti dibawah ini, dan Anda bisa mengubah jenis grafik dengan                   mengubah ChartType nya.

5. Komponen SerialPort ada di Components toolbar, sedangkan komponen Chart ada di data.

6. Tambahkan program berikut untuk control button1:
    if (button1.Text == "Connect") {
       button1.Text = "Disconnect";
       serialPort1.Open();
       richTextBox1.text="";
       a=0; (Inisialisai dahulu variabel global)
       } 
       else {
        button1.Text = "Connect";
         serialPort1.Close();
       }

7. Tambahkan program berikut ke event DataReceived-nya serial:
    klik serialPort1 > klik event > double klik data received > tambahkan programnya
            rxString = serialPort1.ReadLine();
            this.Invoke(new EventHandler(DisplayText));
    Kita menggunakan method Invoke karena thread untuk receive serial berbeda dengan thread               program utama. Padahal object RichTextBox atau Label, tempat kita untuk menampilkan data
    serial, terletak di thread utama. Invoke membuat kita dapat melakukan cross-thread. Program di           atas akan membuat event DataReceived memanggil event handler baru yang terletak di thread             utama, yaitu DisplayText.

8. Untuk method DisplayText, tambahkan program berikut:
            private void DisplayText(object sender, EventArgs e){
            richTextBox1.AppendText(rxString);
            richTextBox1.ScrollToCaret();
            chart1.Series["Series1"].Points.AddXY(a,Convert.ToInt16(rxString));
            a++;
            }

9. Compile dan jalankan programnya. Good Luck


Mei 06, 2015

ALL ABOUT TRANSISTOR - RESUME

1.    Dasar-dasar Transistor
Pada  postingan sebelumnya telah laras sharing tentang karakteristik dasar  diode,  sebuah piranti  dua terminal  (karenanya  disebut  di-ode) beserta aplikasinya. Pada bagian  ini  akan laras posting karakteristik piranti tiga  terminal  atau  lebih dikenal  sebagai  “transistor”.  Pertama-tama  membahas  transistor  bipolar  atau  BJT  (Bipolar Junction  Transistor).  Berikutnya akan kita  bahas  transistor  unipolar  seperti misalnya FET (field-effect transistor).
Dibandingkan dengan  FET,  BJT  dapat memberikan  penguatan  yang  jauh  lebih besar  dan  tanggapan  frekuensi  yang  lebih baik.  Pada  BJT  baik pembawa  muatan mayoritas  maupun pembawa  muatan  minoritas  mempunyai  peranan  yang  sama pentingnya.
Gambar 1 Diagram BJT : a) Jenis n-p-n dan b) Jenis p-n-p

Terdapat dua jenis kontruksi dasar BJT, yaitu jenis n-p-n dan jenis p-n-p.   Untuk jenis  n-p-n,  BJT  terbuat  dari lapisan  tipis semi konduktor  tipe-p dengan  tingkat  doping yang  relatif  rendah,  yang  diapit  oleh dua  lapisan  semikonduktor  tipe-n.  Karena alasan sejarah pembuatannya, bagian di tengah disebut  “basis” (base),  salah  satu bagian  tipe-n (biasanya  mempunyai  dimensi  yang  kecil)  disebut  “emitor”  (emitter)  dan  yang  lainya sebagai “kolektor” (collector). Secara skematik kedua jenis transistor diperlihatkan pada gambar diagram BJT diatas.
Tanda  panah pada  gambar  1  menunjukkan kaki  emitor  dan  titik dari material tipe-pke material tipe-n.  Perhatikan bahwa untuk jenis n-p-n,  transistor  terdiri  dari  dua sambungan  p-n  yang  berperilaku  seperti  diode.  Setiap diode  dapat  diberi  panjar  maju atau berpanjar mundur, sehingga transistor dapat memiliki empat modus pengoperasian. Salah  satu  modus  yang  banyak digunakan disebut  “modus  normal”,  yaitu  sambungan emitor-basis  berpanjar  maju dan  sambungan kolektor-basis  berpanjar  mundur.  Modus ini juga sering disebut sebagai pengoperasian transistor pada “daerah aktif”.

2.      Pabrikasi BJT
Pabrikasi BJT dapat dilakukan dengan dua teknik, yaitu struktur transistor-alloy melalui difusi  dan  struktur  transistor  planar.    Gambar  2.a) diatas  menunjukkan  struktur  transistor alloy  n-p-n.  Kolektor  terbuat  dari  chip  semikonduktor  tipe-n dengan  ketebalan kurang dari  1  . Daerah basis  dibuat  dengan proses  difusi  kemudian dibuat  kontak  logam untuk dihubungkan dengan kaki  basis.  Daerah  emitor  dibuat  dengan  teknik  alloy  pada daerah  basis.    Sebagai  hasilnya  berupa  sebuah  pasangan  sambungan p-n  yang dipisahkan oleh daerah basis kira-kira setebal kertas.
Untuk struktur planar (gambar  2.b)), suatu lapisan tipe-n dengan tingkat doping rendah ditumbuhkan di  atas substrat   (tanda +  menunjukkan  tingkat  doping  sangat tinggi).  Setelah  melalui  proses  oksidasi  pada  permukaan,  sebuah  jendela  (window) dibuka  dengan proses  penggerusan  (etching)  dan  suatu pengotor (p)  dimasukkan ke kristal  dengan proses  difusi  untuk  membentuk  sambungan  (junction).  Sekali lagi setelah melalui reoksidasi, sebuah jendela kecil dibuka untuk proses difusi pembentukan daerah emitor (n).
Gambar 2 Transistor : a) Sumber alloy , b) Sumber planar dan c) Simbol rangkaian

Secara  konvensional  simbol transistor  n-p-n diperlihatkan pada  gambar 2-c dilengkapi  dengan  tanda  panah  pada emitor  yang  menunjukkan  aliran  muatan positif. Walaupun  sebuah  transistor  n-p-n  akan  bekerja  dengan  kedua  daerah  n  dapat  berfungsi sebagai  emitor, namun karena  kedua  daerah  mempunyai tingkat  doping  dan  geometri yang berbeda, maka daerah n yang dimaksud harus diberi label.

3.    Pengoperasian Transistor
Pada gambar 3-a diperlihatkan keping horizontal transistor jenis n-p-n.  Pengoperasian transistor  dapat  diterangkan  secara  kualitatif  dalam  hal  distribusi  potensial  pada sambungan  (gambar  3-b).  Sambungan  emitor  berpanjar  maju,  dengan  efek dari tegangan panjar  terjadi  penurunan  tegangan  penghalang  pada  sambungan  emitor dan memberi kesempatan pada elektron melakukan injeksi  ke basis dimana pada daerah ini miskin elektron (minoritas).
Sambungan kolektor  berpanjar  mundur;  sebagai  efek dari  pemasangan  tegangan panjar    akan  menaikkan potensial  penghalang  pada  sambungan kolektor.  Karena  daerah  basis sangat tipis, hampir  semua elektron  yang  terinjeksi  pada  basis  tersapu ke kolektor  dimana  mereka  melakukan  rekombinasi  dengan  lubang  yang  “disediakan” dengan pemasangan baterai luar.  (Sebenarnya terjadi  pengambilan  elektron oleh  baterai eksternal, meninggalkan lubang untuk proses rekombinasi).
Sebagai  hasilnya  terjadi transfer  arus  dari  rangkaian  emitor  ke  rangkaian kolektor  yang  besarnya  hampir  tidak  tergantung  pada  tegangan kolektor-basis.  Seperti akan kita  lihat,  transfer  tersebut memungkinkan pemasangan hambatan beban  yang besar untuk mendapatkan penguatan tegangan.
Gambar 3 Pengoperasian transistor n-p-n
Gambar 4 Skema pergerakan pembawa muatan pada pengoperasian transistor n-p-n.

4.    Karakteristik DC
Karakteristik  DC  dari  BJT  dapat  diprediksi  dengan  melihat  aliran  pembawa  muatan melewati  sambungan dan  ke  basis.  Dengan  sambungan  emitor  berpanjar  maju dan sambungan kolektor  berpanjar  mundur (biasa  disebut  operasi  normal,  pengoperasian di daerah  aktif),  gerakan pembawa  muatan pada  transistor  n-p-n  seperti  diskemakan pada gambar 4 Komponen  terbesar  dari  arus  emitor  (Ï’) terdiri  atas  elektron  yang  mengalir melewati  penurunan  tegangan potensial  () ke  sambungan  emitor-basis. Efisiensi  emitor (γ)  berharga  mendekati  satu  sehingga arus  hampir  terdiri atas  semua elektron  yang  terinjeksi  dari  emitor.  Komponen  lain  adalah  aliran  lubang  dari  basis yang  juga  difasilitasi  oleh penurunan  tegangan  penghalang  tersebut.  Daerah basis memiliki tingkat  doping yang  lebih  rendah dibandingkan daerah  emitor,  sehingga arus lubang relatif lebih rendah.  Kedua jenis muatan mengalir melalui proses difusi.
Elektron  yang  “terinjeksi”  dari  emitor  ke  basis  dapat mengalir  melalui
sambungan emitor-basis secara bebas karena beberapa sebab:
i)     Tidak ada tegangan yang melawannya,
ii)   Hanya terdapat jarak yang pendek pada daerah basis (tipis) dan
iii) Hanya  terdapat jumlah  lubang  yang  relatif  rendah  sehingga tidak banyak elektron  yang  tertangkap  lubang  dan hilang,  yaitu dengan  proses rekombinasi.

Dengan proses pabrikasi transistor yang benar, kurang lebih 99 - 99,9% electron yang  terinjeksi  berhasil mencapai  sambungan basis-kolektor (faktor  α  biasanya berharga  sekitar  0,98).  Elektron  tersebut tidak  mengalami  kesulitan  akibat  penurunan tegangan penghalang.

Arus  elektron     mendominasi  besarnya arus  kolektor.  Komponen  lain dari arus  kolektor  berupa  arus  drift  melewati  sambungan kolektor-basis  dari  pembawa muatan  minoritas  hasil  generasi termal.    Jika  kita  memasang  tegaangan pada  sambungan  emitor-basis, kita  menginjeksi  arus  yang  diberikan oleh persamaan  arus diode

Mei 03, 2015

Tutorial Membuat Game Tic Tac Toe Sederhana C#

Assalamualaikum Wr. Wb

hai temen-temen..udah lama nih gak posting lagi. dan sekarang laras ada tugas lagi nih tentang game yeeeey :D
kali ini laras mau membuat game tic tac toe sederhana guys!! pada tau kan tic tac toe?? itu loh permainan waktu di SD dan SMP yang namanya SOS, kadang-kadang juga ada di SMA/K (kalau lagi bosen aja) hihihi
game ini asik loh guys! ada player1 dan player 2 guys, kalau dulu kan seringnya mainnya di kertas yakan nah sekarang laras buat di komputer nih :D

program ini memakai banyak kemungkinan, jadi laras memakai beberapa case disini.
begini langkah-langkahnya :
1. Buka new project di Visual Studio 2012, jangan lupa diberi nama dan pilih windows application
2. Pilih Label, Button, Picture Box dan Menu Script di toolbox kemudian susun sesuai keinginan anda.



untuk memakai menu strip kita harus mengubah event click semuanya, mulai dari file sampai help. seperti dibawah ini. 


3. Kemudian tambahkan gambar X dan O untuk permainannya di resource. seperti ini :

4. Masukkan Codingannya, pertama-tama inisialisasi dahulu variabel globalnya.
        //Inisialisasi Variabel Global
        Image pictureX = Properties.Resources.Capture; // lokasi gambar X
        Image pictureO = Properties.Resources.fg; // lokasi gambar O
        Image pctr; int count = 0;
        Boolean checkX = false, checkO = false, easy = false;
        public int pict1 = 0, pict5 = 0, pict9 = 0,
        pict2 = 0, pict6 = 0,
        pict3 = 0, pict7 = 0,
        pict4 = 0, pict8 = 0;

5. Buat fungsi reset untuk mereset aplikasinya.
   private void reset()
        {
            pict1 = pict2 = pict3 = pict4 = pict5 = pict6 = pict7 = pict8 = pict9 = count = 0; //mereset nilai int pict1-pict9
            easy = checkX = checkO = false;
            // mengembalikan ke gambar awal picture box / kosong
            pictureBox1.BackgroundImage = pictureBox2.BackgroundImage =
            pictureBox3.BackgroundImage = pictureBox4.BackgroundImage =
            pictureBox5.BackgroundImage = pictureBox6.BackgroundImage =
            pictureBox7.BackgroundImage = pictureBox8.BackgroundImage =
            pictureBox9.BackgroundImage = null;
            label1.Text = label2.Text = "0";
            // enable semua picture box
            List<PictureBox> pctlist = new List<PictureBox>();
            foreach (PictureBox pct in this.Controls.OfType<PictureBox>())
            {
                pctlist.Add(pct);
                pct.Enabled = true;
            }
        }

6. Nonaktifkan atau disable semua picture box ketika hasil score tampil
        private void disablepicturebox()
        {
            List<PictureBox> pctList = new List<PictureBox>();
            foreach (PictureBox pct in this.Controls.OfType<PictureBox>())
            {
                pctList.Add(pct);
                pct.Enabled = false;
            }
        }

7. Nonaktifkan atau disable picture box yang sudah diclick agar player yang lain tidak dapat menggunakan picture box yang sudah dipakai.
        private void wasclickedbefore(int pic)
        {
            switch (pic)
            {
                case 1: { if (pict1 == 1) pict1++; break; }
                case 2: { if (pict2 == 1) pict2++; break; }
                case 3: { if (pict3 == 1) pict3++; break; }
                case 4: { if (pict4 == 1) pict4++; break; }
                case 5: { if (pict5 == 1) pict5++; break; }
                case 6: { if (pict6 == 1) pict6++; break; }
                case 7: { if (pict7 == 1) pict7++; break; }
                case 8: { if (pict8 == 1) pict8++; break; }
                case 9: { if (pict9 == 1) pict9++; break; }
                default: break;
            }
            if (easyToolStripMenuItem.Checked == true)
                easycomputer_play(pic);
            else if (normalToolStripMenuItem.Checked == true && easy == false)
                normalcomputer_play(pic);
            else if (normalToolStripMenuItem.Checked == true && easy == true)
                easycomputer_play(pic);
        }

8. Jika memilih level easy seperti ini logika fungsi easy modenya
        private void easycomputer_play(int pic)
        {
            if (pict1 == 0) { pictureBox1.BackgroundImage = pictureO; pict1 = 2; }
            else if (pict2 == 0) { pictureBox2.BackgroundImage = pictureO; pict2 = 2; }
            else if (pict3 == 0) { pictureBox3.BackgroundImage = pictureO; pict3 = 2; }
            else if (pict4 == 0) { pictureBox4.BackgroundImage = pictureO; pict4 = 2; }
            else if (pict5 == 0) { pictureBox5.BackgroundImage = pictureO; pict5 = 2; }
            else if (pict6 == 0) { pictureBox6.BackgroundImage = pictureO; pict6 = 2; }
            else if (pict7 == 0) { pictureBox7.BackgroundImage = pictureO; pict7 = 2; }
            else if (pict8 == 0) { pictureBox8.BackgroundImage = pictureO; pict8 = 2; }
            else if (pict9 == 0) { pictureBox9.BackgroundImage = pictureO; pict9 = 2; }
        }

9. dan juga logika fungsi normal mode
        private void normalcomputer_play(int pic)
        {
            if ((pict1 == 2 || pict2 == 2 || pict3 == 2 || pict4 == 2 || pict6 == 2 || pict7 == 2 ||pict8 == 2 || pict9 == 2) && pict5 == 0) { pictureBox5.BackgroundImage = pictureO; pict5 = 2; }
            else if (pict5 == 2 && (pict1 == 0 || pict3 == 0 || pict7 == 0 || pict9 == 0))
            {
                Random Rnd = new Random();
                int rnd = Rnd.Next(1, 5);
                switch (rnd)
                {
                    case 1:
                        {
                            if (pict1 == 0) pictureBox1.BackgroundImage = pictureO;
                            pict1 = 2; break;
                        }
                    case 2:
                        {
                            if (pict3 == 0) pictureBox3.BackgroundImage = pictureO;
                            pict3 = 2; break;
                        }
                    case 3:
                        {
                            if (pict7 == 0) pictureBox7.BackgroundImage = pictureO;
                            pict7 = 2; break;
                        }
                    case 4:
                        {
                            if (pict9 == 0) pictureBox9.BackgroundImage = pictureO;
                            pict9 = 2; break;
                        }
                    default: break;
                }
                easy = true;
            }
        }

10. Kemungkinan Player 1 atau X menang, beginilah fungsi memeriksa ketika User (X) menang:
        private void result()
        {
            if (pictureBox1.BackgroundImage == pictureX &&
            pictureBox2.BackgroundImage == pictureX &&
            pictureBox3.BackgroundImage == pictureX)
            {
                MessageBox.Show("X (You) has WON !!!", "Congratulation"); checkX = true;
            }
            else if (pictureBox4.BackgroundImage == pictureX &&
            pictureBox5.BackgroundImage == pictureX &&
            pictureBox6.BackgroundImage == pictureX)
            {
                MessageBox.Show("X (You) has WON !!!", "Congratulation"); checkX = true;
            }
            else if (pictureBox7.BackgroundImage == pictureX &&
            pictureBox8.BackgroundImage == pictureX &&
            pictureBox9.BackgroundImage == pictureX)
            {
                MessageBox.Show("X (You) has WON !!!", "Congratulation"); checkX = true;
            }
            else if (pictureBox1.BackgroundImage == pictureX &&
            pictureBox4.BackgroundImage == pictureX &&
            pictureBox7.BackgroundImage == pictureX)
            {
                MessageBox.Show("X (You) has WON !!!", "Congratulation"); checkX = true;
            }
            else if (pictureBox2.BackgroundImage == pictureX &&
            pictureBox5.BackgroundImage == pictureX &&
            pictureBox8.BackgroundImage == pictureX)
            {
                MessageBox.Show("X (You) has WON !!!", "Congratulation"); checkX = true;
            }
            else if (pictureBox3.BackgroundImage == pictureX &&
            pictureBox6.BackgroundImage == pictureX &&
            pictureBox9.BackgroundImage == pictureX)
            {
                MessageBox.Show("X (You) has WON !!!", "Congratulation"); checkX = true;
            }
            else if (pictureBox3.BackgroundImage == pictureX &&
            pictureBox5.BackgroundImage == pictureX &&
            pictureBox7.BackgroundImage == pictureX)
            {
                MessageBox.Show("X (You) has WON !!!", "Congratulation"); checkX = true;
            }
            else if (pictureBox1.BackgroundImage == pictureX &&
            pictureBox5.BackgroundImage == pictureX &&
            pictureBox9.BackgroundImage == pictureX)
            {
                MessageBox.Show("X (You) has WON !!!", "Congratulation"); checkX = true;
            }
            else resultO();
        }

11. Begitu juga dengan fungsi memeriksa ketika computer (O) menang
        private void resultO()
        {
            if (pictureBox1.BackgroundImage == pictureO &&
            pictureBox2.BackgroundImage == pictureO &&
            pictureBox3.BackgroundImage == pictureO)
            {
                MessageBox.Show("O (Computer) has WON !!!", "Congratulation"); checkO =
                true;
            }
            else if (pictureBox4.BackgroundImage == pictureO &&
            pictureBox5.BackgroundImage == pictureO &&
            pictureBox6.BackgroundImage == pictureO)
            {
                MessageBox.Show("O (Computer) has WON !!!", "Congratulation"); checkO =
                true;
            }
            else if (pictureBox7.BackgroundImage == pictureO &&
            pictureBox8.BackgroundImage == pictureO &&
            pictureBox9.BackgroundImage == pictureO)
            {
                MessageBox.Show("O (Computer) has WON !!!", "Congratulation"); checkO =
                true;
            }
            else if (pictureBox1.BackgroundImage == pictureO &&
            pictureBox4.BackgroundImage == pictureO &&
            pictureBox7.BackgroundImage == pictureO)
            {
                MessageBox.Show("O (Computer) has WON !!!", "Congratulation"); checkO =
                true;
            }
            else if (pictureBox2.BackgroundImage == pictureO &&
            pictureBox5.BackgroundImage == pictureO &&
            pictureBox8.BackgroundImage == pictureO)
            {
                MessageBox.Show("O (Computer) has WON !!!", "Congratulation"); checkO =
                true;
            }
            else if (pictureBox3.BackgroundImage == pictureO &&
            pictureBox6.BackgroundImage == pictureO &&
            pictureBox9.BackgroundImage == pictureO)
            {
                MessageBox.Show("O (Computer) has WON !!!", "Congratulation"); checkO =
                true;
            }
            else if (pictureBox3.BackgroundImage == pictureO &&
            pictureBox5.BackgroundImage == pictureO &&
            pictureBox7.BackgroundImage == pictureO)
            {
                MessageBox.Show("O (Computer) has WON !!!", "Congratulation"); checkO =
                true;
            }
            else if (pictureBox1.BackgroundImage == pictureO &&
            pictureBox5.BackgroundImage == pictureO &&
            pictureBox9.BackgroundImage == pictureO)
            {
                MessageBox.Show("O (Computer) has WON !!!", "Congratulation"); checkO =
                true;
            }
            checkdraw();
        }

12. Kemungkinan ketika game seri. beginilah fungsi memeriksa ketika game seri:
        private void checkdraw()
        {
            if (pictureBox1.BackgroundImage != null && pictureBox2.BackgroundImage != null
            &&
            pictureBox3.BackgroundImage != null && pictureBox4.BackgroundImage != null
            &&
            pictureBox5.BackgroundImage != null && pictureBox6.BackgroundImage != null
            &&
            pictureBox7.BackgroundImage != null && pictureBox8.BackgroundImage != null
            &&
            pictureBox9.BackgroundImage != null)
                MessageBox.Show("Game is DRAW !!!", "Congratulation");
        }

13. Buat fungsi score untuk menampilkan score pada label 1 dan 2:
    private void score()
        {
            if (checkX)
            {
                disablepicturebox();
                label1.Text = (int.Parse(label1.Text) + 1).ToString();
            }
            else if (checkO)
            {
                disablepicturebox();
                label2.Text = (int.Parse(label2.Text) + 1).ToString();
            }
        }

14. Inilah inti permainannya, event ketika picture box diklik.
        private void Picture_Click(object sender, EventArgs e)
        {
            PictureBox piCTure = (PictureBox)sender;
            int pic = Convert.ToInt32((piCTure.Name).Substring(10, 1));
            count++;
            // switch kondisi masing-masing picture box
         
            switch (pic)
            {
                case 1:
                    {

                        if (pict1 == 0) { pict1++; pictureBox1.BackgroundImage = pctr; }
                        else if (pict1 == 2) { pictureBox1.Enabled = false; } break;
                    }
                case 2:
                    {
                        if (pict2 == 0) { pict2++; pictureBox2.BackgroundImage = pctr; }
                        else if (pict2 == 2) { pictureBox2.Enabled = false; } break;
                    }
                case 3:
                    {
                        if (pict3 == 0) { pict3++; pictureBox3.BackgroundImage = pctr; }
                        else if (pict3 == 2) { pictureBox3.Enabled = false; } break;
                    }
                case 4:
                    {
                        if (pict4 == 0) { pict4++; pictureBox4.BackgroundImage = pctr; }
                        else if (pict4 == 2) { pictureBox4.Enabled = false; } break;
                    }
                case 5:
                    {
                        if (pict5 == 0) { pict5++; pictureBox5.BackgroundImage = pctr; }
                        else if (pict5 == 2) { pictureBox5.Enabled = false; } break;
                    }
                case 6:
                    {
                        if (pict6 == 0) { pict6++; pictureBox6.BackgroundImage = pctr; }
                        else if (pict6 == 2) { pictureBox6.Enabled = false; } break;
                    }
                case 7:
                    {
                        if (pict7 == 0) { pict7++; pictureBox7.BackgroundImage = pctr; }
                        else if (pict7 == 2) { pictureBox7.Enabled = false; } break;
                    }
                case 8:
                    {
                        if (pict8 == 0) { pict1++; pictureBox8.BackgroundImage = pctr; }
                        else if (pict8 == 2) { pictureBox8.Enabled = false; } break;
                    }
                case 9:
                    {
                        if (pict9 == 0) { pict9++; pictureBox9.BackgroundImage = pctr; }
                        else if (pict9 == 2) { pictureBox9.Enabled = false; } break;
                    }
                default: break;
            }
            result(); score();
            if (easyToolStripMenuItem.Checked == true || normalToolStripMenuItem.Checked
            == true)
            {
                pctr = pictureX;
                if (checkX == false && checkO == false) wasclickedbefore(pic);
            }
         
        }

15. Ketika user memilih new game pada menu strip, begini programnya:
   private void newGameToolStripMenuItem_Click(object sender, EventArgs e)
        {
            reset(); label1.Text = label2.Text = "0";
        }

16. Exit Mode
// exit mode
        private void exit()
        {
            DialogResult result = MessageBox.Show("Yakin Mau Keluar???", "Peringatan!", MessageBoxButtons.YesNo);
            if (result == DialogResult.Yes) this.Close();
        }
        private void Exit_Click(object sender, EventArgs e)
        {
            exit();
        }
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            exit();
        }

17. Fungsi ketika user memilih level normal :
    private void normalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            easyToolStripMenuItem.Checked = false; normalToolStripMenuItem.Checked = true;
            reset(); label1.Text = label2.Text = "0";
            MessageBox.Show(" \rMode Selected Player (VS) CPU \r\n\tNormal Level ","Created by: Laras Hanisaputri");
        }

18. Fungsi ketika user memilih level easy :
private void easyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            normalToolStripMenuItem.Checked = false; easyToolStripMenuItem.Checked =true;
            reset();
            label1.Text = label2.Text = "0";
            MessageBox.Show(" \rMode Selected Player (VS) CPU \r\n\tEasy Level ","Created by: Laras Hanisaputri");
        }

19. Fungsi Ketika user memilih mode multi player:
private void multiPlayerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            normalToolStripMenuItem.Checked = false; easyToolStripMenuItem.Checked = false;
            reset(); label1.Text = label2.Text = "0";
            MessageBox.Show(" \rMode Selected MultiPlayer ", "Created by: Laras Hanisaputri");
        }

20. Menu strip help > about:
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
                MessageBox.Show("Created by: Laras Hanisaputri \n\n Powered by : larashanisaa.blogspot.com", "Warning");
        }

21. Button reset dan play again
private void button1_Click(object sender, EventArgs e)
        {
            reset();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            reset();
        }

22. Jika tidak ada error, jalankan programnya seperti ini:




jika masih ada yang belum mengerti dapat mengunjungu youtube laras :

Wassalamualaikum Wr. Wb