Code bài toán check in hành khách ở sân bay giao diễn mới

Thứ hai , 15/05/2017, 08:13 GMT+7
     

Bài trước chúng ta cũng đã đi qua việc code game check in hành khách ở sân bay, bài này chúng ta tiếp tục đi về game này theo cách viết khác

Bài trước: Game check in hành khách ở sân bay 

Giao diễn chương trình check in hành khách ở sân bay như sau

Bài toán này chúng ta sẽ khai báo các hàm như sau:

Đầu tiên ta khai báo các tham số và biến sau:

        Bitmap m_Background, m_Bitmap;
        Random r;
        nguoi nguoiloai, nguoitam, nguoicong1, nguoicong1ra, nguoicong2, nguoicong2ra, nguoicong3, nguoicong3ra;
        Queue cong1 = new Queue();
        Queue cong2 = new Queue();
        Queue cong3 = new Queue();
        bool kt1 = true; bool kt2 = true; bool kt3 = true, co = true, co1 = false;
        bool kt1ra = true; bool kt2ra = true; bool kt3ra = true;
        int congnao;
        int dem1 = 0; int dem2 = 0; int dem3 = 0;
        bool cobandau3 = false, cobandau1 = false, cobandau2 = false;
        int tg = 0;
private void nen()//load ảnh nền
        {
            Bitmap nen = Properties.Resources.Nen;
 
            m_Background = new Bitmap(nen);//Load bitmap background
 
            m_Bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);//Khởi tạo bàn vẽ
 
        }
        private void draw(nguoi nguoicanve)//vẽ người đang đứng
        {
            pictureBox1.Image = m_Bitmap;//Xóa bàn vẽ
            using (Graphics g = Graphics.FromImage(pictureBox1.Image))
            {
 
                g.DrawImage(nguoicanve.thuoctinh, new Rectangle(nguoicanve.toado.X, nguoicanve.toado.Y, 40, 60), new Rectangle(nguoicanve.cot * 40, nguoicanve.dong * 60, 40, 60), GraphicsUnit.Pixel);
            }
        }
        private void Ve(nguoi nguoicanve)//vẽ người đang đi
        {
            pictureBox1.Image = m_Bitmap;//Xóa bàn vẽ
            using (Graphics g = Graphics.FromImage(pictureBox1.Image))
            {
                g.DrawImage(nguoicanve.thuoctinh, new Rectangle(nguoicanve.toado.X, nguoicanve.toado.Y, 40, 60), new Rectangle(nguoicanve.cot * 40, nguoicanve.dong * 60, 40, 60), GraphicsUnit.Pixel);
            }
        }
        private void VeLaiAnh()//load lại các ảnh mỗi lần tick của Timer
        {
            using (Graphics g = Graphics.FromImage(pictureBox1.Image))
            {
                g.DrawImage(m_Background, 0, 0, pictureBox1.Width, pictureBox1.Height);//Vẽ nền
               foreach (nguoi a in cong1)
                { draw(a); }
                foreach (nguoi a in cong2)
                { draw(a); }
                foreach (nguoi a in cong3)
                { draw(a); }
                draw(nguoitam);
                if (nguoicong1ra != null)
                    draw(nguoicong1ra);
                if (nguoicong2ra != null)
                    draw(nguoicong2ra);
                if (nguoicong3ra != null)
                    draw(nguoicong3ra);
            }
        }
        private nguoi nguoingaunhien()//khởi tạo người ngẫu nhiên
        {
            //  int r = new Random((int)DateTime.Now.Ticks).Next(1, 9);
 
            switch (r.Next(1, 7))
            {
                case 2: nguoiloai = new nguoi(new Point(850, 300), Properties.Resources.s4, 100);
                    congnao = 1;
                    return nguoiloai;
                case 1: nguoiloai = new nguoi(new Point(850,300), Properties.Resources.s71, 150);
                    congnao = 1;
                    return nguoiloai;
                case 3: nguoiloai = new nguoi(new Point(850,300), Properties.Resources.s8, 150);
                    congnao = 2;
                    return nguoiloai;
                case 5: nguoiloai = new nguoi(new Point(850,300), Properties.Resources.s8, 150);
                    congnao = 2;
                    return nguoiloai;
                case 6: nguoiloai = new nguoi(new Point(850, 300), Properties.Resources.s8, 150);
                    congnao = 2;
                    return nguoiloai;
                case 4: nguoiloai = new nguoi(new Point(850,300), Properties.Resources.s11, 100);
                    congnao = 1;
                    return nguoiloai;
                
                default: return null;
            }
        }
 
        private void vaosanbay()//xử lí cho người mới tạo vào 1 trong 3 cổng phù hợp
        {
 
            if (co && tg <= 0)
            {
                nguoitam = nguoingaunhien();
                nguoitam.dong = 1;
                co = false;
            }
            if (nguoitam != null)
            {
                nguoitam.divao(800);
                Ve(nguoitam);
                if (nguoitam.toado.X < 805)
                    co1 = true;
            }
            if (co1)
            {
                if (kt1 == true && congnao == 1 && dem1 < 3)
                {
                    nguoicong1 = null;
                    nguoicong1 = nguoitam;
                    cong1.Enqueue(nguoicong1); dem1++;
                    kt1 = false;
                    co = true; tg = 20;
                    congnao = 0; co1 = false;
                }
                if (dem2 <= dem3)
                {
                    if (kt2 == true && congnao == 2 && dem2 < 3)
                    {
                        nguoicong2 = null;
                        nguoicong2 = nguoitam;
 
                        cong2.Enqueue(nguoicong2); dem2++;
                        kt2 = false;
                        co = true; tg = 20; congnao = 0; co1 = false;
                    }
                }
                else
                {
                    if (kt3 == true && congnao == 2 && dem3 < 3)
                    {
                        nguoicong3 = null;
                        nguoicong3 = nguoitam;
                        cong3.Enqueue(nguoicong3);
                        dem3++;
                        kt3 = false;
                        co = true; tg = 20; congnao = 0; co1 = false;
                    }
                }
            }
        }
        private void xulicong1()//xử lí cho dòng người ở cổng 1
        {
            saphangnguoidoi1();
            int vitri = cong1.Count - 1;
            if (nguoicong1 != null)
            {
                draw(nguoicong1);
                if (nguoicong1.toado.X > 155)
                {
                    nguoicong1.divao(155);
                    Ve((nguoicong1));
                }
                else
                {
                    nguoicong1.dong = 3;
                    if (nguoicong1.toado.Y > 165 + 60 * vitri)
                    {
                        nguoicong1.vaocong(165 + 60 * vitri);
                        Ve(nguoicong1);
                    }
                    else { kt1 = true; cobandau1 = true; }
                }
            }
            if (cobandau1)
            {
                if (kt1ra && cong1.Count > 0)
                {
                    nguoicong1ra = null;
                    nguoicong1ra = cong1.Dequeue();
                    kt1ra = false; dem1--;
                }
                if (nguoicong1ra != null)
                {
                    if (nguoicong1ra.toado.X < 300)
                    {
                        if (nguoicong1ra.toado.Y >= 70)
                        {
                            nguoicong1ra.vaocong(70);
                            Ve(nguoicong1ra);
                        }
                        if (nguoicong1ra.toado.Y < 80)
                        {
                            label1.Text = nguoicong1ra.t.ToString();
                            if (nguoicong1ra.thoigian())
                            {
                            
                                nguoicong1ra.vaocong(-50);
                                Ve(nguoicong1ra);
                                if (nguoicong1ra.toado.Y < -10)
                                {
                                    kt1ra = true;
                                }
                            }
                        }
                    }
                }
            }
 
        }
        private void xulicong2()
        {
            saphangnguoidoi2();
            int vitri = cong2.Count - 1;
            if (nguoicong2 != null)
            {
                if (nguoicong2.toado.X > 400)
                {
                    nguoicong2.divao(400);
                    Ve((nguoicong2));
                }
                else
                {
                    nguoicong2.dong = 3;
                    if (nguoicong2.toado.Y > 165 + 60 * vitri)
                    {
                        nguoicong2.vaocong(165 + 60 * vitri);
                        Ve(nguoicong2);
                    }
                    else { kt2 = true; cobandau2 = true; }
                }
            }
            if (cobandau2)
            {
                if (kt2ra && cong2.Count > 0)
                {
                    nguoicong2ra = null;
                    nguoicong2ra = cong2.Dequeue();
                    kt2ra = false;
                    dem2--;
                }
                if (nguoicong2ra != null)
                {
                    if (nguoicong2ra.toado.X < 450)
                    {
                        if (nguoicong2ra.toado.Y >= 70)
                        {
                            nguoicong2ra.vaocong(70);
                            Ve(nguoicong2ra);
                        }
                        if (nguoicong2ra.toado.Y < 80)
                        {
                            label2.Text = nguoicong2ra.t.ToString();
                            if (nguoicong2ra.thoigian())
                            {
                                
                                nguoicong2ra.vaocong(-50);
                                Ve(nguoicong2ra);
                                if (nguoicong2ra.toado.Y < -10)
                                {
                                    kt2ra = true; 
                                   
                                }
                            }
                        }
                    }
                }
 
            }
        }
        private void xulicong3()
        {
            saphangnguoidoi3();
            int vitri = cong3.Count - 1;
            if (nguoicong3 != null)
            {
                if (nguoicong3.toado.X > 670)
                {
                    nguoicong3.divao(670);
                    Ve((nguoicong3));
                }
                else
                {
                    nguoicong3.dong = 3;
                    if (nguoicong3.toado.Y > 165 + 60 * vitri)
                    {
                        nguoicong3.vaocong(165 + 60 * vitri);
                        Ve(nguoicong3);
                    }
                    else { kt3 = true; cobandau3 = true; }
                }
            }
            if (cobandau3)
            {
                if (kt3ra && cong3.Count > 0)
                {
                    nguoicong3ra = null;
                    nguoicong3ra = cong3.Dequeue();
                    kt3ra = false; dem3--;
                }
                if (nguoicong3ra != null)
                {
                    if (nguoicong3ra.toado.X < 700)
                    {
                        if (nguoicong3ra.toado.Y >= 70)
                        {
                            nguoicong3ra.vaocong(70);
                            Ve(nguoicong3ra);
                        }
                        if (nguoicong3ra.toado.Y < 80)
                        {
                            label3.Text = nguoicong3ra.t.ToString();
                            if (nguoicong3ra.thoigian())
                            {
                             
                                nguoicong3ra.vaocong(-50);
                                Ve(nguoicong3ra);
                                if (nguoicong3ra.toado.Y < -10)
                                {
                                    kt3ra = true; 
                                   
                                }
                            }
                        }
                    }
                }
 
            }
        }
        private void saphangnguoidoi1()//sắp xếp dòng người chờ ở cổng 1
        {
            nguoi nguoicong11;
            if (cong1.Count >= 1)
            {
                nguoi[] array = new nguoi[cong1.Count];
                cong1.CopyTo(array, 0);
                for (int i = 0; i < array.Length - 1; i++)
                {
                    nguoicong11 = array[i];
                    nguoicong11.vaocong(165 + 60 * i);
                }
            }
        }
        private void saphangnguoidoi2()
        {
            nguoi nguoicong22;
            if (cong2.Count >= 1)
            {
                nguoi[] array = new nguoi[cong2.Count];
                cong2.CopyTo(array, 0);
                for (int i = 0; i < array.Length - 1; i++)
                {
                    nguoicong22 = array[i];
                    nguoicong22.vaocong(165 + 60 * i);
                }
            }
        }
        private void saphangnguoidoi3()
        {
             nguoi nguoicong33;
            if (cong3.Count >= 1)
            {
                nguoi[] array = new nguoi[cong3.Count];
                cong3.CopyTo(array, 0);
                for (int i = 0; i < array.Length - 1; i++)
                {
                    nguoicong33 = array[i];
                    nguoicong33.vaocong(165 + 60 * i);
                }
            }
        }

Download code chương trình: Click here

Chương Bài tập 3 môn cơ sợ lập trình: Code game điều khiển xe qua cầu hẹp

check in hành khách môn cơ so lap trinh bai tap mon cslt code đồ án C# uit congnghegi