Chương trình đánh bài cào trên Android


Xây dựng chương trình rút 03 lá bài từ bộ bài 52 lá và đếm nút từ 03 lá bài.

Screenshot - 13_03_14 , 16_03_44

Hình 2.1 –       Thông tin project rút bài

Sau khi hoàn thành tạo Project, copy (ctrl+c) toàn bộ các hình ảnh của bộ bài và chép vào thư mục res -> drawable-hdpi. Sau khi chúng ta chép hình vào thư mục này thì hệ thống sẽ biên dịch lại và tham chiếu vào file R.java để chúng ta có thể khai thác thông quan activity.

Thiết kế giao diện như hình bên dưới.

Screenshot - 13_03_14 , 16_03_59

Hình 2.2 –       Giao diện cở bản

Kéo thả thành phần ImageView vào giao diện, hệ thống sẽ bậc giao diện chọn ảnh để hiển thị trên ImageView như hình dưới. Do đã tham chiếu ở bước trên nên chúng ta chỉ việc chọn ảnh từ hộp thoại này.

 Screenshot - 13_03_14 , 16_04_12

Hình 2.3 –       Giao diện chọn ảnh

Lặp lại tương tự cho 02 ImageView tiếp theo, ta có giao diện như sau:

Screenshot - 13_03_14 , 15_17_04

Hình 2.4 –       Giao diên cở bản của ứng dụng

Chúng ta có nội dung file XML như sau

1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/LinearLayout1" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical" 7 android:paddingBottom="@dimen/activity_vertical_margin" 8 android:paddingLeft="@dimen/activity_horizontal_margin" 9 android:paddingRight="@dimen/activity_horizontal_margin" 10 android:paddingTop="@dimen/activity_vertical_margin" 11 tools:context="vn.cusc.baicao.MainActivity$PlaceholderFragment" > 12 13 <TextView 14 android:id="@+id/tv_Chao" 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:text="Nh?n nút d? chia bài" 18 android:textAppearance="?android:attr/textAppearanceSmall" /> 19 20 <LinearLayout 21 android:layout_width="match_parent" 22 android:layout_height="wrap_content" 23 android:orientation="horizontal" > 24 25 <Button 26 android:id="@+id/btnChiaBai" 27 android:layout_width="wrap_content" 28 android:layout_height="wrap_content" 29 android:text="Chia bài" /> 30 31 <Button 32 android:id="@+id/btnXaoBai" 33 android:layout_width="wrap_content" 34 android:layout_height="wrap_content" 35 android:text="Xào bài" /> 36 </LinearLayout> 37 38 <LinearLayout 39 android:layout_width="match_parent" 40 android:layout_height="wrap_content" 41 android:orientation="horizontal" > 42 43 <ImageView 44 android:id="@+id/imageView01" 45 android:layout_width="wrap_content" 46 android:layout_height="wrap_content" 47 android:src="@drawable/b2fv" /> 48 49 <ImageView 50 android:id="@+id/imageView02" 51 android:layout_width="wrap_content" 52 android:layout_height="wrap_content" 53 android:src="@drawable/b2fv" /> 54 55 <ImageView 56 android:id="@+id/imageView03" 57 android:layout_width="wrap_content" 58 android:layout_height="wrap_content" 59 android:src="@drawable/b2fv" /> 60 </LinearLayout> 61 62 </LinearLayout>

Tới đây chúng ta tiếp tục xử lý khi người dùng chọn (nhấn chuột hay chạm) vào nút nhấn thì tiến hành chọn ngẫu nhiên 03 lá bài trong 52 lá bài và tính xem được bao nhiêu nút.

Bước 1.          Định nghĩa lớp tên LaBai  có cấu trúc như sau

1 public class LaBai { 2 int SoNut; 3 String Ten; 4 int Hinh; 5 LaBai(int nut, String ten, int hinh) 6 { 7 SoNut = nut; 8 Ten = ten; 9 Hinh = hinh; 10 } 11 }

Bước 2.          Khai báo một số biến tham chiếu và quản lý bộ bài như sau (Khai báo trong lớp Activity)

1 Button btnChia, btnXao; 2 ImageView LaBai[] = new ImageView[3]; 3 TextView kq; 4 // chua cac la da rut; 5 ArrayList<LaBai> CacLaDaRut = new ArrayList<LaBai>(); 6 ArrayList<LaBai> CacLaBai = new ArrayList<LaBai>();// ds cac la bai;

Định nghĩa phương thức tên là xaoBai để khởi tạo lại bộ bài.

1 void xaoBai() { 2 // Khai báo 52 lá bài; 3 CacLaBai.add(new LaBai(1, "Ách Chu?ng", R.drawable.c1)); 4 CacLaBai.add(new LaBai(1, "Ách Rô", R.drawable.d1)); 5 CacLaBai.add(new LaBai(1, "Ách Co", R.drawable.h1)); 6 CacLaBai.add(new LaBai(1, "Ách Bích", R.drawable.s1)); 7 8 CacLaBai.add(new LaBai(2, "Hai Chu?ng", R.drawable.c2)); 9 CacLaBai.add(new LaBai(2, "Hai Rô", R.drawable.d2)); 10 CacLaBai.add(new LaBai(2, "Hai Co", R.drawable.h2)); 11 CacLaBai.add(new LaBai(2, "Hai Bích", R.drawable.s2)); 12 13 CacLaBai.add(new LaBai(3, "Ba Chu?ng", R.drawable.c3)); 14 CacLaBai.add(new LaBai(3, "Ba Rô", R.drawable.d3)); 15 CacLaBai.add(new LaBai(3, "Ba Co", R.drawable.h3)); 16 CacLaBai.add(new LaBai(3, "Ba Bích", R.drawable.s3)); 17 18 CacLaBai.add(new LaBai(4, "B?n Chu?ng", R.drawable.c4)); 19 CacLaBai.add(new LaBai(4, "B?n Rô", R.drawable.d4)); 20 CacLaBai.add(new LaBai(4, "B?n Co", R.drawable.h4)); 21 CacLaBai.add(new LaBai(4, "B?n Bích", R.drawable.s4)); 22 23 CacLaBai.add(new LaBai(5, "Nam Chu?ng", R.drawable.c5)); 24 CacLaBai.add(new LaBai(5, "Nam Rô", R.drawable.d5)); 25 CacLaBai.add(new LaBai(5, "Nam Co", R.drawable.h5)); 26 CacLaBai.add(new LaBai(5, "Nam Bích", R.drawable.s5)); 27 28 CacLaBai.add(new LaBai(6, "Sáu Chu?ng", R.drawable.c6)); 29 CacLaBai.add(new LaBai(6, "Sáu Rô", R.drawable.d6)); 30 CacLaBai.add(new LaBai(6, "Sáu Co", R.drawable.h6)); 31 CacLaBai.add(new LaBai(6, "Sáu Bích", R.drawable.s6)); 32 33 CacLaBai.add(new LaBai(7, "B?y Chu?ng", R.drawable.c7)); 34 CacLaBai.add(new LaBai(7, "B?y Rô", R.drawable.d7)); 35 CacLaBai.add(new LaBai(7, "B?y Co", R.drawable.h7)); 36 CacLaBai.add(new LaBai(7, "B?y Bích", R.drawable.s7)); 37 38 CacLaBai.add(new LaBai(8, "Tám Chu?ng", R.drawable.c8)); 39 CacLaBai.add(new LaBai(8, "Tám Rô", R.drawable.d8)); 40 CacLaBai.add(new LaBai(8, "Tám Co", R.drawable.h8)); 41 CacLaBai.add(new LaBai(8, "Tám Bích", R.drawable.s8)); 42 43 CacLaBai.add(new LaBai(9, "Chín Chu?ng", R.drawable.c9)); 44 CacLaBai.add(new LaBai(9, "Chín Rô", R.drawable.d9)); 45 CacLaBai.add(new LaBai(9, "Chín Co", R.drawable.h9)); 46 CacLaBai.add(new LaBai(9, "Chín Bích", R.drawable.s9)); 47 48 CacLaBai.add(new LaBai(10, "Mu?i Chu?ng", R.drawable.c10)); 49 CacLaBai.add(new LaBai(10, "Mu?i Rô", R.drawable.d10)); 50 CacLaBai.add(new LaBai(10, "Mu?i Co", R.drawable.h10)); 51 CacLaBai.add(new LaBai(10, "Mu?i Bích", R.drawable.s10)); 52 53 CacLaBai.add(new LaBai(11, "B?i Chu?ng", R.drawable.cj)); 54 CacLaBai.add(new LaBai(11, "B?i Rô", R.drawable.dj)); 55 CacLaBai.add(new LaBai(11, "B?i Co", R.drawable.hj)); 56 CacLaBai.add(new LaBai(11, "B?i Bích", R.drawable.sj)); 57 58 CacLaBai.add(new LaBai(12, "Ð?m Chu?ng", R.drawable.cq)); 59 CacLaBai.add(new LaBai(12, "Ð?m Rô", R.drawable.dq)); 60 CacLaBai.add(new LaBai(12, "Ð?m Co", R.drawable.hq)); 61 CacLaBai.add(new LaBai(12, "Ð?m Bích", R.drawable.sq)); 62 63 CacLaBai.add(new LaBai(13, "Già Chu?ng", R.drawable.ck)); 64 CacLaBai.add(new LaBai(13, "Già Rô", R.drawable.dk)); 65 CacLaBai.add(new LaBai(13, "Già Co", R.drawable.hk)); 66 CacLaBai.add(new LaBai(13, "Già Bích", R.drawable.sk)); 67 }

Hiệu chỉnh phương thức onCreate

1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.fragment_main); 5 // tham chi?u các d?i tu?ng 6 btnChia = (Button) findViewById(R.id.btnChiaBai); 7 btnXao = (Button) findViewById(R.id.btnXaoBai); 8 kq = (TextView) findViewById(R.id.tv_Chao); 9 LaBai[0] = (ImageView) findViewById(R.id.imageView01); 10 LaBai[1] = (ImageView) findViewById(R.id.imageView02); 11 LaBai[2] = (ImageView) findViewById(R.id.imageView03); 12 // kh?i t?o l?i bài m?i 13 xaoBai(); 14 15 btnXao.setOnClickListener(new View.OnClickListener() { 16 @Override 17 public void onClick(View v) { 18 // TODO Auto-generated method stub 19 xaoBai(); 20 LaBai[0].setImageResource(R.drawable.b2fv); 21 LaBai[1].setImageResource(R.drawable.b2fv); 22 LaBai[2].setImageResource(R.drawable.b2fv); 23 kq.setText("Ch?n chia bài d? choi!"); 24 CacLaDaRut.clear(); 25 } 26 }); 27 28 btnChia.setOnClickListener(new View.OnClickListener() { 29 @Override 30 public void onClick(View v) { 31 // TODO Auto-generated method stub 32 int SoNut = 0;// de xet xem duoc may nut 33 boolean BaTay = true;// de xet truong hop 3 tay 34 String TenCaLaBai = "Ban rút du?c:\n"; 35 // h?t bài không choi n?a 36 if (CacLaBai.size() < 3) 37 { 38 kq.setText("H?t bài !\nCh?n xào bài d? choi l?i !"); 39 return; 40 } 41 // rút ba lá bài 42 Random ran = new Random(); 43 int lan1 = ran.nextInt(CacLaBai.size() - 1); 44 CacLaDaRut.add(CacLaBai.get(lan1)); 45 CacLaBai.remove(lan1); 46 47 int lan2 = ran.nextInt(CacLaBai.size() - 1); 48 CacLaDaRut.add(CacLaBai.get(lan2)); 49 CacLaBai.remove(lan2); 50 51 int lan3 = ran.nextInt(CacLaBai.size() - 1); 52 CacLaDaRut.add(CacLaBai.get(lan3)); 53 CacLaBai.remove(lan3); 54 55 LaBai xetbai; 56 // Tính nút 57 for (int i = 0; i < CacLaDaRut.size(); i++) { 58 xetbai = CacLaDaRut.get(i); 59 if (xetbai.SoNut <= 10) 60 BaTay = false; 61 62 SoNut += xetbai.SoNut > 10 ? 0 : xetbai.SoNut; 63 64 LaBai[i].setImageResource(xetbai.Hinh); 65 TenCaLaBai += xetbai.Ten + "\n"; 66 } 67 TenCaLaBai += "Ðu?c " + (SoNut % 10) + " nút !"; 68 TenCaLaBai = BaTay ? "B?n rút du?c ba tây !" : TenCaLaBai; 69 kq.setText(TenCaLaBai); 70 CacLaDaRut.clear(); 71 } 72 }); 73 }

Bước 3.          Bây giờ biên dịch và chạy

 Screenshot - 13_03_14 , 15_21_14

Hình 2.5 –       Giao diện trò chơi

Nhấn vào chia bài

Screenshot - 13_03_14 , 15_25_07

Hình 2.6 –       Giao diện sau khi chia bài

Trò chơi cho phép rút (chia bài) cho đến khi hết 52 lá bài hoặc có thể xào bài lại bằng cách chọn vào Xào bài.

Thử xem sao  nhe !

Bài tiếp theo chúng ta sẽ tùy biến tiếp giao diện cũng như tinh năng của bài này.

Advertisements

Phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s