moi,
Piirtelen tässä kolmiota. Kysyn, että kuinka saisin kolmion tulemaan erillaiseen kuvioon kuin tämä, joka minulla on koodissani?
nyt tulee vaakaviiva päälle.
mov dx,100 ;rivi
mov cx,25 ;pituus
alku2: mov ah,12 ;piirrä piste
mov al,2 ;väri
push cx ;pinoon talteen cx:ään
add cx,125 ;sarake, lisää cx:ään arvon
int 10h
pop cx ;pinosta
dec dx ;vähennä dx riviä yhdellä
loop alku2
;*******************************************************************
mov dx,75 ;rivi
mov cx,25 ;pituus
alku3: mov ah,12 ;piirrä piste
mov al,2 ;väri
push cx ;pinoon talteen cx:ään
add cx,150 ;sarake, lisää cx:ään arvon
int 10h
pop cx ;pinosta
inc dx ;lisää dx yhdellä
loop alku3
;************************************************************************
mov dx,75 ;rivi
mov cx,49 ;pituus
alku4:
mov ah,12 ;piirrä piste
mov dx,75 ;rivi
push cx ;talteen
add cx,125 ;summaa vakio cx:ään
mov al,2 ;väri (xxxxhRGBb)
int 10h
pop cx
dec dx
loop alku4 ;käyttää cx:ää (cx--, lopetus jos cx=0)Mitähän oikein tarkoitat? Jos haluat esimerkiksi kolmion, jonka kulmat ovat koordinaateissa (x1, y1), (x2, y2), (x3, y3), suosittelisin kehittämään ensin kunnollisen viivanpiirtorutiinin (esim. Bresenham's line algorithm), jolle annetaan alku- ja loppukoordinaatit, ja piirtämään sen avulla haluamiasi kolmioita.
Ks.
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
Kokeilin itse koodiasi, joka piirtää suorakulmaisen kolmion, jonka kateetti on tuo vaakasuora.
Sama koodi ehkä hieman selvennettynä:
.model tiny, stdcall
.386
.code
option casemap:none
org 100h
alku:
mov ax, 0013h ; asetetaan näyttötila
int 10h
; PIIRRETÄÄN KOLMION VASEN SIVU ALHAALTA YLÖSPÄIN
mov dx, 100 ; rivi = 100 (alku y-koordinaatti = 100)
mov cx, 25 ; pituus = 25 (vaaka- ja pystysuunnassa)
alku2:
mov ah, 0ch ; nämä kannataa asettaa, sillä INT10, C saattaa
mov al, 2 ; muuttaa AX, SI ja DI rekisterejä.
push cx ; tallennetaan cx:n arvo pinoon
add cx, 125 ; lisätään cx:ään 125
int 10h ; piirrä piste kohtaan (cx, dx)
pop cx ; palauta alkuperäinen cx:n arvo pinosta
dec dx ; vähennä riviä yhdellä
loop alku2 ; hyppää kohtaan alku2, ja vähennä cx:n arvoa yhdellä
; PIIRRETÄÄN KOLMION OIKEA SIVU YLHÄÄLTÄ ALASPÄIN
mov dx, 75 ; rivi = 75 (alku y-koordinaatti = 75)
mov cx, 25 ; pituus = 25 (vaaka- ja pystysuunnassa)
alku3:
mov ah, 0ch ; INT10h, 0Ch
mov al, 2 ; aseta väri (2 = vihreä)
push cx ; tallennetaan cx:n arvo pinoon
add cx, 150 ; lisätään cx:ään 150
int 10h ; piirrä piste kohtaan (cx, dx)
pop cx ; palauta alkuperäinen cx:n arvo pinosta
inc dx ; lisää riviä yhdellä
loop alku3 ; hyppää kohtaan alku3, ja vähennä cx:n arvoa yhdellä
; PIIRRETÄÄN KOLMION 3. SIVU (VAAKASUORA) OIKEALTA VASEMMALLE
mov dx, 75 ; rivi = 75
mov cx, 49 ; pituus = 49 (vaakasuunnassa)
alku4:
mov ah, 0ch ; INT10h, 0Ch
mov al, 2 ; aseta väri (2 = vihreä)
push cx ; tallennetaan cx:n arvo pinoon
add cx, 125 ; lisätään cx:ään 125
int 10h ; piirrä piste kohtaan (cx, dx)
pop cx ; palauta alkuperäinen cx:n arvo pinosta
loop alku4 ; käyttää cx:ää (cx--, lopetus jos cx == 0)
mov ah, 08h ; odotetaan kunnes on painettu ENTER
int 21h
mov ax, 0003h ; palautetaan näyttötila
int 10h
int 20h ; lopetetaan ohjelma
end alkuAihe on jo aika vanha, joten et voi enää vastata siihen.