Форум: "Потрепаться";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Внизпомогите отладить алгоритм!!!!!!! Найти похожие ветки
← →
Kein (2003-10-21 21:53) [0]есть алгоритм который работает, но работает очень медленно(загрузка проца 100%). никак не могу понять где тормозит.
если у кого есть желание и время, помочь отладить обращайтесь на моё мыло.
← →
Asteroid (2003-10-21 22:14) [1]а сюда кинуть никак? или хоть немного поконкретней?
А загрузка так или иначе будет 100%, вот только смотря на какое время.
← →
VictorT (2003-10-21 22:24) [2]Чтоб алгоритм оптимизировать, нужно его видеть...
А чтоб проц разгрузить, всунь в цикл Sleep(1)
← →
Kein (2003-10-22 17:12) [3]вот листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ImgList, DXClass, DXDraws;
{$R bitmaps.res}
type
TForm1 = class(TForm)
DXTimer1: TDXTimer;
Baraban1: TDXDraw;
Combinacia1: TLabel;
Baraban2: TDXDraw;
Combinacia2: TLabel;
Baraban4: TDXDraw;
Combinacia4: TLabel;
Baraban3: TDXDraw;
Combinacia3: TLabel;
Bevel1: TBevel;
Bevel2: TBevel;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TIgrovoyAvtomat = record
y1,y2,y3,number1,number2,number3,key1,key2,key3,speed1,speed2,speed3,
prihod,rashod,balans: integer;
rabotaet: boolean;
Bitmap: TImage;
end;
var
Form1: TForm1;
Avtomat1,Avtomat2,Avtomat3,Avtomat4: TIgrovoyAvtomat;
implementation
{$R *.DFM}
const
images: array [0..9] of string = ("A","B","C","D","E","F","G","H","I","J");
var
Lents: array [0..9] of TImage;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Avtomat1.Bitmap.Free;
Avtomat2.Bitmap.Free;
end;
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
with AvtomatI do begin
if speed3=0 then rabotaet:=false;
BitBlt(Bitmap.Canvas.Handle,0,0,150,200,Lents[number1].Canvas.Handle,
0,y1,SrcCopy);
BitBlt(Bitmap.Canvas.Handle,150,0,300,200,Lents[number2].Canvas.Handle,
0,y2,SrcCopy);
BitBlt(Bitmap.Canvas.Handle,300,0,450,200,Lents[number3].Canvas.Handle,
0,y3,SrcCopy);
BitBlt(BarabanI.Surface.Canvas.Handle,0,0,450,200,Bitmap.Canvas.Handle,
0,0,SrcCopy);
BarabanI.Surface.Canvas.Release;
BarabanI.Flip;
inc(y1,speed1);inc(y2,speed2);inc(y3,speed3);
if y1>=200 then begin
if number1>8 then number1:=0 else inc(number1);
y1:=0;
if key1=number1 then speed1:=0;
end;
if y2>=200 then begin
if number2>8 then number2:=0 else inc(number2);
y2:=0;
if (speed1=0) and (key2=number2) then speed2:=0;
end;
if y3>=200 then begin
if number3>8 then number3:=0 else inc(number3);
y3:=0;
if (speed2=0) and (key3=number3) then speed3:=0;
end;
end;
{так четыре раза,где написано AvtomatI или BarabanI вместо I число 1-4}
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
ord(49):with Avtomat1 do begin
key1:=Random(9);key2:=Random(9);key3:=Random(9);
speed1:=100;speed2:=100;speed3:=100;
Combinacia1.Caption:=IntToStr(key1)+" "+IntToStr(key2)+" "+IntToStr(key3);
rabotaet:=true;
end;
{здесь тоже идёт 4 раза)
VK_ESCAPE:Application.Terminate;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
k: integer;
TempImage: TImage;
begin
Randomize;
Form1.WindowState:=wsMaximized;
TempImage:=TImage.Create(self);
for k:=0 to 9 do begin
Lents[k]:=TImage.Create(Form1);
Lents[k].SetBounds(0,0,150,400);
TempImage.Picture.Bitmap.LoadFromResourceName(hInstance,images[k]);
Lents[k].Canvas.Draw(0,0,TempImage.Picture.Bitmap);
TempImage.Picture.Bitmap.LoadFromResourceName(hInstance,images[(k+1) mod 10]);
Lents[k].Canvas.Draw(0,200,TempImage.Picture.Bitmap);
end;
TempImage.Free;
Avtomat1.Bitmap:=TImage.Create(self);
Avtomat1.rabotaet:=false;
with Avtomat1 do begin
Bitmap.Picture.Bitmap.Height:=200;
Bitmap.Picture.Bitmap.Width:=450;
Bitmap.Canvas.Brush.Color:=clWhite;
Bitmap.Canvas.FillRect(Rect(0,0,450,200));
BitBlt(Bitmap.Canvas.Handle,0,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
BitBlt(Bitmap.Canvas.Handle,150,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
BitBlt(Bitmap.Canvas.Handle,300,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
end;
Avtomat2.Bitmap:=TImage.Create(self);
Avtomat2.rabotaet:=false;
with Avtomat2 do begin
Bitmap.Picture.Bitmap.Height:=200;
Bitmap.Picture.Bitmap.Width:=450;
Bitmap.Canvas.Brush.Color:=clWhite;
Bitmap.Canvas.FillRect(Rect(0,0,450,200));
BitBlt(Bitmap.Canvas.Handle,0,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
BitBlt(Bitmap.Canvas.Handle,150,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
BitBlt(Bitmap.Canvas.Handle,300,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
end;
Avtomat3.Bitmap:=TImage.Create(self);
Avtomat3.rabotaet:=false;
with Avtomat3 do begin
Bitmap.Picture.Bitmap.Height:=200;
Bitmap.Picture.Bitmap.Width:=450;
Bitmap.Canvas.Brush.Color:=clWhite;
Bitmap.Canvas.FillRect(Rect(0,0,450,200));
BitBlt(Bitmap.Canvas.Handle,0,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
BitBlt(Bitmap.Canvas.Handle,150,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
BitBlt(Bitmap.Canvas.Handle,300,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
end;
Avtomat4.Bitmap:=TImage.Create(self);
Avtomat4.rabotaet:=false;
with Avtomat4 do begin
Bitmap.Picture.Bitmap.Height:=200;
Bitmap.Picture.Bitmap.Width:=450;
Bitmap.Canvas.Brush.Color:=clWhite;
Bitmap.Canvas.FillRect(Rect(0,0,450,200));
BitBlt(Bitmap.Canvas.Handle,0,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
BitBlt(Bitmap.Canvas.Handle,150,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
BitBlt(Bitmap.Canvas.Handle,300,0,150,200,Lents[0].Canvas.Handle,0,0,
SrcCopy);
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
BitBlt(Baraban1.Surface.Canvas.Handle,0,0,450,200,Avtomat1.Bitmap.Canvas.Handle,0,0,
SrcCopy);
Baraban1.Surface.Canvas.Release;
BitBlt(Baraban2.Surface.Canvas.Handle,0,0,450,200,Avtomat2.Bitmap.Canvas.Handle,0,0,
SrcCopy);
Baraban2.Surface.Canvas.Release;
BitBlt(Baraban3.Surface.Canvas.Handle,0,0,450,200,Avtomat3.Bitmap.Canvas.Handle,0,0,
SrcCopy);
Baraban3.Surface.Canvas.Release;
BitBlt(Baraban4.Surface.Canvas.Handle,0,0,450,200,Avtomat4.Bitmap.Canvas.Handle,0,0,
SrcCopy);
Baraban4.Surface.Canvas.Release;
end;
end.
по моему тормозит процедура таймера из-за копирования изображений. прога имитирует вращение барабанов игрового автомата, интервал таймера=0(иначе не плавно крутятся),speed - смещение изображения каждое срабатывание таймера, key1,key2,key3 - значения цифр которые должны выпасть, number1,number2,number3 - текущее значение цифры.
для работы нужен DelphiX.
← →
alxx (2003-10-22 17:17) [4]GDI вообще по жизни тормозная вещь. Попробуй использовать DIB.
← →
Kein (2003-10-23 14:02) [5]2alxx
никогда с DIB не работал. где о них можно почитать?
← →
alxx (2003-10-23 14:09) [6]MSDN
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c