Clanintern Clanintern Clanintern

Forum

ffentliche Foren
FORUM: Spiele & Computer THEMA: Mensch Ärger dich nicht!!
AUTOR BEITRAG
Scheppe*sucht Azubi*

RANG Skill Newbie

#1 - 26.02 09:08

Ich hab gerade ein riesen Problem.. Und zwar bin ich am programieren eines Mensch rger dich nicht Spiels.. Ich hab die vorgeschriebene Grafik-Prozedur eingefgt und krieg die jetzt aber nicht in gang.. das heit..w enn ich fr X und Y Werte eingeben macht er nix..

Knnt ihr mir vielleicht sagen, wo ich die X und Y Werte einfgen muss, damit er dann auch ein rechteck zeichnet??


program simu;
uses crt,graph;
var a,i:integer;
anzahl:string;
graphmode,errorcode,graphdriver:integer;
label nochmal;

procedure grafikstart(var graphdriver,graphmode,errorcode:integer) ;
begin
clrscr;
graphdriver:=0;
init graph(graphdriver, graphmode, '..\bgi');
errorcode:=graphresult;
if errorcode <> grOk then
begin
writeln('graphik-error: ', grapherrormsg(errorcode));
readln;
hal t;
end;
directvideo:=false;
setBKcolo r(0);
end;


procedure wurfeln;
begin;
randomize;
a:=random( 6)+1;
end;


begin (*main*)
clrscr;
nochmal:
randomize;
i:=0;
while (i<3) and (a<>6) do
BEGIN
wurfeln;
i:=i+1;
write(a);
rea dln;
END;

i:=0; {is wichtig, sonst kommen immer nur 6en}

if a=6 then writeln ('Sie haben eine 6 gewrfelt. Sie drfen noch einmal wrfeln!!');
if a<6 then writeln ('der nchsten spieler ist dran');
if a<6 then goto nochmal;
if a=6 then begin
randomize;
a:= random (6);
writeln (a);
readln;
end;


readln;
end.



Das Problem sit, das ich zwar ne Grafikprozedur hab.. aber trotzdem keine Grafik im Program habe.. also irgendwie msste man mit der Proz. Linien zeichnen knnen, aber bei mir klappts nicht
Huri-Kane

RANG Deckschrubber

#2 - 26.02 10:31

oje... pascal - das is ja ne ewigkeit her. zu allerst: es gibt ein "code"-tag im forum, das erleichtert das lesen ungemein ;). wenn ich nun alles korrekt berflogen hab kannst du mit deiner grafikprozedur keine linien zeichnen, weil du dort lediglich den grafikmodus initialisierst. auerdem wird die prozedur nichtmal aufgerufen.

zur programmierung: mir scheint als ob der code da oben arg zusammengeschnipselt wurde ;) globale variablen als rckgabewert zu missbrauchen macht man nicht (damit meine ich variable a). besser man deklariert eine funktion - also zb.
code:

function wuerfeln: Integer;
begin
  wuerfeln := random(6) + 1;
end;


randomize() sollte nur einmal im programmablauf aufgerufen werden und nicht permanent wieder.

weiterhin solltest du mglichst auf sprungmarken verzichten da sie die leserlichkeit des codes enorm erschweren knnen und u.U. optimierungen im compiler aushebeln (ist in deinem programm jetzt nicht weiter kritisch). besser wre es so:
code:

begin (*main*)
  ClrScr;
  Randomize;

  repeat
    i := 0;
    while (i < 3) and (a <> 6) do
    begin
      a := wuerfeln;
      Inc(i);     { entspricht i := i+1, jedoch schneller, da eigenstndige prozessoranweisung }
      ReadLn;
    end;

    if a = 6 then
      writeln ('Sie haben eine 6 gewrfelt. Sie drfen noch einmal wrfeln!!')
    else
      writeln('der nchsten spieler ist dran');

  until (a = 6);

  a := wuerfeln;
  Write(a);
  ReadLn;
end. 


ich hoffe, das ist jetzt nicht zu viel gendert, sodass du das noch nachvollziehen kannst.


momentan sieht der programmablauf aber so aus, dass im falle einer 6 die schleife verlassen und danach lediglich noch einmal gefwrfelt wird, bevor das programm beendet - so ganz ist das nocht nicht "mensch rgere dich nicht" ;)

um aber zurck zur grafik zu kommen: bevor zu was grafisches machen kannst musst du wie gesagt zuerst die grafikstart-prozedur aufrufen. erst danach kannst du die ganzen grafikfunktionen nutzen. eine zusammenfassung davon gibts u.a. hier.

wenn noch fragen bestehen, immer raus damit ;)
Scheppe*sucht Azubi*

RANG Skill Newbie

#3 - 26.02 11:52

vielen vielen dank ;)