Ir ao conteúdo
  • Cadastre-se

1freakday

Membro Pleno
  • Posts

    670
  • Cadastrado em

  • Última visita

Tudo que 1freakday postou

  1. Tenta fechar o programa com exit: void fechar(){ allegro_exit(); exit(0); }
  2. @MarcelloSM Para isso basta usar um 'marcador', como uma variavel temporária para receber o valor, e depois verificar se o local está preenchido, na lógica seguiria essas etapas: int calcular(int n1,int n2, char op); // funcao ficticia que retorna resultado //variaveis em main char operador; int n1,n2,tmp = -1; //EM LOOP //recebe n1 if(tmp >= 0) n1 = tmp; else scanf("%d",&n1); //recebe operador scanf("%c",&operador); //recebe n2 scanf("%d, &n2); //receber resultado em tmp tmp = calcular(n1, n2, operador);
  3. #include <stdio.h> #include <stdlib.h> struct os{ float numOs; char dataOs[10]; float valorOs; char servico[100]; char nome[30]; char cpf [10]; char datanasc[10]; char email[50]; } os[100]; void flush_in(){ int ch; while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){} } int main() { int i,num,maior = 0; float media,soma; printf("\n\n Digite a quantidade de OS que deseja cadastrar: "); scanf("%d",&num); for(i=0; i<num; i++){ printf(" ORDEM DE SERVIÇO\n\n"); printf("Digite o numero da OS: "); scanf("%f",&os[i].numOs); flush_in(); if(os[i].numOs==0) break; else printf("\n ===================MECÂNICA SÃO JORGE===================\n\n "); printf("Digite a data da OS no formato dd/mm/aaaa: "); scanf("%s",os[i].dataOs); flush_in(); printf("Digite o valor da OS: "); scanf("%f",&os[i].valorOs); flush_in(); printf("Digite o nome do serviço realizado: "); scanf("%s",os[i].servico); flush_in(); printf("\n\n Cadastro do cliente!!! \n"); printf("\nDigite o nome do cliente: "); scanf("%s",os[i].nome); flush_in(); printf("\nDigite o cpf do cliente: "); scanf("%s",os[i].cpf); flush_in(); printf("\nDigite a data de nascimento do cliente: "); scanf("%s",os[i].datanasc); flush_in(); printf("\nDigite o email do cliente: "); scanf("%s*c",os[i].email); flush_in(); soma=soma+os[i].valorOs; media=soma/num; maior = (maior < os[i].valorOs) ? os[i].valorOs : maior; } printf("\n A media e: %f\n",media); printf("\n A maior e: %d\n",maior); system ("pause"); return 0; }
  4. Bom dia, ele pede uma vez, pois a requisição não é feita dentro do while: while (vida != 0) { printf("Informe a linha: "); scanf("%i", &l); printf("Informe a coluna: "); scanf("%i", &c); printf("\n"); ... } Você trocou '=' por '==', aqui: //errado campo[l][c] == '*'; //certo campo[l][c] = '*';
  5. Tente dentro de um 'for': If(maior < os[i].valorOs) maior = os[i].valorOs;
  6. Tente: // variavel = condicao ? valor se true: valor se false; auxElementTransfer = (auxElementTransfer == limResetAuxElmTrns) ? 0 : -1; //Mensagem printf("%s\n", (auxElementTransfer == 0) ? "Sucesso" : "Erro");
  7. @Anderson Benício a sua formula está correta, aquela que eu tinha feito estava diferente por que as variáveis começavam com 100 e iam diminuindo, então precisei subtrair por 100 ficando negativo e multiplicar por -1 para deixar positivo.
  8. @Marcos Paulo feitosa Se for VETOR e não MATRIZ, acredito que você precisa fazer nas seguintes etapas: 1- Declarar vetor - media[20] 2- Ler as quatros notas de um aluno 3- calcular a média dele 4- armazenar média calculada no índice do vetor - media[índice] = media_aluno;
  9. @Nicole de Oliveira Não sou muito bom nessa área, então pesquisei um pouco, segue umas modificações: int valor = 0; void loop(){ //se o led não estiver ligad if (digitalRead(led) != HIGH) { //liga led digitalWrite(led, HIGH); delay(1000); //inicia tempo 1 temp1 = millis(); } else { //ja esta ligado valor = func_distancia_ultrasonico(); if(valor <=15) { //desliga digitalWrite(led, LOW); delay(1000); //tempo 2 final temp2= millis(); tempHL=(temp2-temp1); Serial.println(tempHL/1000); //aqui deveria finalizar o programa } } } P.S: Lembrando que o led deve iniciar desligado em setup();
  10. Depende da sua pergunta, ou você quer saber como estudamos uma linguagem de programação, ou como estudamos um código para solucionar algo... Para aprender uma linguagem de programação, é algo que todo mundo aqui já deve ter feito, sendo apreendido em algum curso, lido um livro/artigo e no final praticado, assim é um roteiro básico para aprender. Porém o que ninguém diz é que diferente dos livros, cursos, sempre vai ter um algorítimo que você vai precisar "inventar", e então ter prática/lógica/criatividade é essencial para saber cria-lo, independente do nível de conhecimento. Para solucionar algo aqui no fórum, eu faço 3 análises do post, caso eu não resolvo em uma eu pula para outra. Primeiro, eu leio a questão e vejo se a pessoa tentou fazer, se não fez, eu já não comento, por conta das regras. Segundo, eu leio o código como se fosse um texto para ver se há algum erro de "ortografia"/sintaxe... assim geralmente resolve o problema. Terceiro, eu tento executar o código e vou verificando o log para ver os erros e pronto, código pronto. Uma possível quarta tentativa, é quando o usuário não sabe mesmo(isso dá pra perceber), eu dou um exemplo de lógica, até o usuário conseguir, ai vamos para a primeira análise...
  11. @Anderson Benício Queria entender essa questão 1, era um problema no seu código, ou faz parte do exercício? Tipo, o que tiver menos votos ganha. Segue o código com percentual: #include <stdio.h> #include <stdlib.h> int main() { int c = 0, v = 0, cont = 1, votos = 0; //Como quem tiver menos votos ganha, //iniciei com 100 e as variaveis são diminuidas int v13 = 100, v45 = 100, v43 = 100, v50 = 100; //Loop de votação while (cont != 2){ system("cls"); printf("Candidatos:\n"); printf("13 - Emereciano\n45 - Chico\n43 - Tonho\n50 - Tonico\n\n"); printf("Digite o numero do seu canditato a Presidente: "); scanf("%d" , &v); //Aqui localiza o candidato if (v == 13){ printf("\n13 Emereciano \n"); printf("Deseja confirmar seu voto? 1 para Sim ou 2 para Nao: \n"); scanf("%d", &c); if (c == 1){ votos++; v13--; printf("Voto computado com sucesso!\n\n"); }else if (c == 2) { printf("Voto cancelado!\n\n"); } } else if (v == 45){ printf("\n45 Chico \n "); printf("Deseja confirmar seu voto? 1 para Sim ou 2 para Nao: \n "); scanf("%d", &c); if (c == 1){ votos++; v45--; printf("Voto computado com sucesso!\n\n"); }else if (c == 2) { printf("Voto cancelado!\n\n"); } } else if (v == 43){ printf("\n43 Tonho \n "); printf("Deseja confirmar seu voto? 1 para Sim ou 2 para Nao: \n "); scanf("%d", &c); if (c == 1){ votos++; v43--; printf("Voto computado com sucesso!\n\n"); }else if (c == 2) { printf("Voto cancelado!\n\n"); } } else if (v == 50){ printf("\n50 Tonico \n "); printf("Deseja confirmar seu voto? 1 para Sim ou 2 para Nao: \n "); scanf("%d", &c); if (c == 1){ votos++; v50--; printf("Voto computado com sucesso!\n\n"); }else if (c == 2) { printf("Voto cancelado!\n\n"); } } else printf("Candidato invalido!\n"); //Registra se quer ou nao continuar printf("Deseja efetuar mais um voto? 1 para Sim ou 2 para Nao: \n "); scanf("%d" , &cont); } printf("\nResultados:"); //Aqui mostra o resultado if((v13 < v45) && (v13 < v43) && (v13 < v50)){ printf("\nEmereciano Venceu!\n"); } else if((v45 < v13) && (v45 < v43) && (v45 < v50)){ printf("\nChico Venceu!\n"); } else if((v43 < v13) && (v43 < v45) && (v43 < v50)){ printf("\nTonho Venceu!\n"); } else if((v50 < v13) && (v50 < v43) && (v50 < v45)){ printf("\nTonico Venceu!\n"); } else printf("Empate!\n"); printf("\n\nPercentual:\n"); int x; x = (((v13-100)*(-1))*100)/votos; printf("Emereciano: %d\n", x); x = (((v45-100)*(-1))*100)/votos; printf("Chico: %d\n", x); x = (((v43-100)*(-1))*100)/votos; printf("Tonho: %d\n", x); x = (((v50-100)*(-1))*100)/votos; printf("Tonico: %d\n", x); return 0; }
  12. Quando não conseguir tente apagar/reorganizar o código, isso lhe permite ter uma visão lógica maior sobre o que é preciso ser feito, também sempre comente as partes que você não entende.Apenas organizei e retirei o que não era necessário, o código é o seu, segue o código: #include <stdio.h> #include <stdlib.h> int main() { int c = 0, v = 0, cont = 1; //Como quem tiver menos votos ganha, //iniciei com 100 e as variaveis são diminuidas int v13 = 100, v45 = 100, v43 = 100, v50 = 100; //Loop de votação while (cont != 2){ system("cls"); printf("Candidatos:\n"); printf("13 - Emereciano\n45 - Chico\n43 - Tonho\n50 - Tonico\n\n"); printf("Digite o numero do seu canditato a Presidente: "); scanf("%d" , &v); //Aqui localiza o candidato if (v == 13){ printf("\n 13 Emereciano \n "); printf("Deseja confirmar seu voto? 1 para Sim ou 2 para Nao: \n"); scanf("%d", &c); if (c == 1){ v13--; printf(" Voto computado com sucesso!\n\n"); }else if (c == 2) { printf(" Voto cancelado!\n\n"); } } else if (v == 45){ printf("\n 45 Chico \n "); printf("Deseja confirmar seu voto? 1 para Sim ou 2 para Nao: \n "); scanf("%d", &c); if (c == 1){ v45--; printf(" Voto computado com sucesso!\n\n"); }else if (c == 2) { printf(" Voto cancelado!\n\n"); } } else if (v == 43){ printf("\n 43 Tonho \n "); printf("Deseja confirmar seu voto? 1 para Sim ou 2 para Nao: \n "); scanf("%d", &c); if (c == 1){ v43--; printf(" Voto computado com sucesso!\n\n"); }else if (c == 2) { printf(" Voto cancelado!\n\n"); } } else if (v == 50){ printf("\n 50 Tonico \n "); printf("Deseja confirmar seu voto? 1 para Sim ou 2 para Nao: \n "); scanf("%d", &c); if (c == 1){ v50--; printf(" Voto computado com sucesso!\n\n"); }else if (c == 2) { printf(" Voto cancelado!\n\n"); } } //Registra se quer ou nao continuar printf("Deseja efetuar mais um voto? 1 para Sim ou 2 para Nao: \n "); scanf("%d" , &cont); } //Aqui mostra o resultado if((v13 < v45) && (v13 < v43) && (v13 < v50)){ printf("\nEmereciano Venceu!\n"); } else if((v45 < v13) && (v45 < v43) && (v45 < v50)){ printf("\nChico Venceu!\n"); } else if((v43 < v13) && (v43 < v45) && (v43 < v50)){ printf("\nTonho Venceu!\n"); } else if((v50 < v13) && (v50 < v43) && (v50 < v45)){ printf("\nTonico Venceu!\n"); } else printf("Empate!\n"); return 0; }
  13. @erique Talvez o problema seja o problema que o meu ta com x86, e se você colocou windows 7, é por que só ta pra x86 mesmo, mas o meu SO é Windows 10 x64. Poderia mandar o ultimo código?
  14. Tenta assim: #include <stdio.h> #include <string.h> int main() { char login[100]; int senha, tentativas = 0; do{ printf("Insira o login: "); scanf("%s", &login); printf("Insira a senha numérica: "); scanf("%i", &senha); if ((senha == 1234) && (strcmp (login,"admin") == 0 )){ printf("\nBem-vindo ao sistema"); break; } tentativas = tentativas + 1; } while(tentativas < 3); if(tentativas == 3){ printf("FALHA AO LOGAR!!\n"); } return 0; }
  15. Pesquisei no manual como obter o x, y do mouse, é meio complicado, mas eles armazena em mouse_pos, sendo 16 bit up = x 16 bit down = y segue: #include <stdio.h> #include <stdlib.h> #include <allegro.h> #include <conio.h> //#include <winalleg.h> //#include <windows.h> BITMAP *produto1; BITMAP *produto2; BITMAP *produto3; BITMAP *produto4; BITMAP *produto5; BITMAP *produto6; BITMAP *produto7; BITMAP *produto8; BITMAP *produto9; BITMAP *fundo; int main() { int x, y, tmp; allegro_init(); //install_timer(); //install_sound(int digi_card, int midi_card, char *cfg_path); install_mouse(); //install_sound(); set_color_depth(32); set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1080, 600, 0, 0); set_window_title("Pacotes de viagens"); //MessageBox(0,"testando conteudo em várias linhas inclusive em teste \nteste em outra linha","Titulo",MB_OK|MB_ICONINFORMATION); show_mouse(screen); produto1 = load_bitmap("img/produto1.bmp",NULL); produto2 = load_bitmap("img/produto2.bmp",NULL); produto3 = load_bitmap("img/produto3.bmp",NULL); produto4 = load_bitmap("img/produto4.bmp",NULL); produto5 = load_bitmap("img/produto5.bmp",NULL); produto6 = load_bitmap("img/produto6.bmp",NULL); produto7 = load_bitmap("img/produto7.bmp",NULL); produto8 = load_bitmap("img/produto8.bmp",NULL); produto9 = load_bitmap("img/produto9.bmp",NULL); fundo = load_bitmap("img/fundo.bmp",NULL); //blit(produto1,buffer,0,0,NULL,NULL,NULL); draw_sprite(screen, fundo,0,0); //Linha 1 draw_sprite(screen,produto1,30,30); draw_sprite(screen,produto2,390,30); draw_sprite(screen,produto3,750,30); //Linha 2 draw_sprite(screen,produto4,30,220); draw_sprite(screen,produto5,390,220); draw_sprite(screen,produto6,750,220); //Linha 3 draw_sprite(screen,produto7,30,410); draw_sprite(screen,produto8,390,410); draw_sprite(screen,produto9,750,410); //armazenar em struct facilita teste if em for while(1){ if(mouse_b & 1){ tmp = mouse_pos; x = tmp >> 16; y = tmp & 0x0000ffff; //1 if(x < 30 + produto1->w && x + 5 > 30 && y < 30 + produto1->h && y + 5 > 30) allegro_message("Sorry, missing game data! PRODUTO 1\n"); //2 if(x < 390 + produto2->w && x + 5 > 390 && y < 30 + produto2->h && y + 5 > 30) allegro_message("Sorry, missing game data! PRODUTO 2\n"); //3 if(x < 750 + produto2->w && x + 5 > 750 && y < 30 + produto2->h && y + 5 > 30) allegro_message("Sorry, missing game data! PRODUTO 3\n"); x = -1; y = -1; tmp = 0; } rest(500); } //allegro_message("Sorry, missing game data!\n teste \n teste"); system("pause"); //system("pause"); return 0; } END_OF_MAIN()
  16. @erique como assim não reconhece o private e public lol, tá atualizado ele? Segue a versão com arquivos de menu separado: lembrando que essa versão é livre pra editar, etc... ANEXO: MENU.ZIP p.s: ta pra windows, feito no codeblocks, com allegro 4 -------------- Para quem quiser criar/alterar um menu precisa de 4 etapas: 1 - Criar objeto - class MenuObject x; 2 - Adicionar items - x.additem("nomedoarquivo_imagem", acao_char, x, y) - Adicionar seletor - x.addeseletor('nomedoarquivo_imagem", item_inicial, espaco_do_item); 3 - Desenhar menu - enviar x para menu_draw: menu_draw(&x); 4 - Enviar menu para função de loop/lógica: - essa eu criei personalizada, mas o padrão é alterar as seguinte's coisa's: a) na função menu_action, precisa coincidir com x.additem em acao_char, etapa 2. --------------- BUGS ENCONTRADOS: - No inicio ele vai para o 2 em vez do 1, ainda não encontrei o problema.
  17. O problema é simples, você colocou char para string, e então as outras perguntas são puladas. Errado: char login; scanf("%s", &login); Certo: char login[100]; scanf("%s", &login);
  18. Vou criar uma versão melhor, e no windows, quando estiver pronto posto aqui. Naquele código lá que você quer mudar pra windows, não precisa muda-lo, ele já é igual ao windows.
  19. Ele apaga algumas letras pois nesse segmento, ele está pulando se a próxima for igual a espaço: else if(frase[i+1] != ' '){ novo[j] = frase[i]; j++; novo[j] = '\0'; } Então coloque assim: //se atual for <espaço> e o próximo não for -> adicionar //se o atual for diferente de espaço -> adicionar else if(frase[i+1] != ' ' && frase[i] == ' ' || frase[i] != ' ') { novo[j] = frase[i]; j++; novo[j] = '\0'; }
  20. Entendi @Benjamin Breeg , tinha usado ali o Sleep por que tava muito rápido, ai também poderia ser usado o clear_keybuf() pra apagar as antigas entradas e dar tempo ao usuário ver a opção. Essas imagens ai não são do jogo, é apenas para testar, se quiserem posso fazer um pixel art, e criar background, interface, etc. E ainda vocês precisam decidir se o mapa vai ficar no main.c, ou vamos começar a montar a estrutura para mapa em arquivos. Também está faltando a lógica de items, mobs, hp, atributos, etc. Só dando as sugestões para o jogo... Também ta na hora de começar a separar em headers kkk dnv
  21. Eu vi aquele vídeo, e no inicio notei que usam imagens para o menu, então fiz nossa versão, segue: /* MAZE */ #include <stdio.h> // Biblioteca de entrada e saída de dados #include <stdlib.h> // Biblioteca de conversão das strings #include <allegro.h> // Biblioteca gráfica #include <string.h> #include <malloc.h> // Uso de memória dinâmica //Configurações #define TAMANHO 25 #define LINHAS 36 // 768 / 32px p/ tile #define COLUNAS 72 // 1024 / 32px p/ tile //Direções #define DIR_UP 101 #define DIR_DOWN 102 #define DIR_LEFT 103 #define DIR_RIGHT 104 //Info #define MZVERSION "v1.0-beta" //Buffer BITMAP *criacaodomapa; //Map/Player BITMAP *boneco; BITMAP *muro; BITMAP *trilha; //Váriaveis globais int x1 = 10; int y1 = 0; int x2 = 400; int y2 = 300; int velPlayer = 6; int dir = 0; //Mapa char matriz[LINHAS][COLUNAS] = { "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mtttttmttttttttttttttttttmtttmtttmttmtttmtttmttmtmmttttmmtmtmtmmmtmtttm", "mmmtmmmtmtmmtmtmmmtttmmmmmmmmmmmmmmmmttmmmtmmmtmmmmmmmmmmmmmmmmmmmmmmmm", "mmttttttmtmttttttttttmmmmmmmmmmmmmtmmtmmttttmttmmmmmmmmmmmmmmmmmmmmmmmm", "mmmtmmmmmmmmmmmtmtmmmttttmmmmmmmmmmmtmmttmmmttmmmmmmmmmmmmmmmmmmmmmmmmm", "mtttttmmtttttttmmttmmtttmmttmmmtttmmttttmmttmtmmtttttmmmmmmmmmmmmmmmmmm", "mmtmmmmmtmtmtmttttttmmtmmmmmttmttmmmtmmttmttmttttmmmmttttttmmmmmmmmmmmm", "mmtttttttmmtmmtmmmmtmmttttttmtmmmmmmmmmmtmmttmmmttttttmmmttmmmmmmmmmmmm", "mmtmmmmmtmmttmmmmmmtmmmmmmmmtmmmmmttttmmttmmtmmmtmmtmmmmmmmtttmmmmmmmmm", "mmtmtttttmmmmttmmmtttmmmmmmtttttttttttttmmmmttmtmmtmmmtttmtmmmmmmmmmmmm", "mmmmtmmmmmmmmtttttttmmmmmmmmtttttttttttmmmmmmmmmmmmmttttmttmmmmmmmmmmmm", "mmtttttmmtmmttmmmmmttmmmtttttttttttttttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmmmmmttttmtmmmmmmmtmmmmmmtmmmmmmtttttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmmttmtmmtmttmmttttttttttttttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmmtttttmmtmtmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmttttmmmmmttmmttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmtmmtmmmttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmtmmtmmtmtmtmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmtmmttttmtmtmmttttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mttttmmmmmtmtmmtmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmtttmtttttmtmmtttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmtmttmttmmmttttmtmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmmmtmtttttmmmmttmttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmttttttmmtmmttttttttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmmtmmmmmtmtmmmttmttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mtttmmmmmtmmmmtttttmttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmmtttttttmmmtmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmmttmmmmtmtttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mttttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmtmtttmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmtmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mmtmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "mtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttm", "mtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttm", "mtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttm", "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"}; /** Prototipos */ /* allegro */ void inicia_alegro(); /* draw */ void desenha_o_mapa(); void tela(); /* event in game */ int key_event(); /** FUNÇÕES/SISTEMA DO MENU */ //Eventos #define MENU_SEL_DOWN 201 #define MENU_SEL_UP 202 #define MENU_SEL_ENTER 203 //Prototipos BITMAP *crmenu; int exit_menu = 0; volatile int exit_program = FALSE; volatile int ticks = 0; int jogar(); int creditos(); int rankings(); void menu_draw(struct MenuObject *); void menu_action_filter(struct MenuObject *, int); void menu_event_loop(struct MenuObject *); /* Items de menu */ typedef struct MenuItem { BITMAP *buffer; // buffer da imagem char action; // acao por char, usar switch char *arquivo; // caminho de imagem int x,y; // coordenadas }mItem; /* Objeto do sistema do menu */ struct MenuObject{ private: //Váriaveis principais mItem **items; // itens do menu int count; // contagem de itens //Selector de item BITMAP *sel_buffer; // buffer da imagem char *selector_img; // imagem do seletor int selector_id; // para onde o seletor esta apontando int dist_sel_x; // distancia da imagem do item, use 0 para ficar ao lado public: MenuObject() { count = 0; items = NULL; sel_buffer = NULL; selector_img = NULL; selector_id = 0; dist_sel_x = 0; } //Adiciona item para struct int additem(const char *file, char unique_action_id, int x, int y){ //Verifica se o id da acao existe if(!action_find(unique_action_id)){ if(!items){ items = (mItem **) malloc (sizeof(mItem*)*15); } items[count] = (mItem *) malloc (sizeof(mItem)); if(items[count] != NULL){ // cópia de dados items[count]->arquivo = (char *) malloc (sizeof(char)*strlen(file)); strcpy(items[count]->arquivo, file); items[count]->buffer = NULL; items[count]->action = unique_action_id; items[count]->x = x; items[count++]->y = y; } return TRUE;//adicionado } return FALSE;//nao adicionado } //Adiciona o seletor do menu void addselector(const char *file, int start_id, int set_distance_x){ selector_img = (char *) malloc (sizeof(char)*strlen(file)); if(selector_img){ //copia de dados sel_buffer = NULL; strcpy(selector_img, file); selector_id = start_id; dist_sel_x = set_distance_x; } } //Muda opção para baixo int selector_down(){ if((selector_id + 1) >= count){ return -1; } else { selector_id += 1; } return selector_id; } //Muda opção para cima int selector_up(){ if((selector_id - 1) < 0 || count == 0) return -1; else { selector_id -= 1; } return selector_id; } //Verifica se id da acao ja existe! int action_find(char x){ for(int i = 0; i < count; i++){ if(items[i]->action == x){ return TRUE; } } return FALSE; } //Retorna contagem de itens int get_count(){ return count; } //Carrega imagem e retorna item MenuItem *load_item_buffer(int id){ if(items[id]){ printf("!dd\n"); if(!items[id]->buffer && items[id]->arquivo){ items[id]->buffer = load_bitmap(items[id]->arquivo, NULL); return items[id]; }else if(items[id]->buffer){ return items[id]; } } return NULL; } //Selector //Retorna o action onde o indicador esta char action_get(){ return items[selector_id]->action; } BITMAP *load_sel_buffer(){ if(!sel_buffer){ sel_buffer = load_bitmap(selector_img, NULL); printf("%s %d %d!\n",selector_img); return sel_buffer; }else if(sel_buffer){ return sel_buffer; } printf("err\n"); return NULL; } int dist_sel_xget(){ return dist_sel_x; } }; /* Cria menu no estilo do maze */ int _menu_maze(MenuObject *menu){ if(menu){ crmenu = create_bitmap(SCREEN_W, SCREEN_H); // Criando o mapa menu->addselector("img/selector.bmp", 0, 10); // x = ultimo_x + img.w menu->additem("img/jogar.bmp",'J', 0, 0); menu->additem("img/rankings.bmp",'R', 0, 34); menu->additem("img/creditos.bmp",'C',0, 68); menu->additem("img/sair.bmp",'E', 0, 102); printf("Menu loaded!\n"); menu_draw(menu); menu_event_loop(menu); clear_keybuf(); } } /* Funcao de desenho do Menu */ void menu_draw(struct MenuObject *menu){ MenuItem *temp; int i, max = menu->get_count(); for(i = 0; i < max; i++){ temp = menu->load_item_buffer(i); //Se o buffer carregou if(temp->buffer) draw_sprite(crmenu, temp->buffer, temp->x, temp->y); //Se o seletor estiver nesse item, desenhar ao lado if(menu->action_get() == temp->action){ draw_sprite(crmenu, (BITMAP *)menu->load_sel_buffer(), temp->x + temp->buffer->w+menu->dist_sel_xget(), temp->y); } } blit(crmenu, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); clear_bitmap(crmenu); } /* Filtra ações do menu */ void menu_action_filter(struct MenuObject *menu, int event){ printf("%d\n", event); switch(event){ //acoes do menu case 'E': exit_menu = TRUE; break; case 'J': jogar(); break; case 'C': creditos(); break; case 'R': rankings(); break; //ps: invertido case MENU_SEL_UP: if(menu->selector_up() >= 0){ printf("menu sel up!\n"); } break; //ps: invertido case MENU_SEL_DOWN: if(menu->selector_down() > 0){ printf("menu sel down!\n"); } break; case MENU_SEL_ENTER: menu_action_filter(menu, menu->action_get()); exit_menu = 1; break; default: break; } } /* Intercede e executa ações das teclas */ void menu_event_loop(struct MenuObject *menu){ int update_screen = 0; if(menu){ while(!exit_menu){ while(ticks > 0 && !exit_menu){ if(key[KEY_ENTER]){ menu_action_filter(menu, MENU_SEL_ENTER); break; } if(key[KEY_UP]){ menu_action_filter(menu, MENU_SEL_UP); update_screen = 1; break; } if(key[KEY_DOWN]){ menu_action_filter(menu, MENU_SEL_DOWN); update_screen = 1; break; } ticks--; } if(update_screen){ ticks = 0; update_screen = 0; menu_draw(menu); sleep(1); } } } } /** INICIO DE FUNÇÕES DO MENU */ /** Iniciar interface de jogo - secao mapa/personagem */ int jogar(){ // Buffer criacaodomapa = create_bitmap(SCREEN_W, SCREEN_H); // Criando o mapa // Importa imagens muro = load_bitmap("muro.bmp", NULL); boneco = load_bitmap("boneco.bmp", NULL); trilha = load_bitmap("trilha.bmp", NULL); //Desenho inicial desenha_o_mapa(); tela(); } /** Interface de rankings */ int rankings(){ textprintf_centre_ex(screen, font, SCREEN_W - 10, 10, makecol(0, 100, 243), -1, "Frase 1"); textprintf_right_ex(screen, font, SCREEN_W - 500, 200, makecol(200, 200, 20), -1, "Frase 2"); textprintf_ex(screen, font, SCREEN_W - 500, 500, makecol(200, 200, 20), -1, "Frase 3"); textout_ex (screen, font, MZVERSION, 10, 10, makecol (0, 0, 255), -1); } /** Tela de creditos */ int creditos() { //... } /** Interrupção do jogo */ int sair() { //... } /** FIM DE FUNÇÕES DO MENU */ void finaliza_tudo(){ //libera memória destroy_bitmap(criacaodomapa); destroy_bitmap(boneco); destroy_bitmap(trilha); destroy_bitmap(muro); //limpeza de buffer clear_keybuf(); } #define min(a,b) (((a) < (b)) ? (a) : (b)) #define max(a,b) (((a) > (b)) ? (a) : (b)) /** * Teste de colisão 2d * TRUE = colidiu * FALSE = sem colisao */ int colidiu(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) { printf("%d %d %d %d\n! %d %d %d %d\n",x1,y1,w1,h1,x2,y2,w2,h2); if (x1 < x2 + w2 && x1 + w1 > x2 && y1 < y2 + h2 && h1 + y1 > y2) { printf("colidiu!\n"); return TRUE; } return FALSE; } /** Funcoes volateis */ void fecha_programa() { exit_program = TRUE; } END_OF_FUNCTION(fecha_programa) void tick_counter() { ticks++; } END_OF_FUNCTION(tick_counter) /** * inicializao de programa */ int main(){ //flags/temp's int move = FALSE, x = 10,y = 0, evout = 0; //init inicia_alegro(); //Tranca de funcão/variavel LOCK_FUNCTION(fecha_programa); LOCK_VARIABLE(exit_program); set_close_button_callback(fecha_programa); LOCK_FUNCTION(tick_counter); LOCK_VARIABLE(ticks); install_int_ex(tick_counter, BPS_TO_TIMER(60)); //Menu struct MenuObject menu; _menu_maze(&menu); //Game Loop while(!exit_program) { //Eventos while(ticks > 0 && !exit_program) { //filtro de teclas/eventos evout = key_event(); //Se for de movimento - altera variaveis de teste if(evout == DIR_UP || evout == DIR_DOWN || evout == DIR_LEFT || evout == DIR_RIGHT){ move = true; switch(evout){ case DIR_UP: y -= velPlayer; break; case DIR_DOWN: y += velPlayer; break; case DIR_LEFT: x -= velPlayer; break; case DIR_RIGHT: x += velPlayer; break; default: break; } } ticks--; } //Teste de colisao/redesenho if(move){ move = colidiu(x, y, boneco->w, boneco->h, x2, y2, muro->w, muro->h); if(!move){ // novas coordendas x1 = x; y1 = y; desenha_o_mapa(); tela(); }else { // antigas coordenadas x = x1; y = y1; } //reseta dir = 0; move = FALSE; } } printf("aff"); finaliza_tudo(); return 0; } END_OF_MAIN() /** * Escopo das funções */ int key_event() { //saida de programa if(key[KEY_ESC]) fecha_programa(); else if(key[KEY_UP]) return DIR_UP; else if(key[KEY_DOWN]) return DIR_DOWN; else if(key[KEY_LEFT]) return DIR_LEFT; else if(key[KEY_RIGHT]) return DIR_RIGHT; return -1; } void inicia_alegro() { allegro_init(); install_keyboard(); install_mouse(); install_timer(); set_color_depth(24); // Tipo de cor 8/15/16/24/32 bits set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1080, 650, 0, 0); // Auto decteta o driver de vídeo set_window_title("Maze Escape"); } void desenha_o_mapa() { for (int i=0;i<LINHAS;i++) { for (int j=0;j<COLUNAS;j++) { if(matriz[i][j]=='t') { draw_sprite(criacaodomapa, trilha, j*TAMANHO, i*TAMANHO); } else if (matriz[i][j]=='m') { draw_sprite(criacaodomapa, muro, j*TAMANHO, i*TAMANHO); } } } } /** Atualiza tela */ void tela() { printf("d: %d %d\n",x1,x2); draw_sprite(criacaodomapa, boneco, x1, y1); blit(criacaodomapa, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); clear_bitmap(criacaodomapa); } P.S: - Está para linux, então vai ter que fazer aquela mudança pra windows. - Eu não revisei toda lógica do código, só fui fazendo, então alguma coisa ainda precisa sair/entrar - Imagens do menu em anexo - Os tiles são os mesmos - Print em anexo - Alterei para 24 bits e para usar transparente coloque fundo de rosa(255,0,255) img.zip
  22. É necessário enviar a matriz para alocar/retornar, e use: float **aloc_matriz(float **Matriz, int linhas , int colunas){ return Matriz; } na alocação: Matriz = (float **)malloc(linhas*sizeof(float*));
  23. Dentro do loop você pode verificar se o atual char é espaço, verifique o atual e o próximo, assim: //atual é espaço //próximo é espaço //continuar loop if( frase[i] == ' ' && frase[i+1] == ' '){ i+=2; continue; } //atual é espaço //próximo não é espaço //adicionar espaço else if( frase[i] == ' ' && frase[i+1] != ' '){ novo[j]=frase[i]; i+=2; j++; } Na lógica se temos dois espaços, ele só será adicionado se o próximo char não for.
  24. Para chamar: //Variaveis int valor, *posicao; //Chamada Lista_Busca_Posicao(valor, posicao); Se quiser simplificar a função: bool Lista_Busca_Valor(int valor, int &Posicao){ if(!Lista_Vazia()){ int i; for(i=Frente;i<Tras;i++){ if(Lista[i]==valor){ Posicao=i; valor=Lista[Posicao]; return true; } } } return false; }
  25. Eu acho que não tem o arquivo de fonte, como compilei com: g++ jogo.cpp -o jogo `pkg-config --libs allegro` não sei se implementou o arquivo de fonte do sistema. dc.zip < só tem as imagens Obrigado, mas ainda acho que podemos implementar classes e headers, deixar mais limpo o código.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!