Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

První hra

Blivajz

c-plus-plus

#include <windows.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

#define nadpis "Duchove"
#define Maximum 20
#define MONO 5
#define MO 5

using namespace std;

//Rychlosti
int RYCHLOST = 4, D = 2, RNS = 4, RN = 2, OHEN = 2;
//Rychlosti

SDL_Surface *obrazkovka; SDL_Surface *obrazek; SDL_Surface *strela; SDL_Surface *nepritel;
SDL_Surface *nstrela; SDL_Surface *pozadi; SDL_Surface *kouzlo; SDL_Surface *zivoty;
SDL_Surface *ohnivy_bojovnik;
SDL_Surface *promenna; SDL_Surface *zprava;
SDL_Surface *promenna2; SDL_Surface *zprava2;
SDL_Surface *prohra;
SDL_Surface *prohra2;
SDL_Surface *autor;
TTF_Font *pismo, *pismo2; SDL_Color barva = {255, 255, 255};

int sirka;
int vyska;
Uint32 VLAJKY = SDL_HWSURFACE|SDL_DOUBLEBUF;

int sx[5];
int sy[5];
bool str[5];
int sn_st[5];
char ksmer[5];
bool ko;
bool strelba = false;

int zx;
int zy;

bool ohen[Maximum];
int bx[Maximum]; int by[Maximum];
int b_snimek[Maximum]; int b_smer[Maximum];
bool ko2;
int snc2 = 0;
int cas_do_pekla = 0;
int cdz = 0;
bool trefa = false;

bool podvod = false; bool f = false;
int mx; int my;
int ox = sirka/2; int oy = vyska/2; int cas_do_nep = 0; int nx; int ny;
char smer = 'l'; Uint8* keys; int snimek = 0; bool nep = false;
bool pohyb = false; int snc = 0; int o_smer = 0; int np = 0;
char nps = 'n'; bool konec; int nsx; int nsy; bool nsa = false; char nss; int cas_do_bum = 0;
int body = 01; char skore[5]; int naboje = 5; char strelivo[5]; bool znovu; int zivot;

int cas_do_odmeny;
int odx[MONO], ody[MONO];
bool odmena[MONO];
bool kk = false;

bool Dotek();
void Nastaveni();
void Inicializace();
void Vykreslit(SDL_Surface *img, int x, int y);
void Udalosti();
void Nahrat();
void Vykreslit(SDL_Surface *img, int x, int y, int w, int h, int x2, int y2);
void Scena();
void Text();
Uint32 Timer1(Uint32 interval, void* param);
Uint32 Timer2(Uint32 interval, void* param);

int main(int argc, char *argv[]){
  Inicializace();
  
  SDL_TimerID timer1;
  SDL_TimerID timer2;
  
  Nahrat();
  Vykreslit(pozadi, 0, 0, sirka, vyska, 0, 0);
  
  SDL_SetColorKey(obrazek, SDL_SRCCOLORKEY, SDL_MapRGB(obrazek->format, 255, 255, 255));
  SDL_SetColorKey(nepritel, SDL_SRCCOLORKEY, SDL_MapRGB(nepritel->format, 255, 255, 255));
  SDL_SetColorKey(strela, SDL_SRCCOLORKEY, SDL_MapRGB(strela->format, 255, 255, 255));
  SDL_SetColorKey(ohnivy_bojovnik, SDL_SRCCOLORKEY, SDL_MapRGB(ohnivy_bojovnik->format, 255, 255, 255));
  SDL_SetColorKey(nstrela, SDL_SRCCOLORKEY, SDL_MapRGB(nstrela->format, 255, 255, 255));
  SDL_SetColorKey(kouzlo, SDL_SRCCOLORKEY, SDL_MapRGB(kouzlo->format, 255, 255, 255));
  SDL_SetColorKey(zivoty, SDL_SRCCOLORKEY, SDL_MapRGB(zivoty->format, 255, 255, 255));
  //SDL_SetAlpha(obrazek, SDL_SRCALPHA, 255);
  
  timer1 = SDL_AddTimer(1, Timer1, NULL);
  timer2 = SDL_AddTimer(1, Timer2, NULL);
  znovu = true;
  while(znovu == true){
    znovu = false;
    konec = false;
    zivot = 4;
    naboje = 5;
    body = 0;
    sprintf(skore, "%d", body);
    while(konec == false){
      Udalosti();
      
      if(oy >= vyska - 100) {oy -= D; pohyb = false;}
      if(oy <= 0) {oy += D; pohyb = false;}
      if(ox >= sirka - 100) {ox -= D; pohyb = false;}
      if(ox <= 0) {ox += D; pohyb = false;}
      
      for(int i = 0; i < 5; i ++)
        if(sy[i] >= vyska - 30 || sy[i] <= 0 || sx[i] >= sirka - 30 || sx[i] <= 0) str[i] = false;
      
      if(nsy >= vyska - 30) nsa = false;
      if(nsy <= 0) nsa = false;
      if(nsx >= sirka - 30) nsa = false;
      if(nsx <= 0) nsa = false;
      
      if(nx >= sirka - 100) nps = 'l';
      if(nx <= 0) nps = 'p';
      if(ny >= vyska - 100) nps = 'n';
      if(ny <= 0) nps = 'd';
      
      for(int i = 0; i < 5; i ++){
        if(sx[i]>nx&&sx[i]+24<nx+100&&sy[i]>ny&&sy[i]+24<ny+100&&nep==true&&str[i]==true){
          nep = false;
          str[i] = false;
          if(zivot > 0) body += 1;
          Vykreslit(pozadi, 0, 0, sirka, vyska, 0, 0);
          sprintf(skore, "%d", body);
        }
      }
      for(int i = 0; i < Maximum; i ++){
        if(bx[i] >= sirka - 100) {b_smer[i] = 2;}
        if(bx[i] <= 0) {b_smer[i] = 1;}
        if(by[i] >= vyska - 100) {b_smer[i] = 4;}
        if(by[i] <= 0) {b_smer[i] = 3;}
      }
      if(Dotek() && trefa == false){
        Vykreslit(pozadi, 0, 0, sirka, vyska, 0, 0);
        zivot -= 1;
        trefa = true;
      }
      else if(!Dotek() && trefa == true) trefa = false;
      if(nsx > ox && nsx + 24 < ox + 100 && nsy > oy && nsy + 24 < oy + 100 && nsa == true){
        nsa = false;
        konec = false;
        zivot -= 1;
      }
      for(int i = 0; i < 5; i ++) {
        for(int i2 = 0; i2 < Maximum; i2 ++) {
          if(sx[i] > bx[i2] && sx[i] + 24 < bx[i2] + 100 && sy[i] > by[i2] && 
             sy[i] + 24 < by[i2] + 100 && ohen[i2] == true && str[i]==true){
            ohen[i2] = false;
            str[i] = false;
            if(zivot > 0) body += 1;
            Vykreslit(pozadi, 0, 0, sirka, vyska, 0, 0);
            sprintf(skore, "%d", body);
          }
        }
      }
      for(int i = 0; i < MONO; i ++){
        if(odx[i] > ox && odx[i] + 24 < ox + 100 && ody[i] > oy && ody[i] + 24 < oy + 100 && odmena[i] == true){
          naboje += 5;
          sprintf(strelivo, "%d", naboje);
          odmena[i] = false;        
        }
      }
      if(zivot <= 0) zivot = 0;
      Sleep(7);
    }
  }
  ShellExecute(NULL, "open", "Duchove.exe", NULL, NULL, SW_SHOW);
  TTF_CloseFont(pismo);
  TTF_Quit();
  SDL_Quit();
  exit(1);
}

bool Dotek(){
  for(int i = 0; i < Maximum; i ++){
    if(bx[i] + 50 > ox && bx[i] + 50 < ox + 100 && by[i] + 50 > oy && by[i] + 50 < oy + 100 && ohen[i] == true){
      b_snimek[i] = 4;
      return true;
    }
  }
  return false;
}
void Inicializace(){
  if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) == -1){
    printf("Chyba inicializace: %s", SDL_GetError());
    exit(1);
  }
  Nastaveni();
  obrazkovka = SDL_SetVideoMode(sirka, vyska, 32, VLAJKY);
  SDL_WM_SetCaption(nadpis, NULL);
  if (obrazkovka == NULL){
    sirka = 800; vyska = 600;
    VLAJKY = SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN;
    obrazkovka = SDL_SetVideoMode(sirka, vyska, 32, VLAJKY);
  }
  TTF_Init();
  SDL_ShowCursor(0);
}
void Vykreslit(SDL_Surface *img, int x, int y){
    SDL_Rect rect;
    rect.x = x;
    rect.y = y;
    SDL_BlitSurface(img, NULL, obrazkovka, &rect);
}
void Udalosti(){
  SDL_Event udalost;
  while(SDL_PollEvent(&udalost)){
    if(udalost.type == SDL_QUIT) konec = true;
    if(udalost.type == SDL_KEYUP){if(udalost.key.keysym.sym == SDLK_ESCAPE) konec = true;}
  }
  keys = SDL_GetKeyState(NULL); 
  if(zivot <= 0 && keys[SDLK_F5]) {
    znovu = true;
    konec = true;
  }
  if(keys[SDLK_f] && keys[SDLK_TAB] && podvod == false) {
    naboje += 20; 
    sprintf(strelivo, "%d", naboje);
    podvod = true;
  }
  if(udalost.type == SDL_KEYUP){
    if(udalost.key.keysym.sym == SDLK_f || udalost.key.keysym.sym == SDLK_TAB) podvod = false;
  }
  if(keys[SDLK_RIGHT]){
    ox += D;
    smer = 'r';
    o_smer = 1;
    pohyb = true;
  }
  else if(keys[SDLK_LEFT]) {
    ox -= D;
    smer = 'l';
    o_smer = 2;
    pohyb = true;
  }
  else if(keys[SDLK_DOWN]) {
    oy += D;
    smer = 'd';
    o_smer = 3;
    pohyb = true;
  }
  else if(keys[SDLK_UP]) {
    oy -= D;
    smer = 'u';
    o_smer = 4;
    pohyb = true;
  }
  else if(keys[SDLK_SPACE] && naboje > 0 && strelba == false) {
    ko = false;
    for(int i = 0; i < 5 && ko == false; i ++) {
      if(str[i] == false){
        ksmer[i] = smer;
        ko = true;
        str[i] = true;
        sx[i] = ox + 25;
        sy[i] = oy + 25;
        snimek = 4;
        naboje -= 1;
        sprintf(strelivo, "%d", naboje);
        strelba = true;
      }
    }
  }
  else if(udalost.type == SDL_KEYUP){
    if(udalost.key.keysym.sym == SDLK_SPACE) strelba = false;
  }
  else {
    pohyb = false;
  }
}
Uint32 Timer1(Uint32 interval, void* param){
  if(cas_do_pekla ++ == 400){
    cas_do_pekla = 0;
    ko2 = false;
    for(int i = 0; i < Maximum && ko2 == false; i ++) {
      if(ohen[i] == false){
        ko2 = true;
        ohen[i] = true;
        srand(time(NULL));
        bx[i] = rand() % (sirka - 100 - 50) + 50;
        by[i] = rand() % (vyska - 100 - 50) + 50;
      }
    }
  }
  if(cdz ++ == 200){
    srand(time(NULL));
    cdz = rand() % 200;
    for(int i = 0; i < Maximum; i ++) b_smer[i] = rand() % (4 - 1) + 1;
  }
  for(int i = 0; i < Maximum; i ++){
    if(b_smer[i] == 1) bx[i] += OHEN;
    if(b_smer[i] == 2) bx[i] -= OHEN;
    if(b_smer[i] == 3) by[i] += OHEN;
    if(b_smer[i] == 4) by[i] -= OHEN;
  }
  if(snc2 ++ == 10){
    snc2 = 0;
    for(int i = 0; i < Maximum; i ++) if(b_snimek[i] ++ >= 3) b_snimek[i] = 0;
  }
  if (pohyb == true){
    if(snc ++ == 10){
      snc = 0;
      if(snimek ++ >= 3) snimek = 0;
    }
  }
  if (cas_do_odmeny ++ == 800){
    kk = false;
    srand(time(NULL));
    cas_do_odmeny = rand() % 600;
    for(int i = 0; i < MONO && kk == false; i ++){
      if(odmena[i] == false){
        Vykreslit(pozadi, 0, 0, sirka, vyska, 0, 0);
        odmena[i] = true;
        srand(time(NULL));
        odx[i] = rand() % (sirka - 40 - 40) + 40;
        ody[i] = rand() % (vyska - 40 - 40) + 40;
        kk = true;
      }
    }
  }
  if (cas_do_bum ++ == 50){
  cas_do_bum = 0;
  Vykreslit(pozadi, 0, 0, sirka, vyska, 0, 0);
  if(nsa == false && nep == true && nps == 'n'){
    nss = 'p';
    nsa = true;
    nsx = nx;
    nsy = ny;
  }
  if(nsa == false && nep == true && nps == 'd'){
    nss = 'l';
    nsa = true;
    nsx = nx;
    nsy = ny;
  }
  if(nsa == false && nep == true && nps == 'p'){
    nss = 'n';
    nsa = true;
    nsx = nx;
    nsy = ny;
  }
  if(nsa == false && nep == true && nps == 'l'){
    nss = 'd';
    nsa = true;
    nsx = nx;
    nsy = ny;
  }
  }
  if(nss == 'n') nsy -= RNS;
  if(nss == 'd') nsy += RNS;
  if(nss == 'l') nsx -= RNS;
  if(nss == 'p') nsx += RNS;
  
  if(cas_do_nep ++ == 200) {
    cas_do_nep = 0;
    srand(time(NULL));
    if(nep == false) {
      nx = rand() % sirka - 100;
      ny = rand() % vyska - 100;
      np = rand() % 4;
      
      if(np == 0) nps = 'p';   
      if(np == 1) nps = 'l';
      if(np == 2) nps = 'n';   
      if(np == 3) nps = 'd';    
      nep = true;
    }
  }
  if (nep == true){
     if (nps == 'n') ny -= RN;
     if (nps == 'p') nx += RN;
     if (nps == 'd') ny += RN;
     if (nps == 'l') nx -= RN;
  }
  for(int i = 0; i < 5; i ++){
    if(str[i] == true){
      if(ksmer[i] == 'l') {
        sx[i] -= RYCHLOST;
        sn_st[i] = 3;
      }
      if(ksmer[i] == 'r'){
        sx[i] += RYCHLOST;
        sn_st[i] = 2;
      }
      if(ksmer[i] == 'u'){
        sy[i] -= RYCHLOST;
        sn_st[i] = 0;
      }
      if(ksmer[i] == 'd'){
        sy[i] += RYCHLOST;
        sn_st[i] = 1;
      }
    }
  }
  return interval;
}
void Nahrat(){
    ox = sirka/2;
    oy = vyska/2;
    obrazek = SDL_LoadBMP("soubory/obrazek.bmp");
    zivoty = SDL_LoadBMP("soubory/zivoty.bmp");
    pozadi = SDL_LoadBMP("soubory/pozadi.bmp");
    nepritel = SDL_LoadBMP("soubory/nepritel.bmp");
    ohnivy_bojovnik = SDL_LoadBMP("soubory/bojovnik.bmp");
    strela = SDL_LoadBMP("soubory/strela.bmp");
    for(int i = 0; i < 5; i ++) {
      str[i] = false;
      sn_st[i] = 0;
      ksmer[i] = 'd';
    }
    for(int i = 0; i < Maximum; i ++) {
      ohen[i] = false;
      b_snimek[i] = 0;
      b_smer[i] = 1;
    }
    for(int i = 0; i < MONO; i ++) {
      odmena[i] = false;
    }
    kouzlo = SDL_LoadBMP("soubory/kouzlo.bmp");
    cas_do_odmeny = 0;
    
    nstrela = SDL_LoadBMP("soubory/nstrela.bmp");
    
    pismo = TTF_OpenFont("soubory/text.ttf", 15);
    pismo2 = TTF_OpenFont("soubory/text.ttf", 50);
    sprintf(strelivo, "%d", naboje);
    sprintf(skore, "%d", body);
}
void Vykreslit(SDL_Surface *img, int x, int y, int w, int h, int x2, int y2){
    SDL_Rect rect;
    rect.x = x;
    rect.y = y;
    SDL_Rect rect2;
    rect2.x = x2;
    rect2.y = y2;
    rect2.w = w;
    rect2.h = h;
    SDL_BlitSurface(img, &rect2, obrazkovka, &rect);
}
void Scena(){
    for(int i = 0; i < 5; i ++)
      Vykreslit(pozadi, sx[i]-6, sy[i]-6, 50, 50, sx[i]-6, sy[i]-6);
    for(int i = 0; i < Maximum; i ++)
      Vykreslit(pozadi, bx[i]-2, by[i]-2, 104, 104, bx[i]-2, by[i]-2);
    Vykreslit(pozadi, nsx-6, nsy-6, 50, 50, nsx-6, nsy-6);
    if(nep == true) Vykreslit(pozadi, nx-1, ny-1, 102, 102, nx-1, ny-1);
    Vykreslit(pozadi, ox-D, oy-D, 100+(D*2), 100+(D*2), ox-D, oy-D);
    for(int i = 0; i < MONO; i ++)
      if(odmena[i] == true) Vykreslit(kouzlo, odx[i], ody[i]);
    if(nsa == true) Vykreslit(nstrela, nsx, nsy);
    if(nep == true) Vykreslit(nepritel, nx, ny);
    for(int i = 0; i < 5; i ++) 
      if(str[i] == true) Vykreslit(strela, sx[i], sy[i], 24, 24, 0, sn_st[i] * 24);
    Vykreslit(obrazek, ox, oy, 100, 100, o_smer * 100, snimek * 100);
    for(int i = 0; i < Maximum; i ++) if(ohen[i] == true) 
      Vykreslit(ohnivy_bojovnik, bx[i], by[i], 100, 100, b_smer[i] * 100, b_snimek[i] * 100);
    
    Vykreslit(promenna, 50, 0);
    Vykreslit(zprava, 0, 0);
    
    Vykreslit(promenna2, 60, 20);
    Vykreslit(zprava2, 0, 20);
    
    Vykreslit(zivoty, sirka - 400, 0, zivot*50, 50, 0, 0);
    Vykreslit(autor, 0, vyska - 20);
    
    if(zivot <= 0) {
      Vykreslit(prohra, sirka/2 - 100, vyska/2 - 50);
      Vykreslit(prohra2, sirka/2 - 100, vyska/2);
    }
    
    SDL_Flip(obrazkovka);
}
void Text(){
  promenna = TTF_RenderText_Solid (pismo, skore, barva);
  zprava = TTF_RenderText_Solid (pismo, "Skore: ", barva);
      
  promenna2 = TTF_RenderText_Solid (pismo, strelivo, barva);
  zprava2 = TTF_RenderText_Solid (pismo, "Naboje: ", barva);
  
  autor = TTF_RenderText_Solid (pismo, "Frantisek Brablik", barva);
  
  prohra = TTF_RenderText_Solid (pismo2, "Prohra!", barva);
  prohra2 = TTF_RenderText_Solid (pismo, "F5 - znovu zacit hrat", barva);
}
Uint32 Timer2(Uint32 interval, void* param){
  if(zivot <= 0) zivot = 0;
  Text();
  Scena();
  return interval;
}
void Nastaveni(){
  string vsechno;
  string s;
  string v;
  int hodnota = 1;
  
  ifstream nacist ("soubory/rozliseni.txt");
  if(nacist){
    getline(nacist, vsechno);
    for(int i = 0; i < vsechno.length(); i ++){
      if(vsechno.at(i) != 'x' && hodnota == 1) {
        s += vsechno.at(i);
      }
      if(vsechno.at(i) != 'x' && hodnota == 2){
        v += vsechno.at(i);
      }
      if(vsechno.at(i) == 'f' && hodnota == 3){
        VLAJKY |= SDL_FULLSCREEN;
      }
      else if(vsechno.at(i) == 'x') hodnota ++;
    }
    istringstream predelat(s);
    predelat >> sirka;
    istringstream predelat2(v);
    predelat2 >> vyska;
    
    nacist.close(); 
  }
  else {
    nacist.close();
    sirka = 800;
    vyska = 500;
  }
}

Neformátovaný

Přidáno: 22.4.2013
Expirace: Neuvedeno

Avatar
Autor: Frunta
Aktivity