// 5ARALIK.cpp : Defines the entry point for the console application. // // dENEME1.cpp : Defines the entry point for the console application. // #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include //#include "getBMP.h" #define PI 3.14 std::vector vvx; std::vector vvy; std::vector renk; std::vector renkd; std::vector renkdd; std::vector noktab; std::vector geridonusum; std::vector oyuncux; std::vector oyuncuy; std::vector topmyl; std::vector topmxl; std::vector rakipyl; std::vector rakipxl; std::vector bayrakxl; std::vector sutcekl; std::vector alfal; int kayit_oynat = 0; int framesayi = 0; void otomatikkaleci(); void kayittanoynat(int framesayx); //const float PI = 3.14; float ruzgaraci = 0.0; float ruzgaretki = 0.1; short surtunme = 0; int rastx = 75; int rasty = 75; float nokta1x = 2.0; float nokta1y = 3.0; float nokta2x = 4.0; float nokta2y = 3.0; float X2 = 200.0; float Y2 = 150.0; int ekranen = 800; int ekranboy = 600; float mavi = 0.0; float yesil = 0.0; float kirmizi = 1.0; int say = 0; int deger = 0; int sayacc = 0; int renkkod = 1; bool bayrak = false; bool silme = false; int noktano = 0; int noktabuyukluk = 8; int gerid = 0; int silx = 0; int sily = 0; int renkkods = 1; int noktabs = 8; float topmx = X2 / 2.0; float topmy = Y2 / 2.0; float topn[25][2]; float topy = 1.0; short bayrakx = 0; short kayitoynuyor = 0; short topsur = 0; short sutcek = 0; short sutsay = 0; short kayit = 0; int framesay = 0; short otokal = 1; short kaleciyon = 1; // 0 yönü aşağı 1 yönü yukarı short gol = 0; short golb = 0; float hizdeger = 0.0; float framehiz = 0.25; float alfa = 0.0; float futbolcumerkezx = 0.0; float futbolcumerkezy = 0.0; float rakipmerkezx = 0.0; float rakipmerkezy = 0.0; float rakipx = 184.0; float rakipy = Y2 / 2 - 2; float solaltx = 10.0; float solalty = 20.0; float xuzunluk = 180.0; float yuzunluk = 110.0; float santrar = 9.15; float derece = 0.0; float kaley = 40.3; float kalex = 16.5; short topyon = 1; static int p = 20; // Number of grid columns. static int q = 20; // Number of grid rows static float* vertices = NULL; // Vertex array of the mapped sample on the sphere. static float* textureCoordinates = NULL; // Texture co-ordinates array of the mapped sample on the sphere. static unsigned int texture[2]; // Array of texture indices. char skorbordsabit[100]; char skorborddegisken[10]; char agol = '0'; char bgol = '0'; short oncelik = 0; short penmod = 0; short pensaya = 0; short pensayb = 0; short penx = 1; float radyan(float derece) { return derece * PI / 180.0; } void ciz(float xx, float yy); class secilinokta { int xkoor; int ykoor; }; long faktoryal(short sayi) { long donus = 1; short sayac; if (sayi >= 2) { for (sayac = sayi; sayac > 1; sayac--) { donus = donus * sayac; } } return donus; } long kombinasyon(short n, short i) { long kombi = 0; kombi = faktoryal(n) / (faktoryal(i) * faktoryal(n - i)); return kombi; } double JJ(short n, short i, float t) { double donus = 0.0; donus = kombinasyon(n, i) * pow(t, i) * pow((1 - t), (n - i)); return donus; } void init(void) { float deger = 0; glClearColor(0.23, 0.36, 0.19, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, X2, 0.0, Y2); //X1,X2,Y1,Y2 } void silineniciz() { if (renkkods == 1) { kirmizi = 1.0; mavi = 0.0; yesil = 0.0; } if (renkkods == 2) { kirmizi = 0.0; mavi = 0.0; yesil = 1.0; } if (renkkods == 3) { kirmizi = 0.0; mavi = 1.0; yesil = 0.0; } glPointSize(noktabs); glColor3f(kirmizi, yesil, mavi); glBegin(GL_POINTS); glVertex2d(silx, sily); glEnd(); glFlush(); glutPostRedisplay(); } void sut(int deger) { float frekans = 0.0; float periyotms = 0.0; float zalfa = 5.0; srand(time(NULL)); ruzgaraci = rand() % 314 / 100 - PI; ruzgaretki = 0.000; zalfa = alfa + ruzgaretki * ruzgaraci; if (sutcek == 1) { framesay++; topmx += framehiz * cos(zalfa); topmy += framehiz * sin(zalfa); if (framesay % 20 == 0) { printf("framehiz=%f,alfa=%f,zalfa=%f,ruzgaraci=%f", framehiz, alfa, zalfa, ruzgaraci); } if (framehiz > 0.0) { framehiz = framehiz - 0.002 * surtunme; if (framehiz < 0.0) { framehiz = 0.0; } } else { sutcek = 0; } if (otokal == 1) { otomatikkaleci(); } // frekans = hizdeger / framehiz; // periyotms = 1000 / frekans; glutTimerFunc(50, sut, 1); if ((topmx > X2 - 10)) { sutcek = 0; sutsay++; penx = 1; printf("\n SUTSAY=%d", sutsay); if ((topmy < (solalty + (yuzunluk - kaley) / 2 + kaley)) && (topmy > (solalty + (yuzunluk - kaley) / 2))) { gol++; printf("\n GOLLLL GOLSAYISI : %d ", gol); agol++; if (gol >= 9) { exit(0); } } } else if (topmx < 10) { if ((topmy < (solalty + (yuzunluk - kaley) / 2 + kaley)) && (topmy > (solalty + (yuzunluk - kaley) / 2))) { golb++; printf("\n GOLLLL GOLSAYISI : %d ", golb); bgol++; if (golb >= 9) { exit(0); } } sutcek = 0; sutsay++; penx = 1; printf("\n SUTSAY=%d", sutsay); } if ((topmy > Y2 - 10) || (topmy < 10)) { sutcek = 0; } } } void otomatikkaleci() { printf("OTOMATIK KALECI"); float frekans = 0.0; float periyotms = 0.0; float kalecihiz = 0.25; if (kaleciyon == 1) { rakipy += kalecihiz; if (rakipy > (solalty + (yuzunluk - kaley) / 2 + kaley)) { kaleciyon = 0; } } else { //rakipx += framehiz ; rakipy -= kalecihiz; if (rakipy < (solalty + (yuzunluk - kaley) / 2)) { kaleciyon = 1; } } } void ciz(float xx, float yy) { float ii = 0.0; float jj = 0.0; float siyahbeyaz = 0.0; int renk1 = 0; int sira = 0; srand(time(NULL)); glColor3f(0.0, 1.0, 0.0); glBegin(GL_POINTS); glVertex3d(rastx, rasty, 0); glEnd(); glLineWidth(5.0); glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINE_LOOP); glVertex3f(solaltx, solalty, 0.0); glVertex3f(solaltx + xuzunluk, solalty, 0.0); glVertex3f(solaltx + xuzunluk, solalty + yuzunluk, 0.0); glVertex3f(solaltx, solalty + yuzunluk, 0.0); glEnd(); glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINES); glVertex3f(solaltx + xuzunluk / 2, solalty, 0.0); glVertex3f(solaltx + xuzunluk / 2, solalty + yuzunluk, 0.0); glEnd(); glBegin(GL_LINE_LOOP); for (derece = 0.0; derece <= 360.0; derece += 15.0) { glVertex2f(solaltx + xuzunluk / 2 + santrar * cos(radyan(derece)), solalty + yuzunluk / 2 + santrar * sin(radyan(derece))); } glEnd(); glBegin(GL_LINE_STRIP); glVertex2f(solaltx, solalty + (yuzunluk - kaley) / 2); glVertex2f(solaltx + kalex, solalty + (yuzunluk - kaley) / 2); glVertex2f(solaltx + kalex, solalty + (yuzunluk - kaley) / 2 + kaley); glVertex2f(solaltx, solalty + (yuzunluk - kaley) / 2 + kaley); glEnd(); glBegin(GL_LINE_STRIP); glVertex2f(solaltx + xuzunluk, solalty + (yuzunluk - kaley) / 2); glVertex2f(solaltx + xuzunluk - kalex, solalty + (yuzunluk - kaley) / 2); glVertex2f(solaltx + xuzunluk - kalex, solalty + (yuzunluk - kaley) / 2 + kaley); glVertex2f(solaltx + xuzunluk, solalty + (yuzunluk - kaley) / 2 + kaley); glEnd(); glColor3f(siyahbeyaz, siyahbeyaz, siyahbeyaz); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); float artis = 15.0; int sayac = 0; for (derece = 0.0; derece <= 360.0; derece += artis) { topn[sayac][0] = topmx + topy * cos(radyan(derece)); topn[sayac][1] = topmy + topy * sin(radyan(derece)); sayac++; } sayac = 0; glColor3f(1.0, 0.0, 0.0); glBegin(GL_TRIANGLES); for (sayac = 0; sayac < 24; sayac++) { glVertex2f(topmx, topmy); glVertex2fv(topn[sayac]); glVertex2fv(topn[sayac + 1]); } glEnd(); // FUTBOLCU ÇİZİMİ ii = 4.0; jj = 4.0; if (kayit_oynat == 1) { glColor3f(1.0, 0.0, 0.0); } else { glColor3f(0.0, 0.0, 0.0); } glBegin(GL_QUADS); glVertex3f(xx, yy, 0.0); glVertex3f(xx + ii, yy, 0.0); glVertex3f(xx + ii, yy + jj, 0.0); glVertex3f(xx, yy + jj, 0.0); glEnd(); // // RAKİP KALECİ glColor3f(0.0, 0.0, 1.0); glBegin(GL_QUADS); glVertex3f(rakipx, rakipy, 0.0); glVertex3f(rakipx + ii, rakipy, 0.0); glVertex3f(rakipx + ii, rakipy + jj, 0.0); glVertex3f(rakipx, rakipy + jj, 0.0); glEnd(); // if (penmod == 1) { bayrakx = 1; if (penx == 1) { penx = 0; topmx = 0.75 * (X2 - 20); topmy = Y2 / 2; if (pensaya >= 5) { penmod = 2; } } } for (sayac = 0; sayac < 24; sayac++) { if ((abs(xx - topn[sayac][0]) < 2.0) || (abs(xx + ii - topn[sayac][0]) < 2.0)) { if ((abs(yy - topn[sayac][1]) < 2.0) || (abs(yy + jj - topn[sayac][1]) < 2.0)) { bayrakx = 1; break; } } else if ((abs(rakipx - topn[sayac][0]) < 2.0) || (abs(rakipx + ii - topn[sayac][0]) < 2.0)) { if ((abs(rakipy - topn[sayac][1]) < 2.0) || (abs(rakipy + jj - topn[sayac][1]) < 2.0)) { bayrakx = 2; break; } } } if (bayrakx == 1) { for (sayac = 0; sayac < 24; sayac++) { if ((abs(rakipx - topn[sayac][0]) < 2.0) || (abs(rakipx + ii - topn[sayac][0]) < 2.0)) { if ((abs(rakipy - topn[sayac][1]) < 2.0) || (abs(rakipy + jj - topn[sayac][1]) < 2.0)) { bayrakx = 0; sutcek = 0; topsur = 0; topmx = rakipx - 3.0; printf("\n KURTARDI"); break; } } } } else if (bayrakx == 2) { for (sayac = 0; sayac < 24; sayac++) { if ((abs(xx - topn[sayac][0]) < 2.0) || (abs(xx + ii - topn[sayac][0]) < 2.0)) { if ((abs(yy - topn[sayac][1]) < 2.0) || (abs(yy + jj - topn[sayac][1]) < 2.0)) { bayrakx = 0; sutcek = 0; topsur = 0; topmx = xx + 3.0; printf("\n KURTARDI"); break; } } } } rakipmerkezx = rakipx + 2.0; rakipmerkezy = rakipy + 2.0; futbolcumerkezx = xx + 2.0; futbolcumerkezy = yy + 2.0; if (bayrakx == 1) { if (kayitoynuyor < 1) { alfa = atan2(topmy - futbolcumerkezy, topmx - futbolcumerkezx); printf("\n Alfa: %f", alfa); } } if (bayrakx == 2) { if (kayitoynuyor < 1) { alfa = atan2(topmy - rakipmerkezy, topmx - rakipmerkezx); printf("\n Alfa: %f", alfa); } } if (kayit == 1) { oyuncux.push_back(xx); oyuncuy.push_back(yy); rakipxl.push_back(rakipx); rakipyl.push_back(rakipy); topmxl.push_back(topmx); topmyl.push_back(topmy); sutcekl.push_back(sutcek); bayrakxl.push_back(bayrakx); alfal.push_back(alfa); framesayi++; } if (bayrakx == 1 && topsur == 1) { topmx = topmx += 10.0; bayrakx = 0; topsur = 0; } if (bayrakx == 1 && sutcek == 1) { sut(1); bayrakx = 0; topsur = 0; } if (bayrakx == 2 && sutcek == 1) { sut(1); bayrakx = 0; topsur = 0; } glRasterPos3f(50.0, Y2 - 10, 0.0); strcpy(skorbordsabit, "A TAKIMI - B TAKIMI"); for (short say = 0; say < strlen(skorbordsabit); say++) { glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, skorbordsabit[say]); } glColor3f(0.8, 0.0, 0.0); glRasterPos3f(86.0, Y2 - 10, 0.0); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, bgol); glRasterPos3f(78.0, Y2 - 10, 0.0); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, agol); glFlush(); glutPostRedisplay(); } void goster() { glClear(GL_COLOR_BUFFER_BIT); ciz(nokta2x, nokta2y); } void mouse(int btn, int state, int x, int y) { if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { nokta2x = x * (X2 / ekranen); nokta2y = Y2 - y * (Y2 / ekranboy); glutPostRedisplay(); } if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) { topmx = x * (X2 / ekranen); topmy = Y2 - y * (Y2 / ekranboy); hizdeger = 0.5; glutPostRedisplay(); } } void mouseWheel(int wheel, int direction, int x, int y) { // Increment/decrement size of current point (at the back of vector points) // depending on the direction of rotation of the mouse wheel. // (direction > 0) ? noktabuyukluk++ : noktabuyukluk--; /* if (direction > 0) { noktabuyukluk++; } else { noktabuyukluk--; }*/ // if (noktabuyukluk < 3) { // noktabuyukluk = 3; // } (direction > 0) ? hizdeger += 0.5 : hizdeger -= 0.5; if (hizdeger <= 0.0) { hizdeger = 0.0; } framehiz = hizdeger / 20.0; printf("\n Hiz:%f FrameHiz=%f", hizdeger, framehiz); //printf("noktab:%d", noktabuyukluk); glutPostRedisplay(); } void kayittanoynat(int framesayx) { int say2 = 0; kayit = 0; kayitoynuyor = 1; for (say2 = 0; say2 < framesayx; say2++) { rakipx = rakipxl[say2]; rakipy = rakipyl[say2]; topmx = topmxl[say2]; topmy = topmyl[say2]; sutcek = sutcekl[say2]; bayrakx = bayrakxl[say2]; alfa = alfal[say2]; ciz(oyuncux[say2], oyuncuy[say2]); } kayitoynuyor = 0; } void mouseMotion(int x, int y) { float nokta2xx; float nokta2yy; int yenix; int yeniy; int komsuluk = 1; nokta2xx = x * (X2 / ekranen); //nokta2y = 15.0 - y / 40; nokta2yy = Y2 - y * (Y2 / ekranboy); //printf("\n Motion %f %f", nokta2xx, nokta2yy); /*for (int saydir = 0;saydir < vvx.size();saydir++) { if (vvx[saydir] >= (nokta2xx-1)&& vvx[saydir] <= (nokta2xx + 1)) { if (vvy[saydir] >= (nokta2yy - 1) && vvy[saydir] <= (nokta2yy + 1)) { vvx[saydir] = 0; vvy[saydir] = 0; } } }*/ if (silme == false) { if (bayrak == false) { for (int saydir = 0; saydir < vvx.size(); saydir++) { komsuluk = noktab[saydir] / 8 + 1; if (vvx[saydir] >= (nokta2xx - komsuluk) && vvx[saydir] <= (nokta2xx + komsuluk)) { if (vvy[saydir] >= (nokta2yy - komsuluk) && vvy[saydir] <= (nokta2yy + komsuluk)) { noktano = saydir; bayrak = true; break; } } } } if (bayrak == true) { vvx[noktano] = nokta2xx; vvy[noktano] = nokta2yy; } } else { for (int saydir = 0; saydir < vvx.size(); saydir++) { if (vvx[saydir] >= (nokta2xx - 1) && vvx[saydir] <= (nokta2xx + 1)) { if (vvy[saydir] >= (nokta2yy - 1) && vvy[saydir] <= (nokta2yy + 1)) { silx = vvx[saydir]; sily = vvy[saydir]; noktabs = noktab[saydir]; renkkods = renkdd[saydir]; vvx[saydir] = -20; vvy[saydir] = -20; geridonusum.push_back(saydir); gerid++; } } } } glutPostRedisplay(); } void keyInput(unsigned char key, int x, int y) { if (oncelik == 0) { switch (key) { //glutDisplayFunc(silineniciz); case 'U': if (surtunme == 1) { surtunme = 0; } else { surtunme = 1; printf("\n Surtunme Var"); } break; case 'K': if (kayit == 1) { kayit = 0; printf("\n kayit yok"); } else { kayit = 1; printf("\n kayit Var"); } break; case 'O': kayit_oynat = 1; kayittanoynat(framesayi); printf("\n kayit oynat"); break; case 'P': penmod = 1; sutsay = 0; pensaya = 1; ciz(nokta2x, nokta2y); oncelik = 1; break; case 'D': nokta2x += 1.0; ciz(nokta2x, nokta2y); oncelik = 1; break; case 'A': nokta2x -= 1.0; ciz(nokta2x, nokta2y); oncelik = 1; break; case 'W': nokta2y += 1.0; ciz(nokta2x, nokta2y); oncelik = 1; break; case 'S': nokta2y -= 1.0; ciz(nokta2x, nokta2y); oncelik = 1; break; case 27: exit(0); break; case 'J': if (silme == true) { silme = false; } else { silme = true; } glutPostRedisplay(); break; case 'N': rastx = rand() % 200; rasty = rand() % 150; break; case 'Z': sutcek = 1; topsur = 0; break; case '8': sutcek = 1; topsur = 0; break; case 'X': topsur = 1; sutcek = 0; break; case 'T': topsur = 0; sutcek = 0; topmx = X2 / 2; topmy = Y2 / 2; break; case 'Q': otokal = 0; break; case 'R': otokal = 1; break; case '5': rakipy += 1; oncelik = 0; ciz(nokta2x, nokta2y); break; case '2': rakipy -= 1; oncelik = 0; ciz(nokta2x, nokta2y); break; case '1': rakipx -= 1; oncelik = 0; ciz(nokta2x, nokta2y); break; case '3': rakipx += 1; oncelik = 0; ciz(nokta2x, nokta2y); break; default: break; } } else { switch (key) { case 'P': penmod = 1; ciz(nokta2x, nokta2y); oncelik = 0; break; case '5': rakipy += 1; ciz(nokta2x, nokta2y); oncelik = 0; break; case '2': rakipy -= 1; ciz(nokta2x, nokta2y); oncelik = 0; break; case '1': rakipx -= 1; ciz(nokta2x, nokta2y); oncelik = 0; break; case '3': rakipx += 1; ciz(nokta2x, nokta2y); oncelik = 0; break; case '8': sutcek = 1; topsur = 0; break; case 'D': nokta2x += 1.0; ciz(nokta2x, nokta2y); oncelik = 1; break; case 'A': nokta2x -= 1.0; ciz(nokta2x, nokta2y); oncelik = 1; break; case 'W': nokta2y += 1.0; ciz(nokta2x, nokta2y); oncelik = 1; break; case 'S': nokta2y -= 1.0; ciz(nokta2x, nokta2y); oncelik = 1; break; case 27: exit(0); break; case 'J': if (silme == true) { silme = false; } else { silme = true; } glutPostRedisplay(); break; case 'N': rastx = rand() % 200; rasty = rand() % 150; break; case 'Z': sutcek = 1; topsur = 0; break; case 'X': topsur = 1; sutcek = 0; break; case 'T': topsur = 0; sutcek = 0; topmx = X2 / 2; topmy = Y2 / 2; break; case 'Q': otokal = 0; break; case 'R': otokal = 1; break; default: break; } } } void ozelfonk(int key, int x, int y) { if (key == GLUT_KEY_UP) { nokta2y += 1.0; ciz(nokta2x, nokta2y); } if (key == GLUT_KEY_DOWN) { nokta2y -= 1.0; ciz(nokta2x, nokta2y); } if (key == GLUT_KEY_RIGHT) { nokta2x += 1.0; ciz(nokta2x, nokta2y); } if (key == GLUT_KEY_LEFT) { nokta2x -= 1.0; ciz(nokta2x, nokta2y); } } int main(int argc, char** argv) { renk.push_back(0); renkdd.push_back(1); vvx.push_back(15); vvy.push_back(15); noktab.push_back(8); glutInit(&argc, argv); long a = 100; long a1 = 200; glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(150, 150); glutInitWindowSize(ekranen, ekranboy); glutCreateWindow("Bilgisayar Animasyonu Dersi"); init(); glutDisplayFunc(goster); glutKeyboardFunc(keyInput); glutSpecialFunc(ozelfonk); glutMouseFunc(mouse); glutMotionFunc(mouseMotion); glutMouseWheelFunc(mouseWheel); glutMainLoop(); return 0; /* ANSI C requires main to return int. */ } /*case 'Y': say = vvx.size(); kirmizi = 0.0; mavi = 0.0; yesil = 1.0; renk.push_back(say); renkkod = 2; glutPostRedisplay(); break; case 'M': say = vvx.size(); //printf("\n say= %d", say); kirmizi = 0.0; mavi = 1.0; yesil = 0.0; //renk.push_back(say); renkkod = 3; glutPostRedisplay(); break; case 'K': say = vvx.size(); //printf("\n say= %d", say); /* kirmizi = 0.0; mavi = 1.0; yesil = 0.0; renk.push_back(say); renkkod = 1; glutPostRedisplay(); break;*/