Ir ao conteúdo
  • Cadastre-se

Benjamin Breeg

Membros Plenos
  • Total de itens

    206
  • Registro em

  • Última visita

  • Qualificações

    N/D

Reputação

220

2 Seguidores

Informações gerais

  • Cidade e Estado
    Rio de Janeiro/RJ
  • Sexo
    Masculino
  1. Acho que esse primeiro código dele não aparece nada porque ele tentou implementar uma especie de "blit" que copia uma superfície para outra, só que não tenha certeza se com esses comandos que ele usou tinha algo na memoria para ser copiado para a superfície screen. No SDL2 eu uso a biblioteca SDL_image para manipular imagens, implementar esse blit na "unha" não deve ser tão simples assim já que envolve enviar os padrões, imagens ou matrizes com as imagens desenhadas pixel a pixel como faziam antigamente para a memoria e fazer a copia entre superfícies. Adaptando o programa dele em SDL1 seria mais ou menos assim. #include <SDL/SDL.h> int main(int argc, char** argv) { printf("Iniciando SDL...\n"); SDL_Surface *screen, *retangulo; //cria uma surface SDL screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); //inicia o vídeo Uint32 color = SDL_MapRGB(screen->format, 255,0,0); printf("SDL iniciado...\n"); retangulo = SDL_LoadBMP("rect.bmp"); SDL_Event event; while(1) { while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: { //caso alguma tecla seja pressionada switch (event.key.keysym.sym) { //para detectar a tecla pressionada case SDLK_ESCAPE: printf("ESC pressionado.\n"); exit(0); break; case SDLK_UP: printf("Seta para cima pressionanda.\n"); exit(0); break; case SDLK_a: printf("A pressionado.\n"); exit(0); break; } break; } } if(event.type == SDL_QUIT) { //fecha através do botão fechar printf("Fechado pelo botão fechar...\n"); exit(0); } } SDL_FillRect(screen, &screen->clip_rect, color); SDL_BlitSurface(retangulo, NULL, screen, NULL); SDL_Flip(screen); } SDL_FreeSurface(retangulo); SDL_Quit(); return 0; } rect.bmp
  2. Então cara eu não sou familiarizado com Linux mas o que parece é que você instalou a versão mais antiga do SDL.. tente instalar o SDL2. Veja se esse vídeo ajuda.
  3. Esse código que você postou parece não estar em conformidade com o SDL2, provável que seja SDL1 ou algum versão bem inicial do SDL2. Na própria pagina do SDL2 tem um exemplo de como desenhar um triangulo. https://wiki.libsdl.org/SDL_RenderDrawLines #include "SDL2/SDL.h" #define POINTS_COUNT 4 static SDL_Point points[POINTS_COUNT] = { {320, 200}, {300, 240}, {340, 240}, {320, 200} }; int main(int argc, char* argv[]) { if (SDL_Init(SDL_INIT_VIDEO) == 0) { SDL_Window* window = NULL; SDL_Renderer* renderer = NULL; if (SDL_CreateWindowAndRenderer(640, 480, 0, &window, &renderer) == 0) { SDL_bool done = SDL_FALSE; while (!done) { SDL_Event event; SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); SDL_RenderClear(renderer); SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE); SDL_RenderDrawLines(renderer, points, POINTS_COUNT); // ou diretamente com RenderDrawLine sem usar essa struct bidimensional SDL_Point. // SDL_RenderDrawLine(renderer, 320, 200, 300, 240); // SDL_RenderDrawLine(renderer, 300, 240, 340, 240); // SDL_RenderDrawLine(renderer, 340, 240, 320, 200); SDL_RenderPresent(renderer); while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { done = SDL_TRUE; } } } } if (renderer) { SDL_DestroyRenderer(renderer); } if (window) { SDL_DestroyWindow(window); } } SDL_Quit(); return 0; }
  4. O erro esta no ; que você colocou no while(n <=100); Isso é chamado de comando vazio ou seja um comando que não faz nada e por ser uma construção totalmente valida em C++ o compilador não vai te alertar e nem gerar algum código de erro. Se você colocar o ; em if, for, while.. tudo que esta dentro do bloco {} não vai ser executado.
  5. Depende do seu nível de conhecimento dentro da linguagem... Não sei o quanto você já avançou nos seus estudos de C++ mas se já compreende e sabe como utilizar tipos de dados(int, float...) criar e inicializar variáveis, operadores(matemáticos, relacionais ...), entrada e saída de dados(cin, cout...), estruturas de controle (if, for, while ...) e como trabalhar com números aleatórios pelo menos de forma básica já é possível fazer jogos. Comece com jogos simples tipo o jogo do papel, pedra e tesoura, adivinhar o numero. Esses dois jogos já são um belo exercício desses pontos que citei acima. A media que você for avançando aprendendo strings e vetores por exemplo já é possível criar ate um jogo de aventura com texto, jogo da forca, da velha etc etc. Bibliotecas gráficas só são recomendadas se você possui um conhecimento mais amplo da linguagem como funções, passagem de parâmetros, alocação de memoria, ponteiros, classes e objetos etc etc.
  6. Tem alguns erros no seu código. Para declarar uma variável em C o correto é tipo da variável nome da variável: int mes; C não permite usar acentuação ao declarar variáveis, você usou "mês" o correto é "mes" Para inicializar um especificador de formato você usa % antes do tipo de dado que deseja scanf("%d",&mes); & é um operador que retorna o endereço da variável mas como você ainda não estudou sobre ponteiros para não confundir apenas tenha em mente que o scanf precisa dessa informação. Quanto ao exercício acho que para facilitar é melhor você usar uma tabelinha não levando em conta os dias exatos que as estações começam visto que o exercício pede apenas o mês. Algo assim: Janeiro (1): Verão Fevereiro (2): Verão Março (3): Verão Abril (4): Outono Maio (5): Outono Junho (6): Outono Julho (7): Inverno Agosto (8): Inverno Setembro (9): Inverno Outubro (10): Primavera Novembro (11): Primavera Dezembro (12): Primavera
  7. Pode ser feito assim. #include <iostream> #include <string> #include <ctime> using namespace std; int main() { const int NUM_PALAVRAS = 5; const string PALAVRAS[NUM_PALAVRAS] = { {"Programacao"}, {"C++"}, {"Hello"}, {"Notebook"}, {"Relogio"} }; srand(static_cast<unsigned int>(time(0))); int NUMERO = (rand() % NUM_PALAVRAS); string PALAVRASECRETA = PALAVRAS[NUMERO]; int TAM = PALAVRASECRETA.size(); for(int i = 0;i < TAM; i++) { int INDICE = (rand() % TAM); char TEMP = PALAVRASECRETA[INDICE]; PALAVRASECRETA[INDICE] = TEMP; } cout << PALAVRASECRETA << endl; return 0; }
  8. Tente usar o gerador de números aleatórios do C++ o mt19937 não tem limtes entre 0 e RAND_MAX como rand(). #include <iostream> #include <random> #include <chrono> using namespace std; int main() { unsigned seed = chrono::system_clock::now().time_since_epoch().count(); mt19937 gen(seed); uniform_int_distribution<unsigned int> dist(1, 10000000); int random = dist(gen); cout << random << '\n'; }
  9. Ate tem como você fazer um for estilo Python e Pascal mas é algo um tanto complexo porque envolve templates, sobrecarga de operadores etc etc. O C++ a partir da versão 11 ate tem um for que é baseado em ranges mas ele precisa iterar a partir de alguma coisa, array ou vector. std::string str = "clubedohardware"; for (char c : str) std::cout << c << ' '; Olha esse código retirado do stackoverflow com o for estilo Python. #include <iostream> template <typename T> class Range { public: class iterator { public: explicit iterator(T val, T stop, T step) : m_val(val), m_stop(stop), m_step(step) { } iterator& operator ++ () { m_val += m_step; if ((m_step > 0 && m_val >= m_stop) || (m_step < 0 && m_val <= m_stop)) { m_val = m_stop; } return *this; } iterator operator ++ (int) { iterator retval = *this; ++(*this); return retval; } bool operator == (iterator other) const { return m_val == other.m_val; } bool operator != (iterator other) const { return !(*this == other); } T operator * () const { return m_val; } private: T m_val, m_stop, m_step; }; explicit Range(T stop) : m_start(0), m_stop(stop), m_step(1) { } explicit Range(T start, T stop, T step = 1) : m_start(start), m_stop(stop), m_step(step) { } iterator begin() const { return iterator(m_start, m_stop, m_step); } iterator end() const { return iterator(m_stop, m_stop, m_step); } private: T m_start, m_stop, m_step; }; template <typename T> Range<T> range(T stop) { return Range<T>(stop); } template <typename T> Range<T> range(T start, T stop, T step = 1) { return Range<T>(start, stop, step); } int main() { for (auto i : range(10)) { std::cout << " " << i; } std::cout << std::endl; for (auto i : range(4, 10, 2)) { std::cout << " " << i; } std::cout << std::endl; for (auto i : range(0.5, 1.0, 0.1)) { std::cout << " " << i; } std::cout << std::endl; }
  10. Cara esta funcionando #include <stdio.h> #include <time.h> //int main(void) //{ // char url[]="char.txt"; // char ch; // FILE *arq; // // printf("num: "); // ch=getchar(); // // arq = fopen(url, "w"); // if(arq == NULL) // printf("Erro, nao foi possivel abrir o arquivo\n"); // else{ // fputc(ch, arq); // fclose(arq); // } // // return 0; //} int random(); void dicas(int num, int password, int tentativas); void main() { int continuar=1, password, tentativas, num; do { system("cls || clear"); printf("Sorteando numero entre 1 e 1000...\n"); password = random(); printf("Comecou! Tente adivinhar o numero!\n\n"); tentativas = 0; do { tentativas++; printf("Tentativa %d: ", tentativas); scanf("%d", &num); dicas(num,password,tentativas); } while( num != password); printf("Digite 0 para sair, ou qualquer outro numero para continuar: "); scanf("%d", &continuar); } while(continuar); } int random() { srand( (unsigned)time(NULL) ); return (1 + rand()%1000); } void dicas(int num, int password, int tentativas) { if(num > password) printf("O numero sorteado e menor que %d\n\n", num); else if(num < password) printf("O numero sorteado e maior que %d\n\n", num); else printf("Parabens! voce acertou o numero em %d tentativas!\n\n", tentativas); } Não sei o que você tentou fazer naquela função main secundaria mas deve ser algo relacionado a guardar informações da jogada como uma especie de recorde de menor tentativa, tente implementar isso agora.. faça uma função recorde ou algo parecido.
  11. Olhando por alto o principal erro é que você declarou 2 funções main, o programa em c deve ter apenas uma função main para indicar onde inicia a execução do programa. Não sei dizer se em C ainda é uma boa pratica abrir a função main com void main() ou int main(void) apesar de ambos funcionarem.
  12. Você tentou declarar um array, na pratica daria um erro porque o que delimita o final de uma string é um caractere NULL, ela começa e termina com zero mas esse zero conta, o certo seria operacao[2] = "a"; o C++ permite apenas char, int ou tipo enumerado no switch, ponteiros e array de char ou strings não funcionam, declare apenas como char operacao ou se quiser inicializar char operacao = 'a' mas não é preciso porque a variável vai receber o valor logo abaixo.
  13. Não seria melhor usar o ofstream do C++ ? Algo assim... #include <iostream> #include <locale.h> #include <fstream> using namespace std; struct Clientes{ char nome[120]; char empresa[120]; char email[300]; char endereco[120]; int celular,fixo; }; int main(int argc, char** argv) { setlocale(LC_ALL, "Portuguese"); ofstream arquivo; arquivo.open("clientes.txt", ios::out | ios::app); Clientes Cliente; cout << "Digite o nome do cliente : "; cin.getline(Cliente.nome,120); arquivo << "Cliente: " << Cliente.nome << endl; cout << "Digite o nome da empresa do cliente: "; cin.getline(Cliente.empresa,120); arquivo << "Empresa: " << Cliente.empresa << endl; cout << "Digite o e-mail de contato do cliente: "; cin.getline(Cliente.email,300); arquivo << "E-mail: " << Cliente.email << endl; cout << "Digite o celular do cliente: "; cin >> Cliente.celular; cin.ignore(); arquivo << "Celular: " << Cliente.celular << endl; cout << "Digite o telefone fixo do cliente: "; cin >> Cliente.fixo; cin.ignore(); arquivo << "Fixo: " << Cliente.fixo << endl; cout << "Digite o endereço do cliente: "; cin.getline(Cliente.endereco, 120); arquivo << "Endereço: " << Cliente.endereco << endl; arquivo.close(); system("pause"); return 0; }
  14. O MinGW é o GCC(GNU Compiler Collection) dos sistemas Unix/Linux portado para Windows, a versão do MinGW/GCC usada pelo DevCpp 4.9.9.2 se não me engano é a 3 e no Codeblocks é a 4. O grupo de trabalho do C parece estar parado mas tivemos o C11 em 2007 que atualizou e acrescentou muitos recursos na linguagem e no ano passado saiu a versão C18 com correções e melhorias técnicas. Vale a pena dar uma atualizada nas ferramentas de compilação.
  15. Aceitar ate aceita mas pode ter muitos problemas de incompatibilidade referente a escrita e verificação de tipos principalmente em versões de C++ apos a padronização da linguagem. Agora se você usa um compilador muito antigo realmente não deve ter muitos problemas em escrever código C. Acredito que a principal versão de C usada aqui no BR ainda seja a versão 89 e usar código portado dessa versão pra versões mais modernas do C++ realmente vai ser um tiro no pe, vai ter muita coisa que você consegue fazer sem problemas no C que não vai funcionar sem algum tipo de adequação no C++. Nem sempre C é um subconjunto de C++ hehe

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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...

Eletrônica

PROMOÇÃO DE QUARENTENA

Aproveite o isolamento social para aprender eletrônica!
De R$ 39,90 por apenas R$ 19,90
Só até as 23h59min desta sexta-feira 10/04/2020

CLIQUE AQUI E COMPRE AGORA MESMO!