Как создать игру Connect-4 с CPP(C++) в консоли.

Эта статья научит вас, как создать игру Коннект-4 в CPP, с соответствующими пояснениями и ссылками для дальнейшего изучения.

Ранее мы реализовали базовую логику игры. Если вы не видели предыдущую статью… Вы можете посмотреть их здесь. Первая часть здесь. Далее мы собираемся работать над мультиплеером и частью Game Over.

Добавление кооперативного мультиплеера

Я добавляю Кооператив сейчас, потому что он необходим для условий GameOver.

Я выставлю двух игроков: красных и синих. Внутри Connect4.h я собираюсь создать переменную, которая будет чередовать красный и синий ввод. Для этого я буду использовать логическое значение. И если ввод действителен, то смените плеер.

Для тех, кто не знает, в input() вы, возможно, видели нечто странное вроде (isRedPlayer)?”Red”:”Blue”. Это называется тернарной операцией. Что он делает, так это то, что если что-то в () истинно, тогда сделайте первое после ?, иначе сделайте то, что после :. Это как уменьшенная версия If-Else. Вы можете прочитать больше здесь".

Далее мне нужно сообщить PlayGame(), что я также отправляю Player. и добавить монету в соответствии с этим. Перед этим нам нужно установить символ в перечислении CoinState.

Тернарный оператор очень удобен. Запустите свой код. Далее мы установим игру по условию.

Добавление GameOver

Игра окончена Состояние:

  • если все монеты заполнены, нарисуйте
  • если по вертикали, горизонтали или диагонали присутствуют 4 монеты одного типа, выиграйте

Условия розыгрыша

Для проверки заполнены ли монеты. Я не хочу запускать циклы все время. Поэтому я создам переменную, которая будет считать монеты при каждом добавлении. и я проверю, равно ли это общему количеству монет, тогда это ничья.

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

Условия победы

Для этого также. Я не хочу перебирать все монеты. Если я это сделаю, я буду проверять то, что я уже проверил в предыдущем цикле обновления.

Итак, что я сделаю, так это проверю окружение монеты, которую вводит игрок. Когда игрок вводит, а затем мы кладем монету. С таким расположением и состоянием монет мы можем проверить 4 во всех направлениях, и если мы сможем попасть в любые 4 одинаковыми, то это победа.

Сначала я создам переменную, которая поможет сохранить текущего игрока в Board.h, потому что я буду проверять множество мест.

Затем нужно проверить все условия, если они верны, а затем установить isGameOver в значение true.

Вертикальный

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

Горизонтальный

Далее нам нужно проверить горизонтальность слева и справа. Здесь немного сложно. нам нужно проверить оба.

Переменные right и left используются, чтобы гарантировать, что он остановится, как только попадет монета противоположного состояния. почему? Что ж, представьте, что у нас есть ситуация, когда красный игрок просто вводит посередине. вот так
R B 'R' R R
что происходит, так это то, что цикл будет продолжать работать, даже если B будет ошибочным, а затем он увидит следующее как R, а затем увеличит счетчик. В этом случае выигрывает красный игрок. Но если вы деактивируете проверку слева после того, как она нажмет B, она не будет проверяться. Это использование left и right .

Диагональ

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

R       R
  R   R  
    R  
  R   R 
R       R

Во всех трех случаях я останавливаюсь, когда i достигает 4 или когда больше ничего не остается. и если количество больше 4, то набор доступен. так что текущий игрок выигрывает.

На этом вы, наконец, закончили игру. Запустите игру. Рефакторинг вашего кода. Если вы знаете какие-либо оптимизации, сделайте это. Это все люди.

Я не буду прикреплять сюда весь код. Я хочу, чтобы вы, ребята, сделали это сами. Я не хочу, чтобы вы просто смотрели на последний код и копировали-вставляли. Поймите код. Как работает каждая строчка и почему я так написал. Всегда имейте ясность в том, что вы кодируете. Это поможет вам стать лучшим программистом. Если хотите, прочитайте предыдущие статьи этой серии.Читайте Часть1 и Часть2

Это был интересный опыт. Спасибо всем за чтение. Оставайтесь в безопасности. Удачного кодирования.