public void KhoiTao(string t,int p) { Ten = t; Phe = p; for (int i = 0; i < 11; i++) { QuanAnDuoc[i] = new QUANCO(); } if (p == 0) //quân đỏ { QuanAnDuoc[0].KhoiTao(0, 0, 0, 0); QuanAnDuoc[1].KhoiTao(0, 1, 1, 0); QuanAnDuoc[2].KhoiTao(0, 2, 2, 0); QuanAnDuoc[3].KhoiTao(0, 3, 3, 0); QuanAnDuoc[4].KhoiTao(1, 0, 4, 0); QuanAnDuoc[5].KhoiTao(1, 2, 5, 0); QuanAnDuoc[6].KhoiTao(1, 3, 6, 0); QuanAnDuoc[7].KhoiTao(1, 4, 7, 0); QuanAnDuoc[8].KhoiTao(2, 0, 8, 0); QuanAnDuoc[9].KhoiTao(2, 1, 9, 0); } else //quân xanh { QuanAnDuoc[0].KhoiTao(0, 0, 0, 1); QuanAnDuoc[1].KhoiTao(0, 1, 1, 1); QuanAnDuoc[2].KhoiTao(0, 2, 2, 1); QuanAnDuoc[3].KhoiTao(0, 3, 3, 1); QuanAnDuoc[4].KhoiTao(1, 0, 4, 1); QuanAnDuoc[5].KhoiTao(1, 2, 5, 1); QuanAnDuoc[6].KhoiTao(1, 3, 6, 1); QuanAnDuoc[7].KhoiTao(1, 4, 7, 1); QuanAnDuoc[8].KhoiTao(2, 0, 8, 1); QuanAnDuoc[9].KhoiTao(2, 1, 9, 1); } }
private void BatQuanCo(QUANCO _quanco, QUANCO _quancobian) { TinhDiem(_quancobian); //di chuyển quân cờ vào vị trí quân cờ bắt được int _hang1 = _quanco.Hang; int _cot1 = _quanco.Cot; int _hang2 = _quancobian.Hang; int _cot2 = _quancobian.Cot; BanCoPhu[_hang2, _cot2] = 0; BanCo[_hang1, _cot1].Move(BanCo[_hang2, _cot2]); //chuyển quân cờ vị trí cũ thành quân cờ trắng(ô trống) BanCo[_hang1, _cot1].Phe = 3; BanCo[_hang1, _cot1].GiaTri = -1; BanCo[_hang1, _cot1].picQuanCo.Image = CoToan.Properties.Resources.CanMove; BanCo[_hang1, _cot1].picQuanCo.Visible = false; //cập nhật lại BanCoPhu }
public void Move(QUANCO _quancoMoi) { QUANCO _temp = new QUANCO(); _temp.GiaTri = _quancoMoi.GiaTri; _temp.Phe = _quancoMoi.Phe; _temp.picQuanCo.Image = _quancoMoi.picQuanCo.Image; //_temp.Hang = _quancoMoi.Hang; //_temp.Cot = _quancoMoi.Cot; _quancoMoi.GiaTri = this.GiaTri; _quancoMoi.Phe = this.Phe; _quancoMoi.isSelect = false; _quancoMoi.picQuanCo.Image = this.picQuanCo.Image; //_quancoMoi.Hang = this.Hang; //_quancoMoi.Cot = this.Cot; //_quancoMoi.Select(); this.GiaTri = _temp.GiaTri; this.Phe = _temp.Phe; this.isSelect = false; this.picQuanCo.Image = _temp.picQuanCo.Image; //this.Hang = _temp.Hang; //this.Cot = _temp.Cot; //this.Select(); }
private List<QUANCO> TinhToan(QUANCO _quancochinh, QUANCO _quancophu, int _valueH, int _valueC) { List<QUANCO> kq = new List<QUANCO>(); int phe = _quancochinh.Phe; int phedoiphuong = 0; if (phe == 0) phedoiphuong = 1; int _hangc = _quancochinh.Hang; int _cotc = _quancochinh.Cot; int _hangp = _quancophu.Hang; int _cotp = _quancophu.Cot; int _gt1 = _quancochinh.GiaTri; int _gt2 = _quancophu.GiaTri; int cong = 0, tru = 0, nhan = 0, chia = 0; //tính toán theo hướng quân cờ chính --> quân cờ phụ //kết quả sẽ tính từ quân cờ phụ cong = (_gt1 + _gt2) % 10; if (_gt1 - _gt2 >= 0) { tru = (_gt1 - _gt2) % 10; } else { tru = (0 - (_gt1 - _gt2)) % 10; } nhan = (_gt1 * _gt2) % 10; //phép chia //nếu chia hết if (_gt2 != 0) { if (_gt1 % _gt2 == 0) { chia = (_gt1 / _gt2); } //nếu chia dư thì lấy phần dư else { chia = _gt1 % _gt2; } } else chia = 0; int max = TimMax(cong, tru, nhan, chia); if (max != 0) { int _h = _hangp + _valueH; int _c = _cotp + _valueC; for (int i = 1; i <= max; i++) { _h += _valueH; _c += _valueC; if (_c >= 0 && _c < 9 && _h >= 0 && _h < 11) { int _phetemp = BanCo[_h, _c].Phe; if (_phetemp == phedoiphuong) { if (i == cong || i == tru || i == nhan || i == chia) { kq.Add(BanCo[_h, _c]); break; } else break; } else if (_phetemp == phe) break; } else break; } } //đổi vị trí 2 quân cờ trong phép tính //kết quả tính từ quân cờ chính cong = (_gt2 + _gt1) % 10; if (_gt2 - _gt1 >= 0) { tru = (_gt2 - _gt1) % 10; } else { tru = (0 - (_gt2 - _gt1)) % 10; } nhan = (_gt2 * _gt1) % 10; //phép chia //nếu chia hết if (_gt1 != 0) { if (_gt2 % _gt1 == 0) { chia = (_gt2 / _gt1); } //nếu chia dư thì lấy phần dư else { chia = _gt2 % _gt1; } } else chia = 0; max = TimMax(cong, tru, nhan, chia); if (max != 0) { int _h = _hangc + _valueH; int _c = _cotc + _valueC; for (int i = 1; i <= max; i++) { _h += _valueH; _c += _valueC; if (_c >= 0 && _c < 9 && _h >= 0 && _h < 11) { int _phetemp = BanCo[_h, _c].Phe; if (_phetemp == phedoiphuong) { if (i == cong || i == tru || i == nhan || i == chia) { kq.Add(BanCo[_h, _c]); break; } else break; } else if (_phetemp == phe) break; } else break; } } return kq; }
//tính điểm cho bên ăn được quân đối phương private void TinhDiem(QUANCO _quanbian) { QUANCO q = new QUANCO(); q = _quanbian; //ăn được quân 0 xử thắng tuyệt đối if (q.GiaTri == 0) { } else { int _diem = 0; //Quân đỏ _diem = NguoiChoi[pheDangDanh].Diem + q.GiaTri; NguoiChoi[pheDangDanh].Diem = _diem; NguoiChoi[pheDangDanh].QuanAnDuoc[q.GiaTri].picQuanCo.Visible = true; if (pheDangDanh == 0) { lDiemDo.Text = "" + _diem; } else { lDiemXanh.Text = "" + _diem; } } }
private void picQuanAn_MouseClick(object sender, MouseEventArgs e) { PictureBox pic = (PictureBox)sender; Control pic2 = pic.Parent; int h = pic2.Location.Y / 50; int c = pic2.Location.X / 50; QUANCO _quanco = new QUANCO(); _quanco = BanCo[h, c]; quanCoDangChon.ViewChange(); ResetQuanAn(); BatQuanCo(quanCoDangChon, _quanco); Duyet8Huong(quanCoDangChon, false); quanCoDangChon = new QUANCO(); quanCoDangChon.GiaTri = -1; if (pheDangDanh == 0) { //pheDangDanh = 1; FormLuaChonCheDoChoi.mSocket.Emit("PheDuocDanh", "NguoiChoiThu2|" + this.hang_QuanCoCu + "|" + this.hang_QuanCoMoi + "|" + this.cot_QuanCoCu + "|" + this.cot_QuanCoMoi); } else { pheDangDanh = 0; FormLuaChonCheDoChoi.mSocket.Emit("PheDuocDanh", "NguoiChoiThu1| " + this.hang_QuanCoCu + "|" + this.hang_QuanCoMoi + "|" + this.cot_QuanCoCu + "|" + this.cot_QuanCoMoi); } HienThiLuot(); }
//click vào 1 picturebox trên bàn cờ (picturebox hiện) private void pic_MouseClick(object sender, MouseEventArgs e) { PictureBox pic = (PictureBox)sender; int _x = pic.Location.X / 50; int _y = pic.Location.Y / 50; //_y : hang //_x : cot QUANCO _quanco = new QUANCO(); _quanco = BanCo[_y, _x]; int _phe = _quanco.Phe; //quanCoDangChon.GiaTri==-1 <==> chưa có quân cờ nào được chọn if (quanCoDangChon.GiaTri == -1) { //nếu chọn 1 quân cờ cùng phe với phe của lượt hiện tại và chưa có quân cờ nào được chọn trên bàn cờ if (_phe == pheDangDanh) { BanCo[_y, _x].ViewChange(); quanCoDangChon = _quanco; Duyet8Huong(_quanco, true); DuyetQuanAn(quanCoDangChon); } } //nếu người chơi đã chọn 1 quân cờ else { //_phe==3 <==> quân này có thể di chuyển quân cờ đang chọn vào if (_phe == 3) { quanCoDangChon.ViewChange(); Duyet8Huong(quanCoDangChon, false); //DuyetQuanAn(quanCoDangChon); ChangeQuanCo(quanCoDangChon, _quanco); if (pheDangDanh == 0) pheDangDanh = 1; else pheDangDanh = 0; HienThiLuot(); } //khi chọn 1 quân cờ khác cùng phe else if (_phe == pheDangDanh) { //cùng giá trị (click lần 2 vào quân đang chọn) if (quanCoDangChon.GiaTri == _quanco.GiaTri) { BanCo[_y, _x].ViewChange(); Duyet8Huong(quanCoDangChon, false); ResetQuanAn(); //DuyetQuanAn(quanCoDangChon); quanCoDangChon = new QUANCO(); quanCoDangChon.GiaTri = -1; } else { quanCoDangChon.ViewChange(); Duyet8Huong(quanCoDangChon, false); ResetQuanAn(); quanCoDangChon = _quanco; BanCo[_y, _x].ViewChange(); Duyet8Huong(_quanco, true); DuyetQuanAn(quanCoDangChon); } } //khi chọn ô trống hoặc quân cờ khác phe else { if (BanCoPhu[_y, _x] != 1) { quanCoDangChon.ViewChange(); Duyet8Huong(quanCoDangChon, false); ResetQuanAn(); quanCoDangChon = new QUANCO(); quanCoDangChon.GiaTri = -1; } //chọn vào quân cờ có thể bắt được else { quanCoDangChon.ViewChange(); ResetQuanAn(); BatQuanCo(quanCoDangChon, _quanco); Duyet8Huong(quanCoDangChon, false); quanCoDangChon = new QUANCO(); quanCoDangChon.GiaTri = -1; if (pheDangDanh == 0) pheDangDanh = 1; else pheDangDanh = 0; HienThiLuot(); } } } }
private void DuyetQuanAn(QUANCO _quanco) { //duyệt qua 8 ô xung quanh _quanco và tính toán List<QUANCO> ds_quanan = new List<QUANCO>(); int _phe = _quanco.Phe; int _hang = _quanco.Hang; int _cot = _quanco.Cot; if (_hang + 1 < 11) { if (BanCo[_hang + 1, _cot].Phe == _phe) ds_quanan.InsertRange(ds_quanan.Count, TinhToan(_quanco, BanCo[_hang + 1, _cot], 1, 0)); } if (_hang - 1 >= 0) { if (BanCo[_hang - 1, _cot].Phe == _phe) ds_quanan.InsertRange(ds_quanan.Count, TinhToan(_quanco, BanCo[_hang - 1, _cot], -1, 0)); } if (_cot - 1 >= 0) { if (BanCo[_hang, _cot - 1].Phe == _phe) ds_quanan.InsertRange(ds_quanan.Count, TinhToan(_quanco, BanCo[_hang, _cot - 1], 0, -1)); } if (_cot + 1 < 9) { if (BanCo[_hang, _cot + 1].Phe == _phe) ds_quanan.InsertRange(ds_quanan.Count, TinhToan(_quanco, BanCo[_hang, _cot + 1], 0, 1)); } if (_cot - 1 >= 0 && _hang - 1 >= 0) { if (BanCo[_hang - 1, _cot - 1].Phe == _phe) ds_quanan.InsertRange(ds_quanan.Count, TinhToan(_quanco, BanCo[_hang - 1, _cot - 1], -1, -1)); } if (_cot + 1 < 9 && _hang + 1 < 11) { if (BanCo[_hang + 1, _cot + 1].Phe == _phe) ds_quanan.InsertRange(ds_quanan.Count, TinhToan(_quanco, BanCo[_hang + 1, _cot + 1], 1, 1)); } if (_cot - 1 >= 0 && _hang + 1 < 11) { if (BanCo[_hang + 1, _cot - 1].Phe == _phe) ds_quanan.InsertRange(ds_quanan.Count, TinhToan(_quanco, BanCo[_hang + 1, _cot - 1], 1, -1)); } if (_cot + 1 < 9 && _hang - 1 >= 0) { if (BanCo[_hang - 1, _cot + 1].Phe == _phe) ds_quanan.InsertRange(ds_quanan.Count, TinhToan(_quanco, BanCo[_hang - 1, _cot + 1], -1, 1)); } if (ds_quanan.Count > 0) { //duyệt từng phần tử để thay đổi trên giao diện và lấy danh sách tọa độ foreach (QUANCO q in ds_quanan) { int h = q.picQuanCo.Location.Y; int c = q.picQuanCo.Location.X; //add picturebox ngay tại vị trí quân có thể ăn này PictureBox pic = new PictureBox(); pic.Image = CoToan.Properties.Resources.CanEat; pic.Width = 30; pic.Height = 30; pic.Location = new Point(10, 10); //pic.BackColor = Color.Transparent; pic.SizeMode = PictureBoxSizeMode.Zoom; pic.MouseClick += new MouseEventHandler(picQuanAn_MouseClick); //pic.MouseClick += new MouseEventHandler(pic_MouseClick); q.picQuanCo.Controls.Add(pic); //q.picQuanCo.Visible = true; BanCoPhu[q.Hang, q.Cot] = 1; //pBanCo.Controls.Add(pic); ds_picQuanAn.Add(pic); } } }
private void NewGame() { lTenDo.Text = FormLuaChonCheDoChoi.ten_NguoiChoi1; lTenXanh.Text = FormLuaChonCheDoChoi.ten_NguoiChoi2; for (int cot = 0; cot < 9; cot++) { for (int hang = 0; hang < 11; hang++) { QUANCO quanco = new QUANCO(); quanco.Hang = hang; quanco.Cot = cot; if (hang == 10) { quanco.Phe = 0; quanco.GiaTri = cot + 1; } else if (hang == 0) { quanco.Phe = 1; int _giatri = 0; switch (cot) { case 0: _giatri = 9; break; case 1: _giatri = 8; break; case 2: _giatri = 7; break; case 3: _giatri = 6; break; case 4: _giatri = 5; break; case 5: _giatri = 4; break; case 6: _giatri = 3; break; case 7: _giatri = 2; break; default: _giatri = 1; break; } quanco.GiaTri = _giatri; } else if (hang == 9 && cot == 4) { quanco.Phe = 0; quanco.GiaTri = 0; } else if (hang == 1 && cot == 4) { quanco.Phe = 1; quanco.GiaTri = 0; } else { quanco.Phe = 3; quanco.GiaTri = -1; } BanCo[hang, cot] = quanco; BanCo[hang, cot].Draw(); BanCo[hang, cot].picQuanCo.MouseClick += new MouseEventHandler(pic_MouseClick); pBanCo.Controls.Add(BanCo[hang, cot].picQuanCo); } NguoiChoi[0] = new NGUOICHOI(); NguoiChoi[0].KhoiTao(lTenDo.ToString(), 1); NguoiChoi[0].Draw(pQuanAnDuocDo); } HienThiLuot(); time = 0; timer = new Timer(); timer.Interval = 1000; timer.Start(); timer.Tick += new EventHandler(timer_Tick); }
//duyệt theo 8 hướng của 1 quân cờ và dựa trên biến visible để ẩn/hiện picturebox tương ứng private void Duyet8Huong(QUANCO _quanco, bool visible) { int so_quanco = _quanco.GiaTri; if (!visible) { foreach (PictureBox pic in ds_pic) { pic.Visible = false; } ds_pic.Clear(); so_quanco = 0; } if (so_quanco > 0) { int hang = _quanco.Hang; int cot = _quanco.Cot; int i = 1; //ngang phải for (i = 1; i <= so_quanco; i++) { if (cot + i < 9) { if (BanCo[hang, cot + i].Phe == 3) { ds_pic.Add(BanCo[hang, cot + i].picQuanCo); //BanCo[hang, c].picQuanCo.Visible = visible; } else break; } else break; } //ngang trái for (i = 1; i <= so_quanco; i++) { if (cot - i >= 0) { if (BanCo[hang, cot - i].Phe == 3) { ds_pic.Add(BanCo[hang, cot - i].picQuanCo); //BanCo[hang, c].picQuanCo.Visible = visible; } else break; } else break; } //dọc trên for (i = 1; i <= so_quanco; i++) { if (hang - i >= 0) { if (BanCo[hang - i, cot].Phe == 3) { ds_pic.Add(BanCo[hang - i, cot].picQuanCo); //BanCo[h, cot].picQuanCo.Visible = visible; } else break; } else break; } //dọc dưới for (i = 1; i <= so_quanco; i++) { if (hang + i < 11) { if (BanCo[hang + i, cot].Phe == 3) { ds_pic.Add(BanCo[hang + i, cot].picQuanCo); //BanCo[h, cot].picQuanCo.Visible = visible; } else break; } else break; } //chéo dưới phải for (i = 1; i <= so_quanco; i++) { if ((hang + i < 11) && (cot + i < 9)) { if (BanCo[hang + i, cot + i].Phe == 3) { ds_pic.Add(BanCo[hang + i, cot + i].picQuanCo); //BanCo[h, c].picQuanCo.Visible = visible; } else break; } else break; } //chéo dưới trái for (i = 1; i <= so_quanco; i++) { if ((hang + i < 11) && (cot - i >= 0)) { if (BanCo[hang + i, cot - i].Phe == 3) { ds_pic.Add(BanCo[hang + i, cot - i].picQuanCo); //BanCo[h, c].picQuanCo.Visible = visible; } else break; } else break; } //chéo trên phải for (i = 1; i <= so_quanco; i++) { if ((hang - i >= 0) && (cot + i < 9)) { if (BanCo[hang - i, cot + i].Phe == 3) { ds_pic.Add(BanCo[hang - i, cot + i].picQuanCo); //BanCo[h, c].picQuanCo.Visible = visible; } else break; } else break; } //chéo trên trái for (i = 1; i <= so_quanco; i++) { if ((hang - i >= 0) && (cot - i >= 0)) { if (BanCo[hang - i, cot - i].Phe == 3) { ds_pic.Add(BanCo[hang - i, cot - i].picQuanCo); //BanCo[h, c].picQuanCo.Visible = visible; } else break; } else break; } // foreach (PictureBox e in ds_pic) { e.Visible = visible; } } }
//đổi 2 quân cờ private void ChangeQuanCo(QUANCO _quancoCu, QUANCO _quancoMoi) { this.hang_QuanCoCu = _quancoCu.Hang; this.cot_QuanCoCu = _quancoCu.Cot; this.hang_QuanCoMoi = _quancoMoi.Hang; this.cot_QuanCoMoi = _quancoMoi.Cot; BanCo[this.hang_QuanCoCu, this.cot_QuanCoCu].Move(BanCo[this.hang_QuanCoMoi, this.cot_QuanCoMoi]); BanCo[this.hang_QuanCoCu, this.cot_QuanCoCu].picQuanCo.Visible = false; BanCo[this.hang_QuanCoMoi, this.cot_QuanCoMoi].picQuanCo.Visible = true; }
//đổi 2 quân cờ private void ChangeQuanCo(QUANCO _quancoCu, QUANCO _quancoMoi) { int _hang1 = _quancoCu.Hang; int _cot1 = _quancoCu.Cot; int _hang2 = _quancoMoi.Hang; int _cot2 = _quancoMoi.Cot; BanCo[_hang1, _cot1].Move(BanCo[_hang2, _cot2]); BanCo[_hang1, _cot1].picQuanCo.Visible = false; BanCo[_hang2, _cot2].picQuanCo.Visible = true; }
private void picQuanAn_MouseClick(object sender, MouseEventArgs e) { PictureBox pic = (PictureBox)sender; Control pic2 = pic.Parent; int h = pic2.Location.Y / 50; int c = pic2.Location.X / 50; QUANCO _quanco = new QUANCO(); _quanco = BanCo[h, c]; quanCoDangChon.ViewChange(); ResetQuanAn(); BatQuanCo(quanCoDangChon, _quanco); Duyet8Huong(quanCoDangChon, false); quanCoDangChon = new QUANCO(); quanCoDangChon.GiaTri = -1; if (pheDangDanh == 0) pheDangDanh = 1; else pheDangDanh = 0; HienThiLuot(); }
/* */ ///////////////////////////////////////////////////////////////////////// // hang : cot : 0==>8 // 0 // | // v // 10 //Xanh9 | Xanh8 | Xanh7 | Xanh6 | Xanh5 | Xanh4 | Xanh3 | Xanh2 | Xanh1 | // | | | | Xanh0 | | | | | //... // | | | | Do0 | | | | | //Do1 | Do2 | Do3 | Do4 | Do5 | Do6 | Do7 | Do8 | Do9 | ///////////////////////////////////////////////////////////////////////// private void NewGame() { string tenxanh, tendo; if (filename == "") { tenxanh = "xanh"; tendo = "do"; //Lấy tên người chơi lTenDo.Text = tendo;//FormLuaChonCheDoChoi.nguoichoi1; lTenXanh.Text = tenxanh;//FormLuaChonCheDoChoi.nguoichoi2; HienThiLuot(); // for (int cot = 0; cot < 9; cot++) { for (int hang = 0; hang < 11; hang++) { QUANCO quanco = new QUANCO(); quanco.Hang = hang; quanco.Cot = cot; if (hang == 10) { quanco.Phe = 0; quanco.GiaTri = cot + 1; } else if (hang == 0) { quanco.Phe = 1; int _giatri = 0; switch (cot) { case 0: _giatri = 9; break; case 1: _giatri = 8; break; case 2: _giatri = 7; break; case 3: _giatri = 6; break; case 4: _giatri = 5; break; case 5: _giatri = 4; break; case 6: _giatri = 3; break; case 7: _giatri = 2; break; default: _giatri = 1; break; } quanco.GiaTri = _giatri; } else if (hang == 9 && cot == 4) { quanco.Phe = 0; quanco.GiaTri = 0; } else if (hang == 1 && cot == 4) { quanco.Phe = 1; quanco.GiaTri = 0; } else { quanco.Phe = 3; quanco.GiaTri = -1; } BanCo[hang, cot] = quanco; BanCo[hang, cot].Draw(); BanCo[hang, cot].picQuanCo.MouseClick += new MouseEventHandler(pic_MouseClick); pBanCo.Controls.Add(BanCo[hang, cot].picQuanCo); } } NguoiChoi[0] = new NGUOICHOI(); NguoiChoi[0].KhoiTao(tendo, 0); NguoiChoi[0].Draw(pQuanAnDuocDo); NguoiChoi[1] = new NGUOICHOI(); NguoiChoi[1].KhoiTao(tenxanh, 1); NguoiChoi[1].Draw(pQuanAnDuocXanh); } time = 0; timer = new Timer(); timer.Interval = 1000; timer.Start(); timer.Tick +=new EventHandler(timer_Tick); }