Witam!
Gdyby kogoś interesowało jak w Pascalu wmiare sprawnie poradzić sobie ze sterowaniem wyświetlania tekstu w konsoli to zamieszczam poniższy kod.
Tym się rózni od normalnego Crt, że aby wyswietlic tekst nalezy uzyc polecenia "PokazEkran".
Pomaga to w zredukowaniu migania ekranu jeśli chcesz napisać np. grę dla konsoli (jakiegoś roguelika, czy takie tam).
No i nie ma w nim ReadKey, Readln, ani Sound itp.
Oczywiscia mozna, a nawet nalezy go rozbudowac i przerobić na Unita
.
Kod:
{====================================
! m33Crt v.0001 !
! (c) Michal "m33" Gawryluk, 2007!
-----------------------------------
!!!!!!!! licencja: GPL !!!!!!!!!
====================================
*Co to jest:
Pisanie biblioteki
a'la Crt :)
*Poco to pisze:
Aby pozniej napisac
to dla C++ :]
====================================
! start 31 X 2007 15:45 !
====================================
31 X 2007 [ 15:45 - 16:45 ]
16:34 NOWOSCI:
*Procedury:
- PokazEkran.[OK]
- GoToXY.....[OK]
- Napisz.....[OK]
- CzyscEkran.[OK]
------------------------------------
1 XI 2007 [ 11:09 - 11:11 ]
11:10 ZMIANY:
*Pocedura Napisz zmienia juz
po modyfikacji bufora
wartosc x na wspolrzedna
konca wprowadzonego tekstu
------------------------------------
3 XI 2007 [ 19:00 - 19:01 ]
19:01 NOWOSCI:
* Funkcje
- GdzieX.....[OK]
- GzieY......[OK]
====================================}
VAR
n,n2: integer; {zmienne do wykorzystania przy iteracji}
x,y: integer; {pozycja kursora}
bEkran: array[1..80,1..24] of char;{bufor ekranu tu przechowywujemy tekst do wyswietlenia}
{------------------------------------------------------------------------------}
Procedure PokazEkran;{Wyswietla zmiany bufora bEkran}
begin
for n:=1 to 24 do
for n2:= 1 to 80 do
write(bEkran[n2,n]);
end;
{------------------------------------------------------------------------------}
Procedure GoToXY(gx,gy:integer);
begin
x:=gx;
y:=gy;
end;
{------------------------------------------------------------------------------}
Procedure Napisz(napis:string);
begin
n2:=1;{jako numer litery w slowie}
for n:=x to x+(length(napis)-1) do begin bEkran[n,y]:=napis[n2]; n2:=n2+1; end;
{A teraz trzeba zmienic wsplrzedna x by wskazywala koniec tekstu}
x:=x+(length(napis)-1); {Dlaczego -1? Bo ostatni znak ciagu to zawsze "null"(pusty)}
end;
{------------------------------------------------------------------------------}
Procedure CzyscEkran;
begin
for n:=1 to 80 do
for n2:=1 to 24 do
bEkran[n,n2]:=' ';
end;
{------------------------------------------------------------------------------}
function GdzieX: integer;
begin
GdzieX:=X;
end;
{------------------------------------------------------------------------------}
function GdzieY: integer;
begin
GdzieY:=Y;
end;
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
BEGIN
CzyscEkran;
GoToXY(1,1);
Napisz('FIRST Hello world!!!');
GoToXY(2,2);
Napisz('SECOND Hello world!!!');
GoToXY(3,3);
Napisz('THIRD Hello world!!!');
Napisz(' FOURTH Hello world!!!');
PokazEkran;
END.