int main(int narg, char **valarg) { // Inicia a Chien2D 2 e testa se deu tudo certo if(C2D2_Inicia(LARGURA_TELA, ALTURA_TELA, C2D2_JANELA, C2D2_DESENHO_OPENGL, "Darkphoenix - O Baixinho Invocado")) printf("Iniciou a Chien2D 2 com sucesso\n"); else { printf("Falhou ao iniciar a Chien2D 2. Encerrando o programa.\n"); return 0; } // Inicia as primitivas C2D2P_Inicia(); // Inicia os mapas C2D2M_Inicia(); // Inicia o áudio CA2_Inicia(); // Inicia os personagens ATOR_Inicia(); // Carrega a fonte do sistema unsigned int fonte = C2D2_CarregaFonte("fontes/isabelle64_alpha.png", 64); // Carrega o mapa unsigned int mapa = C2D2M_CarregaMapaMappy("fases/Aula04-Mapa.FMP", "graficos/Aula04-tileset.png"); // Dá as velocidades. As duas últimas devem ser 1. As demais, incrementa de 1 em 1 int numcamadas = 4; C2D2M_VelocidadeCamadaMapa(mapa, numcamadas-1, 1); // Faz um for esotérico para atribuir as velocidades. Se pra você facilitar, use uma camada só que não dá nada for(int i=0, vel=numcamadas-1; i<numcamadas-1;i++, vel--) C2D2M_VelocidadeCamadaMapa(mapa, i, vel); // A camada de marcas é sempre a última C2D2M_CamadaMarcas(mapa, 4, 89); // Indica a gravidade a aplicar no mapa C2D2M_GravidadeMapa(mapa, GRAVIDADE, MAXGRAVIDADE); // Carrega o personagem bool cdark = JOGO_CarregaDarkPhoenix(); bool cbola = JOGO_CarregaBola(); // As músicas unsigned int musicas[2]; musicas[0] = CA2_CarregaMusica("audio/AulaPaulo_byPiovezan.it"); musicas[1] = CA2_CarregaMusica("audio/venceu.wav"); // Testa se carregou certo (se é diferente de 0) if(fonte==0 || mapa == 0 || !cdark || !cbola) { printf("Falhou ao carregar alguma coisa. Encerrando.\n"); // Encerra a Chien2d2 CA2_Encerra(); ATOR_Encerra(); C2D2M_Encerra(); C2D2_Encerra(); return 0; } C2D2_TrocaCorLimpezaTela(121, 188, 255); C2D2_Botao *teclado = C2D2_PegaTeclas(); // cria o personagem int x=60, y=60; C2D2M_PrimeiroBlocoMarca(mapa, C2D2M_INICIO, &x, &y); Ator *dark = ATOR_CriaAtor(DARKPHOENIX, x, y, 0); Evento ev; bool nafase=true; // Procura saber quantos inimigos tem na fase int numInimigos=0; if(C2D2M_PrimeiroBlocoMarca(mapa, MARCA_BOLA_DIREITA, &x, &y)) { numInimigos++; while(C2D2M_ProximoBlocoMarca(mapa, &x, &y)) numInimigos++; } if(C2D2M_PrimeiroBlocoMarca(mapa, MARCA_BOLA_ESQUERDA, &x, &y)) { numInimigos++; while(C2D2M_ProximoBlocoMarca(mapa, &x, &y)) numInimigos++; } Ator **inimigos = (Ator**)malloc(sizeof(Ator*)*numInimigos); memset(inimigos, 0, numInimigos*sizeof(Ator*)); numInimigos=0; if(C2D2M_PrimeiroBlocoMarca(mapa, MARCA_BOLA_DIREITA, &x, &y)) { inimigos[numInimigos++]=ATOR_CriaAtor(BOLA, x, y, 0); while(C2D2M_ProximoBlocoMarca(mapa, &x, &y)) inimigos[numInimigos++]=ATOR_CriaAtor(BOLA, x, y, 0); } if(C2D2M_PrimeiroBlocoMarca(mapa, MARCA_BOLA_ESQUERDA, &x, &y)) { inimigos[numInimigos++]=ATOR_CriaAtor(BOLA, x, y, 180); while(C2D2M_ProximoBlocoMarca(mapa, &x, &y)) inimigos[numInimigos++]=ATOR_CriaAtor(BOLA, x, y, 180); } // Coloca a música para tocar CA2_TocaMusica(musicas[0], -1); // Indica se e a primeira vez que vai tocar a musicado fim da fase bool primeira = false; while(!teclado[C2D2_ESC].pressionado && nafase) { C2D2_LimpaTela(); // Testa as colisões if(ATOR_ColidiuBlocoCenario(dark, mapa, C2D2M_MORTE)) { ev.tipoEvento = EVT_COLIDIU_ARMADILHA; ATOR_EnviaEvento(dark, &ev); } if(ATOR_ColidiuBlocoCenario(dark, mapa, C2D2M_CHECK)) { ev.tipoEvento = EVT_CHECKPOINT; ATOR_EnviaEvento(dark, &ev); } if(ATOR_ColidiuBlocoCenario(dark, mapa, C2D2M_FIM)) { ev.tipoEvento = EVT_FIM_FASE; ATOR_EnviaEvento(dark, &ev); if(!primeira) { CA2_TocaMusica(musicas[1], -1); primeira=true; } } for(int i=0;i<numInimigos;i++) if(inimigos[i]!=0) ATOR_ColidiuAtores(dark, inimigos[i]); // Atualiza a lógica ATOR_AplicaEstado(dark, mapa, LARGURA_TELA, ALTURA_TELA); for(int i=0;i<numInimigos;i++) if(inimigos[i]!=0) ATOR_AplicaEstado(inimigos[i], mapa, LARGURA_TELA, ALTURA_TELA); // Lê os controles ProcessaControle(dark); // Atualiza os personagens ATOR_Atualiza(dark, mapa); for(int i=0;i<numInimigos;i++) if(inimigos[i]!=0) if(!ATOR_Atualiza(inimigos[i], mapa)) { free(inimigos[i]); inimigos[i]=0; } // Centraliza o mapa no personagem principal ATOR_CentraMapa(dark, mapa, LARGURA_TELA, ALTURA_TELA); // Roda os eventos do jogo while(ATOR_ProximoEventoJogo(&ev)) { switch(ev.tipoEvento) { case EVT_FIM_FASE: nafase=false; break; } } // Desenha o cenário C2D2M_DesenhaCamadaMapa(mapa, 0, 0, 0, 640, 480); C2D2M_DesenhaCamadaMapa(mapa, 1, 0, 0, 640, 480); C2D2M_DesenhaCamadaMapa(mapa, 2, 0, 0, 640, 480); // DEsenha os personagens ATOR_Desenha(dark, mapa, 0, 0); for(int i=0;i<numInimigos;i++) if(inimigos[i]!=0) ATOR_Desenha(inimigos[i], mapa, 0, 0); // Desenha a camada mais superior C2D2M_DesenhaCamadaMapa(mapa, 3, 0, 0, 640, 480); // DEsenha as mensagens if((dark->estado.estado == DARK_MORRENDO || dark->estado.estado == DARK_MORREU) && dark->vidas>0) C2D2_DesenhaTexto(fonte, LARGURA_TELA/2, ALTURA_TELA/2, "Ops!", C2D2_TEXTO_CENTRALIZADO); if((dark->estado.estado == DARK_MORRENDO || dark->estado.estado == DARK_MORREU) && dark->vidas==0) C2D2_DesenhaTexto(fonte, LARGURA_TELA/2, ALTURA_TELA/2, "Game Over", C2D2_TEXTO_CENTRALIZADO); if(dark->estado.estado == DARK_VITORIA) C2D2_DesenhaTexto(fonte, LARGURA_TELA/2, ALTURA_TELA/2, "Fase Completa!", C2D2_TEXTO_CENTRALIZADO); C2D2_Sincroniza(C2D2_FPS_PADRAO); if(teclado[C2D2_ENTER].ativo) C2D2_Pausa(50); C2D2M_AnimaMapa(mapa); } // Apaga os personagens free(dark); for(int i=0;i<numInimigos;i++) if(inimigos[i]!=0) free(inimigos[i]); free(inimigos); // Descarrega o personagem ATOR_DescarregaAtor(DARKPHOENIX); // Apaga as imagens carregadas na memória C2D2_RemoveFonte(fonte); // Encerra os atores ATOR_Encerra(); // Encerra os mapas C2D2M_Encerra(); // Encerra o áudio CA2_Encerra(); // Encerra a Chien2D 2 C2D2_Encerra(); return 0; }
void Shutar::Setup() { //musicas do jogo musicas[0] = CA2_CarregaMusica(""); musicas[1] = CA2_CarregaMusica("splashloop.wav"); musicas[2] = CA2_CarregaMusica("bgloop.wav"); //carrega sprites simples logoPUC = C2D2_CarregaSpriteSet("splashprojeto.png", 0, 0); menu = C2D2_CarregaSpriteSet("screenmenu.jpg", 0, 0); jogorolando = C2D2_CarregaSpriteSet("jogorolando.png", 0, 0); mouseTX = C2D2_CarregaSpriteSet("mira.png", 24, 24); hud_nergy = C2D2_CarregaSpriteSet("hud_energy.png", 120, 24); gameoverTela = C2D2_CarregaSpriteSet("tela_game_over.png", 0, 0); damage1 = C2D2_CarregaSpriteSet("damage_1.png", 276, 28); damage2 = C2D2_CarregaSpriteSet("damage_2.png", 276, 28); damage3 = C2D2_CarregaSpriteSet("damage_3.png", 276, 28); damage4 = C2D2_CarregaSpriteSet("damage_4.png", 276, 28); damage5 = C2D2_CarregaSpriteSet("damage_5.png", 276, 28); damage6 = C2D2_CarregaSpriteSet("damage_6.png", 276, 28); damage7 = C2D2_CarregaSpriteSet("damage_7.png", 276, 28); damage8 = C2D2_CarregaSpriteSet("damage_8.png", 276, 28); damage9 = C2D2_CarregaSpriteSet("damage_9.png", 276, 28); damage10 = C2D2_CarregaSpriteSet("damage_10.png", 276, 28); //carrega atores do jogo bool cnave = Nave_Carrega(); bool ctiro = Tiro_Carrega(); bool cbomba = Bomba_Carrega(); bool credboss = RedBoss_Carrega(); bool cminired = MiniRed_Carrega(); bool cbatrobo = BatRobo_Carrega(); bool cocorrencia = Ocorrencia_Carrega(); //inimigo MiniShooter bool cminishooter = MiniShooter_Carrega(); bool ctiroInimigo = TiroInimigo_Carrega(); //carrega mapa mapa = C2D2M_CarregaMapaMappy("mapa5.FMP", "sheetstar01.png"); //mapa = C2D2M_CarregaMapaMappy("fase01_(90x90).FMP", "sheetstar01.png"); int numcamadas = 4; //define a marca inical dos tiles programados da chien C2D2M_CamadaMarcas(mapa, 3, 89); C2D2M_VelocidadeCamadaMapa(mapa, numcamadas - 1, 1); // Faz um for esotérico para atribuir as velocidades. Se pra você facilitar, use uma camada só que não dá nada for (int i = 0, vel = numcamadas - 1; i<numcamadas - 1; i++, vel--) C2D2M_VelocidadeCamadaMapa(mapa, i, vel); int tpX = 0, tpY = 0; //apenas referencia para coord serem trazidas //PROCURA SABER NUMERO TOTAL DE INIMIGOS TIPO BAT if (C2D2M_PrimeiroBlocoMarca(mapa, MARCA_INIMIGO_BT, &tpX, &tpY)) { numinimigosBT++; while (C2D2M_ProximoBlocoMarca(mapa, &tpX, &tpY)) numinimigosBT++; } tpX = 0; tpY = 0; //PROCURA SABER NUMERO TOTAL DE INIMIGOS TIPO MINIRED if (C2D2M_PrimeiroBlocoMarca(mapa, MARCA_INIMIGOS_MINIRED, &tpX, &tpY)) { numinimigosMR++; while (C2D2M_ProximoBlocoMarca(mapa, &tpX, &tpY)) numinimigosMR++; } tpX = 0; tpY = 0; //PROCURA SABER NUMERO TOTAL DE INIMIGOS TIPO MINISHOOTER if (C2D2M_PrimeiroBlocoMarca(mapa, C2D2M_FIM, &tpX, &tpY)) { numinimigosSH++; while (C2D2M_ProximoBlocoMarca(mapa, &tpX, &tpY)) numinimigosSH++; } tpX = 0; tpY = 0; if (C2D2M_PrimeiroBlocoMarca(mapa, C2D2M_CHECK, &tpX, &tpY)) { numOcorrencias++; while (C2D2M_ProximoBlocoMarca(mapa, &tpX, &tpY)) numOcorrencias++; } tpX = 0; tpY = 0; if (C2D2M_PrimeiroBlocoMarca(mapa, MARCA_REDBOSS, &tpX, &tpY)) { numinimigosRB++; while (C2D2M_ProximoBlocoMarca(mapa, &tpX, &tpY)) numinimigosRB++; } if (cnave) { int xinit = 0, yinit = 0; // cria o personagem na posicao escolhida dentro do mapa com a tag INICIO C2D2M_PrimeiroBlocoMarca(mapa, C2D2M_INICIO, &xinit, &yinit); nave = ATOR_CriaAtor(NAVE, xinit, yinit, 0); //nave = ATOR_CriaAtor(NAVE, xinit, yinit, 0); } if (ctiro) { shootOK = false; } if (cbomba) { BombaOK = false; } if (credboss) { inimigosRB = (Ator**)malloc(sizeof(Ator*)*numinimigosRB); memset(inimigosRB, 0, numinimigosRB*sizeof(Ator*)); //posicao temporaria para referencia int xini, yini = 0; int indO = 0; if (C2D2M_PrimeiroBlocoMarca(mapa, MARCA_REDBOSS, &xini, &yini)) { inimigosRB[indO++] = ATOR_CriaAtor(REDBOSS, xini, yini, 0); while (C2D2M_ProximoBlocoMarca(mapa, &xini, &yini)) inimigosRB[indO++] = ATOR_CriaAtor(REDBOSS, xini, yini, 0); } } //redboss = ATOR_CriaAtor(REDBOSS, -5, 5, 0); if (ctiroInimigo) { tirosInimigos = (Ator**)malloc(sizeof(Ator*)*numTirosInimigos); memset(tirosInimigos, 0, numTirosInimigos*sizeof(Ator*)); //posicao temporaria para referencia int xini, yini = 0; int indO = 0; tirosInimigos[indO++] = 0; while (indO < numTirosInimigos) tirosInimigos[indO++] = 0; } if (cminishooter) { inimigosSH = (Ator**)malloc(sizeof(Ator*)*numinimigosSH); memset(inimigosSH, 0, numinimigosSH*sizeof(Ator*)); //posicao temporaria para referencia int xini, yini = 0; int indO = 0; if (C2D2M_PrimeiroBlocoMarca(mapa, C2D2M_FIM, &xini, &yini)) { inimigosSH[indO++] = ATOR_CriaAtor(MINISHOOTER, xini, yini, 0); while (C2D2M_ProximoBlocoMarca(mapa, &xini, &yini)) inimigosSH[indO++] = ATOR_CriaAtor(MINISHOOTER, xini, yini, 0); } } if (cminired) { inimigosMR = (Ator**)malloc(sizeof(Ator*)*numinimigosMR); memset(inimigosMR, 0, numinimigosMR*sizeof(Ator*)); //posicao temporaria para referencia int xini, yini = 0; /*int indO = 0;*/ if (C2D2M_PrimeiroBlocoMarca(mapa, MARCA_INIMIGOS_MINIRED, &xini, &yini)) { inimigosMR[indO++] = ATOR_CriaAtor(MINIRED, xini, yini, 0); while (C2D2M_ProximoBlocoMarca(mapa, &xini, &yini)) inimigosMR[indO++] = ATOR_CriaAtor(MINIRED, xini, yini, 0); } } if (cbatrobo) { inimigos = (Ator**)malloc(sizeof(Ator*)*numinimigosBT); memset(inimigos, 0, numinimigosBT*sizeof(Ator*)); //posicao temporaria para referencia int xini, yini = 0; int indO = 0; if (C2D2M_PrimeiroBlocoMarca(mapa, MARCA_INIMIGO_BT, &xini, &yini)) { inimigos[indO++] = ATOR_CriaAtor(BATROBO, xini, yini, 0); while (C2D2M_ProximoBlocoMarca(mapa, &xini, &yini)) inimigos[indO++] = ATOR_CriaAtor(BATROBO, xini, yini, 0); } } if (cocorrencia) { ocorrencias = (Ator**)malloc(sizeof(Ator*)*numOcorrencias); memset(ocorrencias, 0, numOcorrencias*sizeof(Ator*)); //posicao temporaria para referencia int xini, yini = 0; int indO = 0; if (C2D2M_PrimeiroBlocoMarca(mapa, C2D2M_CHECK, &xini, &yini)) { ocorrencias[indO++] = ATOR_CriaAtor(OCORRENCIA, xini, yini, 0); while (C2D2M_ProximoBlocoMarca(mapa, &xini, &yini)) ocorrencias[indO++] = ATOR_CriaAtor(OCORRENCIA, xini, yini, 0); } } }