Sugestões para melhoria de código [RESOLVIDO]

1. Sugestões para melhoria de código [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/09/2018 - 13:01h

Olá, andei escrevendo um simples programa usando ncurses (coisa de iniciante) e gostaria de receber opiniões de vocês em relação ao código, como, por exemplo, algumas sugestões para trabalhar corretamente com ncurses ou dicas de boas praticas de programação.

Segue o código:

#include <string.h>
#include <ncurses.h>
#include <stdbool.h>

void delete_window(WINDOW *win){

wborder(win, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
wrefresh(win);

delwin(win);
}

void draw_dialog(char *menssage, int height, int width,
int posi_y, int posi_x, int dialogColor){

WINDOW *dialogWin=newwin(height, width, posi_y, posi_x);

init_pair(5, COLOR_WHITE, dialogColor);

wbkgd(dialogWin, COLOR_PAIR(5));

box(dialogWin, 0, 0);
wrefresh(dialogWin);

wattron(dialogWin, A_BOLD);
mvwprintw(dialogWin, posi_y-4, posi_x+4, menssage);
wattroff(dialogWin, A_BOLD);

wattron(dialogWin, A_BOLD | A_REVERSE);
mvwprintw(dialogWin, posi_y, posi_x+6, "[OK]");
wattron(dialogWin, A_BOLD | A_REVERSE);

wrefresh(dialogWin);

getch();

delete_window(dialogWin);
}

WINDOW *draw_main_window(int height, int width,
int posi_y, int posi_x){

WINDOW *win=newwin(height, width, posi_y, posi_x);

init_pair(1, COLOR_BLUE, COLOR_BLUE);
init_pair(2, COLOR_RED, COLOR_WHITE);

bkgd(COLOR_PAIR(1));
refresh();

wbkgd(win, COLOR_PAIR(2));

box(win, 0, 0);
wrefresh(win);

return win;
}

void draw_menu(WINDOW *win, int posi_y, int posi_x){

init_pair(3, COLOR_WHITE, COLOR_BLACK);
init_pair(4, COLOR_RED, COLOR_WHITE);

wattron(win, COLOR_PAIR(4) | A_BOLD);
mvwprintw(win, posi_y-4, posi_x-7, "Are you a synthetic soldier?");
wattroff(win, COLOR_PAIR(4) | A_BOLD);

keypad(win, true);
curs_set(0);

char *choices[2]={"[YES]", "[NO]"};
int highlights=0;
int choice;

while(true){

for(unsigned int i=0; i<2; i++){

if(i==highlights){

wattron(win, COLOR_PAIR(3));
}

mvwprintw(win, posi_y, (posi_x+i*8),
choices[i]);

wattroff(win, COLOR_PAIR(1));
}

choice=wgetch(win);

switch(choice){

case KEY_LEFT:

highlights--;

if(highlights==-1){

highlights=0;
}

break;

case KEY_RIGHT:

highlights++;

if(highlights==2){

highlights=1;
}

break;

default:

break;
}

if(choice==10 && strcmp(choices[highlights], "[NO]")==0){

delete_window(win);

draw_dialog("FOCK YOU!", 10, 50,
posi_y, posi_x-1, COLOR_RED);

break;

}else if(choice==10 && strcmp(choices[highlights], "[YES]")==0){

delete_window(win);

draw_dialog(" YEAP! ", 10, 50,
posi_y, posi_x-1, COLOR_BLACK);

break;
}
}
}

int main(void){

initscr();
start_color();

int screen_height, screen_width;
getmaxyx(stdscr, screen_height, screen_width);

WINDOW *win=draw_main_window(10, 50,
(screen_height/2)-5,
(screen_width/2)-24);

draw_menu(win, (screen_height/2)-5,
(screen_width/2)-23);

endwin();

return 0;
}




  


2. MELHOR RESPOSTA

???
gokernel

(usa Linux Mint)

Enviado em 23/09/2018 - 14:18h

Olá Cara !

Bom, não conheço o NCurses pos isso vou deixar uma opinião pessoal sobre um "modelo" de organização de código:

É bom sempre ter um template para usar em novos projetos ... e não começar do zero( texto em branco ).

Minha sugestão seria algo baseado nisto:

//-------------------------------------------------------------------
//
// DESCRICAO:
// Um simples C modelo ... bla, bla, bla
// DETALHE: sem uma descricao fica dificil de saber o que eh,
// a medida que se vai criando muitos arquivos.
//
// ARQUIVO:
// modelo.c
//
// COMPILE:
// gcc modelo.c -o modelo -O2 -Wall
//
//-------------------------------------------------------------------
//
#include <stdio.h>

//-----------------------------------------------
//--------------- DEFINE / ENUM ---------------
//-----------------------------------------------
//
// todos os defines e enum, apartir daqui ... TODO EM CAIXA ALTA
//
#define STR_VALUE_SIZE 12345

enum {
CASA = 1,
COMIDA,
ROUPA_LAVADA
};

//-----------------------------------------------
//------------------- STRUCT ------------------
//-----------------------------------------------
//
// todos os typos definidos aqui ... para dar uma visao completa das estruturas.
typedef struct TCasa TCasa;
typedef struct TPos TPos; // detalhe: primeira e segunda letra em "CAIXA ALTA"

struct TCasa {
int x;
int y;
int z;
};
struct TPos {
int x;
int y;
int z;
};

//-----------------------------------------------
//----------------- PROTOTYPES ----------------
//-----------------------------------------------
//
void funcao_alguma_coisa (int value); // !!! se necessario !!!


//-----------------------------------------------
//------------------ VARIABLES ----------------
//-----------------------------------------------
//
int valor; // global
int panela; // global

static int
erro,
quit,
casa
;

static char
*str,
array [100]
;

//
// todas as funcoes a partir daqui ...
//

void funcao_alguma_coisa (int value) {

// bla, bla, bla

}// funcao_alguma_coisa ()

void nome_de_funcao_modelo_preferencial (void) {

// esse fica mais legivel:
// DETALHES:
//
// 01: Lembre-se que desenvolvedores depois dos 40 anos comeca a embacar a visao.
// 02: O cerebro processa esse nome mais rapido ... "evitando fadiga".

}// nome_de_funcao_modelo_preferencial ()

void NomeDeFuncaoModeloNaoPreferencial (void) {
//
// acho que deve-se evitar esse modelo ... pelos motivos acima .
//
}// NomeDeFuncaoModeloNaoPreferencial ()


int main (int argc, char **argv) {

return 0;
}



Um modelo de um: include.h

#ifndef _MODELO_H_
#define _MODELO_H_


// includes aqui: ...
#include <stdio.h>


#ifdef __cplusplus
extern "C" {
#endif

// tudo aqui: ...

#ifdef __cplusplus
}
#endif
#endif // ! _MODELO_H_



OBS: Esses comentários no final de cada função, indico também colocar em finais de grandes blocos de códigos ... acho isso importante quando se quer ler o código no celular(minha preferencia) ou em um editor de texto bem básico ...

E vou deixar um comentário de um colega, que concordo com ele ... ele escreveu:
---------------------------------------------------------
"Aprende-se a programar, programando !!!"
---------------------------------------------------------

Baseado neste comentário acima desse colega, com o tempo percebe-se isso.

Acho que é isso.




3. Re: Sugestões para melhoria de código [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/09/2018 - 13:06h

Sei que já está marcado como resolvido, mas mesmo assim vou dar uma única sugestão que não consegui parar para escrever antes, e que tem mais a ver com o conteúdo do programa em questão do que com aspectos gerais.

Eu imagino que você possa definir seus pares de cores uma vez só, no início do programa, em lugar de redefinir os mesmos pares com os mesmos valores a cada vez que uma função que desenha conteúdo na tela é chamada.


4. Re: Sugestões para melhoria de código [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/09/2018 - 23:13h

paulo1205 escreveu:

Sei que já está marcado como resolvido, mas mesmo assim vou dar uma única sugestão que não consegui parar para escrever antes, e que tem mais a ver com o conteúdo do programa em questão do que com aspectos gerais.

Eu imagino que você possa definir seus pares de cores uma vez só, no início do programa, em lugar de redefinir os mesmos pares com os mesmos valores a cada vez que uma função que desenha conteúdo na tela é chamada.


Obrigado pela sugestão Paulo!
Irei aplicar essa ideia em um novo projeto meu aqui :)








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts