Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Lập trình cờ vua trên VC++6. Giúp mình thuật toán hoặc mã tham khảo với?

  1. #1
    Ngày gia nhập
    05 2009
    Bài viết
    1

    Exclamation Lập trình cờ vua trên VC++6. Giúp mình thuật toán hoặc mã tham khảo với?

    Mình Có Bai Toán Về Lap Trinh Opp Cờ Vua Cho 2 Nguoi Chơi Trên Vc6.ban Nào Biết Hoăc Co Soure Chia Se Mình Với.dang Cần Lắm

  2. #2
    Ngày gia nhập
    06 2009
    Bài viết
    10

    //Viết chương trình cờ Vua không phải ngắn, xong về nguyên tắc tạo chung như sau:
    int BanCo[8][8];// Bàn cớ Vua
    //Quan cờ gồm
    // 1) con trên: số dương, Vua trên = 1, Hậu trên = 2, Si trên = 4 ....
    // 2) quân dưới: số âm, Vua dưới = -1, Hậu dưới = -2, Si dưới = -4 ....
    //các hàm kiểm tra nước đi:
    #define NotAnQuanMinh(int QuanTa, int QuanDich) {return QuanTa*QuanDich<=0;}
    #define NotDiThang(int HieuX, int HieuY) {return HieuX*HieuY!=0;}
    #define NotDiThang1(int HieuX, int HieuY) {return abs(HieuX)+abs(HieuY)!=1;}
    #define NotDiXeo(int HieuX, int HieuY) {return abs(HieuX)!=abs(HieuY);}
    #define NotDiXeo1(int HieuX, int HieuY) {return abs(HieuX*HieuY)!=1;}//Đi Sỉ
    #define NotDiMa(int HieuX, int HieuY) {return abs(HieuX*HieuY)!=2;}
    BOOL DiThangKhongBiChan(int XDi, int yDi, int xToi, int yToi){
    int HieuX = xToi-xDi, HieuY = yToi - yDi;
    if (NotDiThang(HieuX, HieuY)) return FALSE;
    if (HieuX!=0){
    int Buoc = (HieuX>0)?1,-1;
    for (int x = Buoc; x= HieuX; x+= Buoc){
    if (x=HieuX) return NotAnQuanMinh(BanCo[xDi][yDi], BanCo[xToi][yToi]);
    if (BanCo[xDi+x][yDi]!=0) return FALSE; //Không xét BanCo[xDi][yDi];
    }//End for
    }//End if
    else{
    int Buoc = (HieuY>0)?1,-1;
    for (int y = Buoc; y= HieuY; y+= Buoc){
    if (y=HieuY) return NotAnQuanMinh(BanCo[xDi][yDi], BanCo[xToi][yToi]);
    if (BanCo[xDi][yDi+y]!=0) return FALSE; //Không xét BanCo[xDi][yDi];
    }//End else
    }
    BOOL DiXeoKhongBiChan(int XDi, int yDi, int xToi, int yToi){//Di Sĩ
    int HieuX = xToi-xDi, HieuY = yToi - yDi;
    if (NotDiXeo(HieuX, HieuY)) return FALSE; //Không xéo;
    int BuocX = (HieuX>0)?1,-1, BuocY = (HieuY>0)?1,-1;
    int x = xBuoc, y = yBuoc;
    for (x = Buoc; x= HieuX; x+= BuocX, y+= BuocY){
    if (x=HieuX) return NotAnQuanMinh(BanCo[xDi][yDi], BanCo[xToi][yToi]);
    if (BanCo[xDi+x][yDi+y]!=0) return FALSE; //Không xét BanCo[xDi][yDi];
    }//End for
    }//End if
    }
    BOOL VuaDiDung(int xDi, int yDi, int xToi, int yToi){
    int HieuX = xToi-xDi, HieuY = xToi-xDi;
    if (NotDiThang1(HieuX, HieuY)) return FALSE;
    return NotAnQuanMinh(BanCo[xDi][yDi], BanCo[xToi][yToi]);
    }
    BOOL HauDiDung(int xDi, int yDi, int XToi, int yToi){
    int HieuX = xToi-xDi, HieuY = xToi-XDi;
    if (NotDiThang(HieuX, HieuY)) return DiThangKhongBiChan(xDi, yDi, xToi, yToi);
    else return DiXeoKhongBiChan(xDi, yDi, xToi, yToi);
    }
    BOOL SiDiDung(int xDi, int yDi, int XToi, int yToi){
    return DiXeoKhongBiChan(xDi, yDi, xToi, yToi));
    }
    BOOL XeDiDung(int xDi, int yDi, int XToi, int yToi){// Còn gọi là con tượng trong cờ Vua
    return DiThangKhongBiChan(xDi, yDi, xToi, yToi));
    }
    BOOL MaDiDung(int xDi, int yDi, int xToi, int yToi){
    int HieuX = xToi-xDi, HieuY = xToi-xDi;
    if (NotDiMa(HieuX, HieuY)) return FALSE;
    return NotAnQuanMinh(BanCo[xDi][yDi], BanCo[xToi][yToi]));
    }
    BOOL ChotDiDung(int xDi, int yDi, int xToi, int yToi){
    int HieuX = xToi-xDi, HieuY = xToi-xDi;
    if (QuanTaAnQuanMinh(BanCo[xDi][yDi], BanCo[xToi][yToi])) return FALSE;
    if (HieuY*BanCo[xDi][yDi]<0) return FALSE; // Đi lui
    if (HieuY==0) return FALSE;// Đi ngang;
    if (BanCo[xToi][yToi]!=0){// Ăn quân
    return (abs(HieuX*HieuY)!=1);// Di xéo 1
    }//End if
    else{//Không ăn quân
    if (abs(HieuY)==2){ //Tiến 2
    if (BanCo[xDi][yDi]>0) return yDi = 1;// Vi trí xuất chốt trên
    return yDi = 8;// Vi trí xuất chốt dưới
    }// End if;
    return abs(HieuY)==1;// Di bình thường
    }//End else
    return TRUE;
    }
    // Ngoài ra còn phải xét nước tướng chuyển vào và xe chuyển ra,
    // Bạn thử tự làm đi
    // Phần GDI dỉ nhiên tùy bạn làm

Các đề tài tương tự

  1. web tutorial dành cho những bạn mới bắt đầu học C/C++ hoặc bất kỳ ai tham khảo
    Gửi bởi chiga9x trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 17-11-2011, 03:12 AM
  2. Bài tập C cách cộng 2 thời gian trong C, anh tham khảo chửa cái code giúp em!
    Gửi bởi tanphuc113 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 29-10-2011, 05:15 PM
  3. cần xin 1 số bài tập quy hoạch động bằng C++ và C# để tham khảo
    Gửi bởi lapmaihokdc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 09-04-2011, 03:30 PM
  4. Tham khảo C++ | Open Source hoặc souce code viết bằng C/C++
    Gửi bởi Kevin Hoang trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 10-12-2007, 09:34 PM
  5. [Tài liệu tham khảo] Framework hoặc thư viện source code
    Gửi bởi Kevin Hoang trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 0
    Bài viết cuối: 30-07-2006, 01:31 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn