Ir ao conteúdo

kgin

Membro Pleno
  • Posts

    386
  • Cadastrado em

  • Última visita

posts postados por kgin

  1. 6 horas atrás, Ismael G. disse:

    Eu baixei ontem pela Epic Games Store a Unreal Engine, mas quando eu vou criar um projeto a engine não abre o projeto nem janela nenhuma só fica o icone na barra de tarefas. Alguém saberia dizer o que esta acontecendo?

    Travou!

     

    Você acabou de descrever o meu pc de mesa.

    Spoiler
    6 horas atrás, Ismael G. disse:

    meu PC:

    placa-mãe: ASUS M4N68T-M LE.

    Processador: Phenom II X2 560 3.30Ghz.

    Memoria: 6Gb DDR3 1333 Mhz.

    Placa de video: Radeon HD5450 1Gb DDR3.

     

    Desista, simplesmente não vai funcionar, eu já tentei por um bom tempo.

     

    Eu tenho um notebook sony vaio com um i3 de terceira geração que roda o unreal engine 4 todo *****, então por aí já da pra tirar que é um programa muito pesado.

     

    Eu vi que você fez algumas perguntas sobre criação de jogos, eu vou passar algumas dicas pra você.

     

    Você que criar jogos por hobbie ou quer fazer alguma coisa mais seria?

    se for por hobbie eu recomendo começar com alguma coisa bem simples, é isso vale para o motor escolhido também.

    game engines simples de dominar são

    -Construct

    -GameMaker

    -RPGMaker

    -MonoGame

    Se for tentar alguma linguagem de programação tente escolher uma que funcione em qualquer buraco e que seja simples.

    Como Java ou JavaScript.

     

    Agora se você que trabalhar com isso algum dia, eu recomendo começar com uma engine simples e leve, e que vá ensinar tudo que você precisa.

    Pelo hardware que você tem eu recomendaria godot, porque tem uma documentação extensa e vários tutorias tornando tudo mais fácil.

    Outra opção seria a unity pelos mesmos fatores da godot, mas essa é bem mais pesada é eu tenho quase certeza que o seu sistema não vai suportar.

    • Obrigado 1
  2. @devair1010 Eu não acho esse exemplo muito pratico para alguém que está começando a programar, principalmente que ele quebra a lógica do programa com esse goto.

     

    Um exemplo "melhor" seria assim.

    #include <stdio.h>
    
    
    int main(void)
    {
        int numero = 0;
        /* Repete até o número estiver dentro da faixa desejada */
        do {
            /* Pega um numero */
            printf("\nDigite um numero entre 0 e 10:\t");
            scanf("%i%*c", &numero);
    
            /* Testa se está fora da faixa desejada */
            if (numero < 0 || numero > 10) {
                printf("\nDigite novamente!");
            }
        /* Repete se o número estiver fora da faixa */
        } while (numero < 0 || numero > 10);
    
        printf("\nOk\nO Numero %i foi aceito.", numero);
        getchar();      /* Pausa o programa */
        return(0);
    }

     

  3. @Cynthia Moreira Consegue compreender a lógica deste?

    #include <stdio.h>
    #include <stdlib.h>
    
    /**1- Crie uma struct chamada Aluno. ok
    Ela deve conter um nome (string), matrícula (um valor numérico), um vetor de 4 notas (ponto flutuante) e um campo de média final (ponto flutuante). OK :)*/
    
    struct ficha_aluno
    {
        char nome[256];
        int matricula;
        float notas[4];
        float media;
    };
    
    /**2- Crie uma função que recebe os valores de nome, matrícula e as 4 notas pelo teclado e escreve nos campos de um Aluno
    (a média final deve ser calculada em outra função - ver questão 4).ok :)*/
    
    
    /**3- Crie uma função que imprime todos os campos de um Aluno. Quando for imprimir o valor de média final, assinalar ao
    lado do valor se o aluno passou (média 7 ou mais), ficou de AF (média 4 ou mais, mas abaixo de 7)
    ou está reprovado (média abaixo de 4)*/
    
    ///4- Crie uma função que recebe Aluno e calcula a média final.
    
    
    /// 5- Crie uma função que recebe um vetor de Alunos e retorna qual aluno teve a maior média final
    
    int main(void)
    {
        struct ficha_aluno alunos[4];
        int contador, auxiliar;
    
        /* Pega as informações de 4 alunos */
        for (contador = 0; contador < 4; contador++) {
            printf("\nDigite o nome do %i aluno:\t", contador);
            fgets(alunos[contador].nome, 256, stdin);
            printf("\nDigite o numero da matricula do %i aluno:\t", contador);
            scanf("%i%*c", &alunos[contador].matricula);
            for (auxiliar = 0; auxiliar < 4; auxiliar++) {
                printf("\nDigite a nota %i do aluno %i:", auxiliar, contador);
                scanf("%f%*c", &alunos[contador].notas[auxiliar]);
            }
        }
    
        /* Mostra a informação dos alunos */
        for (contador = 0; contador < 4; contador++) {
            printf("\n\nNome do aluno %i-%s", contador, alunos[contador].nome);
            printf("\nNumero da matricula do aluno %i:%i", contador, alunos[contador].matricula);
            printf("\nNotas do aluno %i", contador);
            for (auxiliar = 0; auxiliar < 4; auxiliar++) {
                printf("\nNota %i:%.2f", contador, alunos[contador].notas[auxiliar]);
            }
        }
    
        getchar();      /* Pausa o programa */
        return(0);
    }

     

  4. 3 horas atrás, Gabriel Barbosa Brandao disse:

    Gostaria de saber qual o nome desse tipo de execução por linha de comando ?

    Redirecionamento de entrada e saída de dados, neste vídeo tem uma explicação melhor de como funciona.

    https://youtu.be/bAa0BNB-fcE

     

    3 horas atrás, Gabriel Barbosa Brandao disse:

    Existe algum outro tipo execução por linha de comando que possa facilitar minha vida ?

    Vários, tomando o linux como exemplo tem o grep, diff, less, file, find, locate, sort e os caracteres caracteres especiais.

     

    3 horas atrás, Gabriel Barbosa Brandao disse:

    Qual é o correspondente desses comandos no Windows ?

    Essa eu não sei responder, mas a muitos anos atrás quando eu usava windows (XP) a maior parte funcionava (Só que a maioria tinha outro nome, ou funcionava de uma forma semelhante).

    • Amei 1
  5. Os que eu já li, é posso afirmar que e bom são.

     

    Black Art of 3D Game Programming: Writing Your Own High-Speed 3D Polygon Video Games in C

    tricks of the windows, game programming gurus. autor andré lamother.

    Esses que eu citei são muito velhos, e eu não sei o quanto directx mudou de lá pra cá.

     

    Esses outros são mais novos, mas eu nunca li.

    Introduction to 3D Game Programming with DirectX 9.  autor frank d. luna.

    Introduction to 3D Game Programming with DirectX 11. do mesmo autor.

     

    Se me lembro bem no próprio site da microsoft ela disponibiliza a documentação do directx.

     

    Eu não recomendo você começar pelo directx, porque ele é muito extenso e não muito intuitivo se você estiver começando.

    Bibliotecas boas para começar a desenvolver jogos são a allegro e sdl.

    • Curtir 1
    • Obrigado 1
  6. @DanielTenCaten Você só pode declarar a função main uma vez, depois disso você pode declarar qualquer função que não tenha o nome main nem que seja um identificador reservado da linguagem.

     

    Exemplo de funções.

    #include <stdio.h>
    
    /* Declara as funções */
    void primeiraFuncao(void)
    {
        printf("\nPassou na primeira funcao!\n");
    }
    
    void segundaFuncao(void)
    {
        printf("\nPassou na segunda funcao!\n");
    }
    
    void pressioneEnter(void)
    {
        printf("\nPressione enter para continuar!");
        getchar();      /* Pausa o programa */
    }
    
    int main(void)
    {
        /* Chama a primeira função */
        primeiraFuncao();
        /* Mostra a mensagem na tela */
        pressioneEnter();
        /* Chama a segunda função */
        segundaFuncao();
        /* Mostra a mensagem na tela */
        pressioneEnter();
        return(0);
    }

     

    recomendo você dar uma lida no livro C completo e total no capitulo de funções, e na pagina 91 sobre blocos de comando.

  7. @paulopimenta6 O problema é que você está reservando memória e não está usando-a para nada, preste atenção que quando você retorna o ponteiro ele não está indo a lugar algum.

    43 minutos atrás, paulopimenta6 disse:

    insere_final(inicio, 10);

    ele é passado pelo return da função, é quando o programa vai fazer o próximo printf ele ainda não está inicializado.

     

    Exemplo de uma lista

    #include <stdio.h>
    #include <stdlib.h>
    
    struct no
    {
        int valor;
        struct no *proximo;
    };
    
    int main(int argc, char *argv[])
    {
        struct no *inicio_lista = NULL, *fim_lista = NULL, *aux;
        /* Cria o primeiro nó na lista */
        inicio_lista = malloc(sizeof(*inicio_lista));
        /* Checa se foi possível reservar memoria */
        if (inicio_lista == NULL) {
            perror("Erro nao foi possivel reservar memoria ");
            return(1);      /* Encerra o programa */
        }
        /* Coloca um valor na lista */
        inicio_lista->valor = 35;
        /* Inicia o final da lista */
        inicio_lista->proximo = NULL;
        fim_lista = inicio_lista;
    
        /* Cria o segundo nó na lista */
        fim_lista->proximo = malloc(sizeof(*fim_lista));
        /* Checa se foi possível reservar memoria */
        if (fim_lista->proximo == NULL) {
            perror("Erro nao foi possivel reservar memoria ");
            return(1);      /* Encerra o programa */
        }
    
        /* coloca o final na lista */
        fim_lista = fim_lista->proximo;
        fim_lista->proximo = NULL;
        /* Coloca um valor na lista */
        fim_lista->valor = 44;
    
        /* Mostra a lista */
        aux = inicio_lista;
        while (aux != NULL) {
            printf("\n%i", aux->valor);
            aux = aux->proximo;
        }
    
        /* Apaga a lista */
        aux = inicio_lista;
        while (aux != NULL) {
            struct no *tmp = aux->proximo;
            free(aux);
            aux = tmp;
        }
    
        /* Tira a referencia dos ponteiros */
        inicio_lista = fim_lista = aux = NULL;
        getchar();      /* pausa o programa */
        return(0);
    }

     

    Recomendo você aprender a usar o gdb caso esteja usando o compilador gcc.

  8. @felipe honorio Você tem duas opções, se caso você quiser "compilar e rodar" em um navegador você teria que usar as ferramentas do Emscripten para compilar para webassembly (Uma coisa que seria horrivelmente trabalhosa).

     

    Agora se você quer um ambiente para rodar o programa e o seu programa não for muito carregado de coisas do sistema (mais especificamente o windows) você pode usar esse site https://www.onlinegdb.com/   

     

    exemplo:Programa acerte o número.

  9. @rafael carvalho melo Você tem que utilizar streams, eu não sei C++ mas aqui tem um link de como utilizar que parece ser fácil de entender.

    Entrada/Saída com Streams

     

    Exemplo de como seria.

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
        string aluno;
        int idade = 0;
        cout << "Digite o nome do aluno\n";
        cin >> aluno;
    
        cout << "Digite a idade do aluno\n";
        cin >> idade;
    
        cout << "Nome do aluno:" << aluno << "\n";
        cout << "Idade do aluno:" << idade << "\n";
        return 0;
    }

     

  10. É como o @mauro_b explicou, a maneira digamos assim "correta" seria assim.

    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    void
    aloca(float **p, int tam);
    
    void
    apaga(float **p);
    
    
    int main(void)
    {
            int cont;
            float *numeros;
            aloca(&numeros, 10);
    
            if (numeros == NULL) {
                    return(1);              /* Erro! */
            }
    
            for (cont = 0; cont < 10; cont++) {
                    numeros[cont] = cont+1;
            }
    
            for (cont = 0; cont < 10; cont++) {
                    printf("\n%.2f", numeros[cont]);
            }
            getchar();
    
            apaga(&numeros);
            return(0);
    }
    
    
    void
    aloca(float **p, int tam)
    {
            *p = malloc(sizeof(*p)*tam);
    }
    
    void
    apaga(float **p)
    {
            if (*p != NULL) {
                    free(*p);
            }
    
            *p = NULL;
    }

    aprenda a usar o gdb (ou o debug disponível do seu compilador) que ele será uma mão na roda nesse tipo de situação.

  11. A solução seria você colocar a números aleatórios com a função rand().

    a linha 8 e 9 estão erradas, observe bem aqui

    8 minutos atrás, julia0906 disse:

    Considere o programa para gerar 100 números inteiros aleatórios no intervalo de 0 até 9.

    O vetor só vai de 0 a 9, é cadê os outros 90 números?

     

    9 minutos atrás, julia0906 disse:

    8. int i, f[10] = {0}; 9. for(i = 1; i <= 100; i++)

     

  12. @catherineprokhorov Não é possível  você fazer um shift right (rolar a direita) em vetores, você teria que implementar isso.

    #include <stdio.h>
    
    #define T_STR 256
    
    enum direcao
    {
        ESQUERDA,
        DIREITA
    };
    
    void
    rolaString(char *str, enum direcao direcao, unsigned short quantidade);
    
    int main(void)
    {
        char str[256] = "Imposto e roubo!";
    
        rolaString(str, DIREITA, 7);
    
        printf("\n%s", str);
        getchar();
        return(0);
    }
    
    void
    rolaString(char *str, enum direcao direcao, unsigned short quantidade)
    {
        char tmp[T_STR];
        unsigned short tamanho_str, cont, aux;
    
        for (tamanho_str = 0; str[tamanho_str]; tamanho_str++);
    
        switch (direcao) {
            case ESQUERDA:
                break;
            case DIREITA:
                if (quantidade < tamanho_str) {
                    /* Copia a primeira parte */
                    for (cont = tamanho_str-quantidade, aux = 0; str[cont]; cont++, aux++) {
                        tmp[aux] = str[cont];
                    }
    
                    /* Copia a segunda parte */
                    for (cont = 0; cont < tamanho_str-quantidade; cont++, aux++) {
                        tmp[aux] = str[cont];
                    }
    
                    tmp[tamanho_str] = '\0';
                    for (cont = 0; tmp[cont]; cont++) {
                        str[cont] = tmp[cont];
                    }
                }
                break;
        }
    }

     

    Eu fiz esse exemplo de como seria para a rolar a direita.

    • Confuso 1
  13. Uma maneira seria assim.

    #include <stdio.h>
    
    int main(void)
    {
        char str[256] = "Imposto", final[256];
        sprintf(final, "%s e roubo!", str);
    
        printf("\n%s", final);
        getchar();
        return(0);
    }

     

    Mas se for um trabalho de faculdade creio eu que o certo seria manipular as letras no vetor.

  14. Eu fiz um reduzido para ajudar em um dever escolar aqui, não sei se está tudo correto, mas eu acho que seria uma boa base para você.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define Q_ESTADOS 5
    #define T_STR 256
    
    const char *sigla_estados[Q_ESTADOS] = {"DF", "PB", "RJ", "RS", "PA"};
    
    const unsigned short 
    distancia_estados[Q_ESTADOS][Q_ESTADOS] = {{0, 2245, 1148, 2027, 2110},
                                               {2245, 0, 2448, 3889, 2161},
                                               {1148, 2448, 0, 1553, 3250},
                                               {2027, 3884, 1553, 0, 3852},
                                               {2120, 2161, 3250, 3852,0}};
    
    int main(int argc, char *argv[])
    {
        char ds1[T_STR], ds2[T_STR];
        int sair, cont, est1, est2;
        do {
            int estados_encontrados = 0;
            sair = 0;
            printf("\nDigite uma capital:\t");
            fgets(ds1, T_STR, stdin);
            printf("\nDigite outra capital:\t");
            fgets(ds1, T_STR, stdin);
            /* Retira o newline das strings */
            ds1[strlen(ds1)-1] = '\0';
            ds2[strlen(ds2)-1] = '\0';
    
            /* Passa a string para mauiscula */
            for (cont = 0; cont < strlen(ds1); cont++) {
                if (ds1[cont] > 97) {
                    ds1[cont] -= 32;
                }
            }
            for (cont = 0; cont < strlen(ds2); cont++) {
                if (ds2[cont] > 97) {
                    ds2[cont] -= 32;
                }
            }
    
            /* acha o estado */
            est1 = 0;
            for (cont = 0; cont < Q_ESTADOS; cont++) {
                if (strcmp(sigla_estados[cont], ds1) == 0) {
                    est1 = cont;
                    estados_encontrados = 1;
                    break;
                }
            }
    
            est2 = 0;
            for (cont = 0; cont < Q_ESTADOS; cont++) {
                if (strcmp(sigla_estados[cont], ds2) == 0) {
                    est2 = cont;
                    estados_encontrados = 1;
                    break;
                }
            }
    
            if (estados_encontrados) {
                printf("\nA distancia entre %s e %s e:\t%hu",
                       sigla_estados[est1], sigla_estados[est2],
                       distancia_estados[est1][est2]);
            } else {
                printf("\nEstados nao encontrados!");
            }
    
            if (estados_encontrados) {
                char opcao;
                printf("\nProcurar outro estado?\nS\\N:\t");
                scanf("%c%*c", &opcao);
                if (opcao == 's' || opcao == 'S')
                    sair = 1;
            } else {
                char opcao;
                printf("\nEstados disponiveis.\n");
                for (cont = 0; cont < Q_ESTADOS; cont++) {
                    printf("%s,", sigla_estados[cont]);
                }
                printf("\nTentar novamente com algum estado difirente?\nS\\N:\t");
                scanf("%c%*c", &opcao);
                if (opcao == 's' || opcao == 'S')
                    sair = 1;
            }
        } while (sair);
        return(0);
    }

     

    Tirei os dados do livro teláris 6 serie 2015, pagina 70.

  15. @Joel Martins Não se pode compara strings dessa maneira em C, a "melhor maneira" seria assim.

    #include <stdio.h>
    #include <string.h>
    
    #define T_STR 256
    
    int
    contaOcorrencia(char *str, char *oc);
    
    int main(int argv, char *argc[])
    {
        char str[T_STR], palavra[T_STR];
        if (argv > 1) {
            strcpy(str, argc[1]);
            strcpy(palavra, argc[2]);
        } else {
            printf("\nDigite uma palavra:\t");
            fgets(str, T_STR, stdin);
            printf("\nDigite a ocorrencia na palavra:\t");
            fgets(palavra, T_STR, stdin);
            /* Retira o newline */
            str[strlen(str)-1] = palavra[strlen(palavra)-1] = '\0';
        }
    
        printf("\nQuantidade de ocorrencias da palavra %s na palavra %s:%i",
                palavra, str, contaOcorrencia(str, palavra));
                
        getchar();      /* pausa o programa */
        return(0);
    }
    
    int
    contaOcorrencia(char *str, char *oc)
    {
        unsigned short 
        t_str = strlen(str),
        t_oc = strlen(oc)-1,
        ocorrencias = 0;
    
        char tmp[T_STR];
    
        if (t_str > 0 && t_oc > 0) {
            unsigned short cont = 0;
            do {
                if (cont < t_str) {
                    strcpy(tmp, &str[cont]);
                    tmp[t_oc+1] = '\0';
                    if (strcmp(tmp, oc) == 0) {
                        cont+=t_oc;
                        ocorrencias++;
                    } else {
                        cont++;
                    }
                }
            } while (cont < t_str);
            return(ocorrencias);
        }
        return(0);
    }

     

  16. @paulo luz magalhaes Me desculpe eu acabei não prestando atenção no seu programa, eu fiz um de exemplo para você.

    #include <stdio.h>
    
    #define T_PALAVRA 256
    
    int
    checaPalindromo(char *p);
    /*
     * Devolve 1 se for palindromo e 0 se não for.
     */
    
    int main(int argc, char *argv[])
    {
        char palavra[T_PALAVRA];
        int cont;
        /* Checa se foi passada alguma palavra para o programa */
        if (argc > 1) {
            /* Mostra as palavras */
            for (cont = 1; cont < argc; cont++) {
                printf("\n%s", argv[cont]);
    
                /* Checa palindromo */
                if (checaPalindromo(argv[cont])) {
                    printf(":E palindromo!");
                } else {
                    printf(":Nao e palindromo");
                }
            }
        } else {
            printf("\nDigite uma palavra:");
            fgets(palavra, T_PALAVRA, stdin);
            /* Retira o newline da palavra */
            for (cont = 0; palavra[cont]; cont++);
    
            palavra[cont-1] = '\0';
            
            /* Checa palindromo */
            if (checaPalindromo(palavra)) {
                printf(":E palindromo!");
            } else {
                printf(":Nao e palindromo");
            }
        }
        getchar();      /* Faz uma pausa */
        return(0);
    }
    
    int
    checaPalindromo(char *p)
    {
        char str[256];
        int q_caracteres_palavra, q_caracteres_iguais = 0, cont, aux;
        /* Conta a quantidade de caracteres e passa a palavra para mauiscula para outro vetor */
        for (q_caracteres_palavra = 0; p[q_caracteres_palavra]; q_caracteres_palavra++) {
            if (p[q_caracteres_palavra] > 97) {
                /* Passa a letra para mauiscula e copia para outro vetor */
                str[q_caracteres_palavra] = p[q_caracteres_palavra]+32;
            }
            str[q_caracteres_palavra] = p[q_caracteres_palavra];
        }
        /* Coloca o indicador \0 na string */
        str[q_caracteres_palavra] = '\0';
        
        /* Checa palindromo */
        aux = q_caracteres_palavra-1;
        for (cont = 0; str[cont]; cont++) {
            if (str[cont] == str[aux]) {
                q_caracteres_iguais++;
            }
            aux--;
        }
    
        if (q_caracteres_iguais == q_caracteres_palavra) {
            return(1);
        }
        return(0);
    }

     

    • Obrigado 1
  17. 11 minutos atrás, paulo luz magalhaes disse:

    Debuguei o meu programa corrigido e o seu tambem. Ao digitar a palavra "ovo" ou a frase "saudavel leva duas", ambos os programas acusam que não são palíndromos. Estou tentando quebrar a cabeça e ver como corrijo...

    mas qual seria o propósito do seu programa?

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!