Ir ao conteúdo

1freakday

Membro Pleno
  • Posts

    655
  • Cadastrado em

  • Última visita

Tudo que 1freakday postou

  1. @Matteus Moroni Muitas respostas serão idênticas, e isso quer dizer que não existe melhor mas sim apenas gosto, se você acha que o DevC++ proporciona uma base para seu aprendizado, use-o e aprenda com ele, porém se quer evoluir seu conhecimento sobre IDE's acredito que só testando os mais usados. Um bem conhecido é o CodeBlocks ele é ótimo para quem sabe usa-lo. Assim como o Microsoft Visual C++ que tem uma interface muito interessante. Lembre-se, é tudo opinião e gosto, só testando para saber.
  2. Portanto, compreendido a necessidade de for na lógica, apresente o código para eu lhe ajudar, infelizmente não posso introduzir nenhum código...
  3. Seu caso é complicado, pois você precisa primeiro armazenar as matrizes dadas após o código pronto, portanto dispensa o uso de apenas if's. Porém, se fosse apenas esses exemplos que você passou ai, pode usar if, mas se observarmos as possibilidades, podemos apenas ter sequencias indefinidas, como: X O O O O O O O X Então exigirá muitos if's. Enfim, use um for e conte quantas bolinhas estão sendo encontradas na linha, caso forme uma sequência você imprime a mensagem na tela. Caso contrário continue na próxima linha e zere os contadores.
  4. @erique então, dei uma estudada rápida no código e acabei alterando algumas coisas, creio que certa parte pode ser reutilizada. Até porque eventualmente você vai precisar trabalhar com objetos em struct, mapas com camadas(esse é essencial o uso de arquivos, ou xml). Enfim segue o código: /* 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 #define TAMANHO 25 // Define o tamanho do "quadradro" da imagem importada #define LINHAS 36 // define a quantidade de linhas da matriz #define COLUNAS 72 // define a quantidade de colunas da matriz #define DIR_UP 101 #define DIR_DOWN 102 #define DIR_LEFT 103 #define DIR_RIGHT 104 #define MZVERSION "v1.0-beta" //Variáveis Globais BITMAP *criacaodomapa; BITMAP *boneco; BITMAP *muro; BITMAP *trilha; 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 */ void inicia_alegro(); void desenha_o_mapa(); void tela(); int key_event(); /** INICIO DE FUNÇÕES DO MENU */ /** Iniciar interface de jogo - secao mapa/personagem */ int jogar(){ // Buffer do mapa criacaodomapa = create_bitmap(SCREEN_W, SCREEN_H); // 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() { //... } /** Menu inicial */ MENU opcao[] = { { (char *)"JOGAR", &jogar}, { (char *)"RANKINGS", &rankings}, { (char *)"CREDITOS", &creditos}, { (char *)"SAIR", &sair} }; /** Inicia fase do menu */ void inicia_menu(){ show_mouse(screen); do_menu(opcao, 375, 375); } /** 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) { if (x1 < x2 + w2 && x1 + w1 > x2 && y1 < y2 + h2 && h1 + y1 > y2) { printf("colidiu!\n"); return TRUE; } return FALSE; } /** Funções voláteis */ volatile int exit_program = FALSE; void fecha_programa() { exit_program = TRUE; } END_OF_FUNCTION(fecha_programa) volatile int ticks = 1; void tick_counter() { ticks++; } END_OF_FUNCTION(tick_counter) /** * inicializaçãoo de programa */ int main(){ //flags/temp's int move = FALSE, x = 10,y = 0, evout = 0; //init inicia_alegro(); inicia_menu(); //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)); //Game Loop while(!exit_program) { //Eventos while(ticks > 0 && !exit_program) { //filtro de teclas/eventos - recebe flag 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/movimento 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 { // coordenadas antigas x = x1; y = y1; } //reseta dir = 0; move = FALSE; } } finaliza_tudo(); return 0; } END_OF_MAIN() /** * Escopo das funções */ int key_event() { //saida de programa if(key[KEY_ESC]) fecha_programa(); //movimento 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(32); // 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() { draw_sprite(criacaodomapa, boneco, x1, y1); blit(criacaodomapa, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); clear_bitmap(criacaodomapa); } P.S: Ele ta para linux, então adiciona as includes para windows.
  5. Para fazer o boneco atravessar/passar por debaixo do tile é necessário implementar layers(camadas) no mapa.
  6. No loop 'for' você pode usar um marcador de índice e outro for dentro desse irá imprimir as letras até esse marcador. Como o @F.Fontes disse.
  7. @erique Como eu nunca tentei usar allegro, pois prefiro o Sdl, não sei te responder detalhadamente como usar as funções, apenas se eu pratica-las. Então, segue algumas informações que eu encontrei: 1 - Existe a função stretch_blit, ela serve para esse assunto e da poder de redimensionar a imagem. ( http://slideplayer.com.br/slide/1602885/ ) 2 - Você precisa arrumar a lógica de movimento do personagem, supondo que: a ) cada tile tem 32 pixels b ) o personagem comece em um valor múltiplo de 32 ou 0 então use: posicaox = posicaox+32; ... nesse caso ele sempre vai ir pro próximo tile da direita; 3 - não encontrei muitas informações sobre isso, acho que você precisa pegar uma fonte editada ou alterar a struct FONT
  8. Sim a ordem primeiro é imprimir o mapa depois o personagem, no loop você recebe as teclas e muda a posição do jogador, depois limpa tela, imprime o mapa, imprime o jogador.
  9. Função básica e padrão para colisão 2d: // __y__ // _| | //x[_]x+w |x+w // |_____| // y+h bool colidiu(int playx, int playy, int objx, int objy){ if((playx > objx) && (playx + playw <= objx + objw) && (playy > objy) && (playy + playh <= objy + objh)){ return true; } return false; } Lembrando que o teste de colisão é feito apos o usuário enviar a tecla de movimento, então supondo que ele está indo na direção indicada, use essa direção nos parâmetros da função colidiu(). Digo isso, por que se o player não estiver em cima do objeto, o teste vai falhar, e ele eventualmente ficará um pouco em cima, até que x do player seja > que o x do objeto. adicionado 38 minutos depois Não tinha visto esse post, mas no caso você só usa struct 'boneco' quando o mesmo possui as variáveis x,y ; em questão de velocidade você pode por a divisão da largura do boneco. Exemplo, o tamanho da imagem do boneco é 32x64, ai você coloca: #define VELOCIDADE 16 ---- Como você usa as variáveis posicaox e posicaoy, acho que não é util colocar a struct boneco nesse momento, talvez depois. ai você só usa as etapas: 1 - testa colisão 2 - altera as variaveis posicaox e posicaoy - se não colidiu 3 - drawsprite(); 4 - atualiza tela
  10. Acredito que seu programa está de acordo com os requisitos do exercício, não tem como ser melhor que isso não. Apenas tente organizar o texto que aparece na tela, acho que só isso.
  11. Erro 1 - erro de conversão: *novapalavra = (char *)malloc (nread-1); Erro 2 - erro de digitação: novapalvra < errado novapalavra < certo
  12. Se você observar o código com atenção verá que definiu os valores da variável entre o for e sua chave: for (i = 1; i <= N; i++) N=0; soma=0; { Deixe assim: N=0; soma=0; for (i = 1; i <= N; i++){ ...
  13. #include <iostream> using namespace std; //*recebe retorna seu valor antigo, e pega o novo int troca(int *recebe,int novo){ int aux = *recebe; *recebe = novo; return aux; } int main(){ int temp = 0, x = 0, nota1 = 0, nota2 = 0, nota3 = 0; while(x<20){ x++; cout << "Digite o numero: "; cin >> temp; if(temp > nota3){ nota3 = temp; } if(nota2 < nota3){ nota3 = troca(&nota2,nota3); } if(nota1 < nota2){ nota2 = troca(&nota1,nota2); } } cout << endl; cout << "O maior valor é " << nota1 << endl; cout << "O segundo maior é " << nota2 << endl; cout << "O terceiro maior é " << nota3 << endl; } Créditos: @HebertCleiton
  14. O seu código tem um problema de lógica, quando chega nessa parte: sal = getSalario(); ele vai para a função getSalario(); sendo que nessa função, ela fica chamando a si mesmo infinitamente, até que o programa da o erro: return getSalario() * 0.1 + getSalario(); veja que o return chama a função novamente, e depois acaba chamando a si mesmo, até o erro... troque o getSalario no return por valores/variáveis.
  15. 1freakday

    C++ O que estou errando ?

    Acredito que seu erro seja criar uma função chamada soma e uma variável em main com o mesmo nome. Também veja que você declarou uma função em case 1: case 1 : int soma(int n1,int n2);
  16. Simples, use do...while: do { printf("Você quer responde isso:? (s/n): scanf("%c", &resp); }while(resp != 'n');
  17. Qual seria os erros em questão?
  18. Para passar para o fluxograma você precisa entender/simplificar a lógica do código em um rascunho qualquer. Sendo que você pode comentar o seu código para ter uma visão panorâmica. Ai depois você escreve as etapas: 1 - ( inicia com main ) 2 - [ altera linguagem/cor ] 3 - [ declara variáveis ] 4 - [ recebe ano atual/admissão/salário ] 5 - < salário <= 5 ? > - se sim [ atualiza salário e vai pro abono ] - se não vai para 6 6 - < salário >= 5 e salário <= 10 ? > - se sim [ atualiza salário e vai pro abono ] - se não vai para 7 ai é só continuar... observe que usei elipse com () , retângulo [ ] e a de decisão com < >
  19. @Thales Muchante então, usar salario += (salario*0.20); é o mesmo que: salario = salario + (salario*0.20);
  20. @erique Boa tarde, conseguiu progredir?
  21. Boa tarde, analisei seu código e vi que tem problemas apenas nos if's e também dei uma organizada para deixar de acordo com a questão em si, segue uma versão alterada: #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <locale.h> main (){ system("color 6e"); setlocale(LC_ALL,"portuguese"); int anoad,anoat,anos; float salario,abono; printf(" \tInforme o ano atual\nDigite: "); scanf("%d",&anoat); printf(" \tInforme o ano de admissão da empresa\nDigite: "); scanf("%d",&anoad); printf(" \tInforme o salário\nDigite: "); scanf("%f",&salario); anos=anoat-anoad; //atualizar o salário printf("\tSalario antigo: %.2f", salario); if (anos <= 5){ salario += (salario*0.05); printf(" -\tCategoria 1 -\tReajuste:%.2f\n",salario); } else if (anos >= 5 && anos <= 10){ salario += (salario*0.10); printf(" -\tCategoria 2 -\tReajuste:%.2f\n",salario); } else if (anos >= 10 && anos <=15 ){ salario += (salario*0.15); printf(" -\tCategoria 3 -\tReajuste:%.2f\n",salario); } else { salario += (salario*0.20); printf(" -\tCategoria 4 -\tReajuste:%.2f\n",salario); } //Com salario atualizado, precisa alterar o salario com abono if(salario <= 5000){ abono=salario+(salario*0.10); printf("\tAbono de 10 - \tSalário Atual:%.2f\n",abono); } else if (salario >= 5000.01 && salario<=25000){ abono=salario+(salario*0.05); printf("\tAbono de 5 - \tSalário Atual:%.2f\n",abono); } else printf("\tSem direito ABONO!\n"); getch(); } Qualquer dúvida só perguntar...
  22. BN, alguns pontos interessantes que alguem ira lhe dizer em algum momento: > Faça um 'sprite' de um boneco, pois você precisa de várias imagens, para então armazenar as imagens de acordo com os movimentos, sendo esquerda,direita,cima e baixo. Nem que seja no Paint xD, aconselho o GIMP > Para automatizar, você pode armazenar os dados em um struct Player, e ir alterando de acordo com as necessidades. Pois você precisa memorizar as coordenadas do jogador e eventualmente sua velocidade/direção. ---- Enfim, a lógica: é só você alterar a nova coordenada do jogador, igual você fez com if, e chamar a função para imprimir a imagem nessa nova coordenada, de acordo com o movimento filtrado pela switch/if: recebe a seta if(key[key_left]) { boneco.x -= VELOCIDADE; //aqui muda direcao do boneco para esquerda, alterando a imagem } else if(key[key_up]) { boneco.y -= VELOCIDADE; //aqui muda direcao do boneco para cima, alterando a imagem } else if(key[key_right]){ boneco.x += VELOCIDADE; //muda direcao do boneco para direita, alterando a imagem } else if(key[key_down]){ boneco.y += VELOCIDADE; //muda direcao do boneco para baixo, alterando a imagem } depois atualiza tela desenha mapa desenha boneco É sempre bom ter várias imagens para os movimentos, assim da uma impressão mais real. Exemplo de sprite: Com base nessas imagens, você pode separá-las em várias OU USAR APENAS UMA E IDENTIFICAR O X e Y , com tamanho 64x64 no máximo, e carregue cada uma com a sua própria váriavel: boneco_desce = load_bitmap("boneco1.bmp", null); boneco_desce = load_bitmap("boneco2.bmp", null); boneco_desce = load_bitmap("boneco3.bmp", null); etc... Espero ter cooperado com seu projeto...
  23. Muito bom, só uma adição, use (b*h)/2, pode acontecer de devolver um valor diferente do esperado. Seria interessante mostrar um exemplo assim: printf("A area do quadrado e : %d\n", area_quadrado(valor1)); printf("A area do retangulo e : %d\n", area_retangulo(valor2,valor3)); printf("A area do triangulo e : %d\n", area_triangulo(valor4,valor5)); Mas realmente, ficou bom seu código!
  24. @devair1010 Da para configurar certos plugins para poder compilar. Tutorial um pouco antigo, segue: https://saibaprogramar.wordpress.com/2012/09/06/instalar-e-configurar-compilador-c-e-c-no-notepad/
  25. @Gabrilell Já colocou o linker da biblioteca?

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...