Простая игра в кости в Objective-C

Моя цель - разработать игру в кости следующим образом:

Бросьте 1 кубик, если он четный, вы получаете один дополнительный кубик и теперь можете бросить 2 кубика. Если все кубики четные, вы получаете один дополнительный кубик и так далее...

Моя проблема в том, что я не могу понять, как я могу создать общий способ сделать это.

В последнее время я думал о чем-то вроде

  • n = 1
  • бросьте n*dice ("бросок" даст мне случайное число), а затем проверьте, какой кубик четный...

Может кто-нибудь сказать мне, как лучше всего идти, пожалуйста? Спасибо

Обновление После ваших комментариев я, наконец, попытался использовать NSMutableArray для хранения значений своих кубиков, что работает хорошо, ожидайте, что после сохранения значения в моем NSMutableArray оно останется то же самое и не может быть изменено, как я хотел бы, чтобы это было похоже на новый бросок костей. Я предполагаю, что это происходит из-за того, что мое случайное число хранится в неизменном NSNumber? Не могли бы вы, ребята, проверить мой код...

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) 
{   
//  my int values 
int valueOne = arc4random()%6+1;
int valueTwo = arc4random()%6+1;
int valueThree = arc4random()%6+1;
int valueFour = arc4random()%6+1;
int valueFive = arc4random()%6+1;

//  Wrapped into objects to add to my array
NSNumber* diceOne = [NSNumber numberWithInt:valueOne];
NSNumber* diceTwo = [NSNumber numberWithInt:valueTwo];
NSNumber* diceThree = [NSNumber numberWithInt:valueThree];
NSNumber* diceFour = [NSNumber numberWithInt:valueFour];
NSNumber* diceFive = [NSNumber numberWithInt:valueFive];

//  my array called "myDice"
NSMutableArray* myDice = [[NSMutableArray alloc] initWithCapacity:6];

//  add the objects
[myDice addObject:diceOne];
[myDice addObject:diceTwo];
[myDice addObject:diceThree];
[myDice addObject:diceFour];
[myDice addObject:diceFive];

//  Sorting my array
int i;
NSNumber *myObject;

for(i=0;i<[myDice count];i++)
{
    myObject = [myDice objectAtIndex:i];
NSLog(@"\n\nyour die %d is %@.",i+1, myObject);
}


return 0;

}

person user1859295    schedule 28.11.2012    source источник
comment
Вы должны разработать древовидную логику. Каждый лист будет содержать нечетное значение, и когда-то все листья будут нечетными. ваша игра заканчивается !!! это?   -  person Anoop Vaidya    schedule 28.11.2012


Ответы (2)


Возможно, это поможет вам двигаться вперед.

Когда программа запускается, у вас есть массив из 1 кубика (это может быть объект int или die). Вы «бросаете» этот кубик, генерируете случайное число от 1 до 6 (при условии, что 6-гранный кубик) для каждого элемента в массиве. У вас есть логическое значение даже = true, и когда вы перебираете массив, если значение нечетное, вы просто прерываете его, если оно повторяется, не попадая в нечетное, добавляете еще один кубик и повторяете.

person Bret Deasy    schedule 28.11.2012
comment
Привет, спасибо за идею ... Я попробую, и, наверное, мне придется использовать NSMutableArray ... - person user1859295; 28.11.2012
comment
Да, вам понадобится NSMutableArray. Решение TheAmateurProgrammer работает немного лучше, если вам не нужно отслеживать значения каждого кубика, но вы упомянули что-то о проверке того, какой кубик четный. - person Bret Deasy; 28.11.2012

Если я правильно понял ваш вопрос, все, что вам нужно, это просто простой цикл. Нет необходимости в каком-либо расширенном алгоритме или массиве вообще.

int dice=1; //Number of dice being rolled
BOOL gotOddDice = NO; //Exits the infinite loop when you get an odd dice
while(gotOddDice==YES) //Creates an infinite loop, which will escape when there's an odd dice
{
    for (int i=0;i<dice;i++)
    {
        int rolledNum = rollDice(); //Function of getting a random number from 1 - 6
        if (rolledNum%2==1) //If the rolled dice is odd
            gotOddDice = YES;
    }
    dice++; //Add another dice
}
person TheAmateurProgrammer    schedule 28.11.2012
comment
Привет. Спасибо за этот ответ. Звучит, может быть, именно так, как мне нужно. Я пытаюсь понять это в совершенстве, прежде чем пытаться. Может быть, вы можете немного прокомментировать? - person user1859295; 29.11.2012