program działa gdy go niekoloruje bez zarzutu natomiast problem zaczyna sie gdy po pokoloruje wtedy w grze nie liczy mi pkt ;( pytalem sie goscia powiedział ze funkcje inch() zwracają strukture chtype ( gdzie jest nr znaku i atrybuty) i liczyl bez kolorów bo nie zmienial sie nr znaku natomiast z kolorem dodaje sie jescze nr koloru i dlatego numer sie zmienia i if odpowiadajacy za zmiane punktów nie działa dobrze, no to zamaskowalem sobie tego incha zwaracajacego ale problem w tym ze chyba coś źle robie :P pomożecie ?? (chodzi o maskowanie w funkcji gra)
#include <stdlib.h>
#include <stdio.h>
#include <ncurses.h>
#include <strings.h>
#include <time.h>
WINDOW *okno1, *okno2; // Okna programu
char znak,imie[9];
int xp,yp, strzalki,punkty;
int wyczysc()
{
wclear(okno1);
box(okno1,0,0);
wrefresh(okno1);
}
int ekran()
{
int i,x,y;
srand(time(NULL));
for(i=0;i<9;i++)
{
x=rand() % LINES-2; //-2 dodatkowo odaje by na rame nie wjeżdzał
y=rand() % COLS-22; //-2 dodatkowo odaje by na rame nie wjeżdzał
//wbkgd(okno1, COLOR_PAIR(2) | A_BOLD);
mvwprintw(okno1, x, y+1, "%c", '$');
x=rand() % LINES;
y=rand() % COLS-20;
//wbkgdset(okno1, COLOR_PAIR(3) | A_BOLD);
mvwprintw(okno1, x, y+1, "%c", '-');
//wbkgd(okno1, COLOR_PAIR(1) | A_BOLD);
wrefresh(okno1);
}
/*plansza [0][0]='0';
mvwprintw(okno1, 0, 0, "%c", '0');*/
/*dodasz sobie np. 10 znaków -,& o wspórzędnych xy, nastepnie dodasz dzieś 0 a potem tylko walniesz mvwprintw i wrefresz,dodawanie punktów i będzie pienknie */
}
int gra ()
{
do {
strzalki=wgetch(okno1);
if (strzalki==KEY_LEFT)
{
mvwprintw(okno1, yp, xp, "%c", ' ');
xp--;
};
if (strzalki==KEY_RIGHT)
{
mvwprintw(okno1, yp, xp, "%c", ' ');
xp++;
};
if (strzalki==KEY_UP)
{
mvwprintw(okno1, yp, xp, "%c", ' ');
yp--;
};
if (strzalki==KEY_DOWN)
{
mvwprintw(okno1, yp, xp, "%c", ' ');
yp++;
};
if (mvwinch(okno1, yp, xp) & A_CHARTEXT == 45)
{
punkty--;
}
if (mvwinch(okno1, yp, xp)==36)
{
punkty++;
}
mvwprintw(okno2, 2, 1, "%s", "punkty:");
mvwprintw(okno2, 2, 8, "%d", punkty);
wrefresh(okno2);
mvwprintw(okno1, yp, xp, "%c", '0');
}while(strzalki!=27);
}
int nick()
{
mvwprintw(okno1, 1, 1, "%s", "PODAJ NAZWE UZYTKOWNIKA");
wgetstr(okno1,imie);
mvwprintw(okno2, 2, 1, "%s", "imie:");
wrefresh(okno1);
mvwprintw(okno2, 2, 6, "%s", imie);
}
void main()
{
initscr(); // Rozpoczecie pracy z biblioteka CURSES
start_color(); // Proba rozpoczecia pracy z kolorami
if(has_colors()) { // Przygotowanie par kolorow
init_pair(1, COLOR_WHITE, COLOR_BLUE); //else
init_pair(2, COLOR_GREEN, COLOR_BLUE); //$
init_pair(3, COLOR_RED, COLOR_BLUE); //-
init_pair(4, COLOR_YELLOW, COLOR_BLUE); //#
}
curs_set(0); // Nie wyswietlaj kursora
noecho(); // Nie wyswietlaj znakow z klawiatury
okno1 = newwin(LINES, COLS-20, 0, 0);
wbkgd(okno1, COLOR_PAIR(1));
box(okno1, 0, 0); // Standardowe ramki
mvwprintw(okno1, 0, 1, "%s", "okno glowne");
wrefresh(okno1);
okno2 = newwin(LINES, 20, 0, COLS-20);
wbkgd(okno2, COLOR_PAIR(1) | A_BOLD);
box(okno2, 0, 0);
mvwprintw(okno2, 0, 1, "%s", "Okno komunikatow");
wrefresh(okno2);
nick (); // podaj imie
wrefresh(okno2);
wyczysc ();
mvwprintw(okno1, 1, 1, "%s", "zaczynamy gre");
wrefresh(okno1);
mvwprintw(okno1, LINES-1, 1, "%s", "Esc konczy program");
wrefresh(okno1);
sleep(2);
wyczysc ();//-2 dodatkowo daje by na rame nie wjeżdzał
ekran ();
wrefresh(okno1);
keypad(okno1,1);//funkcja ulatwijaca pobiranie znakow z okna
xp=1;
yp=1;
mvwprintw(okno1, xp, yp, "%c", '0');
gra();
delwin(okno1); // Usuniecie okien
delwin(okno2);
endwin();
}