public override bool Save(BanCo mBanCo, FileStream fout) { if (!fout.CanWrite) { return(false); } for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { QuanCo hienTai = mBanCo.banCo[i, j]; string content; if (hienTai != null) { content = hienTai.LayMau() + "" + hienTai.LayTen() + "\n"; } else { content = 0 + "" + 0 + "\n"; } fout.Write(Encoding.ASCII.GetBytes(content), 0, content.Length); } } fout.Close(); return(true); }
public override bool Load(FileStream fin, BanCo mBanCo) { var file = new StreamReader(fin); try { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { string content = file.ReadLine(); var coId = content; mBanCo.banCo[i, j] = QuanCoFactory.taoQuanCo(coId[1].ToString(), coId[0].ToString()); } } return(true); } catch (Exception) { return(false); } finally { file.Close(); fin.Close(); } }
private void CoTuongOffline_Load(object sender, EventArgs e) { BanCo.SetToDefault(lblPheDuocDanh, lblSoLuotDi, btnNewGame, btnUndo); BanCo.TaoDiemBanCo(ptbBanCo, DiemBanCo_Click); BanCo.TaoQuanCo(QuanCo_Click, ptbBanCo); BanCo.RefreshBanCo(); }
public bool SaveGame(BanCo mBanco) { // Mở file FileStream fout = new FileStream(path, FileMode.Create, FileAccess.Write); bool result = loadSaveEngine.Save(mBanco, fout); return(result); }
public Form1() { InitializeComponent(); main = new Main(); form2 = new Form2(); grs = BanCo.CreateGraphics(); ArrayEndPos = new List <Point>(); DanhSachVatCan = new List <Point>(); }
private int NumberStop = 0; // số lượng vật thể không thể đến đích private void VatDiChuyen(object ViTriVatThe) // hàm vẽ và xoá vị trí tiếp theo và hiện tại, tạo hiệu ứng chuyển động { Point point = (Point)ViTriVatThe; Graphics gra = BanCo.CreateGraphics(); while (true) { int Row = point.Y / Cao; int Column = point.X / Rong; if (MouseDowning && (SetObject_Clicked || DelOne)) // nếu người dùng đang đặt vật cản thì tạm dừng vật di chuyển... { Thread.Sleep(500); // ...trong nửa giây continue; } else { if (main.ToaDo[Row, Column] == StartPos) { Number++; main.OCo[Row, Column].MauOCo = MauBanCo; // tổng số lượng vật thể đã đến đích và không thể đến đích sẽ bằng số lượng vật thể người dùng đặt if (Number + NumberStop == (form2.Automatic ? form2.Soluong : ArrayEndPos.Count)) { Invoke(new Action(() => LamMoi.Enabled = GreedyFS.Enabled = AStart.Enabled = true)); // gọi hàm dẫn control MessageBox.Show("Có " + Number.ToString() + " vật đã đến đích!!", "Đến đích", MessageBoxButtons.OK, MessageBoxIcon.Information); Number = NumberStop = 0; // reset lại giá trị return; } return; } if (main.OCo[main.OCo[Row, Column].Goc.Y / Cao, main.OCo[Row, Column].Goc.X / Rong].MauOCo != Color.DarkOrange) { if (main.OCo[Row, Column].Goc != new Point(-1, -1)) { // xoá ô hiện tại main.VeOCo(gra, main.ToaDo[Row, Column].X, main.ToaDo[Row, Column].Y, MauBanCo, true); main.OCo[Row, Column].MauOCo = MauBanCo; // vẽ ô tiếp theo dựa vào gốc của ô cờ main.VeOCo(gra, main.OCo[Row, Column].Goc.X, main.OCo[Row, Column].Goc.Y, Color.DarkOrange, true); point = main.OCo[Row, Column].Goc; main.OCo[point.Y / Cao, point.X / Rong].MauOCo = Color.DarkOrange; Thread.Sleep(100); } else // trường hợp vật không tìm thấy đường đi đến đích thì thoát ra... { NumberStop++; // ... và tăng biến NumberStop lến 1 đơn vị return; } } else if (main.OCo[main.OCo[Row, Column].Goc.Y / Cao, main.OCo[Row, Column].Goc.X / Rong].MauOCo == Color.DarkOrange) { Thread.Sleep(200); } } } }
ConsoleView boardView; // View console thể hiện giao diện //Hàm thực hiện di chuyển quân cờ public ChessController() { QuanCoFactory.khoiTaoCacLoaiQuanCo(); luot = 'W'; isChieuTuong = false; mBanCo = BanCo.getBanCo(); boardView = new ConsoleView(mBanCo); saveLoad = new SaveLoad("save.txt"); }
private void ptbBanCo_Click(object sender, EventArgs e) { if (BanCo.QuanCoDuocChon != null) { BanCo.Dehighlight(); BanCo.AnDiemDich(); BanCo.RefreshBanCo(); //*Offline* BanCo.QuanCoDuocChon = null; } }
/* Khi click vào 1 RoundPictureBox quân cờ thì nó sẽ được chọn... */ private void QuanCo_Click(object sender, EventArgs e) { BanCo.QuanCoDuocChon = sender as ProgramConfig.RoundPictureBox; BanCo.Highlight(ptbBanCo); BanCo.HienThiDiemDich(); foreach (ProgramConfig.RoundPictureBox element in BanCo.Alive_RoundPictureBox) // Khi 1 quân cờ được chọn thì không thể click chọn 1 quân cờ khác ngay lập tức mà phải bỏ chọn nó trước { element.Enabled = false; } }
public bool LoadGame(BanCo mBanco) { try { FileStream fin = new FileStream(path, FileMode.Open, FileAccess.Read); bool result = loadSaveEngine.Load(fin, mBanco); return(result); } catch (Exception) { return(false); } }
private void LamMoi_Click(object sender, EventArgs e) { form2 = new Form2(); StartandEnd = 0; StartPoint.Enabled = EndPoint.Enabled = Moving.Enabled = true; StartPos = new Point(0, 0); ArrayEndPos.Clear(); ObjectMoving = DeleteAll.Enabled = MovePosObject = false; StartandEnd = 0; main.KhoiTaoToaDo(MauBanCo); BanCo.Refresh(); }
private void DeleteAll_Click(object sender, EventArgs e) { StartandEnd = 2; main = new Main(); main.KhoiTaoToaDo(MauBanCo); BanCo.Refresh(); // vẽ lại vị trí của các điểm main.VeOCo(grs, main.ToaDo[StartPos.Y / Cao, StartPos.X / Rong].X, main.ToaDo[StartPos.Y / Cao, StartPos.X / Rong].Y, Color.Red, true); main.OCo[StartPos.Y / Cao, StartPos.X / Rong].MauOCo = Color.Red; main.VeOCo(grs, main.ToaDo[ArrayEndPos[0].Y / Cao, ArrayEndPos[0].X / Rong].X, main.ToaDo[ArrayEndPos[0].Y / Cao, ArrayEndPos[0].X / Rong].Y, Color.DarkOrange, true); main.OCo[ArrayEndPos[0].Y / Cao, ArrayEndPos[0].X / Rong].MauOCo = Color.DarkOrange; }
private void btnNewGame_Click(object sender, EventArgs e) { DialogResult result = MessageBox.Show("Bạn muốn bỏ ván đấu này và bắt đầu một ván mới?", "Ván mới", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { //Hàm xóa bàn cờ tách thành SetToDefault + XoaBanCo BanCo.SetToDefault(lblPheDuocDanh, lblSoLuotDi, btnNewGame, btnUndo); BanCo.XoaBanCo(ptbBanCo); BanCo.TaoDiemBanCo(ptbBanCo, DiemBanCo_Click); BanCo.TaoQuanCo(QuanCo_Click, ptbBanCo); BanCo.RefreshBanCo(); //*Offline* } }
private void btnUndo_Click(object sender, EventArgs e) { DialogResult result = MessageBox.Show("Bạn muốn hoàn tác nước đi vừa rồi?", "Hoàn tác nước đi", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { btnUndo.Enabled = false; BanCo.Dehighlight(); BanCo.AnDiemDich(); BanCo.HoanTac(ptbBanCo); BanCo.DoiPhe(lblPheDuocDanh, lblSoLuotDi, btnNewGame); BanCo.HienThiNuocDiTruoc(ptbBanCo); } }
/* Những gì xảy ra khi click vào một RoundButton điểm bàn cờ để đi đến */ private void DiemBanCo_Click(object sender, EventArgs e) // BẢN OFFLINE { if (BanCo.QuanCoDuocChon == null) { return; // Dòng code chống lỗi lặp lại event ngoài ý muốn (chưa rõ nguyên nhân của lỗi này). Không được xóa! } BanCo.Dehighlight(); // chọn nước đi... BanCo.AnDiemDich(); // ...thì đồng thời sẽ bỏ chọn quân cờ luôn Point departure = new Point(BanCo.QuanCoDuocChon.Quan_Co.ToaDo.X, BanCo.QuanCoDuocChon.Quan_Co.ToaDo.Y); Point destination = ProgramConfig.ThongSo.ToaDoDonViCuaDiem(((ProgramConfig.RoundButton)sender).Location); // Lấy tọa độ của RoundButton điểm bàn cờ (điểm đích) BanCo.LoaiBoQuanCo(destination, ptbBanCo); // Loại bỏ quân cờ ở điểm đích BanCo.QuanCoDuocChon.DiChuyen(destination); // Di chuyển quân cờ đến điểm đích if (BanCo.HaiTuongDoiMatNhau()) // nước đi không hợp lệ nếu sau nước đi 2 tướng đối mặt nhau => hoàn tác nước đi { MessageBox.Show("Tướng phe bạn sẽ đối mặt với tướng đối phương sau nước đi này. Hãy chọn một nước đi khác.", "Nước đi không hợp lệ"); BanCo.QuanCoDuocChon.DiChuyen(departure); BanCo.QuanCoDuocChon = null; BanCo.TraLaiQuanCo(ptbBanCo, BanCo.QuanCoBiLoai); BanCo.RefreshBanCo(); return; } if (BanCo.CoChieuTuong(BanCo.PheDoiPhuong())) // nước đi không hợp lệ nếu sau nước đi tướng phe di chuyển bị đối phương chiếu => hoàn tác nước đi { MessageBox.Show("Tướng phe bạn sẽ gặp nguy sau nước đi này. Hãy chọn một nước đi khác.", "Nước đi không hợp lệ"); BanCo.QuanCoDuocChon.DiChuyen(departure); BanCo.QuanCoDuocChon = null; BanCo.TraLaiQuanCo(ptbBanCo, BanCo.QuanCoBiLoai); BanCo.RefreshBanCo(); return; } if (BanCo.CoChieuTuong(BanCo.PheDuocDanh)) // nếu sau nước đi phe di chuyển chiếu tướng phe đối phương => thông báo cho người chơi { if (BanCo.PheDoiPhuong() == 1) { MessageBox.Show("Phe Xanh hãy đối phó với nước đi này từ phe Đỏ.", "Chiếu tướng!"); } else { MessageBox.Show("Phe Đỏ hãy đối phó với nước đi này từ phe Xanh.", "Chiếu tướng!"); } } BanCo.HienThiNuocDi(departure, destination, ptbBanCo); BanCo.LuuNuocDi(departure, destination); BanCo.DoiPhe(lblPheDuocDanh, lblSoLuotDi, btnNewGame, btnUndo); //*Offline* }
public abstract bool Load(FileStream fin, BanCo mBanCo);
public abstract bool Save(BanCo mBanCo, FileStream fout);
/// <summary> /// Khởi tạo thể hiện mới cho class BanCoViewModel /// </summary> public BanCoViewModel() { CurrentBanCo = new BanCo(); }
public ConsoleView(BanCo banCo) { mBanCo = banCo; }