Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.06 c
9-1187772000
homm
2007-08-22 12:40
2010.08.27
Полноэкранный антиалайсинг.


15-1273644438
Lyonux
2010-05-12 10:07
2010.08.27
Нахождение max массива на asm e


2-1274530341
Delphist2
2010-05-22 16:12
2010.08.27
method insert класса range завершен неверно


15-1270931403
Юрий
2010-04-11 00:30
2010.08.27
С днем рождения ! 11 апреля 2010 воскресенье


2-1267590008
cwl
2010-03-03 07:20
2010.08.27
адрес - property с индексом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский