Ir ao conteúdo
  • Cadastre-se

C Recomendação de projetos em C


Joao_Bilu

Posts recomendados

@Joao_Bilu      ainda estou estudando lógica de programação aqui no senac ,  mas pelo que já me disseram ,  a criação de algum jogo seria um bom teste para saber se o programador está preparado pois ele precisa ter muitos conhecimentos e boas ideias para conseguir desenvolver tal jogo e que funcione bem , e dizem que quem consegue fazer um jogo consegue fazer qualquer coisa de programação , olhe aí , o início de um jogo que comecei há alguns dias   

#include <windows.h>
#include <math.h>
#include <conio.h>
#include <tchar.h>
static int i;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow){
    static TCHAR szAppName[] = TEXT ("Connect") ;
    HWND janela ;
    MSG msg ;
    WNDCLASS wndclass ;
    wndclass.style = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc = WndProc ;
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hInstance = hInstance ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName = NULL ;
    wndclass.lpszClassName = szAppName ;
    if (!RegisterClass (&wndclass)){
        MessageBox (NULL, TEXT ("Program requires Windows NT!"),
        szAppName, MB_ICONERROR) ;
        return 0 ;
    }
    janela = CreateWindow (szAppName, TEXT ("Desenhar Uma Estrela"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT,
    NULL, NULL, hInstance, NULL) ;
    ShowWindow (janela, iCmdShow) ;
    UpdateWindow (janela) ;
    while (GetMessage (&msg, NULL, 0, 0)){
        TranslateMessage (&msg) ;
        DispatchMessage (&msg) ;
    }
    return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND janela, UINT message, WPARAM wParam, LPARAM lParam){
    HDC tela ;
    static TCHAR frase[] = _T("Tecle ESC Para Sair !");
    PAINTSTRUCT ps ;
    int j,x,y;
    float f;
    tela = GetDC (janela) ;
    switch (message){
        case WM_COMMAND:
            return 0;
        case WM_KEYDOWN:
            if (wParam == VK_ESCAPE){
                PostQuitMessage (0) ;
                return 0 ;
            }
        return 0;
        case WM_PAINT :
            tela = BeginPaint (janela, &ps) ;
            TextOut(tela, 650, 50, frase, _tcslen(frase));
            f = i*3.141615/180;
            x = (int)(cos(f)*200+300) ;
            y = (int)(sin(f)*200+250) ;
            MoveToEx(  tela,x,y,0) ;//posição de inicio da estrela
            for(j=0;j<5;j++){
                x = (int)(cos((i+ j*72+36)*3.141615/180)*100+300) ;
                y = (int)(sin((i+ j*72+36)*3.141615/180)*100+250) ;
                LineTo(tela,x , y);//vai para essas posições
                x = (int)(cos((i+(j+1)*72)*3.141615/180)*200+300) ;
                y = (int)(sin((i+(j+1)*72)*3.141615/180)*200+250) ;
                LineTo(tela,x , y);
            }
            x = (int)(sin(i*3.141615/180)*100+700) ;
            y = (int)(cos(i*3.141615/180)*100+250) ;
            MoveToEx(  tela,x, y,NULL) ;//posição de inicio do quadrado
            for(j=1;j<5;j++){
                x = (int)(sin((i+ j*90+00)*3.141615/180)*100+700) ;
                y = (int)(cos((i+ j*90+00)*3.141615/180)*100+250) ;
                LineTo(tela,x , y);//vai para essas posições
            }
            i++;
            if(i>360)i=0;
            Sleep(50);
            InvalidateRect (janela, NULL, TRUE) ;//limpa a tela
            EndPaint (janela, &ps) ;
            return 0 ;
        case WM_DESTROY:
            PostQuitMessage (0) ;
            return 0 ;
    }
    return DefWindowProc (janela, message, wParam, lParam) ;
}

para rodar esse código precisa criar um projeto ,  e se for no codeblocks , seria assim :

clique em file / new / project /Win32 GUI project e do lado esquerdo em surce / main e delete aquele código que já estará ali e coloque esse código no lugar do que estava lá .

  • Curtir 3
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, Joao_Bilu disse:

@devair1010 não consegui abrir de jeito nenhum, mais parece uma ótima ideia por envolver bastante coisa, você usa/usou algum material de base?(vídeo aula  ou livro)

Ele está usando funções da API do Windows e da famosa Conio. Um equivalente multiplataforma da Conio é a biblioteca Ncurses. Já a API do Windows é emulada em sistemas macOS e GNU/Linux pelo Wine, mas ambos seguem o padrão POSIX. Essa divisão é consequência da linguagem C ser enxuta: muitas funções que hoje em dia são comuns ficam delegadas ao Sistema Operacional, Gerenciador de Janelas, e outras bibliotecas auxiliares e nem sempre portáveis entre sistemas.


A minha recomendação é passar um pouco de tempo estudando Estrutura de Dados e reforçar os conhecimentos de C com o clássico http://c-faq.com/

Se quiser livros, há alguns online que são muito bons:

https://modernc.gforge.inria.fr/

https://publications.gbdirect.co.uk//c_book/

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

18 minutos atrás, Davi Silva Santos disse:

Ele está usando funções da API do Windows e da famosa Conio. Um equivalente multiplataforma da Conio é a biblioteca Ncurses

 

Já li isso outras vezes. Não há essa equivalência. conio é uma biblioteca dos anos '80 que era parte dos compiladores da Borland --- hoje Embarcadero --- para windows e tem um modesto alcance.

 

Eis os métodos de conio.h
image.png.b50fc592ded069f4f2496fe9b0551afe.png

 

é só isso e tem essa idade aí. Não vejo razão para usar isso desde os anos '90. 

 

Eu era um usuário de curses, no Unix, antes do Windows. E por algum tempo usei ncurses. Em relação a conio é outro animal. Não há essa equivalência. Você já escreveu algo com ncurses? Tem alguma referência dessa suposta "equivalência"? Será apenas porque curses tem uma função getch()? 

 

ncurses tem noção de janelas, de overlap entre janelas, painéis, guarda imagem da tela e das janelas e serve para muitos propósitos. Por exemplo, eu escrevi um editor hex com curses. E um sistema de menus.

 

curses é uma alternativa para uma interface de janelas em modo texto. E não havia interface gráfica em terminais de 24 linhas por 80 colunas, que era o normal na época. conio ficou popular quando saiu porque era uma maneira trivial de ler sem echo no windows, e acessar o buffer do teclado sem ter que ler o manual do Windows. No tempo em que existiam manuais das coisas.

 

 

 

 

adicionado 32 minutos depois

O modelo de programação de curses é o mesmo de SDL, GTK+, wxWidgets e Qt. Então é algo interessante para aprender hoje em dia, ainda mais com o interesse renovado nas aplicações de console nesses últimos tempos, com milhões de máquinas rodando aplicações passando do mundo real para a nuvem, no caminho inverso dos 80, quando elas saíram da "nuvem" dos mainframes para os "minicomputadores" e depois os PC.


Ao usar um modelo você se acostuma com os outros. 

  • Curtir 4
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Link para o comentário
Compartilhar em outros sites

@devair1010 Eu tinha visto isso de criar aplicativos de desktop usando a WinAPI por acidente há pouco tempo haha, achei muito interessante.

Esse site me deu uma base do que eu poderia começar a fazer, nele tem alguns dos exemplos mais básicos.

Vou dar uma lida nesse livro aí que mandou, vai me ajudar bastante :)

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Joao_Bilu    pesquisando  no google achei esse dois sites 


http://vulms.vu.edu.pk/Courses/CS410/Downloads/Charles Petzold - Programming Windows - 5th Ed.pdf

 

https://forum.zwame.pt/threads/tutorial-programar-para-windows.75878/


que me deram base para esse início de programa de um jogo .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu arrumei um emprego com alguns projetos que coloquei no bitbucket e github.

Coloquei todos no currículo e na entrevista eu fui perguntado várias vezes sobre cada projeto.

Inclusive, sobre meu nível de habilidade com C, C++ e Javascript.

Sugiro que você faça jogos, como disse ali o amigo, eles demonstram melhor que você conhece a linguagem e algoritmos.

 

No meu portfólio existem dois jogos, um de mais de 3K linhas e outro de 1200 linhas (um snake). E também o meu melhor projeto que é uma game engine feita em C++ com SDL2, tem mais de 10K linhas.

 

Enfim, segue umas ideias:

Você pode usar a lib sdl2 para fazer estes projetos, ela é multiplataforma.

1-fazer um jogo simples de plataforma estilo super mario bros com um boneco que anda e pula, jogo com menu simples clicável, passar fases, mapa de tiles, etc.

2-fazer um snake

3-fazer um jogo da velha com SDL2

4-fazer um jogo do labirinto, aqui você pode usar algum algoritmo de geração de labirintos, pesquise que você encontra na internet o algoritmos.

Pra fazer o de plataforma, talvez você sofra muito porque não é nada fácil fazer um, mas o desafio vale muito a pena em questão de conhecimentos.

 

Link para o comentário
Compartilhar em outros sites

Em 01/08/2020 às 21:22, devair1010 disse:

 

Muito embora quase tudo que está lá ainda seja válido, o livro de Charles Petzold deve ser visto com cuidado. Imagino que não vá ler um livro de mais de 1.200 páginas, mas entenda que ele foi escrito quando a maioria dos PC rodavam Windows 95. Windows NT era novidade, internet não era quase nada. Não havia DVD, mp3, Unicode estava começando e era muito diferente.coisas assim. É um livro de 1998.

 

Há muitos novos controles no Windows, a API cresceu de um modo inacreditável. Novas API surgiram e sumiram, coisas como MFC e dotNet.

 

Em 01/08/2020 às 22:44, Lucca Rodrigues disse:

Eu tinha visto isso de criar aplicativos de desktop usando a WinAPI por acidente há pouco tempo haha, achei muito interessante

 

É interessante. Mas ninguém usa isso há décadas. 

  • aplicativos para desktop praticamente se foram
  • quando são escritos raramente o são em C ou C++
  • quando são escritos nessa linguagem muitas vezes são para instrumentos e não para desktops de fato. Coisas como avionics, medicina, carros e eletrônica embarcada. E são escritos a partir de frameworks como Qt, wxWidgets, GTK+ ou SDL, Directx ou OpenGL.
  • Os jogos são um caso a parte :) mas tem os frameworks e game engines a parte também. 
  • nos últimos anos tem tido muito interesse em aplicativos ara desktop em modo texto, por causa da migracão dos desktop para a nuvem. Em geral software em torno de administração de servidores que estão migrando aos milhões para Azure, Google CLoud , Amazon e outros hosts. E não tem interface gráfica.
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!