Iphone Programming – Rút bài

I. Thông tin chung:
– Game đánh bài (Gamble Game) thực ra không thể thiếu được những game về bài Tây (Card)
Chương trình này giới thiệu đến bạn cách mà bạn tạo ra một bộ bài và rút bài từ trong bộ bài này.

II. Nội dung chính:
1. Đối tượng Card: (Card NSObject)
– Tạo đối tượng Card là một lớp trong C Object

* Card.h:

#import <Foundation/Foundation.h>

typedef enum {
Hearts,
Diamonds,
Spades,
Clubs
} Suit;

#define Ace   1
#define Jack  11
#define Queen 12
#define King  13

@interface Card : NSObject {
NSInteger value;
Suit suit;
}

@property (nonatomic) NSInteger value;
@property (nonatomic) Suit suit;

– (id) initWithValue:(NSInteger) aValue suit:(Suit) aSuit;

@end

* Card.m:

#import “Card.h”

@interface Card(Private)

– (NSString *) valueAsString;
– (NSString *) suitAsString;

@end

@implementation Card

@synthesize value,suit;

– (id) initWithValue:(NSInteger) aValue suit:(Suit) aSuit {
if(self = [super init]) {
self.value = aValue;
self.suit = aSuit;
}
return self;
}

– (NSString *) valueAsString {
switch (self.value) {
case Ace:
return @”Ace”;
break;
case Jack:
return @”Jack”;
break;
case Queen:
return @”Queen”;
break;
case King:
return @”King”;
break;
default:
return [NSString stringWithFormat:@”%d”,self.value];
break;
}
}

– (NSString *) suitAsString {
switch (self.suit) {
case Hearts:
return @”Hearts”;
break;
case Diamonds:
return @”Diamonds”;
break;
case Spades:
return @”Spades”;
break;
case Clubs:
return @”Clubs”;
break;
default:
return nil;
break;
}
}

– (NSString *) description {
return [NSString stringWithFormat:@”%@ of %@”,
[self valueAsString],
[self suitAsString]];
}
@end

2. Đối tượng Deck:

* Deck.h:
#import <Foundation/Foundation.h>
#import “Card.h”

@interface Deck : NSObject {

@private
NSMutableArray *cards;
}

– (void) shuffle;
– (Card *) draw;
– (NSInteger) cardsRemaining;

@end

* Deck.m:
#import “Deck.h”

@implementation Deck

– (id) init {
if(self = [super init]) {
cards = [[NSMutableArray alloc] init];
for(int suit = 0; suit <= 3; suit++) {
for(int value = 1; value <= 13; value++) {
Card *card = [[Card alloc] initWithValue:value suit:suit];
[cards addObject:card];
[card release];
}
}
}
return self;
}

int randomSort(id obj1, id obj2, void *context ) {
// returns random number -1 0 1
return (arc4random()%3 – 1);
}

– (void) shuffle {
for(int x = 0; x < 500; x++) {
[cards sortUsingFunction:randomSort context:nil];
}
}

– (Card *) draw {
if([self cardsRemaining] > 0) {
Card *card = [[cards lastObject] retain];
[cards removeLastObject];
return [card autorelease];
}

NSException* myException = [NSException
exceptionWithName:@”OutOfCardsException”
reason:@”Tried to draw a card from a deck with 0 cards.”
userInfo:nil];
@throw myException;
}

– (NSInteger) cardsRemaining {
return [cards count];
}

– (NSString *) description {
NSString *desc = [NSString stringWithFormat:@”Deck with %d cards\n”,[self cardsRemaining]];
for(int x = 0; x < [self cardsRemaining]; x++) {
desc = [desc stringByAppendingFormat:@”%@\n”,[[cards objectAtIndex:x] description]];
}
return desc;
}

– (void) dealloc {
[cards release];
[super dealloc];
}

@end

Thế là xong phần các class để chạy được một bộ bài:
3. Phần kiểm tra (Testing)
+ Bạn tạo ra 2 button sau đây:
+ Button Shuffle: Dùng để xào bài vì bộ bài lúc vừa tạo ra (init) nó chỉ theo một thứ tự duy nhất
+ Button Draw dùng để rút bài trong bộ bài ra
+ Connect 2 button này với 2 action:
+ actShufffle
+ actDraw
+ 2 nhãn (Label) dùng cho việc thể hiện:
+ lblCardRemain thể hiện số bài còn lại
+ lblDisplay thể hiện lá bài vứa rút ra

* View.h:
#import <UIKit/UIKit.h>
#import “Deck.h”

@interface MainMindViewController : UIViewController{
Deck *d;
}
– (IBAction)actShuffle:(id)sender;
– (IBAction)actDraw:(id)sender;

@property (retain, nonatomic) IBOutlet UITextField *txtDisplay;
@property (retain, nonatomic) IBOutlet UILabel *lblCardRemain;
@end

* View.m:

// LapKan Product
#import “MainMindViewController.h”

@interface MainMindViewController ()

@end

@implementation MainMindViewController

– (void)viewDidLoad
{
[super viewDidLoad];
d = [[Deck alloc] init];
}

– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
_lblCardRemain.text = [[NSString alloc] initWithFormat:@”Card Remain: %i”, [d cardsRemaining]];
}

– (IBAction)actShuffle:(id)sender {
[d shuffle];
}

– (IBAction)actDraw:(id)sender {
if ([d cardsRemaining] > 0){
NSString* cardName = [[NSString alloc] initWithFormat:@”%@”,[d draw]];
_txtDisplay.text = cardName;
} else{
_txtDisplay.text = [[NSString alloc] initWithFormat:@”Out of Cards”];
}
_lblCardRemain.text = [[NSString alloc] initWithFormat:@”Card Remain: %i”, [d cardsRemaining]];
}
– (void)dealloc {
[_txtDisplay release];
[_lblCardRemain release];
[super dealloc];
}
@end

Vậy là xong chương trình.
Khi bạn rút bài thì sẽ có thông báo bạn đã rút được lá bài nào.

Phần source sẽ được up lên sau.

Tagged: , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: