Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Здравствуйте! Нужна помощь, по созданию игры меморина.
Она заключается в нахождении пар (у меня не картинок, а пары слов, например Кровать - сон)
Интерфейс готов, на форме 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 в 12:40.
Анжелика2 вне форума   Ответить с цитированием
Старый 19.06.2018, 12:45   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,184
Репутация: 5256
По умолчанию

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


08:36.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru