Reputation: 285
Question
I'm developing some poker software ~ purely for fun.
Now when it comes to the chips, I'm having a nightmare. One positioning them, two the denominations and THREE Selecting the ones I'll need! This seems almost impossible with my current design.
Basically, I draw an skshapenode give it the name of the denomination and the player name. However, this chip can be drawn 50 times with the same name.
When I come to animating these chips, I can only see a wall of impossibility..
once I've made a function to choose the right denominations of chips to use for a call or raise etc, how will I even begin to write this pseudo code?
I require 2 large chips, 1 small chip and 2 medium chips {
SKNode *node = [self childnodewithname:denomination, playername];
runaction..
}
Baring in mind, I'll only need to take 2 of the 20 that are there in the chip stack.. As well as change the ownership of the chip..
is this possible? or am I seriously overcomplicating the issue..?
Upvotes: 1
Views: 41
Reputation: 999
You need to rework your solution a little bit. I would do something like this:
First, subclass a SKSpriteNode (or SK whatever node you like) to make a chip:
Chip.h
@interface Chip : SKSpriteNode
@property (nonatomic, retain) NSString *player;
@property int denomination;
@end
Chip.m
@implementation Chip
- (id)initWithColor:(UIColor *)color size:(CGSize)size
{
if(self = [super initWithColor:color size:size])
{
self.name = @"chip";
}
return self;
}
@end
Now you've got something you can reasonably enumerate and inspect.
Add a bunch of chips to your game scene:
GameScene.m
-(void)didMoveToView:(SKView *)view {
for(int i = 0; i < 50; i++)
{
Chip *chip = [[Chip alloc] initWithColor:[SKColor greenColor]
size:CGSizeMake(100.0, 100.0)];
chip.player = @"some player";
chip.denomination = 10;
[self addChild:chip];
}
}
Then when it's time to pop off a certain number of the chips:
-(void)popChipsFromPlayer:(NSString *)playerName
ofDenomination:(int)denomination
numberOfChips:(int)numChips
{
__block int i;
[self enumerateChildNodesWithName:@"chip"
usingBlock:^(SKNode *node, BOOL *stop) {
Chip *chip = (Chip *)node;
if(chip.denomination == denomination &&
[playerName isEqualToString:chip.player])
{
if(i==numChips)
return;
SKAction *moveUp = [SKAction moveByX:0.0
y:200.0
duration:3];
[chip runAction:moveUp];
i++;
}
}];
}
Call the method:
[self popChipsFromPlayer:@"some player"
ofDenomination:10
numberOfChips:3];
Upvotes: 1