Задача: сделать крестики - нолики для двоих на безграничном поле, выигрывает, тот кто посптаит 5 в ряд.
Подскажите как сделать, чтобы поле увеличивалось вместе с окном.
И как осуществить проверку 5ти в ряд.
Спасибо.
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
| T2D |
Сообщение
#1
|
|
Гость |
Задача: сделать крестики - нолики для двоих на безграничном поле, выигрывает, тот кто посптаит 5 в ряд.
Подскажите как сделать, чтобы поле увеличивалось вместе с окном. И как осуществить проверку 5ти в ряд. Спасибо. |
![]() ![]() |
| Бравый генерал |
Сообщение
#2
|
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: Василий Репутация: -2 |
Проверка на наличие пяти меток в ряд. Сразу обозначим "пять" - понятием "выигрышное количество" (ВК). Нам нужно проверить наличие ВК меток в ряд по горизонтали, по вертикали, по диагонали, наклоненной влево, и по диагонали, наклоненной вправо. Допустим игровое поле у нас задается массивом целых чисел:
a: Array [1..10,1..10] of Byte; Допустимые значения элементов этого массива: 0 - поле пусто, 1 - на поле "крестик", 2 - на поле "нолик". (Значения могут быть и другие - это не принципиально, важно то, что они, естественно, должны быть различными Function won(X,Y,P: Byte): Boolean; где X - номер столбца массива в котором находится ячейка, куда игрок собирается поставить свою метку, Y - строка... , а P - значение поля, соответствующее метке игрока, совершающего ход (т.е. если P = 1, то в нашем случае это "крестик"). Рассмотрим случай по горизонтали. Function won(x,y,p: Byte): Boolean; i,j - границы горизонтального интервала, который полностью заполнен метками P, и который содержит поле проверяемое функцией. Изначально эти границы совпадают. Рассматриваем метки слева от нашего поля: если слева от левой границы интервала стоит метка P, то подвигаем левую границу влево. Так же мы поступаем и с правой границей: если справа от правой границы интервала стоит метка P, то подвигаем правую границу вправо. Примечание: так как игра изначально начинается с пустого поля, то размер интервалов при проверке не будет превышать 2*ВК-1, поэтому не стОит делать проверку на превышение размером интервала ВК - оно все равно почти не повлияет на время выполнения. Теперь мы "расширяем" нашу функцию для проверок остальных направлений. Думаю, разобраться в этом "расширении", а также связать массив A с игровым полем не должно вызвать сложностей. Вот полный код функции: Function won(x,y,p: Byte): Boolean; P.S. Цитата Подскажите как сделать, чтобы поле увеличивалось вместе с окном. ЧТО должно изменяться - размер ячеек или их количество? Сообщение отредактировано: volvo - |
T2D Курсовая: крестики - нолики 2.05.2006 20:13
Гость Должно изменяться количество ячеек 3.05.2006 11:53
Бравый генерал Все просто.
width, height - ширина и высота поля, … 4.05.2006 23:37
Гость Я так и делал, только у меня почему то при очень м… 5.05.2006 21:16
Гость Я использую такуб процедуру, но получается не очен… 8.05.2006 21:04
Гость Не работает твой код пяти в ряд. Вот процедура и ф… 12.05.2006 17:22![]() ![]() |
|
Текстовая версия | 24.12.2025 13:05 |