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