|
Вопрос # 5 420/ вопрос решён / |
|
Здравствуйте!
Подскажите пожалуйста в чем может быть ошибка.
на форме есть 36 изображений. по клику на них они открываются(в зависимости от выбора или по 2 или по три)
когда открыто кол-во К(2 или 3) необходимо осуществить проверку, одинаковые открыт или нет.
как поняла из работы программы, картинки открываются разные, значит в масивы заносятся разные названия картинок и номера тех по которым щелкнули, однако после проверки на "одинаковость" прграмма переходит в ту часть программы, которая для одинаковых картинок, даже если они были разными.
Приложение: Переключить в обычный режим- var
- Form1: TForm1;
- kol:2..40;
- mas:array[1..36]of string[10]; {massiv kartinok}
- v:array[1..3]of string[10]; {imea vibrannih kartinok}
- n:array[1..3]of byte; {nomera vibrannih kartinok}
- vibor:byte; {skoliko uje vibrali [0..3]}
- k:byte;{po skoliko otkrivati [dva ili tri]}
- time:word; {vremea ojidania polse klika po kartinke}
- stop:word; {chislo ugadannih par kartinok}
- sek,min,mesto:integer;
- sek1,min1:string;
-
- procedure TForm1.ImageClick(Sender: TObject);
- var para:integer;
- begin
- with (sender as Timage) do
- Picture.LoadFromFile('foto\'+mas[tag]+'.bmp'); //pokajem chto igrok vibral
- inc(vibor); // uvelichivaem vibor na 1
- v[vibor]:=mas[tag]; // imea kartinki
- n[vibor]:=tag; //nomer kartinki kuda shelknul igrok
- Form1.Refresh; //pererisovka
- sleep(time); //jdem zadannoe vremea
- if vibor=k then check;
- // if vibor=k then Check; //proveream
- end;
-
- Procedure TForm1.Check; {poroveream odinakovie li kartinki}
- var flag: boolean;
- i, j: byte;
- qw, kolprob: integer;
- prom: Tplayer;
- Stroka, slovo: string;
- stfile:textfile;
- begin
- flag:=true;
- for i:=1 to k-1 do
- begin
- if (v[i]<>v[i+1]) then
- begin
- flag:=false; {raznie!}
- break;
- end;
- end;
-
- if flag then
- begin {pravilino ugadal}
- for i:=1 to k do
- TImage(FindComponent('Image'+IntToStr(n[i]))).Picture.LoadFromFile('foto\null.bmp');
- stop:=stop+k; //uvelichim chislo ugadannih
- end
- else
- begin {ne pravilino ugadal}
- for i:=1 to k do
- TImage(FindComponent('Image'+IntToStr(n[i]))).Picture.LoadFromFile('foto\0.bmp');
- end;
- vibor:=0;
 |
Вопрос задала: MerryJane (статус: Посетитель)
Вопрос отправлен: 17 июня 2011, 13:26
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 35; последнее сообщение — 17 июня 2011, 17:33; участников в обсуждении: 3.
Страницы: [1] [2] [Следующая »]
|
min@y™ (статус: Доктор наук), 17 июня 2011, 13:35 [#1]:
Вопрос написан по-русски, но почему комментарии в коде транслитом-то?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MerryJane (статус: Посетитель), 17 июня 2011, 13:39 [#2]:
аа исправить забыла)= потому что программу что бы сдать переношу с компа домашнего на вузовский и русский язык вопросами становится
|
|
Gooddy (статус: 3-ий класс), 17 июня 2011, 13:50 [#3]:
Честно, при всём желании не могу разобраться. Код слишком спагетти, всё таки лучше переписать.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 17 июня 2011, 13:51 [#4]:
Цитата (MerryJane):
потому что программу что бы сдать переношу с компа домашнего на вузовский и русский язык вопросами становится
На вузовском компе windows китайский?
Дам несколько бесплатных советов.
1. Для того, чтобы понять как себя ведёт программа во время выполнения, и, самое главное, почему, в delphi есть отладчик, воспользуйся им.
2. Форматируй код нормально и пиши побольше комментариев, иначе никто его читать не будет. Код пишется для человека, а не для компа.
3. Количество глобальных переменных должно всегда стремиться к нулю! Чем их меньше, тем быстрее локализовывать ошибки времени выполнения.
4. Имена идентификаторов должны быть осмысленными (нести смысловую нагрузку), а не быть одно- или двух буквеными, типа a, b, с, х, у, й, z и т.д. Так программу легче анализировать. Также, не используй имена компонентов и модулей, которые назначаются им по умолчанию (Form1, Button2, Unit100500). Давай им осмысленные имена.
5. Разбивай общую задачу на подзадачи, которые, в свою очередь, тоже разбивай на более мелкие отдельные блоки, которые оформляй в виде функций, желательно независимых друг от друга.
Теперь по делу. Скажи мне, что у тебя делает метод TForm1.Check()? Я нихрена не понял не то что его работу, а вообще смысл.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MerryJane (статус: Посетитель), 17 июня 2011, 13:52 [#5]:
я моу все объяснить(= что во всех процедурах делается, честно!)
|
|
Gooddy (статус: 3-ий класс), 17 июня 2011, 13:55 [#6]:
min@y™:
2. Комментарии нужны для плохого кода. Хороший код сам себе и блок-схема и комментарий.
С остальным согласен.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 17 июня 2011, 13:55 [#7]:
Кстати, 36 картинок - это колода карт, да?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 17 июня 2011, 13:56 [#8]:
min@y™: не, просто картинки.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 17 июня 2011, 13:57 [#9]:
Цитата (Gooddy):
Комментарии нужны для плохого кода. Хороший код сам себе и блок-схема и комментарий.
С остальным согласен.
Когда начнёшь писать серьёзные программы, тогда поймёшь, что был неправ.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MerryJane (статус: Посетитель), 17 июня 2011, 14:00 [#10]:
В первом цикле for проверяет, одинаковые ли картинки были открыты, и возвращает в зависимости от этого значение переменной flag( =false если разные. проверяет по именам картинок хранящихся в массиве V.
дальше если картинки открыты одинаковые он меняет их изображения на изображение null(просто серый квадрат цвета фона. типа убраны с формы). и увеличивает кол-во угаданных картинок на k(это по скольку картинок открывать по три или по две) . когда кол-во угаданных станет равно кол-ву всего картинок программа выведет сообщение "игра окончена"
если открыты разные картинки то они"закрываются" загружается картинка "рубашка "их. вот
|
|
min@y™ (статус: Доктор наук), 17 июня 2011, 14:03 [#11]:
Цитата (MerryJane):
я моу все объяснить(= что во всех процедурах делается, честно!)
Для начала объясни, что долна делать программа вцелом. Потом вместе попытаемся разбить её на подзадачи и подподзадачи. Судя по коду, проект надо грохнуть и написать заново. Пару часов времени у меня ещё есть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 17 июня 2011, 14:07 [#12]:
Цитата (MerryJane):
В первом цикле for проверяет, одинаковые ли картинки были открыты
Как производится проверка на то, что картинки одинаковые? Это ж самое главное! Что является критерием идентичности картинок и как этот критерий задаётся до проверок?
Отдели, наконец, зёрна от плевел, а мух - от котлет.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MerryJane (статус: Посетитель), 17 июня 2011, 14:09 [#14]:
if (v[i]<>v[i+1]) then < вот разные картинки
begin
flag:=false;
|
|
MerryJane (статус: Посетитель), 17 июня 2011, 14:10 [#15]:
имена сравнивает у картинок имена записаны в массив
|
|
min@y™ (статус: Доктор наук), 17 июня 2011, 14:20 [#16]:
Да понял я. Ну пройдись в отладчике по этому циклу и посмотри значения переменных. У тебя там явная ошибка, т.к. до присваивания flag:=false выполнения не доходит, цикл кончается и flag остаётся равным True.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MerryJane (статус: Посетитель), 17 июня 2011, 14:21 [#17]:
если так значит v заолнен одинаковыми именами)=
|
|
MerryJane (статус: Посетитель), 17 июня 2011, 14:26 [#18]:
да действительно v[i] всегда равно v[i+1] а значит что в процедуре imageClick дело)+
|
|
MerryJane (статус: Посетитель), 17 июня 2011, 14:29 [#19]:
v[vibor]:=mas[tag]; // imea kartinki
n[vibor]:=tag;
vibor считается а tag всегда ноль.
|
|
min@y™ (статус: Доктор наук), 17 июня 2011, 14:30 [#20]:
Цитата (MerryJane):
если так значит v заолнен одинаковыми именами)=
Или пустыми строками.
Включу телепатор.
Судя по скриншоту, программа является тренажёром зрительной памяти. Перед игрой все каринки открываются, а юзер должен запомнить, где находятся одинаковые картинки, а потом их последовательно открывать. Одинаковые картинки - это либо 18 пар, либо 12 троек? Выграл, когда последовательно открыл все одинаковые картинки, да? Я правильно понял?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|