McAffey Temat założony przez niniejszego użytkownika |
Problem z programem w allegro » 2009-11-10 20:20:08 Witam! Próbuję zrobić program na kształt Excela, tylko mam pewien problem. Kod wygląda tak:
[CODE src="C++" zwin] #include <allegro.h> #include <math.h>
int main() { allegro_init(); install_keyboard(); set_color_depth(16); set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0); clear_to_color(screen, makecol(255,255,255));
//arc(screen, SCREEN_W/2, SCREEN_H/2,itofix(0), itofix(128), 100, makecol(0, 0, 0)); //// Linie int nrlit;
int lit[25], litp[25], litk[25];
litp[1]=25; litk[1]=89; //lit[1]=litk[1]-litp[1]; //A-1 B-2 litp[2]=89; litk[2]=153; lit[2]=litk[2]-litp[2];
litp[3]=153; litk[3]=217; //lit[3]=litk[3]-litp[3];
int nrlitstary;
//A-1 B-2
int licz[25], liczp[25], liczk[25];
int nrlicz; int nrliczstary;
liczp[1]=81; liczk[1]=98; //licz[1]=liczk[1]-liczp[1];
liczp[2]=98; liczk[2]=115; //licz[2]=liczk[2]-liczp[2];
line(screen,0,64,0,600, makecol(0,0,0)); line(screen,0,64,800,64, makecol(0,0,255));
line(screen,25,64,25,600, makecol(0,0,0)); //A textout_ex(screen,font,"A",54,70 ,makecol(0,0,0),-1); //A line(screen,89,64,89,600, makecol(0,0,0)); //A textout_ex(screen,font,"B",118,70 ,makecol(0,0,0),-1); //B line(screen,153,64,153,600, makecol(0,0,0)); //B
line(screen,0,81,800,81,makecol(0,0,0)); // 1 textout_ex(screen,font,"1",10,87 ,makecol(0,0,0),-1); //1 line(screen,0,98,800,98,makecol(0,0,0)); //1 textout_ex(screen,font,"2",10,104 ,makecol(0,0,0),-1); //2 line(screen,0,115,800,115,makecol(0,0,0)); //2
nrlit=1; nrlicz=1;
while(!key[KEY_ESC]) {
nrlitstary=nrlit; nrliczstary=nrlicz;
if(nrlit>1) { ( key[KEY_LEFT]); line(screen,litp[nrlitstary],liczp[nrliczstary],litk[nrlitstary],liczp[nrliczstary],makecol(0,0,0)); // poziom gorny line(screen,litp[nrlitstary],liczk[nrliczstary],litk[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // poziom doly line(screen,litp[nrlitstary],liczp[nrliczstary],litp[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // pion lewy line(screen,litk[nrlitstary],liczp[nrliczstary],litk[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // pion prawy nrlit--; }
if(key[KEY_RIGHT]) { line(screen,litp[nrlitstary],liczp[nrliczstary],litk[nrlitstary],liczp[nrliczstary],makecol(0,0,0)); // poziom gorny line(screen,litp[nrlitstary],liczk[nrliczstary],litk[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // poziom doly line(screen,litp[nrlitstary],liczp[nrliczstary],litp[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // pion lewy line(screen,litk[nrlitstary],liczp[nrliczstary],litk[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // pion prawy nrlit++; }
if(nrlicz>1) { (key[KEY_UP]); line(screen,litp[nrlitstary],liczp[nrliczstary],litk[nrlitstary],liczp[nrliczstary],makecol(0,0,0)); // poziom gorny line(screen,litp[nrlitstary],liczk[nrliczstary],litk[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // poziom doly line(screen,litp[nrlitstary],liczp[nrliczstary],litp[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // pion lewy line(screen,litk[nrlitstary],liczp[nrliczstary],litk[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // pion prawy nrlicz--; }
if(key[KEY_DOWN]) { line(screen,litp[nrlitstary],liczp[nrliczstary],litk[nrlitstary],liczp[nrliczstary],makecol(0,0,0)); // poziom gorny line(screen,litp[nrlitstary],liczk[nrliczstary],litk[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // poziom doly line(screen,litp[nrlitstary],liczp[nrliczstary],litp[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // pion lewy line(screen,litk[nrlitstary],liczp[nrliczstary],litk[nrlitstary],liczk[nrliczstary],makecol(0,0,0)); // pion prawy nrlicz++; }
//polozenie czerwoneo prostokata po zwolnieniu klawisza
line(screen,litp[nrlit],liczp[nrlicz],litk[nrlit],liczp[nrlicz],makecol(255,0,0)); // poziom gorny line(screen,litp[nrlit],liczk[nrlicz],litk[nrlit],liczk[nrlicz],makecol(255,0,0)); // poziom doly line(screen,litp[nrlit],liczp[nrlicz],litp[nrlit],liczk[nrlicz],makecol(255,0,0)); // pion lewy line(screen,litk[nrlit],liczp[nrlicz],litk[nrlit],liczk[nrlicz],makecol(255,0,0)); // pion prawy
}
readkey(); allegro_exit(); return 0; } END_OF_MAIN();
[/code]
Program na razie ma tylko czerwoną ramką zaznaczać wybraną kratkę. Wie gdzie zaznaczać na podstawie zmiennych "x" branych z "liter" na górze i zmienną "y" z cyfr po lewej. Gdy klikam strzałkę w górę zmniejsza się liczba gdy w dół liczba się zwiększa, gdy w prawo litera się zwiększa (1-A,2-B) a w lewo zmniejsza. Chwilowo zrobiłem tylko opcję, że stare miejsce czerwonej ramki "zamalowuje" taką samą tylko czarną ramką. I on dobrze dobiera ramkę, tylko problem polega na tym, że on gdzieś sobie cały czas przypisuje, że litera jest 1 (A) i liczba jest jeden, tzn gdy kliknę strzałkę w prawo, to on cały czas przesuwa się w prawo, i wraca i przez to miga zamiast być na stałe i po puszczeniu klawisza on znowu wraca na jeden, jeden. Ta ramka jest dobrze dopasowywana, bo gdy w miejscu :
//polozenie czerwoneo prostokata po zwolnieniu klawisza line(screen,litp[nrlit],liczp[nrlicz],litk[nrlit],liczp[nrlicz],makecol(255,0,0)); // poziom gorny line(screen,litp[nrlit],liczk[nrlicz],litk[nrlit],liczk[nrlicz],makecol(255,0,0)); // poziom doly line(screen,litp[nrlit],liczp[nrlicz],litp[nrlit],liczk[nrlicz],makecol(255,0,0)); // pion lewy line(screen,litk[nrlit],liczp[nrlicz],litk[nrlit],liczk[nrlicz],makecol(255,0,0)); // pion prawy
gdy dałem w tablicy zamiast "nrlit" po prostu "2" i zamiast "nrlicz" też po prostu 2 to ramka była dobrze na B2 tylko wtedy do niej ciągle wraca. I jeszcze co dziwne, gdy ustalam nrlit i nrlicz na 2 (tuż przed pętlą while) to on mimo wszystko ma ciągle zaznaczony A1. Nie mam pojęcia dla czego tak się dzieje. To jest dziwne, no bo gdy ręcznie wpisałem 2 (jak powiedziałem przed chwilą) to zaznaczało dobrze a gdy wpisałem 2 do nrlit i nrlicz to już nie działa dobrze czyli zaznacza A1 i ciągle wraca. Jeśli wiecie co robić, wspomóżcie. Pozdrawiam
|
malan |
» 2009-11-11 12:50:20 gdyż to co podałeś nie ma żadnego związku z problemem który przedstawiłem w pierwszym poście ... skoro nie ma to czemu to działa: if( nrlit > 1 && key[ KEY_LEFT ] ) { line( screen, litp[ nrlitstary ], liczp[ nrliczstary ], litk[ nrlitstary ], liczp[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litp[ nrlitstary ], liczk[ nrliczstary ], litk[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litp[ nrlitstary ], liczp[ nrliczstary ], litp[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litk[ nrlitstary ], liczp[ nrliczstary ], litk[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); nrlit--; }
if( nrlit < 2 && key[ KEY_RIGHT ] ) { line( screen, litp[ nrlitstary ], liczp[ nrliczstary ], litk[ nrlitstary ], liczp[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litp[ nrlitstary ], liczk[ nrliczstary ], litk[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litp[ nrlitstary ], liczp[ nrliczstary ], litp[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litk[ nrlitstary ], liczp[ nrliczstary ], litk[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); nrlit++; }
if( nrlicz > 1 && key[ KEY_UP ] ) { line( screen, litp[ nrlitstary ], liczp[ nrliczstary ], litk[ nrlitstary ], liczp[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litp[ nrlitstary ], liczk[ nrliczstary ], litk[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litp[ nrlitstary ], liczp[ nrliczstary ], litp[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litk[ nrlitstary ], liczp[ nrliczstary ], litk[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); nrlicz--; }
if( nrlicz < 2 && key[ KEY_DOWN ] ) { line( screen, litp[ nrlitstary ], liczp[ nrliczstary ], litk[ nrlitstary ], liczp[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litp[ nrlitstary ], liczk[ nrliczstary ], litk[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litp[ nrlitstary ], liczp[ nrliczstary ], litp[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); line( screen, litk[ nrlitstary ], liczp[ nrliczstary ], litk[ nrlitstary ], liczk[ nrliczstary ], makecol( 0, 0, 0 ) ); nrlicz++; }
|