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

Đề tài: Bài tập cờ caro.

  1. #1
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Mặc định Bài tập cờ caro.

    Chào các bạn, mình muốn hỏi "hộ" bạn huyentrang về bài tập C của bạn ấy (@trang: cho phép tớ public vì tớ thấy nó cũng ko có gì cá nhân phải dấu cả).

    Tối hôm qua mình nhận được PM của bạn ấy, mình đã trả lời và bảo bạn ấy có gì thì nên hỏi public trên forum, các pro trên đó nhiệt tình lắm, nhưng mà không hiểu bạn ấy ngại cái gì mà không dám hỏi trưc tiếp, lại PM mình tiếp .

    Chào bạn mình làm bài này viết bằng C khó quá mãi mà ko làm ra được bạn có thể giúp mình càng nhanh càng tốt được kông bạn.Cám ơn bạn rất nhiều



    Viết chương trình người đánh cờ caro với máy trên ma trận 20 x 20. (Hiện thị trên màn hình tùy chọn).
    Bắt buộc dùng giải thuật dưới (có thể giải thuật này không phải là giải thuật tốt nhất):
    Chuẩn bị sẵn các thế cờ trong ma trận 5 x 5 và mô tả nó trong file Text theo thứ tự độ ưu tiên từ cao xuống thấp.
    Ví dụ:
    O : Quân cờ của máy
    X : quân cờ của người
    D : ô cờ trống và là vị trí máy cần đánh vào
    T : ô cờ trống
    G: ô cờ có giá trị là gì trong đó cũng được không cần quan tâm

    G G G G O
    G G G X G
    G G X G G
    G X G G G
    D G G G G

    Máy lần lượt lấy từng thế cờ trong file thế cờ ra theo thứ tự từ thế có độ ưu tiên cao nhất đến thấp nhất và thử so sánh với tất cả các vị trí trong ma trận 20 x 20. Nếu gặp đúng thế cần đánh thì máy sẽ đánh luôn vào vị trí đó.
    À!, chào bạn

    Cờ caro thì ko khó nhưng chương trình hơi bị dài so với tầm cỡ của một cái tin nhắn . Bạn nên tự làm trước, mắc ở đâu thì hỏi.

    Đầu tiên tớ xin giới thiệu trước với bạn một số khái niệm cơ bản về game. game là gì? game là một cái vòng lặp vô hạn lần, trong trường hợp này thì vòng lặp đó chỉ kết thúc khi một người chơi giành chiến thắng(hoặc ko còn chỗ mà đánh ).

    Bàn cờ là một cái mảng 2 chiều 20 x 20.

    Mỗi lần lặp sẽ thực hiện các bước sau.

    1.Kiểm tra xem có bên nào thắng chưa, thắng thì thoát khỏi vòng lặp, và báo kết quả.
    2.Chưa thì bắt đầu "đánh". Có một biến kiểu bool để xác định đang lượt của người chơi hay máy, nếu của máy thì gọi hàm đánh của máy cho máy đánh, nếu của người chơi thì hỏi người chơi muốn đánh ở ô nào, (sau khi người chơi nhập thì phải kiểm tra xem ô đấy có đánh được không, ko thì bắt đánh lại ).
    3.Xóa màn hình và vẽ bàn cờ ra.

    Cái khó nhất là "hàm đánh của máy", và theo tớ thấy thì cậu đang mắc chỗ này.

    Trích dẫn:
    Chuẩn bị sẵn các thế cờ trong ma trận 5 x 5 và mô tả nó trong file Text theo thứ tự độ ưu tiên từ cao xuống thấp.
    Ví dụ:
    O : Quân cờ của máy
    X : quân cờ của người
    D : ô cờ trống và là vị trí máy cần đánh vào
    T : ô cờ trống
    G: ô cờ có giá trị là gì trong đó cũng được không cần quan tâm

    G G G G O
    G G G X G
    G G X G G
    G X G G G
    D G G G G

    Máy lần lượt lấy từng thế cờ trong file thế cờ ra theo thứ tự từ thế có độ ưu tiên cao nhất đến thấp nhất và thử so sánh với tất cả các vị trí trong ma trận 20 x 20. Nếu gặp đúng thế cần đánh thì máy sẽ đánh luôn vào vị trí đó.
    Giải thuật đã khá rõ ràng rồi(mặc dù ko tốt lắm, còn thiếu ).

    Bạn đọc trong file text lấy lần lượt từng ma trận 5x5(ma trận nào ở trên dĩ nhiên được ưu tiên ).
    Mỗi lần lấy thì lặp kiểm tra từng tập hợp 5x5 ô liền nhau trên bàn cờ xem có giống ko(nhẽ ra chỉ nên kiểm tra quanh khu vực mà người chơi trước vừa đánh, ko thì chậm lắm), giống thì đánh vào đó theo hướng dẫn trong ma trận, ko giống thì kiểm tra tiếp ma trận tiếp theo.

    À, có gì thì bạn nên hỏi public trên forum, ở đây có nhiều pro và nhiệt tình lắm, mình thì hộ khẩu bên gamedev.vn nên thỉnh thoảng mới sang đây chơi , thư bạn có nguy cơ vài ngày mới được đọc.
    Ban NamVoDang xem ho Trang doan code nay va sua ho minh voi nhe. Minh con 1 hom ruoi la nop bai roi. Hu hu.Ban NamVoDang cuu to voi . Huyen Trang cam on ban nhieu


    Viết chương trình người đánh cờ caro với máy trên ma trận 20 x 20. (Hiện thị trên màn hình tùy chọn).
    Bắt buộc dùng giải thuật dưới (có thể giải thuật này không phải là giải thuật tốt nhất):
    Chuẩn bị sẵn các thế cờ trong ma trận 5 x 5 và mô tả nó trong file Text theo thứ tự độ ưu tiên từ cao xuống thấp.
    Ví dụ:
    O : Quân cờ của máy
    X : quân cờ của người
    D : ô cờ trống và là vị trí máy cần đánh vào
    T : ô cờ trống
    G: ô cờ có giá trị là gì trong đó cũng được không cần quan tâm

    G G G G O
    G G G X G
    G G X G G
    G X G G G
    D G G G G

    Máy lần lượt lấy từng thế cờ trong file thế cờ ra theo thứ tự từ thế có độ ưu tiên cao nhất đến thấp nhất và thử so sánh với tất cả các vị trí trong ma trận 20 x 20. Nếu gặp đúng thế cần đánh thì máy sẽ đánh luôn vào vị trí đó.



    Code
    #include<dos.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>

    #define MAX_COL 20
    #define MAX_ROW 20
    #define MAX_X 42
    #define MAX_Y 22
    #define MIN_X 2
    #define MIN_Y 2
    #define X 2
    #define O 1

    int map[20][20];

    void draw_board()
    {
    int i,j;
    for(i=MIN_Y;i<MAX_Y;i++)
    for(j=MIN_X;j<MAX_X;j+=2)
    {
    gotoxy(j,i);
    textcolor(LIGHTRED);
    cprintf(".");
    }
    }

    void init_mouse()
    {
    for(int i=0;i<20;++i)
    for(int j=0;j<20;j++)map[i][j]=0;
    int mouse_exists;
    _AX=0x00;
    geninterrupt(0x33);
    mouse_exists=_AX;
    if(mouse_exists!=-1)
    {
    printf("Can't initialize mouse");
    exit(1);
    }
    }

    void show_mouse()
    {
    _AX=0x01;
    geninterrupt(0x33);
    }

    void hide_mouse()
    {
    _AX=0x02;
    geninterrupt(0x33);
    }

    void get_mousexy(int &mouse_x,int &mouse_y)
    {
    _AX=0x03;
    geninterrupt(0x33);
    mouse_x=_CX/8+1;
    mouse_y=_DX/8+1;
    }

    void move_mouse(int x,int y)
    {
    _AX=0x04;
    _CX=x*8;
    _DX=y*8;
    geninterrupt(0x33);
    }

    void limit_mousexy()
    {
    _AX=0x08; //row,y
    _CX=0*8;
    _DX=24*8;
    geninterrupt(0x33);

    _AX=0x07; //col,x
    _CX=0*8;
    _DX=79*8;
    geninterrupt(0x33);
    }

    int left_mouse_down()
    {
    _AX=0x03;
    geninterrupt(0x33);
    if(_BX&0x01==0x01)return 1;
    return 0;
    }

    int left_mouse_up()
    {
    _AX=0x03;
    _BX=0;
    geninterrupt(0x33);
    if(_BX>0)return 1;
    return 0;
    }

    int check_win(int banco[20][20],int type)
    {
    int i,j;
    for(i=0;i<MAX_ROW;i++)
    for(j=0;j<MAX_COL;j++)
    {
    if(banco[i][j]==banco[i+1][j]&&banco[i][j]==banco[i+2][j]
    &&banco[i][j]==banco[i+3][j]&&banco[i][j]==banco[i+4][j]
    &&banco[i][j]==type)return 1;

    if(banco[i][j]==banco[i+1][j+1]&&banco[i][j]==banco[i+2][j+2]
    &&banco[i][j]==banco[i+3][j+3]&&banco[i][j]==banco[i+4][j+4]
    &&banco[i][j]==type)return 1;

    if(banco[i][j]==banco[i-1][j+1]&&banco[i][j]==banco[i-2][j+2]
    &&banco[i][j]==banco[i-3][j+3]&&banco[i][j]==banco[i-4][j+4]
    &&banco[i][j]==type)return 1;

    if(banco[i][j]==banco[i][j+1]&&banco[i][j]==banco[i][j+2]
    &&banco[i][j]==banco[i][j+3]&&banco[i][j]==banco[i][j+4]
    &&banco[i][j]==type)return 1;
    }

    return 0;
    }

    void main()
    {
    clrscr();
    char k=';';
    int dem=0;

    init_mouse();
    show_mouse();
    limit_mousexy();

    draw_board();

    int x,y,i,j;
    while(k!=27)
    {
    get_mousexy(x,y);
    gotoxy(x,y);
    if(left_mouse_down())
    {
    i=y-2;
    j=(x-2)/2;
    hide_mouse();
    if(y<MAX_Y&&y>=MIN_Y&&x%2==0&&x>=MIN_X&&x<MAX_X&&m ap[i][j]==0)
    {
    if(dem%2==1)
    {
    dem++;
    textcolor(YELLOW);
    cprintf("O");
    map[i][j]=1;
    if(check_win(map,O))
    {
    gotoxy(50,3);
    textcolor(YELLOW);
    cprintf("O da thang");
    getch();break;
    }
    }
    else
    {
    dem++;
    textcolor(10);
    cprintf("X");
    map[i][j]=2;
    if(check_win(map,X))
    {
    gotoxy(50,3);
    textcolor(10);
    cprintf("X da thang");
    getch();break;
    }
    }
    gotoxy(1,24);
    textcolor(LIGHTRED);
    cprintf(" ");
    gotoxy(1,24);
    cprintf("Nuoc di cuoi (%d,%d)",i,j);
    }
    show_mouse();
    }

    if(kbhit())
    {
    k=getch();
    }
    }

    //getch();
    }
    Mình ko trả lời bạn vì hai lý do.

    Thứ nhất: Chương trình của bạn dùng một mớ hàm của borland C, cái trình biên dịch cũ rích :(. mình tìm ko ra chỗ down(có ra một cái link mediafire, nhưng thằng này có cái điệu rất khả ố là down được 99,99% thì đơ :( ).

    Thứ hai: Là trình độ C của mình trên gà dưới trung bình. Mình học C++ luôn ko qua C nên các điểm khác biệt của nó mình ko nắm rõ. Và vì nó không cho OOP nên mỗi lần mình nhìn vào một cái chương trình C dài dài thì không khác gì nhìn vào một mớ mì Sờ-pa-ghét-ty, chả hiểu gì luôn.

    Mà bạn lại đang cần gấp nên tốt nhất là public lên forum cho các pro giải hộ, mấy ông đấy nhiệt tình phết, từ dễ tới khó, câu gì cũng trả lời luôn, ko có gì phải sợ cả.

    Các bạn giúp bạn ấy hộ mình nhá.
    Phá toái hư không - Bạch nhật thăng thiên.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bắt tay cái coi, tui cũng nhận được PM y vậy nè
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Lạy chúa ... bài caro của mình sao ở đây ....
    mình xài borlandc viết vì ở trường còn xài nó nên mình chưa chuyển qua bộ khác -.-'.
    Bạn trang cũng PM mình và mình cũng có post bài gợi ý cho bạn ấy rồi -.-' nhưng coi bộ tình hình này là vô phương cứu chữa :|
    code ra gió bão

  4. #4
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Bắt tay luôn , 3 bác .
    Phá toái hư không - Bạch nhật thăng thiên.

  5. #5
    Ngày gia nhập
    05 2008
    Bài viết
    11

    cho mình mượn bài này nhé. Mình đang cần code để làm bài tập. thanks

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Mặc định Bài tập cờ caro.

    Tớ thấy bài này quá sức của cậu ấy , tớ cũng nhận đc PM y hệt vậy .

  7. #7
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Thứ nhất: Chương trình của bạn dùng một mớ hàm của borland C, cái trình biên dịch cũ rích :(. mình tìm ko ra chỗ down(có ra một cái link mediafire, nhưng thằng này có cái điệu rất khả ố là down được 99,99% thì đơ :( ).
    cái này thì khuyên cậu nên dùng IDM 5.14 đi,ngon lắm
    --> mình cũng nhận được thư,phải hỏi chủ bài viết mới được,cậu lập trình ra phần mềm soạn tin nhăn ah,sao nhắn được lém thế( mình hỏi thật,không có ý trêu đâu)

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi coder_gate Xem bài viết
    mình cũng nhận được thư,phải hỏi chủ bài viết mới được,cậu lập trình ra phần mềm soạn tin nhăn ah,sao nhắn được lém thế( mình hỏi thật,không có ý trêu đâu)
    Cái này trong 4rum có hỗ trợ mà : trong mục tên người gửi thì nhập nhiều tên user cách nhau bằng dấu ;
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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

  1. Đánh Caro qua Lan
    Gửi bởi truonghai1989 trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 21-06-2014, 09:59 AM
  2. Mảng trên C Hỗ trợ 2 người đánh cờ caro
    Gửi bởi GACN trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 02-07-2013, 12:28 PM
  3. Làm cờ caro người đánh với người
    Gửi bởi Vaanres trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 06-03-2012, 11:29 PM
  4. Đánh cờ caro bằng C++
    Gửi bởi tatyasurai trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 30-01-2010, 11:31 PM
  5. [Mr.Hieu] Anitsoft Caro Chess - The best caro game
    Gửi bởi hieubm trong diễn đàn Sản phẩm phần mềm của bạn
    Trả lời: 49
    Bài viết cuối: 21-11-2007, 10:54 AM

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