Showing posts with label Games. Show all posts
Showing posts with label Games. Show all posts

Monday, April 29, 2013

#5 Grafika skupljanje vockica

// krugovi padaju sa vrha ekrana skupiti ih sto vise sa pokretnim kolicima
#include <graphics.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<unistd.h>
// left and right arrow keys <- ->

const int LEFT_KEY=75;
const int RIGHT_KEY=77;

// pozicija tacne startna
const int screenMaxX=800;
const int screenMaxY=800;


 int tacnaWidth=200;
 int tacnaHeight=25;
 int tacna_Offset=30;
 int tacna_StartX=300;
 int tacna_StartY=800;// y se uvek nalazi na dnu ekrana i ne menja se

// min i max dokle po X-u moze ici tacna zavisi od
// velicine ekrana po X
// velicine tacne
// a meri se u odnosu na goenji levi ugao tacne :)

 int tacna_minX=0;
 int tacna_maxX=screenMaxX-tacnaWidth; // velicina tacne

 // trenutna pozicija tacne
int currentX=tacna_StartX;
int currentY=tacna_StartY;

// niz vocki
struct s_vocka{
       // prethodna pozicija
       int x;
       int y;
       colors boja;
       };
     
const int vockaMin=0;
const int vockaMax=20;
struct s_vocka vocke[vockaMax];
const int vocka_sirina=40;     // kolko je siroka vocka
const int vocka_rastojanje=40; // kolko je rastojanje izmedju vocki

const int vocka_korak=60; // korak pomeraja u pikselima
const int vocka_brzina=1; // brzina u  sekundama spustanja vocki

 int brojacVocki=0;
/* Skupiti sto vise vockica na tacnu  koristiti tastere LEFT i RIGHT <- -> za pomeranje tacne*/
 int random_number(int min_num, int max_num); // slucajan broj u intervalu od do
 void draw_tacna(int pozX, int pozY);
 void mov_tacna(int keyCode);
 void play_game();

 void vocke_popuni(int pozicija); // dodaj novu poziciju vocke
 void vocke_default(); // popuni osnovni niz sa vockama
 void vocke_ispisi();  // ispisi sadrzaj niza za proveru

 void vocke_crtaj(); // crtaj vocke u zavisnosti od brzine
 void vocke_crtaj_vocku(int pozicija);
 bool bingo_check(int tacnaX, int tacnaY, int vockaX,int vockaY, int vockaRadius); // provera da li je pokupio vocku

main ( )
{
  initwindow (screenMaxX,screenMaxY);/*otvara prozor velicine 800 x 800 piksela*/
     play_game();
   while (!kbhit( ));  /*zadržava prozor sa crtežom otvorenim*/
   closegraph( );
}

// Funkcije



void play_game(){
     // set random generato position
      srand(time(NULL));
     // Deafult pozicija tacne
     currentX=tacna_StartX;
     currentY=tacna_StartY;
     // postavi sve vocke na mesto
     vocke_default();
     //vocke_ispisi(); testira vocke
     draw_tacna(currentX,currentY);
   
 
       
     clock_t start = clock();
     /*Do something*/
     float seconds=0;
   
    // whait ? seconds then do something
    int j=-1;
    char c;
     while (j<0){
           Sleep(10);
            //usleep(10000);          
           if (seconds>=(float) vocka_brzina){
                start = clock(); // stavi sat na pocetak
                for (int i=vockaMin;i<vockaMax;i++){
                    vocke_crtaj_vocku(i); // crtaj vocku
                 }
                           
           }
           clock_t end = clock();
           seconds = (float)(end - start) / CLOCKS_PER_SEC;
         
           char txt[20];
           //sprintf(txt,"Vocke:%f",seconds);
           sprintf(txt,"Vocke:%d",brojacVocki);
           outtextxy(20,20,txt);
         
            if (kbhit()){
             c=getch();
              if (c=='q') exit(0);
              mov_tacna((int) c);
           }
     }
}

   void vocke_popuni(int pozicija){ // dodaj novu vocku na poziciju vocke
     if (pozicija>=vockaMin && pozicija <vockaMax){
        // vocka ulazi u niz kao slucajan broj pred ekran tj u minus
          vocke[pozicija].x=pozicija*(vocka_sirina)+vocka_rastojanje+int(vocka_sirina/2);
          vocke[pozicija].y= random_number(-screenMaxY,0);
          vocke[pozicija].boja=(colors)random_number(1,14);
     }
   }

 void vocke_default(){ // popuni osnovni niz sa vockama
 
    for (int i=vockaMin;i<vockaMax;i++){
        vocke_popuni(i);
        }
  }
 void vocke_ispisi(){
      char tekst[10];
      for (int i=vockaMin;i<vockaMax;i++){
        sprintf(tekst,"%d,%d|",vocke[i].x,vocke[i].y);
        outtextxy(20+i*70,100,tekst);
        }
  }


 void vocke_crtaj_vocku(int pozicija){ // crtaj vocke u zavisnosti

    if (vocke[pozicija].y<=screenMaxY){
       // brisi staru
       setcolor(BLACK);
       circle(vocke[pozicija].x,vocke[pozicija].y,(int)vocka_sirina/2);
     
       // povecaj za korak
      // vocke[pozicija].x=vocke[pozicija].x+vocka_korak;
      vocke[pozicija].y= vocke[pozicija].y+vocka_korak;
       // crtaj novu
       setcolor(WHITE);
       int radius=(int)(int)vocka_sirina/2;
       circle(vocke[pozicija].x,vocke[pozicija].y,radius);
     
       if (bingo_check(currentX,currentY,vocke[pozicija].x,vocke[pozicija].y,radius)){
         // pogodak
         brojacVocki++;
         // obrisi je i dodaj ponovo
       
         setcolor(BLACK);
         circle(vocke[pozicija].x,vocke[pozicija].y,(int)vocka_sirina/2);
          vocke_popuni(pozicija);                                                                      
       }
     }
     else{
          //dodaj novu u niz vocki na istu poziciju
          // brisi staru
       setcolor(BLACK);
       circle(vocke[pozicija].x,vocke[pozicija].y,(int)vocka_sirina/2);
          vocke_popuni(pozicija);
     }

           


 }

void mov_tacna(int keyCode){
   
     switch(keyCode){
        case LEFT_KEY:{// left
          int tmpX=currentX-tacna_Offset;
          if (tmpX>=tacna_minX && tmpX <=tacna_maxX){
               // brisi prethodnu poziciju tacne
                setcolor(BLACK);
                draw_tacna(currentX,currentY);
             
                // crtaj novu poziciju tacne
                currentX=tmpX; // pomeras na novo mesto
                setcolor(WHITE);
                draw_tacna(currentX,currentY);        
          }
         break;  
        }
        case RIGHT_KEY:{ // right
        int tmpX=currentX+tacna_Offset;
         if (tmpX>=tacna_minX && tmpX <=tacna_maxX){
             
                // brisi prethodnu poziciju tacne
                setcolor(BLACK);
                draw_tacna(currentX,currentY);
             
                // crtaj novu poziciju tacne
                currentX=tmpX; // pomeras na novo mesto
                setcolor(WHITE);
                draw_tacna(currentX,currentY);    
          }
         break;  
        }                              
     }
   
}
bool bingo_check(int tacnaX, int tacnaY, int vockaX,int vockaY, int vockaRadius){
      bool ret=false;
   
      if ((vockaX>=(tacnaX-vockaRadius)) && (vockaX<=(tacnaX+tacnaWidth+vockaRadius)) && (vockaY>=(tacnaY-vockaRadius)))
      {
       Beep(523,100);
       ret=true;
      }
      return ret;
     }
void draw_tacna(int pozX, int pozY){
   
   rectangle(pozX,pozY-tacnaHeight,pozX+tacnaWidth,pozY);
   
}

int random_number(int min_num, int max_num)
        {
            int result=0,low_num=0,hi_num=0;
            if(min_num<max_num)
            {
                low_num=min_num;
                hi_num=max_num+1; // this is done to include max_num in output.
            }else{
                low_num=max_num+1;// this is done to include max_num in output.
                hi_num=min_num;
            }
            //srand(time(NULL));
            result = (rand()%(hi_num-low_num))+low_num;
            return result;
        }

Tuesday, April 2, 2013

4# XOX Igrica Grafika u C-u


#include <graphics.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>

// redni brojevi u tabeli
/*
 147
 258
 369
 */

void draw_table();
void draw_x(int position);
void draw_o(int position);
void draw_test(); // iscrtaj sve X i O

void play(char znak,int igrac);


void play_game();
 
main ( )
{
  initwindow (800,800);/*otvara prozor veli?ine 800 x 600 piksela*/
 
  play_game();
 

 
   while (!kbhit( ));  /*zadržava prozor sa crtežom otvorenim*/
   closegraph( );
}

/* Potrebne bibljoteke
   -lbgi
   -lgdi32
   -lcomdlg32
   -luuid
   -loleaut32
   -lole32



*/
void draw_x(int position){
     switch(position){
       // column I
      case 1:line(100,100,300,300);line(300,100,100,300);break;              
      case 2:line(100,300,300,500);line(300,300,100,500);break;
      case 3:line(100,500,300,700);line(300,500,100,700);break;
     
      // column II
      case 4:line(300,100,500,300);line(500,100,300,300);break;              
      case 5:line(300,300,500,500);line(500,300,300,500);break;
      case 6:line(300,500,500,700);line(500,500,300,700);break;  
     
      // column III
      case 7:line(500,100,700,300);line(700,100,500,300);break;              
      case 8:line(500,300,700,500);line(700,300,500,500);break;
      case 9:line(500,500,700,700);line(700,500,500,700);break;              
     }
}

void draw_o(int position){
     switch(position){
       // column I
      case 1:circle(200,200,100);break;              
      case 2:circle(200,400,100);break;
      case 3:circle(200,600,100);break;
     
      // column II
      case 4:circle(400,200,100);break;              
      case 5:circle(400,400,100);break;
      case 6:circle(400,600,100);break;
     
      // column III
      case 7:circle(600,200,100);break;              
      case 8:circle(600,400,100);break;
      case 9:circle(600,600,100);break;            
     }
}
void draw_test(){
  draw_x(1);
  draw_x(2);
  draw_x(3);
 
  draw_x(4);
  draw_x(5);
  draw_x(6);
 
  draw_x(7);
  draw_x(8);
  draw_x(9);
 
  draw_o(1);
  draw_o(2);
  draw_o(3);
 
  draw_o(4);
  draw_o(5);
  draw_o(6);
 
  draw_o(7);
  draw_o(8);
  draw_o(9);
 
     }
void play(char znak,int igrac){
       if(igrac%2==0){
            switch(znak){
             case '1':draw_o(1);break;
             case '2':draw_o(2);break;
             case '3':draw_o(3);break;
           
             case '4':draw_o(4);break;
             case '5':draw_o(5);break;
             case '6':draw_o(6);break;
           
             case '7':draw_o(7);break;
             case '8':draw_o(8);break;
             case '9':draw_o(9);break;
                   
            }        
       }
       else {
             switch(znak){
             case '1':draw_x(1);break;
             case '2':draw_x(2);break;
             case '3':draw_x(3);break;
           
             case '4':draw_x(4);break;
             case '5':draw_x(5);break;
             case '6':draw_x(6);break;
           
             case '7':draw_x(7);break;
             case '8':draw_x(8);break;
             case '9':draw_x(9);break;
                   
            }        
           
            }
     }
void draw_table(){  
   // crtanje pravougaonika oko
   rectangle(100,100,700,700);
   // vertical
   line(300,100,300,700);
   line(500,100,500,700);
   // horizontal lines
   line(100,300,700,300);
   line(100,500,700,500);
   // dodaj brojeve svakog polja
   outtextxy(200,100,"1");
   outtextxy(400,100,"4");
   outtextxy(600,100,"7");
 
   outtextxy(200,300,"2");
   outtextxy(400,300,"5");
   outtextxy(600,300,"8");
 
   outtextxy(200,500,"3");
   outtextxy(400,500,"6");
   outtextxy(600,500,"9");
 
}
void play_game(){
 
   setfillstyle(SOLID_FILL,BLACK);
   bar(0,0,800,800);
   draw_table();
   settextstyle(1,0,1);
   int i=0;
   char str[100]="";
   char c;  
   char poruka[100]="";
   int igrac=1;
   setcolor(RED);
   sprintf(poruka,"Sada igra igrac X unesite broj polja 1..9, pritisnite ENTER");
   outtextxy(5,5,poruka);
 
    while ((c=getch())!='q'){
         if (c!='\r'){
           str[i++]=c;
           setcolor(WHITE);
           outtextxy(40,40,str);
           // ako je sve ok igraj
            play(c,igrac);
            if(c=='r') {
             // igraj ponovo igru
              setcolor(WHITE);
             outtextxy(40,40,"Ponovo igraj");
             play_game();
            }  
           }
          else {
                 //clear screen
            i=0;
            igrac++; // sledeci igrac
            setcolor(BLACK);
            outtextxy(40,40,str);
            for (int j=0;j<99;j++){
                str[j]=' ';
                poruka[j]=' ';
                }
           //
            setcolor(WHITE);
            if(igrac%2==0){
            setcolor(YELLOW);
              sprintf(poruka,"Sada igra igrac O unesite broj polja 1..9, pritisnite ENTER");
              outtextxy(5,5,poruka);          
            }
            else {
                 setcolor(RED);
                   sprintf(poruka,"Sada igra igrac X unesite broj polja 1..9, pritisnite ENTER");
                    outtextxy(5,5,poruka);
            }
               }
    }
    exit(0);
   
}