Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2018, 11:13   #1
Анжелика2
Новичок
Джуниор
 
Регистрация: 19.06.2018
Сообщений: 3
По умолчанию Игра меморина

Здравствуйте! Нужна помощь, по созданию игры меморина.
Она заключается в нахождении пар (у меня не картинок, а пары слов, например Кровать - сон)
Интерфейс готов, на форме 2 кнопки Button (начать и далее на след уровень)
Помощь нужна именно в том, что при нажатии например на a[1,1] открывается карточка с словом, при нажатии на другую например a[3,2] открывается другое, и если они составляют пару, остаются слова на поле, иначе исчезают.
Создан массив 4 на 4
при нажатии на начать
Код:
procedure TForm5.Button1Click(Sender: TObject);
begin
for i:=1 to 4 do
for j:=1 to 4 do begin
a[i,j]:=tbitbtn.Create(self);
 a[i,j].Width  :=150;
  a[i,j].Height:=150;
 a[i,j].Font.Color:=clBlue;
 a[i,j].Font.Size:=16;
a[i,j].Left:=120+(j-1)*a[i,j].Width ;
a[i,j].Top:=40+(i-1)*a[i,j].Height;

a[i,j].onClick:=P; 
a[i,j].Parent:=Self;
end;
end; 

Procedure TForm5.P(Sender:Tobject);
var
  Form5: TForm5;
  i,j:integer;
  a: array [1..4,1..4] of TBitBtn;
 b: array [1..8] of  string;  c: array [1..8] of string;
 begin

if ((Sender As TBitBtn).Left=120 ) and ((Sender As TBitBtn).Top=40 )then
b[1]:='Ball';
(Sender AS TBitBtn). Caption:=b[1];

if ((Sender As TBitBtn).Left=270 ) and ((Sender As TBitBtn).Top=40 ) then
begin
b[2]:='Apple';
(Sender AS TBitBtn). Caption:=b[2];
end;

if ((Sender As TBitBtn).Left=420 ) and ((Sender As TBitBtn).Top=40 ) then
begin
b[3]:='Sleep';
(Sender AS TBitBtn). Caption:=b[3];
end;

if ((Sender As TBitBtn).Left=570) and ((Sender As TBitBtn).Top=40 ) then
begin
b[4]:='Music';
(Sender AS TBitBtn). Caption:=b[4];
end;

if ((Sender As TBitBtn).Left=120 ) and ((Sender As TBitBtn).Top=190 ) then
begin
c[3]:='Bed';
(Sender AS TBitBtn). Caption:=c[3];
end;

if ((Sender As TBitBtn).Left=270 ) and ((Sender As TBitBtn).Top=190 ) then
begin
b[5]:='London';
(Sender AS TBitBtn). Caption:=b[5];
end;

if ((Sender As TBitBtn).Left=420 ) and ((Sender As TBitBtn).Top=190 ) then
begin
c[2]:='Fruit';
(Sender AS TBitBtn). Caption:=c[2];
end;

if ((Sender As TBitBtn).Left=570 ) and ((Sender As TBitBtn).Top=190 ) then
begin
b[6]:='Stars';
(Sender AS TBitBtn). Caption:=b[6];
end;

if ((Sender As TBitBtn).Left=120 ) and ((Sender As TBitBtn).Top=340 ) then
begin
c[6]:='Night';
(Sender AS TBitBtn). Caption:=c[6];
end;

if ((Sender As TBitBtn).Left=270 ) and ((Sender As TBitBtn).Top=340 ) then
begin
c[1]:='Sport';
(Sender AS TBitBtn). Caption:=c[1];
end;

if ((Sender As TBitBtn).Left=420 ) and ((Sender As TBitBtn).Top=340 ) then
begin
c[4]:='Player';
(Sender AS TBitBtn). Caption:=c[4];
end;

if ((Sender As TBitBtn).Left=570 ) and ((Sender As TBitBtn).Top=340 ) then
begin
c[5]:='England';
(Sender AS TBitBtn). Caption:=c[5];
end;

if ((Sender As TBitBtn).Left=120 ) and ((Sender As TBitBtn).Top=490 ) then
begin
b[7]:='Hair';
(Sender AS TBitBtn). Caption:=b[7];
end;

if ((Sender As TBitBtn).Left=270 ) and ((Sender As TBitBtn).Top=490 ) then
begin
b[8]:='West';
(Sender AS TBitBtn). Caption:=b[8];
end;

if ((Sender As TBitBtn).Left=420 ) and ((Sender As TBitBtn).Top=490 ) then
begin
c[7]:='Brush';
(Sender AS TBitBtn). Caption:=c[7];
end;

if ((Sender As TBitBtn).Left=570 ) and ((Sender As TBitBtn).Top=490 ) then
begin
c[8]:='Side';
(Sender AS TBitBtn). Caption:=c[8];
end;


if n=1 then
begin
(Sender As TBitBtn).Caption:=x;
n:=n+1
end;

if n=2 then
begin
(Sender As TBitBtn).Caption:=y;
if  ((x=c[i]) and  (y<>b[i]))or((y<>c[i]) and  (x=b[i]))  then
(Sender As TBitBtn).Caption:='error';

end;
end;
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 19.06.2018 в 11:40.
Анжелика2 вне форума Ответить с цитированием
Старый 19.06.2018, 11:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Анжелика2 Посмотреть сообщение
Она заключается в нахождении пар (у меня не картинок, а пары слов, например Кровать - сон)
в мемориз обычно пропадают ОДИНАКОВЫЕ картинки.
почему у Вас слова разные? Почему - "кровать" - "сон", а не "одеяло", "подушка", "ночь" или "матрас" ?
тем более, что у Вас, судя по коду - вообще английские слова.


Цитата:
Сообщение от Анжелика2 Посмотреть сообщение
Помощь нужна именно в том, что при нажатии например на a[1,1] открывается карточка с словом
Поясните, ещё раз, пожалуйста, в чём именно нужно помочь?
Код ужасный. Лучше его выкинуть и написать заново.


Цитата:
Сообщение от Анжелика2 Посмотреть сообщение
Создан массив 4 на 4
лучше исходники проекта (без EXE и DCU) запаковать в архив и архив приложить к сообщению на форуме (см. "Управление вложениями").

ну и последнее - у Вас что, в коде проекта код так же отформатирован, без отступов? Это же просто ужасно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2018, 12:27   #3
Анжелика2
Новичок
Джуниор
 
Регистрация: 19.06.2018
Сообщений: 3
По умолчанию

Это один из уровней,
это 3 уровень
Суть в том, что на кнопках находятся английские слова ( в этом сложность уровня) нужно найти логическую пару ( например Ball - Sport)
игрок нажимает на кнопку a[1,1] появляется Ball, нажав на другую если появляется Sport то это верно, и слова остаются на кнопках, если нет, то исчезают,
Слова у меня открываются, но именно условие проверки не работает
Анжелика2 вне форума Ответить с цитированием
Старый 19.06.2018, 12:29   #4
Анжелика2
Новичок
Джуниор
 
Регистрация: 19.06.2018
Сообщений: 3
По умолчанию

Преподаватель посоветовал сделать ещё два массива b[i] и c[i] в одном 8 слов в другом остальные 8 и они вместе составляют пару, но и так он не работает, уже 20 вариантов делали различных, не один не работает((
Анжелика2 вне форума Ответить с цитированием
Старый 19.06.2018, 12:43   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Анжелика2 Посмотреть сообщение
Преподаватель посоветовал сделать ещё два массива b[i] и c[i] в одном 8 слов в другом остальные 8
Очень оригинально

Теперь я понимаю, откуда ноги растут:

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код ужасный. Лучше его выкинуть и написать заново.

Вариантов масса, работать с двумя массивами - не самое лучшее решение:

Если дельфи хотя бы с XE начинается, то там для таких целей есть класс TDictionary, позволяющий хранить пары "ключ - значение".

Второй вариант - создать массив рекордов, хранящий подобные пары

Третий вариант - создать просто двумерный массив

Четвёртый вариант - в массиве а через разделитель хранить оба слова одной строкой

Пятый вариант - хранить все слова одной строкой, причём парные слова разделять одним символом (например, запятой), а сами пары - другим (например, точкой с запятой). Абсолютно извращённый вариант, так как при обработке такой строки всё-равно придётся преобразовывать в один из вариантов 2 - 4

В целом - я вообще ничего не понял. Заархивируйте и приложите сюда весь проект, пожалуйста.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Игра Пятнашки. Помогите пожалуйста добавить окно "Вы выиграли", когда комбинация будет собрана правильно, и добавить кнопку "Новая игра" Аня20 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2017 08:12
Меморина Фобия Помощь студентам 0 26.06.2011 15:53
Игра на С\C++ Айдар Помощь студентам 11 10.03.2010 19:27
Игра zumm Софт 0 15.10.2009 13:25