Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ Японские кроссворды (помогите пожалуйста!)

Автор: Alex Burn 18.03.2007 21:16

Здравствуйте! Я никогда не был ни на каких форумах(поэтому не судите пожалуйста строго).

Меня сюда привела моя курсовая по программированию: mega_chok.gif

Тема работы: «Программирование графики в Турбо Паскале. Программа для решения японских головоломок(читай "кроссвордов")».

Содержание задания: Составить программу для решения японских кроссвордов. Программа должна уметь предложить пользователю кроссворд на выбор (не менее 15), проверить правильность его решения; позволять создавать собственные рисунки для кроссвордов и запоминать их в файле.

Мне еще не давали лекций по графике, а программу нужно предоставить довольно скоро.

Помогите чем сможете.

Заранее всем благодарен! rolleyes.gif

Автор: Артемий2 18.03.2007 21:21

Расскажи, что собой представляют япон. кроссворды? smile.gif

Автор: Alex Burn 18.03.2007 21:31

Цитата(Артемий2 @ 18.03.2007 17:21) *

Расскажи, что собой представляют япон. кроссворды? smile.gif


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

Автор: Bokul 18.03.2007 21:59

Цитата
Программа должна уметь предложить пользователю кроссворд на выбор (не менее 15), проверить правильность его решения;

В программе уже должно быть "встроено" 15 разных вариантов кроссвордов? Или что значит "не менее 15"?
Как пользователь заполняет кроссворд?

Цитата
позволять создавать собственные рисунки для кроссвордов и запоминать их в файле.

т.е. она сама должна уметь генерировать кроссворды?

Автор: Alex Burn 18.03.2007 22:00

Ну вот ещё:

Входными данными для головоломки являются описания строк и столбиков этого прямоугольника, заданные в виде последовательностей длин зарисованных блоков. Например, если строка или столбик описан единственным числом 3, это означает, что в этой строке (или столбике) зарисованы в точности три клеточки, которые идут подряд (единым блоком ); если строка или столбик заданы последовательностью 2 5 3, это означает, что в этой строке или столбике есть последовательно две подряд, пять подряд и три подряд зарисованных клеточки, причем блоки длиной 2, 5 и 3 идут именно в таком порядке (считая слева направо для строк или сверху вниз для столбиков), а между разными блоками есть по меньшей мере одна незарисованная клеточка.

Вы не подскажете как в сообщение вставить картинку?

Автор: Артемий2 18.03.2007 22:12

Значит так - ты хоть что-то начни писать,а когда трудности:спрашивай!

З.Ы. Прикрепить файл в "Ответить".

Автор: Alex Burn 18.03.2007 22:18

Цитата(Bokul @ 18.03.2007 17:59) *

В программе уже должно быть "встроено" 15 разных вариантов кроссвордов? Или что значит "не менее 15"?
Как пользователь заполняет кроссворд?


т.е. она сама должна уметь генерировать кроссворды?



Программа НЕ должна уметь решать кроссворды. Она только предлагает (например, через меню) не менее 15 разных кроссвордов. Пользователь выбирает кроссворд и перед ним по идее должно быть пустое поле с клетками и цифрами сверху и слева.

А решать он должен, я думаю, так:
передвигать по клеткам поля курсор и если он считает, что ту или иную клетку нужно закрасить, то он нажимает клавишу (например, Enter) и клетка заливается. А если пользователь уверен, что эту клетку заливать не нужно то он нажимает какую-нибудь другую клавишу и там появляется крестик.
(Кроссворд черно-белый)

Добавлено через 11 мин.
[quote name='Артемий2' date='18.03.2007 18:12' post='95016']
Значит так - ты хоть что-то начни писать,а когда трудности:спрашивай!

Тысяча извинений! Просто графику мне еще не преподавали

Автор: Артемий2 18.03.2007 23:52

Тогда дай хоть картинку!

Автор: Тёмный Эльф 18.03.2007 23:53

Цитата
Мне еще не давали лекций по графике


вообще графику в паскале не знаешь??
изучай. http://rsc-team.ru/cgi-bin/index.pl?rzd=2&group=lection&ind=21 книжки читай.
затем прочитай про программирование мыши в Паскале.
ну, а кроссворд я думаю можно представить как массив.

интересная у тебя курсовая, успехов.

Автор: Alex Burn 19.03.2007 14:00

Извините, я пришел сюда совсем не подготовленный. Выне подскажете как тему закрыть?

А вот картинка

Прикрепленное изображение

Добавлено через 3 мин.

Цитата(Тёмный Эльф @ 18.03.2007 19:53) *

вообще графику в паскале не знаешь??
изучай. http://rsc-team.ru/cgi-bin/index.pl?rzd=2&group=lection&ind=21 книжки читай.
затем прочитай про программирование мыши в Паскале.
ну, а кроссворд я думаю можно представить как массив.

интересная у тебя курсовая, успехов.


Спасибо за участие и за поддержку!

give_rose.gif

Автор: Alex Burn 15.04.2007 1:35

Здравствуйте еще раз! smile.gif Не могли бы вы просмотреть следующий фрагмент:



program japanese_crossword;
uses crt, graph;
const r=11;
var p: 0..1; a,b: array[0..r,0..r] of 0..1;
i,j,n,k1,k2,ss,x,y,gm,gd:integer; c:char;
begin
detectgraph(i,j); initgraph(i,j,'c:/bp/bgi');
begin
gm:=vgahi; setgraphmode(gm); setlinestyle(0,0,1); setcolor(4);
for i:=0 to r-1 do
begin
line(20+i*20,20,20+i*20,r*20);
line(20,20+i*20,r*20,20+i*20);
end;
x:=10; y:=10;
repeat
c:=readkey; if c=#0 then c:=readkey;
case c of
#72 : begin
setcolor(0); circle(x,y,2); y:=y-20; setcolor(15); circle(x,y,2);
end;

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

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

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

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

#32 : begin
setfillstyle(1,5); bar(x-9,y-9,x+9,y+9);
a[(x-5) div 10,(y-5) div 10]:=0;
b[(x-5) div 10,(y-5) div 10]:=0;
setfillstyle(1,15);
end;
end; {case}
until c=#27;
setcolor(0); circle(x,y,2);
end;
end.




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

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

P.S. Лекций по графике так и не было, так что учусь по книжкам. unsure.gif