Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 8
1

Откомментировать "Крестики-Нолики"

25.06.2013, 02:24. Показов 1324. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, ув. форумчане! Проблема такая: код нашел, и немного недопонимаю суть кода. Прошу помочь в комментировании и разъяснении. Заранее огромное спасибо!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
//---------------------------------------------//
// Функция приобразует значение символа в индекс массива
unsigned CharToPos(char ch)
{
   static const int COffs = 49;
   return (ch - COffs);
}
//---------------------------------------------//
// Вывод на экран игрового поля
void PrintField(const char* arr)
{
   static const char CField[] = " 1 | 2 | 3 \n"
                                "---+---+---\n"
                                " 4 | 5 | 6 \n"
                                "---+---+---\n"
                                " 7 | 8 | 9 \n";
   const char* ch = CField;
   while (*ch)
   {
      if (isdigit(*ch) && arr[CharToPos(*ch)])
      {
         printf("%c", arr[CharToPos(*ch)]);
      }
      else
      {
         printf("%c", *ch);
      }
      ch++;
   }
}
//---------------------------------------------//
// Фиксация хода игрока
bool SetValue(char* arr, char val, unsigned pos)
{
   bool isExecute = false;
   if (arr[pos] == 0)
   {
      arr[pos] = val;
      isExecute = true;
   }
   return isExecute;
}
//---------------------------------------------//
// Проверка на выигрыш одного из игроков
// Не стал заморачиваться и выполнил проверку всех вариантов статически
bool CheckWin(const char* arr)
{
   return (arr[0] && (arr[0] == arr[1]) && (arr[1] == arr[2])) ||
          (arr[3] && (arr[3] == arr[4]) && (arr[4] == arr[5])) ||
          (arr[6] && (arr[6] == arr[7]) && (arr[7] == arr[8])) ||
          (arr[0] && (arr[0] == arr[3]) && (arr[3] == arr[6])) ||
          (arr[1] && (arr[1] == arr[4]) && (arr[4] == arr[7])) ||
          (arr[2] && (arr[2] == arr[5]) && (arr[5] == arr[8])) ||
          (arr[0] && (arr[0] == arr[4]) && (arr[4] == arr[8])) ||
          (arr[2] && (arr[2] == arr[4]) && (arr[4] == arr[6]));
}
//---------------------------------------------//
int main()
{
   static const char CVal[] = {'x', 'o'};
   char arr[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   unsigned notUsed = sizeof(arr) / sizeof(*arr);
 
   unsigned player = 0;
   char ch;
   bool isPlay = true;
   PrintField(arr);
   while (isPlay)
   {
      printf("[%c]: ", CVal[player]);
      scanf("%c", &ch);
      fflush(stdin);
      printf("\n");
      if (isdigit(ch) && SetValue(arr, CVal[player], CharToPos(ch)))
      {
         notUsed--;
         player = !player;
      }
      PrintField(arr);
      if (CheckWin(arr))
      {
         isPlay = false;
         printf("Player '%c' is win!\n", CVal[!player]);
      }
      else if (notUsed == 0)
      {
         isPlay = false;
         printf("Draw!\n");
      }
   }
   return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2013, 02:24
Ответы с готовыми решениями:

Крестики-нолики
Всех приветствую! Написал код для крестиков-ноликов 3х3. Кто может помочь допилить его до 4х4 или...

Нечестные крестики-нолики
Суть в том, что при игре всё время ходят или &quot;нолики&quot; или &quot;крестики&quot;. Хотя в ходе &quot;разработки&quot; всё...

Сыграем в крестики-нолики?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { char r; int t1, t2; int c1; int...

Игра крестики нолики
Использовать одномерный массив из 9-ти символов для решения такой задачи. Заполнить элементы...

Крестики-нолики неверный листинг
Привет форум)Как бренный смертный ничего не понимающий в программировании я решил обратится к вам...

1
lowercase
29.06.2013, 22:12     Откомментировать "Крестики-Нолики"
  #2

Не по теме:

мне вот интересно, как выглядила бы функция CheckWin, если поле имело бы размер эдак.. 7 на 7 :D

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2013, 22:12

Крестики-нолики - найти ошибку
Крестики - нолики. Поле 3х3. Играют два игрока. Первый крестиками,второй ноликами.Ходы задаются...

Крестики-нолики: критика кода
В качестве практики, написал консольные крестики-нолики. Хотелось бы услышать мнение опытных людей....

Игровое поле для крестики-нолики
Помогите сделать игровое поле , к которому удобно будет обращаться в игре &quot;Крестики-нолики&quot;. А так...

Написать самые простые крестики-нолики
Задание по непрофильному предмету... Игра &quot;крестики-нолики&quot; должна соответствовать 5 пунктам:...

Прошу критики кода, крестики-нолики
Всем привет. Только начал изучать язык программирования Си, да и программирование в общем. Есть...

Крестики нолики не работают! Пожалуйста, объясните почему
Человечеству решительное здрасте! Пытаюсь написать (какая оригинальность!) крестики нолики. Пишу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru