Основная угадывающая игровая механика в C # - PullRequest
0 голосов
/ 16 октября 2011

У меня был довольно небольшой опыт в программировании (три семестра преподавания VBasic, C ++ и Java), и теперь я учусь в колледже и беру класс C #, что довольно скучно (учитель знает меньше, чем я).

В любом случае, для одного из наших упражнений мы создаем игру в угадывание чисел / лотерею. Это работает примерно так:

  • Пользователь вводит три целых числа от 1 до 4 и отправляет клики (они хранятся в массиве)
  • Программа генерирует три числа из 1-4 (также в массиве)
  • Функция, которая проверяет совпадения и проверяет два массива
    • Если все три совпадают по порядку (то есть 1,2,3 = 1,2,3 и НЕ 1,2,3 = 1,3,2), совпадение = 4
    • Если все три соответствуют НЕ по порядку, совпадение = 3
    • Если только два совпадения, совпадение = 2
      • Я хочу убедиться, что только одно совпадение считается одним (т.е. [1,1,2] [1,2,3] дает только одно совпадение пользователю.
    • Если совпадение только одно, совпадение = 1
    • Если совпадений нет, совпадение остается на 0 (оно создается в submit_click)

У меня есть весь код и графический интерфейс, кроме соответствующей логики. Я знаю, что мог бы сделать это с БОЛЬШИМ количеством утверждений if, и я знаю, что дела, вероятно, будут работать, но я не так опытен с делами.

Я не ожидаю, что моя «домашняя работа» будет здесь сделана, но я просто хочу знать, какой метод был бы наиболее эффективным для правильной работы этого (если проще исключить одно совпадение для каждого элемента, тогда это нормально ) и, возможно, увидеть какой-нибудь рабочий код.

Спасибо!

EDIT

Я прошу прощения, если я нахожу себя высокомерным, я не хотел показаться всезнайкой (определенно нет).

Я НЕ преподавал классы, я только что брал уроки у учителя, который в основном занимается программированием, и я учусь в местном колледже, и мой профессор в основном не учитель программирования.

Мне не потребовалось время, чтобы написать тонну утверждений if, потому что я знаю, что это будет расстреляно как неэффективное. В настоящее время у меня нет ресурсов для проверки ответов, но как только я смогу проверить их и отправить обратно.

Опять же, я прошу прощения за грубость и надменность, и я ценю ваши ответы больше, чем вы знаете.

Еще раз спасибо!

Ответы [ 2 ]

1 голос
/ 16 октября 2011

Вы можете использовать цикл для достижения этой функциональности.Я использовал список просто для простоты использования, выполнения remove операций и тому подобного.Примерно так должно работать:

public static int getNumberOfMatches(List<int> userGuesses, List<int> machineGuesses) {
    // Determine list equality.
    bool matchedAll = true;
    for (int i = 0; i < userGuesses.Count; i++) {
        if (userGuesses[i] != machineGuesses[i]) {
            matchedAll = false;
            break;
        }
    }

    // The lists were equal; return numberOfGuesses + 1 [which equals 4 in this case].
    if (matchedAll) {
        return userGuesses.Count + 1;
    }

    // Remove all matches from machineGuesses.
    foreach (int userGuess in userGuesses) {
        if (machineGuesses.Contains(userGuess)) {
            machineGuesses.Remove(userGuess);
        }
    }

    // Determine number of matches made.
    return userGuesses.Count - machineGuesses.Count;
}
0 голосов
/ 16 октября 2011

Я думаю, что для первого случая, для всех совпадений, чтобы вы могли сканировать массивы вместе и, возможно, увеличить счетчик. Так как вы упомянули, что знаете c ++, это будет

  int userGuesses[3];
  int randomGen[3];

  int matches = 0;
  for(int i=0; i < 3; i++) if(userGuesses[i] == randoGen[i]) matches++;

  if(matches == 3) //set highest score here.
  if(matches == 2) // next score for ordered matches etc.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...