program szimulacio6; {$F+} uses crt,graph; const path = 'c:\tp\70\bgi'; p1x=550; p1y=30; p2x=500; p2y=280; p3x=500; p3y=450; cim='Momentn vletlenszmok...'; hatterszin=0; betuszin=15; maxmenupontdb=7; elemsz=10; var max,n,sorszam,eltol:integer; sx,sy:word; szl:integer; ch,c,k,varo,p,l:char; egysegx,egysegy,i:integer; aktmenupont:integer; kilep,kilepo,szt,g,pa,lep:boolean; f:text; sor:string; Procedure Szovegesre; begin CloseGraph; {lezarja a grafikus uzemmodot} RestoreCrtMode; {Visszaallitja az InitGraph meghivasa elotti kepernyokezelesi modot} end; Procedure Grafikusra; Var gd,gm : integer; Begin DetectGraph(gd,gm); {detektalja a grafikus eszkozt} InitGraph(gd,gm,path); {inicializalja a grafikus rendszert} End; Procedure init; {inicializalja a kezdoertekeket} begin sx:=getmaxx; sy:=getmaxy; szl:=0; setcolor(betuszin); setbkcolor(hatterszin); end; procedure elolrol; forward; procedure kezdolap; begin clrscr; randomize; writeln('Ez egy nagyon kezdeteleges program, egyelore csak annyit tud,'); writeln('hogy a megadott szamig randomizal ertekeket, es abrazolja oket'); writeln('egy grafikonban.'); writeln; write('Mekkora legyen a felso hatar?: '); readln(max); end; procedure keretek; begin rectangle(0,0,p1x,p1y); {szim.neve kerete} rectangle(p1x,0,sx,p1y); {szim.lepes kerete} rectangle(0,p1y,p2x,p2y); {szim.ter kerete} rectangle(0,p2y,p3x,p3y); {grafikon kerete} rectangle(p2x,p1y,sx,p3y); {parameterter kerete} rectangle(0,p3y,sx,sy); {menu kerete} end; procedure cimkiiras; begin outtextxy(10,p1y-15,cim); end; procedure diagram; forward; {----------------paramterek kezelse------------------} procedure paramkiir; var maxstr:string; begin outtextxy(p2x+10,p1y+10,'Felshatr: '); str(max,maxstr); outtextxy(p2x+10,p1y+20,maxstr); end; procedure parammodosit; var maxstr:string; begin repeat p:=readkey; case p of #72: begin inc(max); if max=100 then max:=1; str(max,maxstr); setfillstyle(1,hatterszin); bar(p2x+10,p1y+20,p2x+100,p1y+30); outtextxy(p2x+10,p1y+20,maxstr); end; #80: begin dec(max); if max=0 then max:=100; str(max,maxstr); setfillstyle(1,hatterszin); bar(p2x+10,p1y+20,p2x+100,p1y+30); outtextxy(p2x+10,p1y+20,maxstr); end; #73: begin max:=max+10; if max>100 then max:=max-100; str(max,maxstr); setfillstyle(1,hatterszin); bar(p2x+10,p1y+20,p2x+100,p1y+30); outtextxy(p2x+10,p1y+20,maxstr); end; #81: begin max:=max-10; if max<0 then max:=max+100; str(max,maxstr); setfillstyle(1,hatterszin); bar(p2x+10,p1y+20,p2x+100,p1y+30); outtextxy(p2x+10,p1y+20,maxstr); end; end; until p=#13; setfillstyle(1,hatterszin); bar(1,p2y+1,p3x-1,p3y-1); end; {----------------paramterek kezelsnek vge----------} procedure szimter; begin setcolor(betuszin+eltol); outtextxy(100,p1y+50,'Ez itt a szimulcis tr!'); inc(eltol); if eltol=16 then eltol:=0; setcolor(betuszin); end; {-------------a szimulacio lelke---------------------------} function szimfugg(max:integer):integer; begin szimfugg:=random(max); end; procedure szimlepes(szt:boolean;g:boolean;pa:boolean;lep:boolean); var szlstr:string; begin inc(szl); setfillstyle(1,hatterszin); bar(p1x+1,1,sx-1,p1y-1); setcolor(betuszin); str(szl,szlstr); outtextxy(p1x+10,p1y-15,szlstr); n:=szimfugg(max); if szt then szimter; if g then diagram; if pa then paramkiir; if lep then begin {????????????????????????????????????????} end; end; {--------------a szimulacio lelkenek vege---------------------------} {----------------grafikonrajzolas---------------------------} procedure grafikontengelyek; begin line(20,p3y-20,20,p2y+5); {y tengely} outtextxy(25,p2y+5,'Y'); line(20,p3y-20,p2x-5,p3y-20); {x tengely} outtextxy(p2x-10,p3y-15,'X'); line(17,p2y+15,20,p2y+5); line(23,p2y+15,20,p2y+5); line(p2x-15,p3y-23,p2x-5,p3y-20); line(p2x-15,p3y-17,p2x-5,p3y-20); egysegx:=trunc((p2x-5-20)/elemsz); egysegy:=trunc((p2y+5-(p3y-20))/max+1); for i:=1 to elemsz-1 do {x tengely felosztasa} begin line(20+(i*egysegx),p3y-16,20+(i*egysegx),p3y-24); end; for i:=1 to max do {y tengely felosztsa} begin line(16,p3y-20+(i*egysegy),24,p3y-20+(i*egysegy)); end; end; procedure diagram; var hanyadik:integer; begin grafikontengelyek; setfillstyle(1,hatterszin+1); hanyadik:=(szl-1) mod elemsz; bar(20+((hanyadik)*egysegx),p3y-20+n*egysegy,20+((hanyadik+1)*egysegx),p3y-20); rectangle(20+((hanyadik)*egysegx),p3y-20+n*egysegy,20+((hanyadik+1)*egysegx),p3y-20); if hanyadik=elemsz-1 then begin setfillstyle(1,hatterszin); bar(20,p2y+5,p2x-5,p3y-20); end; end; {---------------grafikonrajzolas vege-------------------------} {-------------menuzes-----------------------} type tmenu=record sorsz:integer; szoveg:string[20]; vegrehajt:procedure; bfx:integer; bfy:integer; jax:integer; jay:integer; end; var msorsz:integer; menutomb:array [1..maxmenupontdb] of tmenu; procedure elj; begin end; procedure kilepes; forward; procedure normal; begin szt:=true; g:=true; pa:=true; end; procedure csendes; begin szt:=false; g:=false; pa:=true; end; procedure graf; begin g:=not g; end; procedure lepesenkent; begin lep:=not lep; end; procedure segit; begin szovegesre; clrscr; reset(f); while not eof(f) do begin readln(f,sor); writeln(sor); end; writeln('Ha elolvastad, a folytatshoz ss egy -t!'); readln; grafikusra; end; procedure menuinit; begin menutomb[1].sorsz:=1; menutomb[1].szoveg:='Norml'; menutomb[1].vegrehajt:=normal; menutomb[1].bfx:=8; menutomb[1].bfy:=sy-18; menutomb[1].jax:=78; menutomb[1].jay:=sy-5; menutomb[2].sorsz:=2; menutomb[2].szoveg:='Csendes'; menutomb[2].vegrehajt:=csendes; menutomb[2].bfx:=78; menutomb[2].bfy:=sy-18; menutomb[2].jax:=158; menutomb[2].jay:=sy-5; menutomb[3].sorsz:=3; menutomb[3].szoveg:='Graf. ki/be'; menutomb[3].vegrehajt:=graf; menutomb[3].bfx:=158; menutomb[3].bfy:=sy-18; menutomb[3].jax:=268; menutomb[3].jay:=sy-5; menutomb[4].sorsz:=4; menutomb[4].szoveg:='Lpsenknt'; menutomb[4].vegrehajt:=lepesenkent; menutomb[4].bfx:=268; menutomb[4].bfy:=sy-18; menutomb[4].jax:=378; menutomb[4].jay:=sy-5; menutomb[5].sorsz:=5; menutomb[5].szoveg:='Paramterek'; menutomb[5].vegrehajt:=parammodosit; menutomb[5].bfx:=378; menutomb[5].bfy:=sy-18; menutomb[5].jax:=488; menutomb[5].jay:=sy-5; menutomb[6].sorsz:=6; menutomb[6].szoveg:='Kilps'; menutomb[6].vegrehajt:=kilepes; menutomb[6].bfx:=488; menutomb[6].bfy:=sy-18; menutomb[6].jax:=568; menutomb[6].jay:=sy-5; menutomb[7].sorsz:=7; menutomb[7].szoveg:='Segtsg'; menutomb[7].vegrehajt:=segit; menutomb[7].bfx:=568; menutomb[7].bfy:=sy-18; menutomb[7].jax:=sx-1; menutomb[7].jay:=sy-5; aktmenupont:=1; end; procedure menukiir; begin for i:=1 to maxmenupontdb do begin setfillstyle(1,hatterszin+3); bar(menutomb[i].bfx,menutomb[i].bfy,menutomb[i].jax,menutomb[i].jay); setfillstyle(1,hatterszin+1); bar(menutomb[i].bfx+4,menutomb[i].bfy,menutomb[i].bfx+10,menutomb[i].jay); outtextxy(menutomb[i].bfx+4,menutomb[i].bfy+4,menutomb[i].szoveg); end; setfillstyle(1,hatterszin+5); bar(menutomb[aktmenupont].bfx,menutomb[aktmenupont].bfy,menutomb[aktmenupont].jax,menutomb[aktmenupont].jay); setfillstyle(1,hatterszin+7); bar(menutomb[aktmenupont].bfx+4,menutomb[aktmenupont].bfy,menutomb[aktmenupont].bfx+10,menutomb[aktmenupont].jay); outtextxy(menutomb[aktmenupont].bfx+4,menutomb[aktmenupont].bfy+4,menutomb[aktmenupont].szoveg); end; procedure kilepes; var ki:boolean; begin setfillstyle(1,hatterszin); bar(1,p3y+1,sx-1,sy-1); setfillstyle(1,hatterszin+3); bar(100,p3y+10,108,p3y+18); bar(180,p3y+10,188,p3y+18); bar(260,p3y+10,268,p3y+18); outtextxy(100,p3y+10,'Kilps'); outtextxy(180,p3y+10,'Ellrl'); outtextxy(260,p3y+10,'Mgse'); repeat ki:=false; k:=readkey; case k of 'K': begin ki:=true; kilepo:=true; end; 'k': begin ki:=true; kilepo:=true; end; 'E': begin ki:=true; clearviewport; elolrol; end; 'e': begin ki:=true; clearviewport; elolrol; end; 'M': begin ki:=true; setfillstyle(1,hatterszin); bar(1,p3y+1,sx-1,sy-1); menukiir; end; 'm': begin ki:=true; setfillstyle(1,hatterszin); bar(1,p3y+1,sx-1,sy-1); menukiir; end; end; until ki; end; procedure menuzes; begin kilep:=false; repeat c:=readkey; case c of #27: begin {ESC-re} aktmenupont:=6; kilepes; kilep:=true; end; #0: begin c:=readkey; case c of #77: begin {->} inc(aktmenupont); if aktmenupont=8 then aktmenupont:=1; menukiir; kilep:=true; end; #75: begin {<-} dec(aktmenupont); if aktmenupont=0 then aktmenupont:=7; menukiir; kilep:=true; end; end; end; #13: begin menutomb[aktmenupont].vegrehajt; kilep:=true; cimkiiras; keretek; menukiir; end; 'N': begin aktmenupont:=1; menukiir; normal; kilep:=true; end; 'n': begin aktmenupont:=1; menukiir; normal; kilep:=true; end; 'C': begin aktmenupont:=2; menukiir; csendes; kilep:=true; end; 'c': begin aktmenupont:=2; menukiir; csendes; kilep:=true; end; 'G': begin aktmenupont:=3; menukiir; graf; kilep:=true; end; 'g': begin aktmenupont:=3; menukiir; graf; kilep:=true; end; 'L': begin aktmenupont:=4; menukiir; lepesenkent; kilep:=true; end; 'l': begin aktmenupont:=4; menukiir; lepesenkent; kilep:=true; end; 'P': begin aktmenupont:=5; menukiir; parammodosit; kilep:=true; end; 'p': begin aktmenupont:=5; menukiir; parammodosit; kilep:=true; end; 'K': begin aktmenupont:=6; menukiir; kilepes; kilep:=true; end; 'k': begin aktmenupont:=6; menukiir; kilepes; kilep:=true; end; 'S': begin aktmenupont:=7; menukiir; kilep:=true; end; 's': begin aktmenupont:=7; menukiir; kilep:=true; end; end; until kilep; end; {-------------menuzes vege-------------------} procedure elolrol; begin keretek; grafikontengelyek; cimkiiras; paramkiir; menuinit; menukiir; kilepo:=false; szt:=true; g:=true; pa:=true; lep:=false; eltol:=0; szl:=1; end; begin kezdolap; grafikusra; init; clearviewport; assign(f,'help.txt'); elolrol; repeat if keypressed then begin menuzes; end; if lep then begin repeat l:=readkey; if l=#32 then szimlepes(szt,g,pa,lep); until l=#13; lep:=false; end else szimlepes(szt,g,pa,lep); until kilepo; szovegesre; end.