37 thoughts on “Lines 2008 (C# version)

  1. Game Lines 98 mình bắt đầu viết khi tham gia kỳ thi trên báo echip 2006, lúc ấy mình viết bằng Java Swing, sau này viết lại bằng JavaScript và vào tháng 5/2008 viết lại bằng C# dành tặng 1 người bạn. Do phải viết nhanh trong 2 ngày với cả đã viết nhiều bằng các ngôn ngữ khác nên ngại comment.

    Like

  2. Mình rất thích project này, nhưng mà đọc code rất khó hiểu bạn có thể giải thích các bước được không?
    Cái này mình không hiểu : trong class skinConstrant.cs
    public static int[] BallSelected = { 1, 4, 3, 2, 3, 4, 1, 5, 6, 7, 6, 5 };
    public static int[] BallAppearence = { 22, 21, 20, 19, 18 };
    public static int[] BallDestruction = { 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };

    cái thuật toán tìm đường đi với cả cách hiện các quả bóng mình chưa hiểu , phiền bạn hướng dẫn hộ
    THANKS

    Like

  3. Trong file “balls.bmp” (kích cỡ rất to) bạn để ý có 7 hàng, mỗi hàng là các trạng thái khác nhau của 1 loại bi màu (có 7 màu mà), các trạng thái này được đánh số theo thứ tự từ trái qua phải (chính là chỉ số cột luôn). Mảng BallSelected dùng khi click vào 1 viên bi mình phải làm nó rung rinh tại chỗ, kiểu 24 hình/giây, sẽ liên tục luân phiên đổi trạng thái theo thứ tự ở các cột số: { 1, 4, 3, 2, 3, 4, 1, 5, 6, 7, 6, 5 } rồi lại tuần hoàn lại. Tương tự cho các mảng kia dùng cho các hiệu ứng vỡ nát hoặc từ từ to lên.

    Còn thuật toán tìm đường đi ngắn nhất bạn phải biết về các thuật toán đồ thị, cụ thể là Tìm kiếm theo chiều rộng trên 1 đồ thị không có trọng số. Để lĩnh hội chúng, bạn tìm đọc cuốn Toán Rời Rạc của thầy Nguyễn Đức Nghĩa (ĐH BKHN) và nghiền ngẫm nhé!

    Like

  4. Không bít mình hiểu có đúng không : cái mảng matrix là để mô tả 81 vị trí trên màn hình phải không.
    Mình không hiểu lắm cái mảng này tạo như thế nào :

    [CODE]
    public static int[,] createNewMatrix()
    {
    Random random = new Random();
    int[,] a = new int[9, 9];
    int i, j, remain, count;
    for (i = 0; i < 9; i++)
    for (j = 0; j < 9; j++) a[i, j] = 0;
    count = 81;
    bool stop;
    do
    {
    remain = random.Next(count–) + 1;
    //Cái remain này để làm gì vậy ????
    stop = false;
    for (i = 0; i < 9; i++)
    {
    if (stop) break;
    for (j = 0; j 76);//Cái này cũng không hiểu tại sao chỉ đến 76 ?????
    addNextColor(a);
    return a;
    }
    [/CODE]
    Mình rất muốn hiểu rõ bài này nên phiền bạn 1 chút, mong bạn không phiền
    Thank you!

    Like

  5. bạn có thể giải thích qua nhiệm vụ của 1 số cái biến trong mấy method này được không :
    public static ArrayList havePath(int[,] a, int i1, int j1, int i2, int j2)
    {
    int[,] dadi = new int[9, 9];
    int[,] dadj = new int[9, 9];

    int[] queuei = new int[81];
    int[] queuej = new int[81];

    int fist = 0, last = 0, x, y;

    for (x = 0; x < 9; x++)
    for (y = 0; y < 9; y++) dadi[x, y] = -1;

    queuei[0] = i2;
    queuej[0] = j2;
    dadi[i2, j2] = -2;
    ….

    2 cái mảng dadi và dadj gán giá trị -1 và -2 để làm gì hả bạn ???????

    public static ArrayList buildPath(int[,] dadi, int[,] dadj, int i1, int j1)
    {
    ArrayList arr = new ArrayList();
    int k;
    while (true)
    {
    arr.Add(new Point(i1, j1));
    k = i1;
    i1 = dadi[i1, j1];
    if (i1 == -2) break;
    j1 = dadj[k, j1];
    }
    return arr;
    }

    public static ArrayList checkLines(int[,] a, int iCenter, int jCenter)
    {
    ArrayList list = new ArrayList();

    int[] u = { 0, 1, 1, 1 };
    int[] v = { 1, 0, -1, 1 };
    ……

    mình chưa hiểu nhiệm vụ của mấy cái mảng này dùng để lưu cái gì và cái mảng chứa các phần tử {0,1,1,1} và {1,0,-1,1}

    Like

  6. Trong tìm kiếm theo chiều rộng (Breadth first search) thì mảng dad dùng để ghi nhận đỉnh đi trước trong đường đi, ta dùng mảng này để sau cùng truy hồi lại đường đi. Còn các mảng u, v là để phục vụ cho việc duyệt lên các ô 4 phía (up, down, left, right).

    Tóm lại, các bạn cần phải có nền tảng thuật toán tốt, nên học sâu từ phổ thông, ko phải 1 sớm 1 chiều hay giải thích vài câu mà ngấm được. Kỹ thuật mảng dad và u, v rất phổ biến, ai học thuật toán cũng đều từng sử dụng qua.

    Mình vẫn khuyên nên tìm đọc cuốn Toán Rời Rạc nêu trên.

    Thân.

    Like

  7. Làm sao để load một phần nhỏ hình (như hình bi đỏ, bi xanh…) từ 1 cái hình bmp to lớn ban đầu? Bạn có thể hướng dẫn cách dùng được không?

    Like

  8. Bạn hãy tham khảo trong MSDN, lớp Bitmap, phương thức Clone(Rectangle), cụ thể trong code của mình (ClipplingImage.cs), thì là đoạn sau:

    images[i, j] = bigImage.Clone(
    new Rectangle( i * pieceWidth, j * pieceHeight, pieceWidth, pieceHeight ), System.Drawing.Imaging.PixelFormat.DontCare );

    Like

  9. Vậy còn cái phần lưu điểm vào file nhị phân đó. Làm sao đếm được khi nào đủ 10 người, để mà nếu có 1 người nào đó có điểm cao hơn cái thấp nhất trong 10 người này thì xoá cái thấp nhất đó và chèn cái mới. Và cách xoá 1 người này ra khỏi file nhị phân là như thế nào. Cám ơn bạn!

    Like

  10. em còn một ngày nữa phải hiểu hết cái trò game line của bác viết sao mà phức tạp quá vậy ta em mới học đến C# nên cũng chưa hiểu hết ý nghĩa của các hàm đồ họa trong C# bác có quyển giáo trình tiếng việt nào cho C# không cho em vơi
    hiểu được mỗi ý nghĩa thuật giải tham khảo để viết lại những lỗi tum lum sửa mãi không được nản quá sắp phải nộp bài rùi mà cóp nguyên của bác đem vào quá ngại chắc không làm được điểm thấp thi lại thui

    Like

  11. bạn ơi bạn chi dùm mình doạn code tính điểm cho game này với , mong bạn giúp đỡ giải thích lun hộ mình với
    Thank !

    Like

  12. anh kata có thể trình bày cho em các bước tuần tự để viết code của trò chơi này đc ko ?

    Like

  13. em đọc code anh viết thấy mù tịt quá. vì mới học c# nên chưa biết chi lắm .

    Like

  14. Chao ban!
    Minh da coi qua code cua ban lam va thuc su la rat hay!
    Ban cho minh hoi la tai sao ham getLocationofPiece la vi sao ban lai co cach thuc tinh nhu vay?
    return new Point(
    UpperLeftBall.X + (BallSize.Width + BetweenBalls.Width) * col ,
    UpperLeftBall.Y + (BallSize.Height + BetweenBalls.Height) * row);
    Xin cam on!

    Like

    1. UpperLeftBall.X là tọa độ X của viên bi ở cột đầu tiền, hàng đầu tiên.
      BallSize.Width là chiều rộng (theo chiều X) của mỗi viên bi.
      BetweenBalls.Width là khoảng cách theo chiều X giữa 2 viên bi kề nhau, khoảng cách này tính từ chỗ kết thúc viên bi này đến chỗ bắt đầu viên bi kế tiếp.

      Cám ơn bạn đã quan tâm.

      Like

      1. Trước hết,mình xin cảm ơn bạn vì đã quan tâm trả lời thắc mắc của mình.
        Nhưng mình vẫn thắc mắc là tại sao bạn lại có cách thức xác định vị trí của viên ball như vậy!Mình vẫn chưa hiểu.!
        Xin cảm ơn!

        Like

      2. Vì mình thích thế. Nếu muốn bạn có thể tính cách khác. Miễn sao vẽ lên được các viên bi ở đúng vị trí.

        Like

      3. Chào bạn!Thời gian này mình cũng đang tìm hiểu cái Line2008 của bạn!Và nhờ đó mình đã hiểu được nhiều thứ!Nhưng mình vẫn còn thắc mắc về phần Tìm đường đi ngắn nhất mà bạn đã áp dụng..!Mình vẫn không hiểu là 2 ma trận adai và adaj dùng để làm j?Trước đây mình có hỏi một số bạn thì phương pháp để làm bài toán này là mình rải đều các giá trị nào.Ý mình là khi bạn rải các giá trị ngẩu nhiên trên ma trận và nếu như trên ma trận ấy tính từ điểm bắt đầu đến diểm kết thúc mà giá trị lần lượt là….6,5,4,3,2,1 thi dường đi sẽ là ngắn nhất?

        Like

      4. Có thể gộp 2 ma trận ấy làm 1 ma trận có kiểu phần tử là Point gồm 2 thành phần row, col. Vì mỗi đỉnh của đồ thị ta đang tìm kiếm là 1 ô của ma trận, nên để biểu diễn 1 đỉnh ta cần 2 giá trị row, col như thế.

        Còn cách làm “rải đều” của bạn thì mình ko hiểu.

        Thanks.

        Like

      5. Ah, dadi và dadj dùng để ghi nhận ô đi kề trước trong đường đi đang tìm kiếm. Ta sử dụng chúng để sau này truy lại từng bước của đường đi ngắn nhất tìm được. Nếu đã quen với Tìm kiếm theo chiều rộng (BFS) thì bạn sẽ thấy rất dễ hiểu.

        Like

  15. anh oi emnguongmo anh lam lam, cho e xin sodt dc hem,mail wa cho em nhe, emmunhoc hoithem ve thuat toan cua anh, e dag hoc Discrete Math+ C#, nhug van hoi kho hiu,anh giup em nhe,neu bai nay lam = buttonimage thi co lam dc hem anh

    Like

  16. Anh ơi, anh có mã nguồn của Game Lines98 viết trên C++ không ạh ? Hiện em đang rất cần mã nguồn đầy đủ của game này vì có liên quan đến 1 phần trong đồ án tốt nghiệp. Chân thành cảm ơn anh trước !!

    Like

  17. bạn Katatunix ơi .bạn có source game line bên java swing k bạn. bạn có thì gửi cho mình với được k .mình đang chuẩn bị làm báo cáo đề tài là game line này . nếu bạn gửi được cho mình thì tốt quá .:(

    Like

Leave a comment