gpt4 book ai didi

ios - 发牌、玩牌

转载 作者:行者123 更新时间:2023-11-28 19:52:19 26 4
gpt4 key购买 nike

问题

我以前从未制作过纸牌游戏,目前遇到了一些困难。

但是,我已经设法创建了套牌等。

-(NSMutableArray *)arrayWithDeck:(id)sender
{
[sender removeAllObjects];
NSArray *faces = [[NSArray alloc] initWithObjects:@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K", nil];
NSArray *suits = [[NSArray alloc] initWithObjects:@"h",@"d",@"c",@"s", nil];
for (int i = 0; i < 52; i++) {
NSString *cardToAdd = [NSString stringWithFormat:@"%@%@", faces[i % 13], suits[i / 13]];
[sender addObject:cardToAdd];
}
return sender;
}

然后把牌发给玩家(目前只发给一个玩家)

-(void) dealPlayersWithPlayers: (int) players withDealtCards: (int) dealt {
if (players == 2){
__block float add = 0;
for (int i = 0; i < dealt; i++) {
add = add + ((self.frame.size.width / 100) * 10);
NSString *imageName = [NSString stringWithFormat:@"%@", deck[i]];
NSString *bundle = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:bundle];
SKTexture *texture = [SKTexture textureWithImage:image];
cardDisplay = [SKSpriteNode spriteNodeWithTexture:texture];
cardDisplay.size = CGSizeMake(104, 144);
cardDisplay.anchorPoint = CGPointMake(0.5, 0.5);
cardDisplay.position = CGPointMake(-self.frame.size.width/2.5 + add, -218);
cardDisplay.zPosition = 1;
cardDisplay.userInteractionEnabled = NO;
cardDisplay.name = [NSString stringWithFormat:@"card"];
[self addChild:cardDisplay];
}
}
}

然后当 touchesBegan 时,它会在卡片上动画到屏幕中心,即“放置卡片”按钮的前期阶段。但是,我真的很难找到一种方法来跟踪按下的卡片。即,卡片是 Js、Ah、8c 还是任何它可能是显然可以使用的东西,但是 SKSpriteNode.name 已经被用于检测 touchesBegan。

我遇到的另一个问题是牌的放置时间。他们弄乱了 z-index。然而,解决这个问题的一个简单方法是继续增加 z-index,但这是最好的方法吗?我这里的例子说明了我在说什么。

enter image description here enter image description here

最佳答案

我想说的是,您让它们进行渲染并向上移动,这是一个良好的开端。

不过,我的建议是查看 MVC( Model View Controller )方法来解决该问题。将玩过的牌的信息和玩家拥有的牌保存在一个单独的对象中,与您的 View 无关。这样当你触摸你的卡片时,你可以让你的 Controller 与你的模型一起识别它并决定接下来会发生什么。如果您仅在 SKSpriteNode 上中继并查看其名称而没有指向它的指针来与任何东西进行比较,那么将很难管理游戏。

至于排序你的 z 索引,你的模型会知道哪张牌首先被添加到你的手中,然后你的 Controller 可以通知 View 适当的位置和 z 索引。

至少我会考虑子类化 SKSpriteNode 并制作一个 CardSpriteNode 至少这样你就不必查看用于触摸的 sprite 名称,只需检查它是否是 CardSpriteNode。

if ([node isKindOfClass:[CardSpriteNode class]])
//handle touch logic if a card

MVC 是一个简单的概念,我会看一些关于它的文章。每个人对于可以看到什么的方法略有不同,但所有人都同意将信息分开。

希望对您有所帮助。

关于ios - 发牌、玩牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28518004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com