我想制作一个简单的记忆匹配游戏。 这是我的以下情况:我有一个levelselectionviewcontroller和一个gameviewcontroller。在我的levelselectionviewcontroller我有10个按钮(10级)。我想,当我点击1级时,我的gameviewcontroller会产生1对2对。当我点击10级时,我希望gameviewcontroller可以制作2行,3对,例如。我的最大对数是11,我的最大行数是4。
我的gameviewcontroller中的代码是
·H
#define CARDS_PER_ROW 4
#define NUMBER_OF_PAIRS 2
的.m
-(void) generateCardViews {
int positionsLeftInRow = CARDS_PER_ROW;
int j = 0; // j = ROWNUMBER (j = 0) = ROW1, (j = 1) = ROW2...
for (int i = 0; i < [self.gameModel.cards count]; i++) {
NSInteger value = ((CardModel *)self.gameModel.cards[i]).value;
CGFloat x = (i % CARDS_PER_ROW) * 121 + (i % CARDS_PER_ROW) * 40 + 285;
if (j == 1) {
x += 80; // set additional indent (horizontal displacement)
}
if (j == 2) {
x -= 160;
}
CGFloat y = j * 122 + j * 40 + 158;
CGRect frame = CGRectMake(x, y, 125, 125);
CardView *cv = [[CardView alloc] initWithFrame:frame andPosition:i andValue:value];
if (!((CardModel *)self.gameModel.cards[i]).outOfPlay) {
[self.boardView addSubview:cv];
if ([self.gameModel.turnedCards containsObject: self.gameModel.cards[i]]) {
[self.turnedCardViews addObject: cv];
[cv flip];
}
}
if (--positionsLeftInRow == 0) {
j++;
positionsLeftInRow = CARDS_PER_ROW;
if (j == 1) {
positionsLeftInRow = CARDS_PER_ROW-1;
if (j == 2) {
positionsLeftInRow = CARDS_PER_ROW-2;
}}
}
}
}
我的代码现在正在运行,但我只能更改gameviewcontroller中#define宏中的行和对。但我如何在我的levelselectionviewcontroller中#define呢? 我想要一个可重复使用的n级游戏视图控制器。
我希望我的问题是可以理解的。
答案 0 :(得分:0)
如果我理解你在写什么,你可以在gameviewcontroller.h中创建这些参数(卡片和对)作为参数(而不是常量):
@property (nonatomic, assign) int CARDS_PER_ROW;
@property (nonatomic, assign) int NUMBER_OF_PAIRS;
添加到gameviewcontroller.m:
-(id)initWithCards:(int)numCards andPairs:(int)numPairs
{
self = [Gameviewcontroller init];
if (self)
{
CARDS_PER_ROW = numCards;
NUMBER_OF_PAIRS = numPairs;
}
return self;
}
并在levelselectionviewcontroller.m中:
switch (chosenLevel):
case 1:
{
Gameviewcontroller *level = [[Gameviewcontroller alloc] initWithCards: CARDS_PER_ROW andPairs: NUMBER_OF_PAIRS];
break;
}
.
.
.
case 10:
{
Gameviewcontroller *level = [[Gameviewcontroller alloc] initWithCards: CARDS_PER_ROW andPairs: NUMBER_OF_PAIRS];
break;
}
}