Trung Tâm Đào Tạo Mạng Máy Tính Nhất Nghệ

Trung Tâm Đào Tạo Mạng Máy Tính Nhất Nghệ (http://www.nhatnghe.com/forum/index.php)
-   LẬP TRÌNH iOS (http://www.nhatnghe.com/forum/forumdisplay.php?f=154)
-   -   Game Đổ xúc xắc - PHẠM QUANG ANH KIỆT (http://www.nhatnghe.com/forum/showthread.php?t=387569)

nickykiet83 14-06-2012 19:14

Game Đổ xúc xắc - PHẠM QUANG ANH KIỆT
 
Tạo trước chủ đề thôi, tối nay mới làm! he..he...

nickykiet83 15-06-2012 11:40

Game Đổ Xúc Xắc - PHẠM QUANG ANH KIỆT
Mô tả yêu cầu:
1 - Trò chơi có 2 xúc xắc
2 - Mỗi lần chạy ứng dụng, cho người chơi 100 điểm
3 - Người chơi có thể chọn Tài hoặc Xỉu (Tài <=6, Xỉu >6). Rồi click nút Đổ xúc xắc
4 - Người chơi cũng có thể cược thêm số điểm.
5 - Nếu thắng, người chơi được cộng thêm 20 điểm và số điểm đã cược thêm. Nếu thua, bị trừ 20 điểm và số điểm đã cược thêm
6 - Nếu tổng điểm của người chơi <= 0 điểm, hiện thông báo "Bạn không còn đủ điểm để tiếp tục chơi" và không được Đổ xúc xắc nữa.

Hiện thực chuơng trình:
- Chuơng trình có sử dụng đối tượng NSTimer để quay xúc xắc. Mỗi lần Timer chạy sẽ đổi hình xúc xắc ngẫu nhiên.

1) Thiết kế giao diện và ánh xạ các layout + action như sau:

https://lh4.googleusercontent.com/-h...TJg/s800/1.png

*Ghi chú: Biến int Diem là biến toàn cục. Biến này dùng để tạo số điểm thắng/thua mỗi lần quay xúc xắc. Theo yêu cầu là 20 điểm cho mỗi lần quay.

2) Viết code như sau tại file .m

PHP Code:


@implementation GameDoXucXacViewController

//biến static (tĩnh) dùng để Stop timer lại. Vì Timer mỗi lần
//chạy lại hàm QuayXucXac thì biến này sẽ bị reset lại = 0 
//nên phải dùng biến tĩnh để không bị thay đổi giá trị.
static int count;

- (
void)viewDidLoad
{
    [
super viewDidLoad];
    
TongDiem 100;
    
Diem 20;
    
lblTongDiem.text = [NSString stringWithFormat:@"%i",TongDiem];
    
lblKetQua.text = @"";
    
imgViewKetQua.hidden YES;
    
sliderDiemCuoc.minimumValue=0;
    
sliderDiemCuoc.maximumValue=100;
    
sliderDiemCuoc.value =0;
    
lblDiemCuoc.text = @"0";
}

[
B]//hàm xử lý sự kiện Button Đổ xúc xắc được Touch[/B]
- (IBAction)btnDoXucXac:(id)sender {
    if(
TongDiem <=0)
    {
        
UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Thông Báo"
                                                      
message:@"Bạn không còn đủ điểm để tiếp tục chơi" 
                                                     
delegate:self
                                            cancelButtonTitle
:@"OK"
                                            
otherButtonTitles:nil];
        [
alert show];
        [
alert release];
        return;
    }
    
    
//Disable Slider Điểm Cược khi bắt đầu quay xúc xắc
    
sliderDiemCuoc.enabled NO;
    
imgViewKetQua.hidden YES;
    
lblKetQua.hidden YES;
    
switchTaiXiu.enabled NO;
    

    
timer = [NSTimer scheduledTimerWithTimeInterval:0.1
                                             target
:self
                                           selector
:@selector(QuayXucXacuserInfo:nil
                                             repeats
:YES];
//Đối tượng Timer sẽ gọi hàm QuayXucXac trong khoảng thời gian: 0.1 giây

}

-(
void)QuayXucXac{
    
//Disable Slider Điểm Cược khi bắt đầu quay xúc xắc
    
sliderDiemCuoc.enabled NO;
    
//biến dùng để lấy tên hình
    
NSString *imgxx;
    
//biến lưu số phát sinh ngẫu nhiên
    
int intrandom1,intrandom2;
    
    
//phát sinh số ngẫu nhiên từ 1->6
    
intrandom1 arc4random()%6+1;
    
imgxx = [NSString stringWithFormat:@"%i",intrandom1];
    
//set tên hình vào ImageView Xúc xắc 1
    
imgViewXucXac1.image = [UIImage imageNamed:imgxx];
    
    
//phát sinh số ngẫu nhiên từ 1->6
    
intrandom2 arc4random()%6+1;
    
    
imgxx = [NSString stringWithFormat:@"%i",intrandom2];
    
//set tên hình vào ImageView Xúc xắc 2
    
imgViewXucXac2.image =[UIImage imageNamed:imgxx];
    
     
//count tăng đến 40 thì ngưng timer
    
if (count>=40)
    {
        
//reset lai bien count;
        
count 0;

        [
timer invalidate];
        
int soDiem;
        
soDiem intrandom1 intrandom2;
        
int diemcuoc = (int)sliderDiemCuoc.value;
        
        
//tai <= 6
        
imgViewKetQua.hidden NO;
        
lblKetQua.hidden NO;
        if(
switchTaiXiu.on)
        {
            if(
soDiem<=6)
            {
                
lblKetQua.text = @"WIN: +20 Điểm";
                
imgViewKetQua.image = [UIImage imageNamed:@"emoticon"];
                
                
//Tổng Điểm = Điểm thắng/thua +/- Điểm cược
                
TongDiem TongDiem + (Diem diemcuoc);
            }
            else {
                
lblKetQua.text = @"LOSE: -20 Điểm";
                
imgViewKetQua.image = [UIImage imageNamed:@"lose"];
             
                
//Tổng Điểm = Điểm thắng/thua +/- Điểm cược
                
TongDiem TongDiem - (Diem diemcuoc);         
            }
        }
        else {
        
//xiu >=6
            
if(soDiem>=6)
            {
                
lblKetQua.text = @"WIN: +20 Điểm";
                
imgViewKetQua.image = [UIImage imageNamed:@"emoticon"];
                
                
//Tổng Điểm = Điểm thắng/thua +/- Điểm cược
                
TongDiem TongDiem + (Diem diemcuoc);;
            }
            else {
                
lblKetQua.text = @"LOSE: -20 Điểm";
                
imgViewKetQua.image = [UIImage imageNamed:@"lose"];
                
                
//Tổng Điểm = Điểm thắng/thua +/- Điểm cược
                
TongDiem TongDiem - (Diem diemcuoc);
            }
        }
        
    
lblTongDiem.text = [NSString stringWithFormat:@"%d",TongDiem];
        
//Enable Slider Điểm Cược khi kết thúc quay xúc xắc
        
sliderDiemCuoc.enabled YES;
        
switchTaiXiu.enabled YES;
    }
    
count ++;


Kết quả khi chạy ứng dụng:

https://lh3.googleusercontent.com/-Y...t1g/s800/4.png


https://lh6.googleusercontent.com/-w...dCI/s800/5.png


https://lh3.googleusercontent.com/-J...s7A/s800/6.png

iThanh 15-06-2012 11:56

Chưa học mà đã làm được, bác này giỏi quá!
pro pro

mankichi4589 15-06-2012 12:24

Hay quá anh! :JFBQ00214070517A: À có một lỗi nhỏ là intrandom2 = arc4random()%5+1; kết quả nó chỉ ra từ 1 đến 5 thôi anh (vì % là lấy số dư nên %5 chỉ ra kết quả là 0,1,2,3,4). Phải %6+1 nó mới từ 1 đến 6.
p/s : học hỏi cái NSTimer :D

nickykiet83 15-06-2012 13:34

Trích:

Nguyên văn bởi mankichi4589 (Post 1251909)
Hay quá anh! :JFBQ00214070517A: À có một lỗi nhỏ là intrandom2 = arc4random()%5+1; kết quả nó chỉ ra từ 1 đến 5 thôi anh (vì % là lấy số dư nên %5 chỉ ra kết quả là 0,1,2,3,4). Phải %6+1 nó mới từ 1 đến 6.
p/s : học hỏi cái NSTimer :D

Ờ... Đúng rùi! Thanks bạn nhé!!

nguyenphu1012 15-06-2012 21:20

hihi, sao so điểm thắng thua đều là 20d vậy? số điểm cược để làm gì vậy
:JFBQ00213070516A:

nickykiet83 16-06-2012 00:03

Trích:

Nguyên văn bởi nguyenphu1012 (Post 1253680)
hihi, sao so điểm thắng thua đều là 20d vậy? số điểm cược để làm gì vậy
:JFBQ00213070516A:

Thắng được cộng 20d, thua bị trừ 20đ.
Số điểm cươc thêm nếu bạn muốn kiếm thêm điểm ngoài số điểm 20
Mình demo thì chỉ chụp màn hình để dễ hình dung ứng dụng thôi bạn!

mrvdkpro 20-06-2012 00:52

Cho mình hỏi cái slider sao mình kéo nó ko hiện số ở trên vậy bạn dù nó vẫn tính đúng nhưng ko thấy đc số :(

mrvdkpro 20-06-2012 08:13

À mình làm đc rùi thanks mấy bạn nhìu nha lên gg tìm sáng giờ :D

cubo22cubo22 14-09-2012 10:05

cho mình xin source code cái game này được không


Múi giờ GMT +7. Hiện tại là 18:20

Powered by: vBulletin Version 3.8.7
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Ad Management by RedTyger