PRAKTIKUM 11
MAHASISWA
DIMINTA UNTUK MEMBUAT SEBUAH PROGRAM YANG MENAMPILKAN ANIMASI SALJU BERJATUHAN.
BUTIRAN SALJU BISA DIGAMBARAKN DENGAN SEBUAH KARAKTER MISALNYA’@’. BUTIRAN
SALJU HARUS BERMUNCULAN DENGAN POSISI ACAK DAN JIKA DITEKAN TOMBOL (+) MAKA BUTIRAN
SALJU AKAN BERTAMBAH SATU, DAN SETERUSNYA, UNTUK BERHENTI TEKAN ESCAPE.
PROGRAM
SINGLE_LINKED_LIST_FIFO;
USES CRT;
CONST
S
='@';
MAX=100;
TYPE
PKAR
=^RECKAR;
RECKAR
= RECORD
ISI : CHAR;
X,Y,COL : BYTE;
NEXT : PKAR;
END;
VAR
HEAD, TAIL, NOW :PKAR;
PROCEDURE PUSH;
BEGIN
NEW(NOW); {MEMBUAT SIMPUL BARU}
IF HEAD=NIL THEN
HEAD:=NOW
ELSE
TAIL^.NEXT:=NOW;
TAIL:=NOW; TAIL^.NEXT:=NIL;
NOW^.ISI:=S;
NOW^.X:=RANDOM (79)+1; {MENGISI NILAI X DENGAN NILAI ACAK}
NOW^.COL:=RANDOM(16); {MENGISI NILAI COL DENGAN NILAI ACAK}
NOW^.Y:=1;
END;
PROCEDURE ANIM;
VAR
CH
:CHAR;
I,JML:BYTE;
PROCEDURE TEKAN;
BEGIN
CH
:=READKEY;
IF (CH <> #27) AND (CH='+') AND
(JML<MAX) THEN {MENAMBAH SALJU}
BEGIN
PUSH;
INC(JML);
END;
END;
BEGIN
REPEAT
NOW:=HEAD;
WHILE (NOW <> NIL ) DO
BEGIN
TEXTCOLOR (NOW^.COL); {MENGESET WARNA TULISAN}
GOTOXY (NOW^.X,NOW^.Y); WRITE
(NOW^.ISI);
IF NOW^.Y=25 THEN NOW^.Y:=1;
INC(NOW^.Y);
NOW:=NOW^.NEXT;
END;
DELAY (10); CLRSCR; {MENGHAPUS LAYAR}
IF KEYPRESSED THEN TEKAN;
UNTIL CH=#27; {TOMBOL ESCAPE DITEKAN}
END;
PROCEDURE
CURSOR_OFF; ASSEMBLER; {MEMATIKAN
KURSOR SIFATNYA OPTIONAL/TAK WAJIB DIBUAT}
ASM
MOV AH,01;
MOV CX, 2020H;
INT 10H;
END;
PROCEDURE
CURSOR_ON; ASSEMBLER;
{MENYALAKAN KURSOR SIFATNYA OPTIONAL/TAK WAJIB DIBUAT}
ASM
MOV AH,01;
MOV CX,1314H;
INT 10H;
END;
BEGIN {MAIN PROGRAM}
CLRSCR;
HEAD:=NIL; TAIL:=NIL;
CURSOR_OFF;
RANDOMIZE;
PUSH;
ANIM;
CURSOR_ON;
END.
Tidak ada komentar:
Posting Komentar