// 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;
}
#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;
}
No comments:
Post a Comment