[pascal] Японские кроссворды

Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):А потом, после того, как пользователь решит кроссворд, прочитать данные из файла и сравнить с тем, что получилось у пользователя.
Из математической модели японских кроссвордов следует то, что при одной и той же раскладке (наборе цифр по вертикали/горизонтали) может быть более одного решения. Хотя на первых порах сойдет и твой вариант. Можно и через Boolean оформить. Помимо самого поля, нужны будут данные о числах вверху и внизу. Все это объединить в один тип и сделать как

Код: Выделить всё

TRowColData = Array[1..15] of byte; // Массив чисел конкретной строки или столбца

TJСData = record
    Width : Byte;
    Height : Byte;
    Field : Array[1..120, 1..120] of Boolean;  // данные игрового поля
    RowData : Array[1..120] of TRowColData; // данные для каждой строки
    ColData : Array[1..120] of TRowColData; // данные для каждого столбца
    end;
Тип TRowColData можно заменить на String в котором числа пойдут через запятую, но тогда при обработке придется разбивать каждую строку на массив чисел.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Somewere! У меня есть к тебе просьба. Если ты мне поможешь - буду очени рад. Изображение

К этому сообщению я прикрепляю картинку японского кроссворда(самого маленького, который у меня есть).

Дело в том, что я у меня мало что получается Изображение

Ты не мог бы показать мне полностью как обрабатывать этот кроссворд. А потом я мог бы,ориентируясь по твоему примеру, обрабатывать остальные.

Мне просто больше не у кого просить помощи Изображение У меня даже учитель по практике ничего вразумительного не говорит.

У меня есть процедура заливки клеток

Код: Выделить всё


procedure zapolnenie(x,y:integer; c:char);
   begin
    x:=15; y:=15;
    repeat
     c:=readkey; if c=#0 then c:=readkey;
     case c of
      #72 : begin
             setcolor(0); circle(x,y,1); y:=y-10; setcolor(15); circle(x,y,1);
            end;

      #80 : begin
             setcolor(0); circle(x,y,1); y:=y+10; setcolor(15); circle(x,y,1);
            end;

      #75 : begin
             setcolor(0); circle(x,y,1); x:=x-10; setcolor(15); circle(x,y,1);
            end;

      #77 : begin
             setcolor(0); circle(x,y,1); x:=x+10; setcolor(15); circle(x,y,1);
            end;

      #13 : begin
             setfillstyle(1,1); bar(x-4,y-4,x+4,y+4);
             a[(x-5) div 10,(y-5) div 10]:=1;
             b[(x-5) div 10,(y-5) div 10]:=1;
             setfillstyle(1,1);
            end;

      #32 : begin
             setfillstyle(1,15); bar(x-4,y-4,x+4,y+4);
             a[(x-5) div 10,(y-5) div 10]:=0;
             b[(x-5) div 10,(y-5) div 10]:=0;
             setfillstyle(1,15);
            end;

      #48 : begin
             setfillstyle(1,3);
             bar(x-4,y-4,x+4,y+4);
             setfillstyle(1,3);
            end;
     end; {case}
    until c=#27;
    setcolor(0); circle(x,y,1);
   end;


Заранее благодарю

P.S. Все забываю упомянуть, что программа должна быть на TP 7.0
Вложения
jap5.jpg
jap5.jpg (9.23 КБ) 318 просмотров
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Что-ж, помогу с отрисовкой и заполнением, дальше сам...
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Числа кроссворда заполняются произвольно, вообщем я думаю, разберешься. Если что, спрашивай...
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

somewhere,

Спасибо, somewhere. Когда увидел результаты тестирования, чуть со стула не упал (очень хорошо ты сделал).

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

1. Объясни пожалуйста раздел type (что для чего ты используешь)

2. Не мог бы ты в 2-х словах объяснить назначение функций и процедур.
Например, функция getitemscount делает то-то, функция getmaxitemscount делает то-то.
Подробностей не нужно, только суть.

3. Не пойму где в коде ты проставляешь числа слева и сверху от кроссворда
Числа кроссворда заполняются произвольно...
Не совсем понятно, что это значит.

4. При нажатии пробела клетка, на которой стоит указатель, закрашивается. В принципе, при решении кроссворда необходимо каким-то образом отмечать клетки, которые абсолютно точно не закрашены (лично я при решении на бумаге отмечаю такие клетки х (крестиком)). В предоставленном тобой коде такой возможности нет?

5. Есть ли в предоставленном тобой коде кодирование состояния клеток взависимости от того закрашена клетка или нет (я не нашел)?

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

Сроки поджимают...

Извини за назойливость, somewhere, но больше не к кому обращаться.

Заранее спасибо.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):Не совсем понятно, что это значит.
Для проверки отрисовки числа заполнялись от балды, вовсе не факт, что такой кроссворд существует.
&quot писал(а):4. При нажатии пробела клетка, на которой стоит указатель, закрашивается. В принципе, при решении кроссворда необходимо каким-то образом отмечать клетки, которые абсолютно точно не закрашены (лично я при решении на бумаге отмечаю такие клетки х (крестиком)). В предоставленном тобой коде такой возможности нет?
Это еще раз доказывает, что типа Boolean недостаточно. Сделал тип - байт.
&quot писал(а):5. Есть ли в предоставленном тобой коде кодирование состояния клеток взависимости от того закрашена клетка или нет (я не нашел)?
Конечно есть, иначе как они рисуются. TJapanCwd.Fields[x,y] - указывает на конкретное поле.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Добавлено: загрузка и выгрузка в файл.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Спасибо за код, Somewhere!

Позволь задать пару вопросов:

1. Что делают последние 2 процедуры (ClearCrossword и CreateItemsByFields)?

2. В принципе, если пользователь при решении кроссворда допустил ошибку, то у него не получится полностью решить его правильно и картинка не получится. Но что если неопытный (или просто хитрый) юзер решит заполнить клеточки от балды. Как лучше произвести проверку правильности решения (наверное, это нужно сделать после окончания решения)?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):1. Что делают последние 2 процедуры (ClearCrossword и CreateItemsByFields)?
Суть их ясна из названия
ClearCrossword - очищает весь кроссворд. Поля и определения.
CreateItemsByFields - создает элементы(цифры вверху и слева) по полям кроссворда.
Применяется при редактировании кроссворда, хотя возможно применять в других целях.
&quot писал(а):2. В принципе, если пользователь при решении кроссворда допустил ошибку, то у него не получится полностью решить его правильно и картинка не получится. Но что если неопытный (или просто хитрый) юзер решит заполнить клеточки от балды. Как лучше произвести проверку правильности решения (наверное, это нужно сделать после окончания решения)?
Я думаю, что проверка может быть в любое время. Если он в каком-то месте допустил ошибку, то числа сверху или слева будут окрашиваться, например, красным цветом. Если нет, то как обычно.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Somewhere, подскажи пожалуйста где и как это лучше оформить. :rolleyes:

P.S. Извини за беспокойство и мою тупость. Наверняка я у тебя уже жутко достал
Ответить