Problem z nieodpadającą grafiką w pascalu


(Matii3000) #1

Witam. Otóż mam problem z moim programem który jest na zaliczenie.

Siedze nad nim i dalej nie wiem co jest w nim nie tak i proszę Was o pomoc. Oto jego kod:

program flagi;

uses crt, graph;

var

wybor:char;

s,t:integer;

procedure menu;

begin

setbkcolor(1);

setcolor (12);

rectangle (0,240,250,479);

outtextxy (100,245, 'Menu');

outtextxy (5,265, 'l.CZECHY');

outtextxy(5,285, '2.LUKSEMBURG');

outtextxy (5,305, '3.SZWECJA');

outtextxy (5,325, '4.PERU');

outtextxy (5,345, '5.WLOCHY');

outtextxy (25,465, 'q - wyjscie');

outtextxy (150,465, 'w - menu');

end;

procedure czechy;

begin

      setlinestyle(0,0,1);

      rectangle(170,60,470,240);

      line(170,150,470,150);

      line(290,150,170,240);

      line(290,150,170,60);

      setcolor(1);

      line(171,150,289,150);

      setcolor(15);

      setfillstyle(1,15);

      floodfill(190,70,15);

      setcolor(1);

      setfillstyle(1,1);

      floodfill(190,90,15);

      floodfill(190,155,15);

      setcolor(4);

      setfillstyle(1,4);

      floodfill(190,235,15);

      line(290,150,170,240);

outtextxy(10,10,'CZECHY');

readkey;

cleardevice;

menu;

end;

procedure luksemburg;

begin

setcolor(4);

rectangle (0,0 ,639,479);

line (0,160, 639, 160) ;

line(0,320,639,320);

setcolor(15);

setfillstyle(1,4);

floodfill(10,10,4);

setfillstyle(1,15);

floodfill(300,300,4) ;

setfillstyle(1,1);

floodfill(450,450,4) ;

outtextxy(10,10,'Luksemburg') ;

readkey;

cleardevice;

menu;

end;

procedure szwecja;

 begin

     setlinestyle(0,0,1);

     setcolor(14);

     rectangle(170,60,470,240);

     rectangle(170,140,470,170);

     rectangle(270,60,300,240);

     setfillstyle(1,14);

     floodfill(275,145,14);

     floodfill(175,145,14);

     floodfill(305,145,14);

     floodfill(275,135,14);

     floodfill(275,175,14);

     setfillstyle(1,9);

     floodfill(175,135,14);

     floodfill(175,175,14);

     floodfill(305,175,14);

     floodfill(305,135,14);

     setcolor(15);

     rectangle(170,60,470,240);

outtextxy(10,10, 'SZWECJA');

readkey;

cleardevice;

menu;

end;

procedure peru;

begin

setcolor(4);

rectangle(0,0,639,479);

line(213,0,213,639);

line(426,0,426,639) ;

setcolor(15) ;

setfillstyle (1,4) ;

floodfill(10,10,4) ;

setfillstyle(1,15) ;

floodfill(220,220,4) ;

setfillstyle(1,4) ;

floodfill(450,450,4);

outtextxy (10,10, 'Peru');

readkey;

cleardevice;

menu;

end;

procedure wlochy;

begin

setcolor(4) ;

rectangle(0,0,639,479) ;

line(213,0,213,639) ;

line(426,0,426,639);

setcolor(15) ;

setfillstyle(1,2);

floodfill (10,10,4);

setfillstyle (1,15);

floodfill(220,220,4) ;

setfillstyle (1,4) ;

floodfill(450,450,4) ;

outtextxy (10,10, 'Wlochy');

readkey;

cleardevice;

menu;

end;

begin

s:=detect;

initgraph(s,t,'');

cleardevice;

menu;

repeat wybor:=readkey;

if wybor='1' then polska;

if wybor='2' then luksemburg;

if wybor='3' then japonia;

if wybor='4' then peru;

if wybor='5' then wlochy;

if wybor='w' then menu;

until wybor='q'

end.

closegraph;

(Fiołek) #2

A skąd my mamy wiedzieć co ten program robi a co miał robić, jaki błąd jest etc.? Rozpisz się trochę.


(Matii3000) #3

po prostu ma on wyświetlać flagi 5 państw które wybieramy w menu i niestety podczas kompilowania wyskakuje błąd

i nie wiem o co chodzi????


(Gina Gina) #4

ale nie wiem czy Graph Ci prawidłowo wystartuje ;/

program flagi;

uses crt, graph;

var

wybor:char;

s,t,ErrCode:integer;

procedure menu;

begin

setbkcolor(1);

setcolor (12);

rectangle (0,240,250,479);

outtextxy (100,245, 'Menu');

outtextxy (5,265, 'l.CZECHY');

outtextxy(5,285, '2.LUKSEMBURG');

outtextxy (5,305, '3.SZWECJA');

outtextxy (5,325, '4.PERU');

outtextxy (5,345, '5.WLOCHY');

outtextxy (25,465, 'q - wyjscie');

outtextxy (150,465, 'w - menu');

end;

procedure czechy;

begin

      setlinestyle(0,0,1);

      rectangle(170,60,470,240);

      line(170,150,470,150);

      line(290,150,170,240);

      line(290,150,170,60);

      setcolor(1);

      line(171,150,289,150);

      setcolor(15);

      setfillstyle(1,15);

      floodfill(190,70,15);

      setcolor(1);

      setfillstyle(1,1);

      floodfill(190,90,15);

      floodfill(190,155,15);

      setcolor(4);

      setfillstyle(1,4);

      floodfill(190,235,15);

      line(290,150,170,240);

outtextxy(10,10,'CZECHY');

readkey;

cleardevice;

menu;

end;

procedure luksemburg;

begin

setcolor(4);

rectangle (0,0 ,639,479);

line (0,160, 639, 160) ;

line(0,320,639,320);

setcolor(15);

setfillstyle(1,4);

floodfill(10,10,4);

setfillstyle(1,15);

floodfill(300,300,4) ;

setfillstyle(1,1);

floodfill(450,450,4) ;

outtextxy(10,10,'Luksemburg') ;

readkey;

cleardevice;

menu;

end;

procedure szwecja;

begin

     setlinestyle(0,0,1);

     setcolor(14);

     rectangle(170,60,470,240);

     rectangle(170,140,470,170);

     rectangle(270,60,300,240);

     setfillstyle(1,14);

     floodfill(275,145,14);

     floodfill(175,145,14);

     floodfill(305,145,14);

     floodfill(275,135,14);

     floodfill(275,175,14);

     setfillstyle(1,9);

     floodfill(175,135,14);

     floodfill(175,175,14);

     floodfill(305,175,14);

     floodfill(305,135,14);

     setcolor(15);

     rectangle(170,60,470,240);

outtextxy(10,10, 'SZWECJA');

readkey;

cleardevice;

menu;

end;

procedure peru;

begin

setcolor(4);

rectangle(0,0,639,479);

line(213,0,213,639);

line(426,0,426,639) ;

setcolor(15) ;

setfillstyle (1,4) ;

floodfill(10,10,4) ;

setfillstyle(1,15) ;

floodfill(220,220,4) ;

setfillstyle(1,4) ;

floodfill(450,450,4);

outtextxy (10,10, 'Peru');

readkey;

cleardevice;

menu;

end;

procedure wlochy;

begin

setcolor(4) ;

rectangle(0,0,639,479) ;

line(213,0,213,639) ;

line(426,0,426,639);

setcolor(15) ;

setfillstyle(1,2);

floodfill (10,10,4);

setfillstyle (1,15);

floodfill(220,220,4) ;

setfillstyle (1,4) ;

floodfill(450,450,4) ;

outtextxy (10,10, 'Wlochy');

readkey;

cleardevice;

menu;

end;

begin

s:=detect;

initgraph(s,t,'');

ErrCode:=GraphResult;

if ErrCode<>grOK then

begin

  Writeln('Graph Error');

  exit;

end;

cleardevice;

menu;

repeat wybor:=readkey;

if wybor='1' then czechy;

if wybor='2' then luksemburg;

if wybor='3' then szwecja;

if wybor='4' then peru;

if wybor='5' then wlochy;

if wybor='w' then menu;

until wybor='q';

closegraph;

end.

(Matii3000) #5

czyli co mam zrobić

???????????????


(Gina Gina) #6

Skompilować i zobaczyć czy się uruchomi, czy też będzie komunikat 'Graph Error'

co by znaczyło iż nie rozpoznaje karty graficznej, takiej którą by mógł ją obsłuzyć ;/


(Matii3000) #7

Ok z kodem sie uporałem

gina ,

to jutro sprawdze sobie w szkole ale dzięki za pomoc.


(Agatonster) #8

i386 ,

Poczytaj - Konkretne tematy... ze zwróceniem szczególnej uwagi na pierwszy post.

Proszę poprawić tytuł tematu na konkretny, mówiący o problemie.

W celu dokonania zaleconej korekty - proszę użyć przycisku ac7a4cd89050aa6e.gifprzy poście otwierającym ten temat.

Zignorowanie zalecenia będzie skutkowało usunięciem tematu do Kosza.


(Matii3000) #9

niestety pisze tylko że skompilował prawidłowo i tyle grafika nie rusza ;/

co mam zrobić

??????????????

Agaton

nazwa tematu już zmieniona

Hejo nikt w niedziele już na forum nie siedzi??? :smiley:

prosze pomóżcie bo sam nie wiem co mam zrobić ;/


(Gina Gina) #10

tia..... ;/

Prawdopodobnie Tobie, jak i innym, na aktualnych kartach nie uda się

emulować trybu EGA/VGA - w związku z czym program w pierwotnej

postaci nie ruszy ;/

Po użyciu drivera do SVGA (SVGA256.BGI) i dodaniu unitu instalującego

SVGA256 wszystko powinno chodzić :wink: (no i chodzi...)

SVGA256.BGI (v2.1)

MD5: 013f440d5d8e6e5e45e9f03767b557b7 *SVGA256.BGI

( Driver SVGA256.BGI musi być w tym samym katalogu co program EXE ! )

Musisz jednak poprawić obrazki flag - czeska zupełnie nie chciała ruszyć

  • to już Twoja głowa, więc podmieniłem ją na inną wersję :wink:

Wszystko co niezbędne jest spakowane w pliku FLAGI_SVGA.EXE

http://tiny.pl/k72x

Listingi:

TP7:

program flagi;

uses 

  crt, graph, svga256;

var

  wybor: char;


procedure menu;

begin

  setbkcolor(1);

  setcolor (12);

  rectangle (0,240,250,479);

  outtextxy (100,245, 'Menu');

  outtextxy (5,265, 'l.CZECHY');

  outtextxy (5,285, '2.LUKSEMBURG');

  outtextxy (5,305, '3.SZWECJA');

  outtextxy (5,325, '4.PERU');

  outtextxy (5,345, '5.WLOCHY');

  outtextxy (25,465, 'q - wyjscie');

  outtextxy (150,465, 'w - menu');

end;


procedure czechy;

const

  Trojkat : array[1..3] of PointType = ((X: 200; Y: 0),(X: 250; Y: 50),(X: 200; Y: 100));

begin

  SetFillStyle(SolidFill,White);

  Bar(200,0,300,50);

  SetFillStyle(SolidFill,Red);

  Bar(200,50,300,100);

  SetColor(Blue);

  SetFillStyle(SolidFill,Blue);

  FillPoly(SizeOf(Trojkat) div SizeOf(PointType),Trojkat);

  SetColor(White);

  OutTextXy(230,120,'Czechy');

  readkey;

  cleardevice;

  menu;

end;


{ 

procedure czechy;

begin

  setlinestyle(0,0,1);

  rectangle(170,60,470,240);

  line(170,150,470,150);

  line(290,150,170,240);

  line(290,150,170,60);

  setcolor(1);

  line(171,150,289,150);

  setcolor(15);

  setfillstyle(1,15);

  floodfill(190,70,15);

  setcolor(1);

  setfillstyle(1,1);

  floodfill(190,90,15);

  floodfill(190,155,15);

  setcolor(4);

  setfillstyle(1,4);

  floodfill(190,235,15);

  line(290,150,170,240);

  outtextxy(10,10,'CZECHY');

  readkey;

  cleardevice;

  menu;

end;

}


procedure luksemburg;

begin

  setcolor(4);

  rectangle (0,0 ,639,479);

  line (0,160, 639, 160) ;

  line(0,320,639,320);

  setcolor(15);

  setfillstyle(1,4);

  floodfill(10,10,4);

  setfillstyle(1,15);

  floodfill(300,300,4) ;

  setfillstyle(1,1);

  floodfill(450,450,4) ;

  outtextxy(10,10,'Luksemburg') ;

  readkey;

  cleardevice;

  menu;

end;


procedure szwecja;

begin

  setlinestyle(0,0,1);

  setcolor(14);

  rectangle(170,60,470,240);

  rectangle(170,140,470,170);

  rectangle(270,60,300,240);

  setfillstyle(1,14);

  floodfill(275,145,14);

  floodfill(175,145,14);

  floodfill(305,145,14);

  floodfill(275,135,14);

  floodfill(275,175,14);

  setfillstyle(1,9);

  floodfill(175,135,14);

  floodfill(175,175,14);

  floodfill(305,175,14);

  floodfill(305,135,14);

  setcolor(15);

  rectangle(170,60,470,240);

  outtextxy(10,10, 'SZWECJA');

  readkey;

  cleardevice;

  menu;

end;


procedure peru;

begin

  setcolor(4);

  rectangle(0,0,639,479);

  line(213,0,213,639);

  line(426,0,426,639) ;

  setcolor(15) ;

  setfillstyle (1,4) ;

  floodfill(10,10,4) ;

  setfillstyle(1,15) ;

  floodfill(220,220,4) ;

  setfillstyle(1,4) ;

  floodfill(450,450,4);

  outtextxy (10,10, 'Peru');

  readkey;

  cleardevice;

  menu;

end;


procedure wlochy;

begin

  setcolor(4) ;

  rectangle(0,0,639,479) ;

  line(213,0,213,639) ;

  line(426,0,426,639);

  setcolor(15) ;

  setfillstyle(1,2);

  floodfill (10,10,4);

  setfillstyle (1,15);

  floodfill(220,220,4) ;

  setfillstyle (1,4) ;

  floodfill(450,450,4) ;

  outtextxy (10,10, 'Wlochy');

  readkey;

  cleardevice;

  menu;

end;


begin

  InitSvga256('');

  cleardevice;

  menu;

  repeat 

    wybor:=readkey;

    if wybor='1' then czechy;

    if wybor='2' then luksemburg;

    if wybor='3' then szwecja;

    if wybor='4' then peru;

    if wybor='5' then wlochy;

    if wybor='w' then menu;

  until wybor='q';

  closegraph;

end.

TP7:

{------------------------------------------}

{ }

{ Modul do obslugi wysokich rozdzielczosci }

{ w trybach 256 kolorowych. Tryby dostepne }

{ tylko dla standardu VESA i SVGA }

{ }

{------------------------------------------}

UNIT Svga256;

INTERFACE

USES 

   Graph, Crt;

CONST

 { dostepne tryby graficzne }

 v320x200 = 0;

 v640x400 = 1;

 v640x480 = 2;

 v800x600 = 3;

 v1024x768 = 4;

 v1280x1024 = 5;


{ funkcje ustawiamy jako daleka po to by moc ja swobodnie wywolac }

FUNCTION DetectSvga256 : Integer; FAR;

PROCEDURE InitSvga256(Path :STRING);


IMPLEMENTATION

VAR 

   GraphDriver, GraphMode, GrErr : integer;


PROCEDURE InitSvga256(Path :STRING);

BEGIN

 GraphDriver := InstallUserDriver('SVGA256', @DetectSvga256);

 GraphDriver := DETECT;

 InitGraph(GraphDriver, GraphMode, Path);

 GrErr := GraphResult;

 IF GrErr AND $80 = $80 THEN GrErr := GrErr OR $FF00;

 IF GrErr <> grOK THEN

    BEGIN

     ClrScr;

     Writeln('Graphics error: ', GraphErrorMsg(GrErr));

     Halt(1);

    END;

 SetColor(White);

END;


FUNCTION DetectSvga256 : Integer;

BEGIN

  DetectSvga256 := v640x480;

END;


END.

(Matii3000) #11

czyli to powinno działać???? :slight_smile:

sorki za głópie pytania ale jestem zabiegany aktualnie i w ogóle nie mam czasu na to zadanie, które jest mi potrzebe ;/

i jestem wdzieczny za pomo i odpowiadanie na moje idiotyczne zapewne pytania


(Gina Gina) #12

Odpal Flvga256.exe i przekonaj się :roll:


(Matii3000) #13

hehe dziala :smiley:

dzięki =P~