Code Bolcks - Kvázigrafikus megoldások karakteres felületen

2017-06-12

 

Folytattam a nosztalgiázást. Anno (pre-windows) ilyesmi rutinokat használtunk. Remélem lesz olyan ember, akinek hasznos lesz az alábbi kód.

Alább látható az ascii() függvény által kilistázott betü készlet. Tiszta DOS.

Magyar ékezetes betüket közvetlenül nem fogunk tudni kiírni. Ehhez engedélyezzük a setlocal( LC_ALL, "hun") hívást. Ekkor megváltozik a betü készlet, sajnos elvesznek a keretekhez használható karakterek.

Itt látható a karakter készletre rajzol koceka.




/*******************************************************************************
*   Author       -  Kiraly Tibor
*                   http://www.tkiraaly.hu
*   Date         -  2017.06.12.
*   Compiler     -  Code Blocks & GCC
*
*   Kvazigrafikus elemek
*
********************************************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <ctype.h>
#include <windows.h>
#include <process.h>
#include <iostream>


using namespace std;


void gotoxy(int, int);                           // kurzor pozicionalas
void printat( int, int, char);                   // egy betu kiirasa pozicioba
void lap( int, int, int, int);                   // lap torlese szokozokkel
void keret( int, int, int, int);                 // keret rajzolas +-|
void keret_s( int, int, int, int);               // keret rajzolas szimpla vonallal
void keret_d( int, int, int, int);               // keret rajzolas dupla vonallal
void ascii_tabla( void);                         // betuk kilistazasa


int main()
{
   // setlocale( LC_ALL, "hun");
   system( "cls");
   ascii_tabla();
   getch();
   keret( 5, 5, 15, 40);
   getch();
   keret_s( 5, 5, 15, 40);
   getch();
   keret_d( 5, 5, 15, 40);
   getch();
   lap( 5, 5, 15, 40);
   getch();
   keret_s( 5, 5, 15, 40);
   getch();
   system( "cls");
   return 0;
}


void gotoxy( int x, int y)
{
   COORD coord;
   coord.X = x;
   coord.Y = y;
   SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE), coord);
}


void printat( int x, int y, char c)
{
   gotoxy( x, y);
   printf( "%c", c);
}


void keret( int x, int y, int magassag, int szelesseg)
{
   int i;
   for( i= x+ 1; i <= x+ szelesseg- 1; i++)
   {
      printat( i, y, '-');
      printat( i, y+ magassag, '-');
   }
   for( i= y+ 1; i <= y+ magassag- 1; i++)
   {
      printat( x, i, '!');
      printat( x+ szelesseg, i, '!');
   }
   printat( x, y, '+');
   printat( x, y+ magassag, '+');
   printat( x+ szelesseg, y, '+');
   printat( x+ szelesseg, y+ magassag, '+');
}


void keret_s( int x, int y, int magassag, int szelesseg)
{
   int i;
   for( i= x+ 1; i <= x+ szelesseg- 1; i++)
   {
      printat( i, y, 196);
      printat( i, y+ magassag, 196);
   }
   for( i= y+ 1; i <= y+ magassag- 1; i++)
   {
      printat( x, i, 179);
      printat( x+ szelesseg, i, 179);
   }
   printat( x, y, 218);
   printat( x+ szelesseg, y, 191);
   printat( x, y+ magassag, 192);
   printat( x+ szelesseg, y+ magassag, 217);
}


void keret_d( int x, int y, int magassag, int szelesseg)
{
   int i;
   for( i= x+ 1; i <= x+ szelesseg- 1; i++)
   {
      printat( i, y, 205);
      printat( i, y+ magassag, 205);
   }
   for( i= y+ 1; i <= y+ magassag- 1; i++)
   {
      printat( x, i, 186);
      printat( x+ szelesseg, i, 186);
   }
   printat( x, y, 201);
   printat( x+ szelesseg, y, 187);
   printat( x, y+ magassag, 200);
   printat( x+ szelesseg, y+ magassag, 188);
}


void lap( int x, int y, int magassag, int szelesseg)
{
   int i;
   magassag++;
   while (magassag--)
   {
      i= szelesseg+ 1;
      gotoxy( x, y+ magassag);
      while( i--) printf(" ");
   }
}


void ascii_tabla( void)
{
    int i= 32;
    int j;
    system( "cls");
    while( i < 256)
    {
       j= 10;
       while( j-- && i < 256)
       {
          printf( "%d-%c\t", i, i);
          i++;
       }
       printf( "\n");
    }
}




És itt a vége, fussatok el véle, innen letölthetitek az egészet összecsomagolva.