![]() |
Autor artykułu: mgr Jerzy Wałaszek |
©2015 mgr
Jerzy Wałaszek
|
Biblioteka newconioBiblioteka newconio powstała kilka lat temu na kole informatycznym w I LO w Tarnowie. Jej głównym zastosowaniem jest umożliwienie programiście sterowanie wszystkimi funkcjami dostępnymi w trybie konsoli znakowej Windows bez zbędnego grzebania się w Win32 API:
Funkcje te pozwalają na wygodne pisanie dowolnych gier konsolowych, na których młodzi adepci szlifują swoje umiejętności programowania w języku C++. Instalacja biblioteki jest bardzo prosta: Przekopiuj do swojego katalogu projektowego poniższe dwa pliki:
Dołącz do projektu oba pliki. W każdym programie wykorzystującym funkcje biblioteczne wpisz polecenie
preprocesora: #include "newconio.h"
Na początku funkcji main() umieść wywołanie: _cinit(); Dokonuje ono inicjalizacji biblioteki. Od tego momentu możesz w swoim programie korzystać ze wszystkich funkcji biblioteki. Poniższy opis funkcji biblioteki proponuję wydrukować i trzymać ten wydruk stale pod ręką. W ten sposób nie będziemy musieli się uczyć tych funkcji na pamięć - chociaż przy dużej liczbie pisanych programów same wchodzą do głowy.
|
||||||||||
Opis funkcji biblioteki newconio_cinit()
_pl(tekst)
center(nr wiersza, tekst)
clrscr()
cursoroff()
cursoron()
delay(czas w milisekundach)
fillrectattr(atrybut, xb, yb, xe, ye)
fillrectch(znak xb, yb, xe, ye)
fillrect(znak, atrybut, xb, yb, xe, ye)
frame(rodzaj, atrybut, xb, yb, xe, ye)
|
Na obrzeżach zadanego obszaru okna konsoli (od pozycji (xb,yb) w lewym górnym narożniku, do pozycji (xe,ye) w prawym dolnym narożniku) rysowana jest ramka. Dodatkowo wnętrze obszaru zostaje wypełnione spacjami i atrybutem koloru. Nie zmienia się pozycja kursora tekstowego. Rodzaje ramek są takie same jak dla funkcji frame().
Funkcja włącza tryb pełnoekranowy dla parametru tryb = true lub tryb pracy w oknie dla tryb = false. W trybie pełnoekranowym okno konsoli posiada 50 wierszy po 80 kolumn w każdym. Ekran nie może być przewijany. W trybie okienkowym liczba kolumn wynosi 80, lecz liczba wierszy może zależeć od ustawionego rozmiaru okna. Treść okna konsoli może być przewijana.
...
fullscreen(true); // włączenie trybu pełnoekranowego
...
fulscreen(false); // powrót do trybu okienkowego
...
Funkcja odczytuje atrybut koloru z pozycji x,y ekranu konsoli.
Funkcja odczytuje klawisz naciśnięty na klawiaturze. Jeśli klawisz nie został naciśnięty, funkcja oczekuje na niego. Nadaje się zatem np. do wstrzymywania pracy programu aż do reakcji użytkownika.
Jeśli naciśnięto klawisz sterujący (np. klawisze kursora, F1..F12, PgUp, PgDn), to pierwsze wywołanie tej funkcji zwraca 0. Dopiero drugie wywołanie zwraca tzw. kod matrycowy klawisza sterującego. Kody matrycowe znajdziemy w kodzie programu przy definicji tablicy kbdtab[].
...
while(!getch()) ; // oczekiwanie na dowolny klawisz.
...
Funkcja odczytuje kod ASCII znaku umieszczonego na pozycji x,y ekranu konsoli.
Funkcja rezerwuje bufor dla zdefiniowanego w parametrach obszaru okna konsoli i umieszcza w tym buforze zawartość obszaru, po czym adres (wskaźnik) bufora jest zwracany jako wynik (jeśli wynikiem jest NULL, to obszar został błędnie zdefiniowany lub jest poza oknem konsoli). Funkcja ta została zaprojektowana do chwilowego przechowania fragmentu ekranu konsoli, na którym wyświetlono coś innego (np. komunikat). Funkcja współpracuje z funkcją putrect(), która odtwarza z bufora poprzednio zapamiętany obszar.
WORD * bufor;
...
if(!(bufor = getrect(10,10,69,14))
{
... // robimy coś na obszarze 10,10 \ 69,14, np, wyświetlamy ostrzeżenie
putrect(bufor); // odtwarzamy obszar i zwalniamy pamięć bufora
}
Funkcja umieszcza kursor na pozycji x,y okna konsoli. Pierwszy zapis do okna rozpocznie się od tej pozycji.
...
gotoxy(37,12); cout << "HELLO";
...
Funkcja rozjaśnia kolor tekstu (o ile nie jest rozjaśniony), który zostanie po niej wypisany w oknie konsoli.
...
cout << _pl("Naciśnij klawisz ");
highvideo(); cout << "ENTER"; lowvideo();
cout << _pl(", aby zakończyć działanie programu...");
...
Funkcja sprawdza, czy na klawiaturze został naciśnięty jakiś klawisz. Jeśli tak, zwraca true. Inaczej zwraca false.
...
while(!kbhit())
{
...
}
...
Funkcja przyciemnia kolor tekstu (o ile nie jest przyciemniony), który zostanie po niej wypisany w oknie konsoli.
...
cout << _pl("Naciśnij klawisz ");
highvideo(); cout << "ENTER"; lowvideo();
cout << _pl(", aby zakończyć działanie programu...");
...
Funkcja wprowadza atrybut koloru na pozycję x,y ekranu konsoli. Kolor znaku na tej pozycji oraz jego tła zostaną odpowiednio zmienione.
Funkcja umieszcza znak na pozycji x,y ekranu konsoli. Atrybut tej pozycji nie jest zmieniany.
Funkcja odtwarza obszar konsoli zapamiętany wcześniej za pomocą funkcji getrect(). Użyty do tego celu bufor jest po wykonaniu operacji zwalniany.
Funkcja umieszcza podany znak oraz atrybut koloru na pozycji x,y ekranu konsoli.
Funkcja przesuwa treść obszaru zawartego w prostokącie od (xb,yb) do (xe,ye) w podanym kierunku i na zadaną odległość. Treść okna konsoli poza zdefiniowanym obszarem nie ulega zmianie. Po przesunięciu treści obszaru powstaje puste miejsce. Zostanie ono wypełnione spacjami w bieżącym kolorze tła i tekstu. Dozwolone kierunki przesuwu są następujące:
SCROLL_UP - przesuw w górę SCROLL_RIGHT - przesuw w prawo SCROLL_DOWN - przesuw w dół SCROLL_LEFT - przesuw w lewo
Funkcja ustawia bieżący atrybut koloru. Po jej wywołaniu znaki wypisywane na konsoli będą posiadały kolory tekstu i tła zgodne z podanym atrybutem.
Funkcja ustawia kolor tła znaków. Kody kolorów (0...16) podaliśmy w tabelce na początku rozdziału. Zamiast wartości liczbowych można również stosować odpowiednie stałe, np. BLACK, YELLOW, WHITE itp. Po wywołaniu tej funkcji znaki zapisywane do konsoli będą posiadały zadany kolor tła.
Funkcja ustawia kolor znaków. Kody kolorów (0...16) podaliśmy w tabelce na początku rozdziału. Zamiast wartości liczbowych można również stosować odpowiednie stałe, np. BLACK, YELLOW, WHITE itp. Po wywołaniu tej funkcji znaki zapisywane do konsoli będą posiadały zadany kolor.
Funkcja odczytuje numer kolumny ekranu konsoli zawierającej kursor.
Funkcja odczytuje numer wiersza ekranu konsoli zawierającego kursor.
W wybranych miejscach ekranu program wyświetla przypadkowe znaki.
// (C)2016 Koło Informatyczne I LO
//
// -------------------------------
#include "newconio.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
int main()
{
int key;
_cinit();
srand((unsigned)time(NULL));
gotoxy(11,0);
cout << _pl("Aby zakończyć działanie programu, naciśnij klawisz ");
highvideo(); cout << "[ESC]"; lowvideo(); cout << ".";
do
{
putchxy(rand() % 256, 1 + rand() % 78, 2 + rand() % 22);
if(kbhit()) while(!(key = getch())) ;
} while(key != 27); // powtarzamy aż do naciśnięcia ESC
return 0;
}
|

W wybranych miejscach ekranu program ustawia przypadkowe atrybuty.
// (C)2016 Koło Informatyczne I LO
//
// -------------------------------
#include "newconio.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
int main()
{
int key;
_cinit();
srand((unsigned)time(NULL));
gotoxy(11,0);
cout << _pl("Aby zakończyć działanie programu, naciśnij klawisz ");
highvideo(); cout << "[ESC]"; lowvideo(); cout << ".";
do
{
putattrxy(rand() % 256, 1 + rand() % 78, 2 + rand() % 22);
if(kbhit()) while(!(key = getch())) ;
} while(key != 27); // powtarzamy aż do naciśnięcia ESC
return 0;
}
|

Na ekranie konsoli przedstawione zostają wszystkie możliwe kombinacje kolorów tła i znaków (w sumie 256 możliwości).
// (C)2016 Koło Informatyczne I LO
//
// -------------------------------
#include "newconio.h"
#include <iostream>
using namespace std;
int main()
{
int i,j;
_cinit();
gotoxy(11,0);
cout << _pl("Aby zakończyć działanie programu, naciśnij klawisz ");
highvideo(); cout << "[ESC]"; lowvideo(); cout << ".\n\n\n";
for(i = 0; i < 16; i++)
{
gotoxy(8,wherey());
for(j = 0; j < 16; j++)
{
textattr(i << 4 | j);
cout << (char) 176 << (char) 177 << (char) 178 << (char) 219;
}
cout << endl;
}
while(getch() != 27); // Czekamy na klawisz ESC
textattr(7);
return 0;
}
|

![]() | I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.