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

Đề tài: mời các bạn cải tiến trò dò mìn của mình

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    4

    Mặc định mời các bạn cải tiến trò dò mìn của mình

    Tui dùng ngôn ngữ C# để làm bài này, cũng chỉ mới tập làm quen thôi. Trò chơi Minesweeper nằm sẵn trong window chắc các bạn ít nhiều đã biết cách chơi nên có lẽ để các bạn khỏi mất thời gian đọc tui sẽ không nói về cách chơi. Cách tui dùng để cài đặt trò chơi này xin được tóm lược như sau.
    Khi lích chuột vào một ô trong “bãi mìn” ta sẽ tiến hành kiểm tra:

    Nếu lích chuột phải, ta sẽ kiểm tra:
    +nếu ô trống không có mìn (có giá trị 0) sẽ được đánh dấu với giá trị -3.
    +nếu ô trống có mìn (có giá trị -1) sẽ được đánh dấu với giá trị -4.
    +nếu ô trống không có mìn đã được đánh dấu (có giá trị -3) sẽ được đánh dấu lại với giá trị 0.
    +nếu ô trống có mìn đã được đánh dấu (có giá trị -4) sẽ được đánh dấu lại với giá trị -1.

    Nếu lích chuột trái, ta sẽ kiểm tra:
    +nếu có bom, “BÙM”, hiện tất cả các ô chứa mìn và kết thúc trò chơi.
    +nếu không có bom:
    -duyệt 8 ô xung quanh với biến count=0 và tăng 1 khi gặp ô có giá trị -1 hoặc -4.
    -sau khi duyệt ta kiểm tra biến đếm count.
    . Nếu count khác 0 ta sẽ cho hiển thị ô đó với giá trị là giá trị count.
    . Nếu count bằng 0 ta sẽ lật tại vị trí ô đó và gán giá trị là -2. Sau đó duyệt 8 ô xung quanh và thực hiện đệ quy với các ô đó.

    Sau đây là đoạn code của tui, mời các bạn xem qua.

    Visual C# Code:
    1. class Mine : Form
    2. {
    3.         const int row = 9, col = 9;
    4.         const int xCorner = 10, yCorner = 30;//vi tri goc trai tren cung cua table
    5.         const int dx = 20, dy = 20;//khoang cach moi dong,cot
    6.         const int numOfBomb = 10;
    7.         int[,] mine;
    8.         int[] directionX = { -1, 0, 1, 1, 1, 0, -1, -1 };
    9.         int[] directionY ={ -1, -1, -1, 0, 1, 1, 1, 0 };
    10.         Button[,] b;
    11.         public Mine()
    12.         {
    13.             b = new Button[row, col];
    14.             mine = new int[row, col];
    15.             Intilize();
    16.             Text = "Mine";
    17.             rand(numOfBomb);
    18.             FormBorderStyle = FormBorderStyle.FixedSingle;
    19.             MaximizeBox = false;
    20.             Height = 55+ row * dx;
    21.             Width =  55+ col * dy;
    22.         }
    23.  
    24.         public void Intilize()
    25.         {
    26.             for (int i = 0; i < row; i++)
    27.                 for (int j = 0; j < col; j++)
    28.                 {
    29.                     mine[i, j] = new int();
    30.                     mine[i, j] = 0;
    31.                     b[i, j] = new Button();
    32.                     b[i, j].Parent = this;
    33.                     b[i, j].Location = new Point(xCorner + j * dx, yCorner + i * dy);
    34.                     b[i, j].Size = new Size(20, 20);
    35.                     b[i, j].Text = "";
    36.                     b[i, j].MouseDown += new MouseEventHandler(Mine_MouseDown);
    37.                  }
    38.         }
    39.  
    40.         public void rand(int numOfBomb)
    41.         {
    42.             Random rd = new Random();
    43.             for (int k = 0; k < numOfBomb; k++)
    44.             {
    45.                 int i, j;
    46.                 do
    47.                 {
    48.                     i = rd.Next(0, row);
    49.                     j = rd.Next(0, col);
    50.                 }
    51.                 while (mine[i, j] == -1);
    52.                 mine[i, j] = -1;
    53.             }
    54.         }
    55.        
    56.         void Mine_MouseDown(object sender, MouseEventArgs e)
    57.         {
    58.             Button bt = (Button)sender;
    59.            FindMines(bt, e);
    60.         }
    61.  
    62.         public void FindMines(Button bt, MouseEventArgs e)
    63.         {
    64.             int count = 0;
    65.             int j = (bt.Location.X - xCorner) / dx;//cot
    66.             int i = (bt.Location.Y - yCorner) / dy;//dong
    67.            
    68.             if ((i >= 0 && i < row) && (j >= 0 && j < col))
    69.             {
    70.                 if (e.Button == MouseButtons.Right)
    71.                 {
    72.                     if (mine[i, j] == 0)
    73.                     {
    74.                         mine[i, j] = -3;
    75.                         b[i, j].BackColor = Color.Green;
    76.                         b[i, j].Text = "!";
    77.                     }
    78.                     else if (mine[i, j] == -1)//neu danh dau dung vi tri co bom
    79.                     {
    80.                         mine[i, j] = -4;
    81.                         b[i, j].BackColor = Color.Green;
    82.                         b[i, j].Text = "!";
    83.                     }
    84.                     else if (mine[i, j] == -3)
    85.                     {
    86.                         mine[i, j] = 0;
    87.                         b[i, j].BackColor = BackColor;
    88.                         b[i, j].Text = "";
    89.                     }
    90.                     else if (mine[i, j] == -4)
    91.                     {
    92.                         mine[i, j] = -1;
    93.                         b[i, j].BackColor = BackColor;
    94.                         b[i, j].Text = "";
    95.                     }
    96.                 }
    97.                 else
    98.                 {
    99.                     if (mine[i, j] == -1)  //trúng mìn, hiện vị trí các ô có mìn
    100.                     {
    101.                         for (int l = 0; l < row; l++)
    102.                         {
    103.                             for (int h = 0; h < col; h++)
    104.                             {
    105.                                 if (mine[l, h] == -1 || mine[l, h] == -4)
    106.                                 {
    107.                                     b[l, h].BackColor = Color.Red;
    108.                                     b[l, h].Text = "*";
    109.                                 }
    110.                             }
    111.                         }
    112.  
    113.                         MessageBox.Show("Bum");
    114.                         Application.Restart();
    115.                     }
    116.  
    117.                     if (mine[i, j] == 0)
    118.                     {
    119.                         for (int m = 0; m < 8; m++)
    120.                         {
    121.                             int my = j + directionX[m];
    122.                             int mx = i + directionY[m];
    123.                             if ((mx >= 0 && mx < row) && (my >= 0 && my < col) && (mine[mx, my] == -1 || mine[mx, my] == -4))
    124.                                 count++;
    125.                         }
    126.                         if (count != 0)
    127.                         {
    128.                             mine[i, j] = count;
    129.                             b[i, j].Text = "" + count;
    130.                             return;
    131.                         }
    132.                         else
    133.                         {
    134.                             mine[i, j] = -2;//đánh dấu đã lật
    135.                             b[i, j].ForeColor = Color.Blue;
    136.                             b[i, j].Text = "N";
    137.                             for (int m = 0; m < 8; m++)
    138.                             {
    139.                                 int my = j + directionX[m];
    140.                                 int mx = i + directionY[m];
    141.  
    142.                                 if ((mx >= 0 && mx < row) && (my >= 0 && my < col) )
    143.                                 {
    144.  
    145.                                     b[mx, my].ForeColor = Color.Blue;
    146.                                     b[mx, my].Text = "N";
    147.                                     FindMines(b[mx, my], e);
    148.                                  }
    149.                             }
    150.                         }
    151.                     }
    152.                 }
    153.             }
    154.            
    155. }
    Bài này tui cài đặt còn khá sơ sài. Về cốt lõi là chạy đúng rồi, nhưng tui không hài lòng về tốc độ của nó lắm. Khi bạn tăng giá trị ô lên trông nó chạy như rùa Mong các bạn cùng xem và giúp tui cải tiến trò chơi này nhé!

  2. #2
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Bạn gửi *.exe đi kẻo C# mình chưa làm tới phần form nên chưa bít chạy thế nào(Đang học)
    hix hix.

    Bài này trước mình có làm nhưng là trong Dos của C++, bạn có thể tìm kiếm trên diễn đàn cộng đồng C Việt để tham khảo!
    Mình học API chưa đâu vô đâu , nên chưa viết được nó trên win.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

  1. Trả lời: 0
    Bài viết cuối: 18-04-2012, 12:24 PM
  2. Lập trình C * next *last *ptr có vai trò gì?
    Gửi bởi qhai_2009 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 25-03-2010, 11:17 AM
  3. Mô phỏng trò chơi cờ tướng bằng C??
    Gửi bởi thanhnam46 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 28-04-2009, 09:57 PM
  4. Lập trình trò chơi đoán chữ Tiêng Việt(như trò chơi chiếc nón kỳ diệu trên VTV3)
    Gửi bởi friends_forever_5_11 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 7
    Bài viết cuối: 19-12-2008, 12:22 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