2015-04-02 2 views
0

Я пытался улучшить свои навыки Java и решил создать игру Noughts and Crosses. Я пытаюсь реализовать условия выигрыша, поэтому игра может определить, выиграл ли «ай» или человек, и закончил игру.Поиск в словаре

Данные хранятся в HashMap как пары значений ключа. Целое число - это позиция, а строка - то, что она содержит. Строка будет "", "O" или "X".

целого числа, представляющая позиция:

1 2 3 
4 5 6 
7 8 9 

Код инициализация показывая базы данных:

Map<Integer, String> database = new HashMap<Integer, String>(); 

Во всяком случае, я пытаюсь работать, лучший способ поиска через словарь, проверяя любой из следующие условия выигрыша:

  • 3 "O" или "X" Строки в положениях 1, 2, 3 < --Horizontally
  • 3 "O" или "X" Строка в положениях 4, 5, 6 < --Horizontally
  • 3 "О" или "Х" Строка в положениях 7, 8, 9 < --Horizontally
  • 3 "О" или "X" Строка в положениях 1, 4, 7 < --Vertically
  • 3 "O" или "X" Строка в положениях 2, 5, 8 < --Vertically
  • 3 «O» или «X» Строки в позициях 3, 6, 9 < - Верно
  • 3 "O" или "X" Строки в положениях 1, 5, 9 < --Diagonally
  • 3 «О» или «Х» Строки в положениях 3, 5, 7 < --Diagonally

Должен ли я сделать большой вложенным, если заявление или случай множества, или есть способ, которым я могу более эффективно обходить это?

+0

Разве это не 'Noughts' и кресты? – Kayaman

+0

Обновлено с правильным написанием, приветствиями. –

+0

Насколько эффективны вы это хотите? Каково ваше требование к производительности? Вы действительно думаете, что это важно для 9 предметов? Что вы пробовали? Было ли это медленно? –

ответ

1

Карта - довольно странный выбор, но он будет работать независимо. Вы можете сохранить все выигрышные комбинации как 3 числа, как вы уже это сделали, затем пропустите их все, проверяя, совпадают ли все три значения в индексах. Затем определите, кто выиграл, проверив любое из этих значений.

Я бы рекомендовал создать метод checkWin(int[] indexes), который бы проверил все 3 индекса и вернул true/false, соответствуют ли они. Затем сверните все ваши предварительно созданные выигрышные комбинации, чтобы проверить победу.

Смежные вопросы