Mys drzeni – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Mys drzeni – Pascal – Fórum – Programujte.comMys drzeni – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
liska11
~ Anonymní uživatel
5 příspěvků
25. 5. 2008   #1
-
0
-

Chtela bych se zeptat jak nastavim aby kdyz podrzim mys my to delalo caru umim to udelat tak ze kdyz kliknu tak se objevi ctverecek a pak jako ze bych klikala pod sebe ale zajimalo by me to s drzenim (assembler vubec nechapu)

Nahlásit jako SPAM
IP: 90.177.160.–
Reklama
Reklama
Laaca0
Stálý člen
25. 5. 2008   #2
-
0
-

Napiš sem zdroják nebo dej odkaz na něj, ať víme, s jakou grafickou knihovnou pracuješ a jakým způsobem obsluhuješ myš.
V principu se ale problém s kreslením čáry řeší přes Line, kdy propojuješ momentální pozici myši s předchozí pozicí myši. Jednoduchý PutPixel použít nejde, protože při rychlém pohybu s myší by se nevykreslila čára, ale sled teček.

MysCti(pozice_x,pozice_y,stav_tlacitek);

sx:=pozice_x;
sy:=pozice_y;
repeat
MysCti(pozice_x,pozice_y,stav_tlacitek);
if stav_tlacitek<>0 then Line(sx, sy, pozice_x, pozice_y);
sx:=pozice_x;
sy:=pozice_y;
until konec=true;

Rutinu je vhodné vylepšit o testování shodnosti SX vůči Pozice_X a SY vůči Pozice_Y. Pokud jsou obě dvojice shodné, znamená to, že se myš v posledním cyklu nepohla a tudíž není třeba kreslit. To vede k velkému urychlení programu.

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
liska11
~ Anonymní uživatel
5 příspěvků
25. 5. 2008   #3
-
0
-

asm
mov ah,01h
mov cx,2000h
int 10h
end;
repeat
asm
mov dx,03DAh
@1: in al,dx
test al,8
jz @1
end;
textcolor(0);
textbackground(12);
gotoxy(5,10);
write('Konec');
asm
mov ax,01h
int 33h
end;
repeat
asm
mov ax,05h
mov bx,0
int 33h
mov mx,cx
mov my,dx
mov ax,06h
mov bx,0
int 33h
mov upclick,bx
end
until upclick=1;
asm
mov ax,02h
int 33h
end;
mx:=mx div 8+1;
my:=my div 8+1;
gotoxy(mx,my);
Randomize;
textbackground(Random(12));
write(' ');
if (mx>=5) and (mx<=9) and (my=10) then konec:=1
until konec=1;

Nahlásit jako SPAM
IP: 90.177.160.–
Laaca0
Stálý člen
25. 5. 2008   #4
-
0
-

A kurva!
Ty pracuješ v textovém režimu, tudíž nejsou k dispozici kreslicí funkce - v našem případě tedy Line. Není to nic, co by nás mohlo zastavit, ale znamená to komplikaci. Další věc - tvůj zdroják je dost nepřehledný, mísí se ti pascal a assembler. Je lepší snažit se je oddělovat.
A poslední poznámka - Randomize se správně volá jen jednou za program.
Jelikož nám chybí procedura Line, tak první verzi zdrojáku napíšu bez ní, kdy čáru budeme vykreslovat prostě pomocí jednotlivých znaků.

uses Crt;


Procedure Mys_init;assembler;
asm mov ax,0;int 33h;end;

Procedure Mys_On;assembler;
asm mov ax,1;int 33h;end;

Procedure Mys_Off;assembler;
asm mov ax,2;int 33h;end;

Procedure Mys_Stav(var x,y,stav:word);assembler;
asm
mov ax,3;int 33h
push es
shr cx,3;inc cx
shr dx,3;inc dx
les di,x;mov es:[di],cx
les di,y;mov es:[di],dx
les di,stav;mov es:[di],bx
pop es
end;

Procedure SchovejKurzor;assembler;
asm mov ah,1;mov cx,2000h;int 10h;end;

Procedure ObnovKurzor;assembler;
asm mov ah,1;mov cx,0607h;int 10h;end;

{------------------------------------HLAVNI PROGRAM---------------------------------------------}
var x,y,s:word;
begin
SchovejKurzor;
Mys_init;
Mys_On;
repeat
Mys_stav(x,y,s);
if s=1 then {S=1 znamena, ze je zmacknute leve mysitko}
begin
GotoXY(x,y);
write('*'); {nebo jakykoliv znak, ktery uznas za vhodne - treba plny obdelnicek}
end;
until s=2; {S=2 znamena, ze je zmacknute prave mysitko}
ObnovKurzor;
end.


Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
Laaca0
Stálý člen
25. 5. 2008   #5
-
0
-

No, a vymakanější verze s Line bude vypadat takto:

uses Crt;


Procedure Mys_init;assembler;
asm mov ax,0;int 33h;end;

Procedure Mys_On;assembler;
asm mov ax,1;int 33h;end;

Procedure Mys_Off;assembler;
asm mov ax,2;int 33h;end;

Procedure Mys_Stav(var x,y,stav:integer);assembler;
asm
mov ax,3;int 33h
push es
shr cx,3
shr dx,3
les di,x;mov es:[di],cx
les di,y;mov es:[di],dx
les di,stav;mov es:[di],bx
pop es
end;

Procedure SchovejKurzor;assembler;
asm mov ah,1;mov cx,2000h;int 10h;end;

Procedure ObnovKurzor;assembler;
asm mov ah,1;mov cx,0607h;int 10h;end;

Procedure NakresliZnak(x,y:byte);assembler;
{GotoXY a Write se na kresleni nehodi, protoze posouvaji kurzor}
{a muze dojit ke scrolingu. Proto to udelame jinak - pres BIOS}
asm
mov ah,2 {nastavi kurzor}
mov bx,0
mov dh,y {radka}
mov dl,x {sloupec}
int 10h {nastav pozici kurzoru}

mov ah,9
mov al,'*' {znak, ktery chceme zobrazit}
mov cx,1 {chceme zobrazit jeden}
mov bx,7 {jakou barvou - treba klasika, seda na cernem pozadi}
int 10h {kresli}
end;

procedure Line(x1,y1,x2,y2:word);
{Algoritmus na kresleni cary}
var dx,dy,krok,k,rx,ry:integer;
xprir,yprir,x,y:real;
begin
dx:=x2-x1;
dy:=y2-y1;
if (dx=0) and (dy=0) then NakresliZnak(x1,y1) else
begin
if abs(dx)>abs(dy) then krok:=abs(dx) else krok:=abs(dy);
xprir:=dx/krok;
yprir:=dy/krok;
x:=x1;
y:=y1;
for k:=1 to krok do
begin
x:=x+xprir;
y:=y+yprir;
rx:=round(x);
ry:=round(y);
NakresliZnak(rx,ry);
end;
end;
end;

{------------------------------------HLAVNI PROGRAM---------------------------------------------}

var x,y,s:integer;
sx,sy:integer;
begin
SchovejKurzor;
Mys_init;
Mys_On;
repeat
Mys_stav(x,y,s);
if s=1 then Line(sx,sy,x,y);
sx:=x;
sy:=y;
until s=2;
ObnovKurzor;
end.

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
liska11
~ Anonymní uživatel
5 příspěvků
25. 5. 2008   #6
-
0
-

shr cx,3
tady na tom radku mi to pise error 159: 286/287 instructions are not enabled jak to mam spravit jinak dik moc za pomoc

Nahlásit jako SPAM
IP: 90.177.160.–
Laaca0
Stálý člen
25. 5. 2008   #7
-
0
-

V meníčku jdi na "Options" --- "Compiler" a zašktni "enable 286 instructions"
Další možnost je přidat na začátek programu tento řádek:
{$G+}

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Mys — založil max

Myš — založil Zelenáč

Myš k notebooku — založil aoi

Koupim myš — založil Tomáš

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý