Turbo Pascal segítség kéne! (? )
Ha Turbo Pascalban akarod, akkor kénytelen leszel valami Assembly betétet használni, amivel meg tudod valósítani a szálkezelést. Ha viszont Free Pascalt is használhatsz, ott lehetőséged van a szálak kezelésére.
Az alábbi kódot linuxon próbáltam ott működött rendesen és ebben van szálkezelés, ugyanis az időt ilyen módon íratom ki. A program nem tökéletes, de a szálkezelés egy lehetséges elvét bemutatja (nem az objektumorientált változatot). Használd egészséggel :
program jatek;
uses crt, SysUtils {$ifdef unix},cthreads{$endif};
var
a,b :integer;
c:char;
hatravan:longint;
function Idozito(ido : pointer):longint;
var
i : longint;
x,y : smallint;
begin
for i:=longint(ido^) downto 0 do
begin
x:=WhereX;
y:=WhereY;
GotoXY(1,1);
TextColor(14);
TextBackGround(4);
clreol;
GotoXY(40,1);
Write('Meg ',i,' masodperced maradt, hogy kitalald');
TextBackGround(blue);
GotoXY(x,y);
hatravan:=i;
Delay(1000);
if a=b then EndThread;
end;
window(1,1,80,25);
TextBackGround(4);
TextColor(14);
clrscr;
gotoxy(1,2);
writeln(' Lejart az idod...');
writeln(' ---Uss ENTER-t---');
window(1,1,80,25);
TextBackGround(Blue);
clrscr;
readln;
end;
var
Meddig, h : longint;
procedure jatek(const Hatar : longint);
var
IdoSzal: TThreadID;
begin
a:=random(Hatar)+1;
repeat
writeln('Indulhat a jatek? (I/N) ');
c:=readkey;
until c in ['i','n','I','N'];
writeln;
if c in ['i','I'] then
begin
IdoSzal:=BeginThread(@Idozito,pointer(@Meddig));
writeln('Gondoltam egy szamra 1 es ',Hatar,' kozott, vajon mi az a szam amire gondoltam?');
repeat
repeat
write('Kerem a tippedet! : ');
{$i-}
readln(b);
{$i+}
If IOResult<>0 then Writeln('Csak egesz szamok adhatok meg!!!');
until IOResult=0;
if hatravan<=0 then
begin
//writeln('Lejart az idod...');
exit;
end;
if a<b then writeln('A tipped nagyobb, mint a gondolt szam, probald ujra!');
if a>b then writeln('A tipped kisebb, mint a gondolt szam, probald ujra!');
if a=b then writeln('Ki hitte volna, kitalaltad!');
until a=b;
end;
end;
begin
Randomize;
TextBackGround(1);
TextColor(14);
repeat
clrscr;
repeat
write('Kerek egy szamot 10 es 2000 kozott, ez lesz a felso hatara a kitalalando szamnak : ');
{$i-}
readln(h);
{$i+}
if IOResult <>0 then
begin
writeln('Csak 10 es 2000 kozotti egesz szamok adhatoak meg!');
h:=0;
end;
until (h>=10) and (h<=2000);
repeat
write('Hany masodpercig tartson a jatek? (10-120) : ');
{$i-}
readln(Meddig);
{$i+}
if IOResult<>0 then Meddig:=0;
until Meddig in [10..120];
clrscr;
jatek(h);
repeat
writeln('Jatszol meg egyet? (I/N) ');
c:=readkey;
until c in ['n','N','i','I'];
until c in ['n','N'];
TextColor(7);
TextBackGround(0);
clrscr;
end.
hú, ezt jól leírtad :D
megpróbálom kibogózni belőle az időt, köszi :D
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!