-
14-06-2011, 05:59 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Chèn 120 ảnh lên 120 button một cách ngẫu nhiên không trùng lặp
Mình có một mảng 2 chiều 15x8 các button. Muốn đưa ảnh lên button bằng code sao cho 120 cái ảnh mỗi cái nằm trên một button theo thứ tự ramdom thì làm thế nào. Thanks
Bác nào cho code thì tốt quáView more random threads:
- Lấy đoạn text được bôi đen ngoài Windows Forms
- Thắc mắc về XtratabControl và XtraTabbedMdiManager
- Truy xuất .dll 32 bit trên hệ điều hành 64 bit
- Xử lý chuỗi khi đọc bằng máy barcode
- Customize calendar | Muốn calendar chỉ hiện thị một khoảng thời gian?
- Sử dụng Control của Form1 ở Form2
- Cách tính điểm khi đánh thắng trò chơi caro?
- làm login trong C# kết nối với store produrce trong sql
- cách phân biệt khởi động form cùng window và khởi động form bằng tay?
- Vấn đề mảng một chiều trong C#? xin hướng dẫn
-
15-06-2011, 12:17 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi nguyenson197
- Gán số thứ tự của 120 ảnh của bạn từ 0-119 (hoặc 1-120) vào một list ảnh. (img[0-119])
- Tạo một mảng 120 phần tử int từ 0-119 xuất hiện ngẫu nhiên và mỗi phần tử chỉ xuất hiện 1 lần. (a[]= random[1,2,3,...199]).
- Tiến hành load ảnh lên button theo giá trị các phần tử tương ứng với số thứ tự của ảnh. (button[i].Image=img[a[i]]).
B1 và B3 khá nhẹ nhàng, vấn đề rắc rối chính là ở bước 2 tạo mảng, mình đề xuất cho bạn 2 thuật toán để giải quyết:
- Thuật toán 1:
B1: Random 1 số int thuộc [0,199]
B2: Kiểm tra xem số vừa tạo đã có trong mảng hay chưa, có thì thêm vào mảng, chưa thì quay lại B1.
B3: Lập đến khi lấy đủ mảng có 120 phần tử.
Thuật toán 1 khá dễ nhưng có phần rất nhọc nhằng, trong trường hợp xấu có thể lặp đi lặp lại vô số lần.
- Thuật toán 2:
B1: Tạo một mảng b 120(tức n) phần tử int xếp thứ tự từ 0-199.
B2: Random 1 số int thuộc [0, n-1] {r=rand.next(n)}
B3: Thêm phần tử trong mảng b tại vị trí vừa tạo vào mảng {a[i++]=b[r]}
B4: Xóa phần tử tại vị trí vừa tạo ra khỏi mảng b đồng thời giảm n đi 1. {b[r]=b[n-1]; n--;} or {b[r]=b[--n]}
B5: Quay lại B2, lặp đến khi lấy đủ 120 phần tử cho a.
Thuật toán 2 hiểu quả hơn rất nhiều.
Chúc bạn làm tốt [IMG]images/smilies/wave.gif[/IMG].
-
15-06-2011, 05:37 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
hihi vấn đề này cũng giống vấn đề mình đã làm.
Bài của mình là có 52 cái button và nhiệm vụ phải load 52 cây tú vào đó.
Mình đã giải quyết được vấn đề hihi.
nhưng mình xin được trình bày cách làm với 25button thôi hihi. còn bạn muốn làm thêm bao nhiêu thì làm hihi
mình làm như thế này
Mã:private void Form1_Load(object sender, EventArgs e) { Random rd = new Random(); Button[] btn = new Button[25];// minh khai bao mang button; int left = 0; int top = 0; int i = 0; List<int> lst = new List<int>();//list lst dung de chua danh sach cac so ma minh random duoc do { int num = rd.Next(0, 25); if (lst.Contains(num) == false)// neu nhu lst cua minh chua co gia tri num minh se add no vao { lst.Add(num); btn[i] = new Button(); btn[i].Size = new System.Drawing.Size(100, 125); btn[i].Image = Image.FromFile("E:\\bo tu\\" + (num + 1).ToString() + ".PNG"); btn[i].Left = left; btn[i].Top = top; if ((i + 1) != 0 && (i + 1) % 5 == 0) { left = 0; top += 130; } else { left += 125; } this.Controls.Add(btn[i]); i++; } } while (i < 25); }
-
15-06-2011, 05:43 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
hihi à quên mất mình mới bắt đầu học C# thôi nếu viết không hay hoặc chưa tối ưu nhất. bạn nào làm hay hơn post lên mình xem với nha.
à nếu có ích thì thank cho mình cái nhé! lấy thành tích cái[IMG]images/smilies/2.gif[/IMG]
-
15-06-2011, 05:55 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi rucvan
-
15-06-2011, 06:38 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
mình đã nói là chưa tối ưu nhưng cũng đáp ứng được yêu cầu của bài. đảm bảo vẫn load đủ ảnh và không có cái ảnh nào trùng nhau cả. hihi mình mới tự học được 1 thời gian mà
[IMG]images/smilies/laughing.gif[/IMG]
-
15-06-2011, 06:42 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi mrvu.mlt
nhìn yêu cầud đề bài là lao vào code thôi. hihi.
đọc lại thuật toán thứ 2 của bạn quả thực very good!
hihi mình cảm ơn vì sự góp ý của bạn.
-
15-06-2011, 06:46 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi rucvan
-
15-06-2011, 06:59 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi mrvu.mlt
Mình đang tự mày mò học lập trình mà không có sự dẫn dắt nào.
nên nhiều khi không biết bắt đầu từ đâu nữa hê hê. nên quyết định lên cộng đồng học hỏi. Cảm ơn bạn đã cho mình một lời khuyên bổ ích.[IMG]images/smilies/clap_grin.gif[/IMG]
-
16-06-2011, 05:14 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Thanks 2 bác rất nhiều. Em làm được rồi. hỳ
Với sự đa dạng và phong phú về mẫu mã và giá cả, choxeonline.vn hứa hẹn sẽ là địa chỉ tin cậy cho những ai đang tìm kiếm chiếc xe ô tô ưng ý. Từ những mẫu xe hạng sang đến những chiếc xe gia đình...
Khám Phá Đa Dạng Sản Phẩm Xe Ô Tô...