Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Внизвывод группы изображений Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.077 c