Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

вывод группы изображений   Найти похожие ветки 

 
Lyonux ©   (2010-05-21 13:51) [0]

Уважаемые Мастера! Мне нужна ваша помощь и отеческий совет)
Пишу игрушку "быки и коровы": пользователь предположил число, оно записалось в StringGrid, а рядом  необходимо(хотелось бы очень) вывести в зависимости от числа отгаданных чисел на месте - соответствующее число голов быка, и в зависимости  от числа присутствующих чисел не на своих местах - головы коров. Т.е.: загадано 45678, предположили 35861, -> пишем число 35861 и рисуем 1 голову быка, 2 головы коровы. Но это всё лирическое отступление.
Какой компонент можно использовать для вывода этих изображений(*.bmp картинки)? Что было бы оптимальнее/логичнее/правильнее: рисовать для каждой коровы по отдельной картинке головы, или сделать для каждого варианта числа угаданных коров своё изображения с 2,3,4.. головами? Или эта затея настолько безнадёжна, что лучше и не браться? Просто я искала разные выходы, остановилась на DrawGrid"e и окончательно запуталась)
Очень надеюсь на вашу помощь. =)


 
turbouser ©   (2010-05-21 13:59) [1]


> Lyonux ©   (21.05.10 13:51)  

Достаточно одной картинки. Отрисовывать ее на канве столько, сколько надо.


 
Омлет ©   (2010-05-21 14:01) [2]

> остановилась на DrawGrid"e и окончательно запуталась

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


 
12 ©   (2010-05-21 14:08) [3]

нужно
tform,tEdit,tImage

im : array of tImage;

if условие
 im[i] := timage.create;
 if условие im[i].loadfromfile(бык)

 im[i].left
 im[i].top


 
Lyonux ©   (2010-05-21 14:10) [4]


> Достаточно одной картинки. Отрисовывать ее на канве столько,
>  сколько надо.

Для этого надо каждый раз определять координату установки изображения. Вообще хотелось без этого, но более простого способа я действительно не вижу) Спасибо

Омлет ©   (21.05.10 14:01) [2]

Наверное в том, что я не понимаю, как с ней работать)) Не сумела разобраться пока, мне этот вариант придётся отложить)


 
Lyonux ©   (2010-05-21 14:12) [5]


> 12 ©   (21.05.10 14:08) [3]


Спасибо! это надо опробовать..


 
12 ©   (2010-05-21 14:24) [6]


> Спасибо! это надо опробовать..


не, тебе не пойдет, ведь

> Для этого надо каждый раз определять координату установки
> изображения


 
Lyonux ©   (2010-05-21 14:27) [7]

ну придётся смещаться вправо на размер рисунка) установить 8 необходимых позиций по вертикали и в зависимости от условия крепить изображение туда.
А есть ещё варианты?


 
12 ©   (2010-05-21 14:30) [8]

наставить сразу по 2 картинки с видимостью 0 друг на друге на нужных местах
потом только включать или выключать видимость


 
turbouser ©   (2010-05-21 14:32) [9]


> Lyonux ©   (21.05.10 14:12) [5]
>
>
> > 12 ©   (21.05.10 14:08) [3]
>
>
> Спасибо! это надо опробовать..
>

Это не оптимально.

> Для этого надо каждый раз определять координату установки
> изображения.

Ничего сложного в этом нет, простой примерчик:
var
 MyBitMap: TBitMap;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);

 procedure DrawBitmapCicle(ACount: integer);
 var
   i: integer;
 begin
   for i := 0 to Pred(ACount) do
     DrawGrid1.Canvas.Draw(Rect.Left + (MyBitMap.Width * i), Rect.Top,
       MyBitMap);
 end;

begin
 if (ACol = 2) and (ARow > 0) then
   DrawBitmapCicle(ARow);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MyBitMap := TBitMap.Create;
 with MyBitMap do
 begin
   Width := 10;
   Height := 10;
   Canvas.Brush.Style := bsSolid;
   Canvas.Pen.Color := clRed;
   Canvas.Brush.Color := clYellow;
   Canvas.Rectangle(2, 2, 6, 6);
 end;
end;


 
Омлет ©   (2010-05-21 14:53) [10]

> 12 ©   (21.05.10 14:08) [3]

О нет, только не массив TImage...


 
Lyonux ©   (2010-05-21 15:15) [11]

Всем спасибо за разнообразные методы подхода и очень полезные примеры кода)
К моему сожалению я сдалась, так как мой уровень видимо слишком низок для обращения с графикой в делфи, и буду делать просто через текстовые сообщения)
Вот =(


 
Омлет ©   (2010-05-21 15:19) [12]

Учиться лучше по книге.


 
Lyonux ©   (2010-05-21 15:21) [13]


> Омлет ©   (21.05.10 15:19) [12]

Несомненно) Но теплилась надежда на лёгкое решение.. Жаль, мы не в сказке)


 
han_malign   (2010-05-21 15:53) [14]


> im[i].loadfromfile(бык)
...
> О нет, только не массив TImage...

- действительно мазохист - TImageList, никаких loadfromfile, и il.Draw(grid.Canvas, ARect.Left+i*ll.Width, ARect.Top, BullOrCowIndexAt(i));/CODE>


 
12 ©   (2010-05-21 16:04) [15]

уболтали, чертяки
никаких массивов отныне!


 
Amoeba_   (2010-05-21 18:03) [16]


> Пишу игрушку "быки и коровы"
>

А как дела обстоят с алгоритмом? Кто против кого играет?  Если вопросы задает компьютер, то важен алгоритм, а никак не интерфейс (это дело десятое).  

P.S. Не столь давно развлекался этой задачей в плане алгоритма. Для 6-значного числа без повторов цифр решается максимум (в самом худшем случае) за 14 вопросов компьютера.


 
Игорь Шевченко ©   (2010-05-21 22:54) [17]

фигли там делать ?

имеешь три картинки (одна пустая), имеешь массив по количеству цифр с тремя значениями: бык/корова/пусто, рисуешь последовательно проходя по массиву и выбирая нужную картинку в зависимости от значения в элементе массива.

Массив заполняешь своим алгоритмом.

по прикидкам где-то так:

TGuessKind = (gkNothing, gkBull, gkCow);

...
   FImages: array[TGuessKind] of TBitmap; //Сюда грузишь картинки один раз
   FCurrentGuesses: array of TGuessKind;
...

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var
 P: TPoint;
 I: Integer;
begin
 P := StringGrid1.CellRect(ACol, ARow).TopLeft;
 with StringGrid1.Canvas do
 begin
   for I := Low(FCurrentGuesses) to High(FCurrentGuesses) do
   begin
     Draw(P.X, P.Y, FImages[FCurrentGuesses[I]]);
     Inc(P.X, FImages[FCurrentGuesses[I]].Width);
   end;
 end;
end;



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.063 c
15-1263598432
Rouse_
2010-01-16 02:33
2010.08.27
Эволюция


15-1275549850
Медвежонок Пятачок
2010-06-03 11:24
2010.08.27
не будь похожим, а то проиграешь


15-1275547795
Sergey Masloff
2010-06-03 10:49
2010.08.27
Электронные книжки - что купить


15-1264606970
имя
2010-01-27 18:42
2010.08.27
Поселок "Речник"


3-1238562946
TheEd
2009-04-01 09:15
2010.08.27
как вычитать isert ы, произошедшие в триггере одной из таблиц