/*************************************************************************** * Função: Menu Remover Peça * ****/ static void MenuRemoverPeca(PAR_tppPartida ppPartida) { char *nomeDaCasa; PAR_tpCondRet condRet; MEM_Alloc(sizeof(char)*2,(void**)&nomeDaCasa); printf("Nome da casa onde esta a peca a ser removida: "); scanf("%s",nomeDaCasa); nomeDaCasa[0] = toupper(nomeDaCasa[0]); condRet = PAR_IrCasa(ppPartida,nomeDaCasa); if(condRet != PAR_CondRetOK) { return Mensagem("Erro ao remover - Casa nao existe!"); } condRet = PAR_RemoverPeca(ppPartida); if(condRet == PAR_CondRetPecaNaoEncontrada) { return Mensagem("Erro ao remover - casa esta vazia!"); } return Mensagem("Peca removida com sucesso!"); }
/*************************************************************************** * Função: Menu Inserir Rei * ****/ static void MenuInserirRei(PAR_tppPartida ppPartida) { char *nomeCasa; PAR_tpCondRet condRet; MEM_Alloc(sizeof(char)*2,(void**)&nomeCasa); printf("Nome da casa que deseja inserir o rei (2 caracteres - convenção do xadrez): "); scanf("%s", nomeCasa); nomeCasa[0] = toupper(nomeCasa[0]); condRet = PAR_IrCasa(ppPartida, nomeCasa); if(condRet != PAR_CondRetOK) { return Mensagem("Erro ao inserir - Casa nao existe!"); } condRet = PAR_InserirRei(ppPartida); if(condRet != PAR_CondRetOK) { return Mensagem("Erro ao inserir o rei!"); } return Mensagem("Rei inserido com sucesso!"); }
/*************************************************************************** * Função: Menu Cadastrar Peça * ****/ static void MenuCadastrarPeca(PAR_tppPartida ppPartida) { char *nome, *passos, *tipoMov; ISP_tpCondRet ispCondRet; MPEC_tpTipoMovimento tipoMovimento; LIS_tppLista pPassos; MEM_Alloc(sizeof(char)*20,(void**)&nome); MEM_Alloc(sizeof(char)*200,(void**)&passos); MEM_Alloc(sizeof(char)*4,(void**)&tipoMov); printf("Nome da peca (20 caracteres): "); scanf("%s",nome); printf("Movimentos ([n]coordenada_[n]coordenada): "); scanf("%s", passos); printf("Tipo de movimento(Anda | Voa): "); scanf("%s",tipoMov); ispCondRet = ISP_LerTipoMovimento(tipoMov,&tipoMovimento); if(ispCondRet != ISP_CondRetOK) { return Mensagem("Tipo de movimento invalido!"); } ISP_LerPassos(passos,&pPassos); PAR_CriarPeca(ppPartida, nome, pPassos, tipoMovimento); return Mensagem("Peca cadastrada com sucesso!"); }
/*************************************************************************** * Função: Menu Inserir Peça * ****/ static void MenuInserirPeca(PAR_tppPartida ppPartida, const PEC_tpTimePeca time) { char *nome, *nomeCasa; PAR_tpCondRet condRet; MEM_Alloc(sizeof(char)*20,(void**)&nome); MEM_Alloc(sizeof(char)*2,(void**)&nomeCasa); printf("Nome da peca (20 caracteres): "); scanf("%s", nome); printf("Nome da casa que deseja inserir a peca (2 caracteres - convenção do xadrez): "); scanf("%s", nomeCasa); nomeCasa[0] = toupper(nomeCasa[0]); condRet = PAR_IrCasa(ppPartida, nomeCasa); if(condRet != PAR_CondRetOK) { return Mensagem("Erro ao inserir - Casa nao existe!"); } condRet = PAR_InserirPeca(ppPartida,nome,time); if(condRet == PAR_CondRetPecaNaoEncontrada) { return Mensagem("Erro ao inserir - Peca nao encontrada!"); } return Mensagem("Peca inserida no time com sucesso!"); }
/*************************************************************************** * Função: Menu Remover Rei * ****/ static void MenuRemoverRei(PAR_tppPartida ppPartida) { PAR_tpCondRet parCondRet; parCondRet = PAR_RemoverRei(ppPartida); if(parCondRet != PAR_CondRetOK) { return Mensagem("Erro ao remover rei - Não existe rei inserido no tabuleiro!"); } Mensagem("Rei removido com sucesso"); }
/*************************************************************************** * Função: Menu Salvar Peça * ****/ static void MenuSalvarPartida(PAR_tppPartida ppPartida) { char *pNomeArquivo; PAR_tpCondRet parCondRet; MEM_Alloc(sizeof(char)*200,(void**)&pNomeArquivo); printf("Nome do arquivo: (ex: save1.txt): "); scanf("%s",pNomeArquivo); parCondRet = PAR_Salvar(ppPartida,pNomeArquivo); if(parCondRet != PAR_CondRetOK) { return Mensagem("Erro ao salvar partida!"); } return Mensagem("Partida salva com sucesso!"); }
//------------------------------------------------------------------------- //O que fazer se colidiu com outro objeto void Nave::BateuNeste(Objeto *outro) { if (piscando > 0 || outro->Piscando()) return; if (Mensagem(SOLIDO, NULL) == NAO) return; //se eu não sou sólido, deixo passar if (Mensagem(QUEM_VOCE, NULL) == TIRO) return; //deixo que o tiro cuida se atingiu alguém if (outro->Mensagem(SOLIDO, NULL) == SIM) //bateu em algo, dar impacto para os dois { lifePotencial -= 5; life -= 10; //piscando = 5; vector3df v = Posicao() - outro->Posicao(); v = (1.0f / v.getLength()) * v; AdicionaForca(massa * v); outro->AdicionaForca(-massa * v); outro->BateramEmVoce(5); } }
/*************************************************************************** * Função: Menu Xeque-mate * ****/ static void MenuXequeMate(PAR_tppPartida ppPartida) { int resposta; JUD_tpCondRet judCondRet; judCondRet = JUD_EhCheckmate(ppPartida,&resposta); if(judCondRet != JUD_CondRetOK) { return Mensagem("Erro ao analisar xeque mate - Rei não inserido!"); } if(resposta == 1) { return Mensagem("Xeque-mate!"); } else { return Mensagem("Rei fora de perigo!"); } }
/*************************************************************************** * Função: Menu Alterar Peça * ****/ static void MenuAlterarPeca(PAR_tppPartida ppPartida) { char *nomeAtual, *novoNome, *novosPassos, *movimento; ISP_tpCondRet ispCondRet; PAR_tpCondRet parCondRet; MPEC_tpTipoMovimento novoTipoMovimento; LIS_tppLista pPassos; MEM_Alloc(sizeof(char)*20,(void**)&nomeAtual); MEM_Alloc(sizeof(char)*20,(void**)&novoNome); MEM_Alloc(sizeof(char)*200,(void**)&novosPassos); MEM_Alloc(sizeof(char)*4,(void**)&movimento); printf("\nNome da peca que quer alterar (20 caracteres): "); scanf("%s", nomeAtual); printf("Novo nome (20 caracteres): "); scanf("%s", novoNome); printf("Novo movimento ([n]coordenada): "); scanf("%s", novosPassos); printf("Novo tipo de movimento (Anda | Voa): "); scanf("%s", movimento); ispCondRet = ISP_LerTipoMovimento(movimento,&novoTipoMovimento); if(ispCondRet != ISP_CondRetOK) { return Mensagem("Tipo de movimento invalido!"); } ISP_LerPassos(novosPassos,&pPassos); parCondRet = PAR_AlterarPeca(ppPartida,nomeAtual,novoNome,pPassos,novoTipoMovimento); if(parCondRet != PAR_CondRetOK) { return Mensagem("Erro ao alterar peca!"); } return Mensagem("Peca alterada com sucesso!"); }
/*************************************************************************** * Função: Menu Carregar Peça * ****/ static void MenuCarregarPartida(PAR_tppPartida *ppPartida) { char *pNomeArquivo; PAR_tpCondRet parCondRet; PAR_tppPartida **pPartuda = NULL; MEM_Alloc(sizeof(char)*200,(void**)&pNomeArquivo); printf("Nome do arquivo: (save1.txt): "); scanf("%s",pNomeArquivo); PAR_DestruirPartida(ppPartida); parCondRet = PAR_Carregar(ppPartida,pNomeArquivo); if(parCondRet != PAR_CondRetOK) { return Mensagem("Erro ao carregar partida!"); } return Mensagem("Partida carregar com sucesso!"); }
//-------------------------------------------------------------------------- //Cria um novo tiro do tipo qual void Nave::NovoTiro(int qual) { if (qual == TIPO_LASER) { Laser *laser = new Laser(central, this); central->NovoObjeto((Objeto *) laser); laser->AdicionaCenario(cenario); } else if (qual == TIPO_MISSIL) { Missil *missil = new Missil(central, this); central->NovoObjeto((Objeto *) missil); missil->AdicionaCenario(cenario); if (Mensagem(QUEM_VOCE, NULL) == JOGADOR) missil->Mensagem(PROCURA_INIMIGO, NULL); else if (Mensagem(QUEM_VOCE, NULL) == INIMIGO) missil->Mensagem(PROCURA_JOGADOR, NULL); } else if (qual == TIPO_MULTIPLO) { Multiplo *multiplo = new Multiplo(central, this); central->NovoObjeto((Objeto *) multiplo); multiplo->AdicionaCenario(cenario); } }