- •Разработка программного средства по развитию наглядно-образного мышления на основе игры «обобщённый танграм» Дипломный проект
- •Оглавление
- •1.2Постановка задачи 7
- •7.1. Обучение 34
- •Введение
- •1.1.3 Танграм
- •1.Постановка задачи
- •1.1Описание предметной области.
- •1.1.1Наглядно-образное мышление.
- •1.1.2 Определение креативности.
- •1.2Постановка задачи
- •1.2.1Функциональные требования
- •1.2.2 Общие требования
- •1.2.3 Требования качества и надежности
- •1.3 Аналоги
- •1.4 Характеристика выбранных программных сред и средств
- •2.Описание Базы данных
- •3.1.1 Исследование.
- •3.1.2 Формирование требований к диагностической части.
- •3.1.3 Программное выполнение поставленных подзадач.
- •3.2 Обучение
- •4. Схема функционирования пс или птс
- •5. Данные пс
- •Администрирование
- •Раздел «Администратор»
- •Создание урока
- •Работа с пс
- •Обучение
- •Начало работы. Раздел «Ученик»
- •Начало занятий
- •Режим «Обучение»
- •Режим «Диагностика»
- •Аварийные ситуации
- •Заключение
3.1.1 Исследование.
Режим «Диагностика», который начали выполнять предыдущие студенты моего руководителя – мало отличался от режима «Обучение». В нём были задействованы все те же модули и процедуры. Ученику предлагалось собирать различные силуэты из традиционного танграма (без возможности сохранения). После чего он должен был проверить их на соответствие со стандартными силуэтами из режима «Обучение». Если он собирал силуэт совпадающий с каким-то из стандартных, его поздравляли с успешным окончанием и фигуры сбрасывались в «нулевое положение», предлагая начать сначала.
Проанализировав данное направление, было принято решение не дорабатывать этот режим, т.к. то, что было сделано – в корне не соответствовало требованиям диагностического режима. Вместо этого, было предложено убрать из программной части данного модуля все процедуры и функции, отличающиеся от минимально необходимого набора для работоспособности. Вследствие чего, режим «Диагностика» стал состоять лишь из возможности перемещать и вращать фигуры традиционного танграма и собирать различные силуэты. Именно на этой основе было решено дорабатывать режим.
3.1.2 Формирование требований к диагностической части.
Руководителем мне были предложены следующие пожелания к внедрению:
• Организовать сохранение фигур собранных пользователем;
• Создать форму, где можно легко просмотреть все фигуры созданные учениками;
• В режим «Диагностика» внедрить панель быстрого просмотра последних собранных фигур, организовать отчистку этой панели после выхода из режима;
• В диагностике организовать настраиваемый режим «Соревнования». В этом режиме за заданное количество времени ученику предлагается создавать новые силуэты. Результатом соревнований является количество собранных фигур;
• В приложение внедрить матрицы размерами 3х3, 4х4 и 5х5. При прохождении диагностики за место традиционного танграма ученик будет собирать квадрат соответствующих размеров из нестандартных фигур;
3.1.3 Программное выполнение поставленных подзадач.
Ниже приведены самые важные процедуры и функции, написанные во время разработки диагностической части.
1. Сохранение фигур.
Для сохранения новых фигур используется процедура программного получения снимка экрана. Когда ученик собирает силуэт он жмет на кнопку «Готово!» и ему предлагается дать название своего силуэта. Снимок сохраняется в корневой папке программы UsersFigures. Ссылка на эту фигуру, название и имя ученика – записывается в таблицу базы данных – UsersFigures.
Далее приведены основные фрагменты кода отвечающие за сохранение фигур:
Получение снимка экрана:
Используется в обработчике нажатия кнопки «Готово» - TfrmDiagnostics.btnCheckClick.
Canva := TCanvas.Create;
B := TBitmap.Create;
DC := GetDC(0);
try
Canva.Handle := DC;
with Screen do
begin
B.Width := Width;
B.Height := Height;
B.Canvas.CopyRect(Rect(0, 0, Width, Height),
Canva, Rect(0, 0, Width, Height));
B.SaveToFile(saveway);
end
finally
ReleaseDC(0, DC);
B.Free;
Canva.Free
end ;
Сохранение фигуры в папку и базу данных:
Используется в процедуре завершения сохранения
TfrmDiagnostics.Button2Click
DM.tbUsersFigures.Open;
if (DM.tbUsersFigures.Locate('usName', edFileName.Text, [])) then
begin
MessageDlg('Силует с таким именем уже существует'#13 +
'в базе данных. Введите другое название'#13, mtWarning, [mbOk], 0);
edFileName.SetFocus;
Exit;
end;
{*запись в БД имени и ссылки для файла*}
DM.tbUsersFigures.Close;
with DM.tbUsersFigures do
begin
Open;
Insert;
FieldByName('userID').AsString:=InttoStr(User.UserId);
FieldByName('usName').AsString := edFileName.Text;
saveway:='UsersFigures\'+edFileName.Text+'.bmp';
schetik:=schetik+1;
Label4.Caption:=inttostr( schetik);
{*запись скриншота экрана в папку*}
Canva := TCanvas.Create;
B := TBitmap.Create;
DC := GetDC(0);
2. Форма «Портфолио Учеников».
Данная форма упрощенно состоит из двух кнопок и одного изображения TImage. При запуске формы SQL запросом из БД получаем список всех ссылок на фигуры, собранных пользователем. При нажатии кнопки «Вперед» и «Назад» - программа переходит к следующей или предыдущей ссылке соответственно и тут же загружает в TImage картинку из пути указанного в ссылке.
Далее приведены основные фрагменты кода формы портфолио:
SQL запрос выполняемый при запуске формы –
TfrmSaverFiler.FormCreate:
with DM.qUsersFigures do
begin
Close;
SQL.Clear;
SQL.Add('SELECT userID, usName, usLink, usDate');
SQL.Add('FROM UsersFigures');
ab:=IntToStr(User.UserId);
SQL.Add('WHERE (userID = '+ab+')');
SQL.Add('ORDER BY usDate desc');
Open;
CreateColumn;
end;
Переход к следующей ссылке - кнопка «Следующий»- TfrmSaverFiler.Button2Click
procedure TfrmSaverFiler.Button2Click(Sender: TObject);
var
way:string;
begin
way:=dbgSaverFiler.DataSource.DataSet.Fields[2].AsString;
Image1.AutoSize:=False;
Image1.Stretch:=True;
Image1.Picture.LoadFromFile(way);
label1.Caption:= dbgSaverFiler.DataSource.DataSet.Fields[1].AsString;
dbgSaverFiler.DataSource.DataSet.next;
end;
3. Внедрение панели быстрого просмотра.
Так как данная панель является уменьшенным аналогом Портфолио, то для отображения ранее собранных фигур были использованы те же методы, за исключением того, что ссылки получаются не из базы данных, а напрямую, во время сохранения новой фигуры. Для этого создан массив созданных фигур lastpict, который очищается после выхода из Диагностики:
Фрагмент кода обработки кнопки, отвечающей за сохранение фигур:
numlp:=numlp+1; // увеличиваем число элементов массива
setlength(lastpict, numlp); // увеличиваем массив
lastpict[2]:=lastpict[1] ; // передвивагем картинки
lastpict[1]:=lastpict[0];
for j := numlp-1 to 1 do
begin
LastPict[j]:=lastpict[j-1];
end;
lastpict[0]:=saveway; // приравниваем первой картинке - новую.
4. Режим Соревнование.
Во время прохождения диагностики можно нажать кнопку «Соревнование». Появится окошко с различными настройками, в числе которых – время соревнований. После нажатия «Старт» - запустится таймер и пойдет тикающий отсчет времени (в правом верхнем углу будет виден цифровой обратный отсчет). Когда ученик сохраняет фигуру переменная, отвечающая за число собранных фигур, инкрементируется, а фигуры сбрасываются в начальное положение. Когда время кончается, все данные о пользователе и о числе собранных фигур - записываются в БД и тут же выводятся на экран в виде сводной таблицы, где последний полученный результат – стоит наверху.
Далее приведены фрагменты кода, отвечающие за отсчет времени и сохранение в БД:
Таймер:
procedure TfrmDiagnostics.Timer1Timer(Sender: TObject);
begin
d2:=D2+1;
Label2.Caption:=FloatTOStr((vremya-d2)); // цифровой отсчет
if tikon then PlaySound('tik.wav', 0, SND_ASYNC); // тикающий звук
if (d2=vremya) then begin
Timer1.Enabled:=false;
Button4Click(Self); // запуск сохранения
end;
Сохранение:
procedure TfrmDiagnostics.Button4Click(Sender: TObject);
var temp:integer;
begin
if (dbgDiagnostics.Visible=False )then
begin
Timer1.Enabled:=False;
edFilename.Enabled:=false;
edFilename.Visible:=false;
Button2.Visible:=false;
Button2.Enabled:=false;
PlaySound('final.wav', 0, SND_ASYNC);
SorevTime:=(D2-D1);
with DM.tbSorev do
begin
Open;
Insert;
FieldByName('SorevID').AsString:=InttoStr(User.UserId);
FieldByName('SorevScore').AsInteger := score;
FieldByName('SorevTime').AsFloat:=Sorevtime;
temp:=dbgMini.DataSource.DataSet.RecordCount;
Post;
Close;
end;
with DM.qSorev do
begin
Close;
SQL.Clear;
SQL.Add('SELECT SorevID, SorevScore, SorevTime');
SQL.Add('FROM Sorev');
SQL.Add('WHERE(SorevID<>Date())');
// ab:=IntToStr(User.UserId);
//SQL.Add('WHERE (userID = '+ab+')');
SQL.Add('ORDER BY SorevScore desc');
Open;
CreateColumn;
DbgMini.DataSource.DataSet.MoveBy(temp)
end;
end else
begin
with DM.qSorev do SQL.Clear;
dbgDiagnostics.Visible:=False;
end;
end;
5. Матрицы 3х3, 4х4 и 5х5.
Для создания новых типов фигур потребовалась широкая доработка модулей uFigure и uglGraphic. Так как эти матрицы отличаются лишь типами фигур и их количеством, принцип их создания будет объяснен на примере 3х3.
Традиционные фигуры танграм просты и симметричны, а значит могут строится методом различных математических формул. Нестандартные фигуры кроме обычных прямоугольников бывают Z, Г и Т-образные и их очень сложно описать одной строкой. Вследствие чего, было принято решение вручную записать положение примитивов из которых строится фигура. Для каждой фигуры записывалось все её возможные положения. По обработке нажатия правой кнопкой мыши на фигуру – её положение менялось на следующие и так далее. Таким образом задавались все сложные фигуры.
При запуске Диагностики – было внедрена промежуточная форма выбора, в которой ученик выбирал между Традиционным танграмом, 3х3, 4х4 и 5х5. После чего параметры передавались в модули uFigure и uglGraphic и Диагностика запускалась с нужными фигурами.
Далее приведены фрагменты кода реализующие матрицу 3х3:
Процедура передачи параметров о типе диагностики.
procedure TfrmTipDiag.BitBtn2Click(Sender: TObject);
begin
udiagnostics.tiptann:=85;
udiagnostics.quanto:=3;
udiagnostics.init:='85';
if not Assigned(frmDiagnostics) then begin
frmDiagnostics := TfrmDiagnostics.Create(Application);
frmDiagnostics.Show;
end
else Application.Terminate;
frmTipDiag.close;
end;
фрагмент из процедуры задающей координаты:
85:begin
if (GRAD1=0) then begin
i:=0;
SetfizC(x,i,0);
SetfizC(y,i,1);
i:=1;
SetfizC(x+50,i,0);
SetfizC(y,i,1);
i:=2;
SetfizC(x+50,i,0);
SetfizC(y+100,i,1);
i:=3;
SetfizC(x,i,0);
SetfizC(y+100,i,1);
end;
if (GRAD1=1) then begin
i:=0;
SetfizC(x,i,0);
SetfizC(y,i,1);
i:=1;
SetfizC(x+100,i,0);
SetfizC(y,i,1);
i:=2;
SetfizC(x+100,i,0);
SetfizC(y+50,i,1);
i:=3;
SetfizC(x,i,0);
SetfizC(y+50,i,1);
end;
end;
отрисовка фигуры по заданным координатам была выполнена, используя существующий модуль uglGraphic и полученные знания в OpenGl:
ColortoGL(col, 1);
glBegin(GL_POLYGON);//режтм треугольников
for j := 0 to 3 do
glVertex2f(F[i].GetfizC(j,0), F[i].GetfizC(j,1));
glEnd;
end;
Запуск необходимой диагностики. Фрагмент из обработчика FormCreate
ufigure.lol:=tiptann;
schetik:=0;
SetLength(Figures, quanto);
InitFigures(Figures, init);
