Pascal(konsole).

Vieta, kur parunāt par to, kas nav atsevišķi izdalīts augstāk
Post Reply
Message
Author
RLighT
Posts: 6
Joined: 01 Mar 2012, 07:27

Pascal(konsole).

#1 Post by RLighT » 02 Mar 2012, 14:25

Sveiki, esmu šeit jauniņais..
Ķeršos uzreiz vērsim pie ragiem. Man ir programma(konsolē), kas realizē simbola kustību pa diogonāli un nonākot ''sadursmē'' ar ''sienu'', simbols atsitās un turpina kustību citā virzienā. Tas itkā strādā, bet vēlētos panākt to, lai būtu iespējams jebkurā brīdī, nospiežot konkrētu taustiņu, mainīt simbola virzienu.(Tā lai viņš neapstājas pie vietas kodā, kad tiek prasīts ievads no lietotāja.) To vietu, kur itkā jābūt lietotāja ievadam es izņēmu, lai strādātu šī kustība. Kods rakstīts PASCAL valodā.

Code: Select all

program xmove2;

{$mode objfpc}{$H+}

uses
  crt,sysutils,
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

{$R *.res}
var
  a,b:integer;
  x,y,xz,yz:integer;
  poga:char;
begin

 x:=40; y:=12;  //sakuma pozicija
   randomize;
   a:=random(100);   // Izšķir kā sāksies kustība pa x asi
   if a>=50 then xz:=1
   else xz:=-1;

   b:=random(100);     // Izšķir kā sāksies kustība pa y asi
   if b>=50 then yz:=1
   else yz:=-1;

  clrscr;
  gotoxy(30,3); write('Press any key to start!');
  gotoxy(x,y); write('X');

     poga:=readkey;
       while not (poga=#75) or (poga=#77) or (poga=#72) or (poga=#80) do
         begin

         if y=25 then yz:=yz*-1        // Veic    Parbaudi
         else if y=1 then yz:=yz*-1   //     Vai  Ir robežā
         else if x=80 then xz:=xz*-1  //   ,ja ir uz robežas-
         else if x=1 then xz:=xz*-1;  //  ''sadursme'' un atsitiens ( *-1)
         x:=x+xz; y:=y+yz;  //KUSTĪBA pa x un y
         clrscr;
         gotoxy(x,y); write('X',chr(8));
         sleep(200);


         end;  // beidzās while cikls

end.                
Nojaušu, ka kodā varētu būt nevajadzīgas vietas, bet es vēl tikai mācos ;)

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: Pascal(konsole).

#2 Post by bubu » 02 Mar 2012, 14:34

Ja nemaldos paskālā bija funkcija KeyPressed. Tā atgirež true, ja ir nospiesta kāda poga, un false, ja nav.
Tādējādi tu vari izsaukt ReadKey tikai tad, kad poga ir nospiest.
T.i taisi šādu ciklu:

Code: Select all

while True do
begin
    if KeyPressed then
    begin
        poga := ReadKey;
        // ... te apstrādā poga vērtību
    end;
    // ... te kods kas izpildās ciklā
end;

RLighT
Posts: 6
Joined: 01 Mar 2012, 07:27

Re: Pascal(konsole).

#3 Post by RLighT » 02 Mar 2012, 14:59

Gribu teikt lielu paldies, viss sanāca ;)
Tikai radās jautājums,
bubu wrote:Ja nemaldos paskālā bija funkcija KeyPressed. Tā atgirež true, ja ir nospiesta kāda poga, un false, ja nav.
Tādējādi tu vari izsaukt ReadKey tikai tad, kad poga ir nospiest.
T.i taisi šādu ciklu:

Code: Select all

while True do
begin
    if KeyPressed then
    begin
        poga := ReadKey;
        // ... te apstrādā poga vērtību
    end;
    // ... te kods kas izpildās ciklā
end;
vietā kad uzsāk ciklu while

Code: Select all

 while True do 

Kurā mirklī viņš tieši sāk uzskatīt, ka tur ir True, un kas ir true, ja KeyPressed tiek uzskaitīts tikai pēctam?

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: Pascal(konsole).

#4 Post by bubu » 02 Mar 2012, 15:53

Es nesaprotu, ko tu prasi. Kas tur jāuzskata kur?

RLighT
Posts: 6
Joined: 01 Mar 2012, 07:27

Re: Pascal(konsole).

#5 Post by RLighT » 02 Mar 2012, 15:59

bubu wrote:while True do
begin
    if KeyPressed then
    begin
        poga := ReadKey;
        // ... te apstrādā poga vērtību
    end;
    // ... te kods kas izpildās ciklā
end;
Lūdzu mazliet sīkāk paskaidro kādēļ tur ir jābūt tieši ''True'' kā nosacījums priekš while cikla.
vienīgais ko es nesaprotu - Kas ir True (kāda vērtība) .
Par pārējo paldies 8-)

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: Pascal(konsole).

#6 Post by atis » 02 Mar 2012, 16:36

`while` cikls izpildās, kamēr nosacījums ir patiess.. Tā kā `True` vienmēr ir patiess, tad tas ir mūžīgs cikls.

RLighT
Posts: 6
Joined: 01 Mar 2012, 07:27

Re: Pascal(konsole).

#7 Post by RLighT » 02 Mar 2012, 16:52

Ja pareizi sapratu,ka

Code: Select all

while 1<2 do
un

Code: Select all

while true do
ir viens un taspats, tad paldies, problēma ir atrisināta ;)

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: Pascal(konsole).

#8 Post by bubu » 02 Mar 2012, 16:55

Jā, tieši tā. Pareizi saprati.

Post Reply

Return to “Programmēšana / Programming”