C/Visual C - Ayuda en proyecto escolar en C con Linux

 
Vista:
sin imagen de perfil

Ayuda en proyecto escolar en C con Linux

Publicado por Daniel (1 intervención) el 05/10/2016 23:00:31
Hola soy nuevo en el foro y nuevo en la programación.
Como proyecto de fin de semestre tengo que hacer un juego de carreras en C usando Linux y que sea preferiblemente en la terminal en lugar de usar un SDL(aunque si tenga tiempo tal vez intentarlo).
El juego es un simple juego en 2D que se parece al mítico juego de SEGA; Outrun, es decir un auto que va en la carretera de 3 filas y esquiva autos, puede desacelerar o acelerar y cuando toca otro auto se termina el juego.
Supongo que muchos de nosotros jugamos juegos similares así que no entrare mucho en detalle sobre el juego.

Pasando a la programación, pienso hacer un archivo de texto en donde dibuje por medio de códigos ASCII la carretera y usar los emoticones de Twitter para los autos y otros objetos(aunque los autos estarán en el código).
Para desplazar el carácter pensaba usar una matriz dinámica de la talla de la ruta llena de ceros y por medio de las flechas de desplazamiento mover un carácter y usar una especie de intercambio entre la casilla del lado apretado y de la casilla del cursor.
Espero haber sido lo más claro posible, si alguien entendió adjunto la carpeta conteniendo 4 archivos, c.txt que es la matriz de ceros con un 3 abajo para simular el auto, voiture.c que toma este archivo txt y permuta el 3 hacia la izquierda creando una matriz dinámica, key.c que es una función que abre una ventana y permite escribir sin tener la línea de comando de la terminal(lo encontré en internet ya que usan la librería ncurses que facilita la captura del teclado y no necesito tener la línea de la terminal) y toto.c que establece una estructura que es el auto y usa supuestamente una función que captura y mueve el cursor(dado por mi profesor pero no sé muy bien como implementarlo) .

Los códigos no son largos y me gustaría ver si alguien con tiempo de sobra y que domine el C más que un principiante pueda darle un ojo a mis programas y me pueda decir que hay que corregir rápido y como implementarlas para tener el resultado deseado.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dionicio
Val: 101
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Ayuda en proyecto escolar en C con Linux

Publicado por Dionicio (22 intervenciones) el 06/10/2016 00:41:48
Hola Daniel bienvenido al foro! No creo poder ayudarte, pero te diré algunas cosas que podrían ser de tu utilidad:

1. Primero investiga un poco de programación modular en C y librerías propias, consiste en separar tu código de manera eficiente y poder usar una parte de X archivo en otro archivo que necesites. Vi que dichos archivos no estaban enlazados, cuando investigues lo sabrás.

2. La librería Ncurses es muy interesante, hay un manual Aquí una página(inglés) que te será de utilidad, la librería te facilitará muchas cosas unas de ellas es el hecho de cargar una matriz no lo vas a necesitar ya que cuando estas en el modo ncurses puedes mover el cursor de un lado a otro y crear ventanas. Espero haberme explicado bien, ya que yo estoy aprendiendo a usar esta librería.

Te adjunto un código que hice, espero te sea de ayuda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <ncurses.h>
 
WINDOW *create_newwin(int alto, int ancho, int iniciary, int iniciarx);//Crea una ventana
void destroy_win(WINDOW *ventana_local);//Destrye una ventana
 
int main(int argc, char *argv[]){
 
	WINDOW *mi_ventana;
	int iniciarx, iniciary, ancho, alto;
	int ch;
 
	initscr();
	cbreak();
 
	keypad(stdscr, TRUE); //Ayuda usar las teclas F1, F2, Arriba...
 
	alto = 3;
	ancho = 10;
 
	iniciary = (LINES - alto)/2;
	iniciarx = (COLS - ancho)/2;
	printw("Presiona F2 para salir");
 
	refresh();
 
	mi_ventana = create_newwin(alto,ancho,iniciary,iniciarx);
 
	while((ch = getch()) != KEY_F(2))
	{
		switch(ch)
		{
			case KEY_LEFT:
			{
				destroy_win(mi_ventana);//Destruye la ventana para crear otra venta en la posicion
				mi_ventana = create_newwin(alto, ancho, iniciary, --iniciarx);
				break;
			}
 
			case KEY_RIGHT:
			{
				destroy_win(mi_ventana);
				mi_ventana = create_newwin(alto, ancho, iniciary, ++iniciarx);
				break;
			}
 
			case KEY_UP:
			{
				destroy_win(mi_ventana);
				mi_ventana = create_newwin(alto, ancho, --iniciary, iniciarx);
				break;
			}
 
			case KEY_DOWN:
			{
				destroy_win(mi_ventana);
				mi_ventana = create_newwin(alto, ancho, ++iniciary, iniciarx);
				break;
			}
		}
	}
 
	endwin();
 
 
	return 0;
}
 
WINDOW *create_newwin(int alto, int ancho, int iniciary, int iniciarx)
{
	WINDOW *ventana_local;
 
	ventana_local = newwin(alto, ancho, iniciary,iniciarx);
	box(ventana_local,0,0);
 
	mvwprintw(ventana_local,(alto/2),((ancho/2)-2),"Hola!");
 
 
	wrefresh(ventana_local); /*Muestra la ventana*/
 
	return ventana_local;
}
 
void destroy_win(WINDOW *ventana_local)
{
	wborder(ventana_local,' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
	/*Los parametros pasados a la función wborder() son
	 * 1.ventana = la ventana en la cual se encuentra
	 * 2.li = Carácter usado para el lado izquierdo de la ventana
	 * 3.ld = Carácter usado para el lado derecho de la ventana
	 * 4.la = Carácter usado para el lado de arriba de la ventana
	 * 5.lb = Carácter usado para el lado de abajo de la ventana
	 * 6.ti = Carácter usado para la esquina izquierda de la ventana -arriba
	 * 7.td = Carácter usado para la esquina derecha de la ventana -arriba
	 * 8.bi = Carácter usado para la esquina izquieda de la ventana -abajo
	 * 9.bd = Carácter usado para la esquina derecha de la ventana -abajo
	 * */
	wrefresh(ventana_local);
	delwin(ventana_local);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar