P014 - Przykładowe programy wykorzystujące bibliotekę newconio
Programy uruchomiono w środowisku Bloodshed Dev-C++ 4.9.9.2

W wybranych miejscach ekranu program wyświetla przypadkowe znaki.

// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------
// Koło informatyczne 2006/7
//--------------------------
// Program: P014-01
//--------------------------

#include "newconio.h"
#include <iostream>

using namespace std;

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
}

obrazek


W wybranych miejscach ekranu program ustawia przypadkowe atrybuty.

// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------
// Koło informatyczne 2006/7
//--------------------------
// Program: P014-02
//--------------------------

#include "newconio.h"
#include <iostream>

using namespace std;

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
}

obrazek


Na ekranie konsoli przedstawione zostają wszystkie możliwe kombinacje kolorów tła i znaków (w sumie 256 możliwości).

// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------
// Koło informatyczne 2006/7
//--------------------------
// Program: P014-03
//--------------------------

#include "newconio.h"
#include <iostream>

using namespace std;

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);
}

obrazek


Program wyświetla odbijające się od ścian piłeczki.

// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------
// Koło informatyczne 2006/7
//--------------------------
// Program: P014-04
//--------------------------

#include "newconio.h"
#include <iostream>

using namespace std;

const int MAX_N = 32; // Liczba piłeczek

main()
{
  int i,x[MAX_N],y[MAX_N],dx[MAX_N],dy[MAX_N],key;
  
  _cinit();
  srand((unsigned)time(NULL));
  frame(FRAME_SINGLE,12,0,0,79,24);
  gotoxy(10,0); textattr(0x17);
  cout << _pl(" Aby zakończyć działanie programu, naciśnij klawisz ");
  highvideo(); cout << "[ESC]"; lowvideo(); cout << " ";
  cursoroff();
  for(i = 0; i < MAX_N; i++)
  {
    x[i]  = 1 + rand() % 78;
    y[i]  = 1 + rand() % 23;
    dx[i] = 1 + rand() % 2;
    dy[i] = 1 + rand() % 2;
  }
  key = 0;
  do
  {
    for(i = 0; i < MAX_N; i++) putxy('O',(i % 2)?9:14,x[i],y[i]);
    delay(25);
    for(i = 0; i < MAX_N; i++)
    {
      putxy(' ',0,x[i],y[i]);
      x[i] += dx[i];
      if((x[i] < 1) || (x[i] > 78))
      {
        x[i] -= dx[i]; dx[i] = -dx[i];
      }
      y[i] += dy[i];
      if((y[i] < 1) || (y[i] > 23))
      {
        y[i] -= dy[i]; dy[i] = -dy[i];
      }
    }
    if(kbhit()) while(!(key = getch()));
  } while(key != 27);
  cursoron();
}

obrazek


Ten przykład pokazuje w jaki sposób można umieszczać przeszkody na drodze ruchu piłeczek. W tekście u góry ekranu konsoli dodaliśmy kropki w miejsce spacji, aby piłeczki ich nie wybijały (sprawdź!).

// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------
// Koło informatyczne 2006/7
//--------------------------
// Program: P014-05
//--------------------------

#include "newconio.h"
#include <iostream>

using namespace std;

const int MAX_S = 16; // Liczba przeszkód
const int MAX_N = 16; // Liczba piłeczek

main()
{
  int i,px,py,lx,ly,x[MAX_N],y[MAX_N],dx[MAX_N],dy[MAX_N],key;
  
  _cinit();
  srand((unsigned)time(NULL));
  frame(FRAME_SINGLE,0x1e,0,0,79,24);
  gotoxy(10,0); textattr(0x17);
  cout << _pl(".Aby.zakończyć.działanie.programu,.naciśnij.klawisz.");
  highvideo(); cout << "[ESC]"; lowvideo(); cout << ".";
  cursoroff();
  for(i = 0; i < MAX_S; i++)
  {
    lx = 2 + rand() % 10;
    px = 5 + rand() % (70 - lx);
    ly = 2 + rand() % 5;
    py = 5 + rand() % (15 - lx);
    fillrect(177, 1 + rand() % 255, px, py, px + lx - 1, py + ly - 1);
  }
  for(i = 0; i < MAX_N; i++)
  {
    dx[i] = dy[i] = 1;
    do
    {
      x[i] = 1 + rand() % 78;
      y[i] = 1 + rand() % 23;
    } while(getchxy(x[i],y[i]) != ' ');
  }
  do
  {
    for(i = 0; i < MAX_N; i++) putxy('O', (i % 2) ? 14 : 12, x[i], y[i]);
    delay(40);
    if(key == 32) while(!(key = getch()));
    for(i = 0; i < MAX_N; i++)
    {
      putxy(' ', 0, x[i], y[i]);
      x[i] += dx[i];
      if(getchxy(x[i], y[i]) != ' ')
      {
        x[i] -= dx[i]; dx[i] = -dx[i];
      }
      y[i] += dy[i];
      if(getchxy(x[i], y[i]) != ' ')
      {
        y[i] -= dy[i]; dy[i] = -dy[i];
      }
    } 
    if(kbhit()) while(!(key = getch()));
  } while(key != 27);
  cursoron();
}

obrazek

Piłeczki często wpadają w tę samą trasę, co powoduje ich przysłanianie przez inne piłeczki. Zastanów się, jak zmodyfikować ten program, aby piłeczki odbijały się również wzajemnie od siebie.


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

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.
Informacje dodatkowe