Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

empezar en c

143 Respuestas
16 Usuarios
0 Reactions
365.4 K Visitas
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 19 años

Hola, quisiera que me recomendarais algun programa, gratuito si es posible, para compilar y programar en c, y saber si se puede hacer programas en c, que ademas de escribir texto en pantalla pueda manejar graficos, crear entorno grafico propio y similares (como los entornos graficos de un videojuego) y como se puede programar que se muestren imagenes en pantalla con c. Igualmente agradeceria cualquier referencia a manuales lo mas completos posibles sobre programacion en c, preferiblemente en castellano.

Gracias por cualquier ayuda que me podais ofrecer.

Responder
142 respuestas
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 19 años

Lo que hace el código que te paso es guardar en p la primera dirección del array m, y luego enseña cómo recoger datos de forma "normal" o utilizando los punteros

No creo que sea lo mismo un array de punteros a los miembros de un array, o a un array, normal que guarde los datos; que un array que guarde directamente los punteros a las direcciones de memoria, donde no existe modo normal ya que los miembros del array no son datos en si, sino que es la direccion de memoria reservada donde estan los datos con los que se quiera trabajar o guardar; no se si lo que yo intente hacer, al intentar crear un array con punteros directamente a la memoria reservada y su uso directo, se podra hacer, pero no creo yo que sea lo mismo un array de punteros a un array normal, que es el que guarda realmente los datos; que un array de punteros directos a la memoria donde guardar los datos.

Pero si no se puede hacer un array de punteros directos a la memoria reservada, pues pasare de esa prueba a intentar hacer algun programa que haga algo en concreto.

Responder
luison
Respuestas: 495
(@luison)
Reputable Member
Registrado: hace 17 años

juer macho! no te entiendo 😕

Mira, yo sólo te digo que partas de un ejemplo real que funciona. El código que usas tú parece inventado por tí. Has dicho que has leído un manual entero sobre C, pues ahí deberá de haber algún ejemplo de punteros no?
No sé, haz lo que quieras.

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 20 años

lacabra25, lo que no entiendo es qué quieres hacer con este código.

S2

Ranganok Schahzaman

Responder
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 19 años

Hola, he añadido a mi compilador la libreria SDL, para funciones multimedia, despues de haber echo un programa solo con texto.
Añadi la libreria SDL para empezar a trabajar con librerias y con graficos de mano de el manual "programacion de videojuegos con SDL", descomprimi el zip de la libreria devlop (o similar, ahora no me sale el nombre, pero se que es la que el manual dice que es la que hay que tener en el compilador), añadi al compilador en directorios de librerias el directorio de el SDL descomprimido lib, y en la de includes en su correspondiente seccion del compilador.
Hasta aqui todo bien, el problema es que cuando copio y pego el primer ejemplo de SDL de el manual, el compilador me da unos cuantos errores que pense que seria por como en el ejemplo, el include de sdl en vez de ser <sdl> era "sdl.h", y lo cambia a <sdl> para provar a ver si era eso, pero me dio los mismos errores:

[Linker error] undefined reference to `SDL_Init'
[Linker error] undefined reference to `SDL_GetError'
[Linker error] undefined reference to `SDL_Quit'
[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status

Y estas son los dos intentos por solucionarlo, ambos en vano:
#include <stdlib>
#include <SDL>

int main(){
if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO)< 0) {
printf("No se puede iniciar SDL: %sn",SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
}

#include <stdlib>
#include "SDL.h"

int main(){
if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO)< 0) {
printf("No se puede iniciar SDL: %sn",SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
return 0 ;
}

Y este es el codigo original del manual:
#include <stdlib>
#include "SDL.h"

int main(){
if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO)< 0) {
printf("No se puede iniciar SDL: %sn",SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
}

No se porque no funciona ninguno de los codigos, y no creo que este mal incluida, porque segui los pasos del manual; incorpore cada directorio, el de las librerias y el de includes, en las opciones del compilador.

Os pego tambien el codigo del primer programa completo que consigo hacer, ya lo he compilado y va bien aunque sea sencillo al ser solo texto y facil (en menos de 5 minutos se puede acabar el juego):
#include <stdio>
#include <string>
#include <stdlib>
#define T_OBJM 5
#define T_DES 250
#define T_NOM 50
#define T_EST 100
#define BOMBONES 1
#define ESPADA 2
#define LLAVE 3
int asignalugar(int min, int max){
int al = rand() ;
while(al <min> max){
if(al > max){
al -= rand() ;
}
if(al <min> 0){
printf(" norte ");
}
if(lugares[personajes[1].estancia].sur > 0){
printf(" sur ");
}
if(lugares[personajes[1].estancia].este > 0){
printf(" este ");
}
if(lugares[personajes[1].estancia].oeste > 0){
printf(" oeste ");
}
ej = 3 ;
while(ej == 3){
printf("nn> ");
scanf("%s %s", verbo, nombre);
cv = strcmp(verbo, "salir");
cn = strcmp(nombre, "juego");
if(0 == cv && 0 == cn){
ej = 0 ;
}
cv = strcmp(verbo, "cerrar");
cn = strcmp(nombre, "juego");
if(0 == cv && 0 == cn){
ej = 0 ;
}
cv = strcmp(verbo, "mostrar");
cn = strcmp(nombre, "ayuda");
if(0 == cv && 0 == cn){
printf("nnLas ordenes en el juego se dan usando un verbo en infinitivo y un sustantivo, como por ejemplo "ir norte" que aria que el personaje, Felix, se dirija al norte, consiguiendo moverte, o "cojer bombones" que aria que el personaje cojiese los bombones.nLa finalidad del juego es conseguir una cita con la vecina, Ana, y superar los contratiempos que surjan.");
ej = 2 ;
}
cn = strcmp(nombre, "version");
if(0 == cv && 0 == cn){
printf("nnVersion del juego: 0.0nAutor: Jesús Herández Gormazn www.elrinconjhg.ya.st");
ej = 2 ;
}
cn = strcmp(nombre, "mochila");
if(0 == cv && 0 == cn){
printf("nn");
if(personajes[1].mochila.obj[BOMBONES] != BOMBONES && personajes[1].mochila.obj[ESPADA] != ESPADA && personajes[1].mochila.obj[LLAVE] != LLAVE){
printf("No tienes ningun objeto.");
}
else{
printf("Tienes los siguientes objetos:");
if(personajes[1].mochila.obj[BOMBONES] == BOMBONES){
printf("n - Bombones con forma de corazon.");
}
if(personajes[1].mochila.obj[LLAVE] == LLAVE){
printf("n - Llave dorada vieja.");
}
if(personajes[1].mochila.obj[ESPADA] == ESPADA){
printf("n - Espada afilada de combate.");
}
}
ej = 2 ;
}
cn = strcmp(nombre, "inventario");
if(0 == cv && 0 == cn){
printf("nn");
if(personajes[1].mochila.obj[BOMBONES] != BOMBONES && personajes[1].mochila.obj[ESPADA] != ESPADA && personajes[1].mochila.obj[LLAVE] != LLAVE){
printf("No tienes ningun objeto.");
}
else{
printf("Tienes los siguientes objetos:");
if(personajes[1].mochila.obj[BOMBONES] == BOMBONES){
printf("n - Bombones con forma de corazon.");
}
if(personajes[1].mochila.obj[LLAVE] == LLAVE){
printf("n - Llave dorada vieja.");
}
if(personajes[1].mochila.obj[ESPADA] == ESPADA){
printf("n - Espada afilada de combate.");
}
}
ej = 2 ;
}
cn = strcmp(nombre, "objetos");
if(0 == cv && 0 == cn){
printf("nn");
if(personajes[1].mochila.obj[BOMBONES] != BOMBONES && personajes[1].mochila.obj[ESPADA] != ESPADA && personajes[1].mochila.obj[LLAVE] != LLAVE){
printf("No tienes ningun objeto.");
}
else{
printf("Tienes los siguientes objetos:");
if(personajes[1].mochila.obj[BOMBONES] == BOMBONES){
printf("n - Bombones con forma de corazon.");
}
if(personajes[1].mochila.obj[LLAVE] == LLAVE){
printf("n - Llave dorada vieja.");
}
if(personajes[1].mochila.obj[ESPADA] == ESPADA){
printf("n - Espada afilada de combate.");
}
}
ej = 2 ;
}
cv = strcmp(verbo, "cojer");
cn = strcmp(nombre, "bombones");
if(0 == cv && 0 == cn && personajes[1].estancia == objetos[BOMBONES].lugar){
personajes[1].mochila.obj[BOMBONES] = BOMBONES ;
objetos[BOMBONES].lugar = 0 ;
printf("nHas cojido los bombones.");
ej = 2 ;
}
cn = strcmp(nombre, "espada");
if(0 == cv && 0 == cn && personajes[1].estancia == objetos[ESPADA].lugar){
personajes[1].mochila.obj[ESPADA] = ESPADA ;
objetos[ESPADA].lugar = 0 ;
printf("nHas cojido una espada.");
ej = 2 ;
}
cn = strcmp(nombre, "llave");
if(0 == cv && 0 == cn && personajes[1].estancia == objetos[LLAVE].lugar){
personajes[1].mochila.obj[LLAVE] = LLAVE ;
objetos[LLAVE].lugar = 0 ;
printf("nHas cojido una llave dorada.");
ej = 2 ;
}
cv = strcmp(verbo, "dejar");
cn = strcmp(nombre, "bombones");
if(0 == cv && 0 == cn && personajes[1].mochila.obj[BOMBONES] == BOMBONES){
personajes[1].mochila.obj[BOMBONES] = 0 ;
objetos[BOMBONES].lugar = personajes[1].estancia ;
printf("nHas dejado los bombones.");
ej = 2 ;
}
cn = strcmp(nombre, "espada");
if(0 == cv && 0 == cn && personajes[1].mochila.obj[ESPADA] == ESPADA){
personajes[1].mochila.obj[ESPADA] = 0 ;
objetos[ESPADA].lugar = personajes[1].estancia ;
printf("nHas dejado una espada.");
ej = 2 ;
}
cn = strcmp(nombre, "llave");
if(0 == cv && 0 == cn && personajes[1].mochila.obj[LLAVE] == LLAVE){
personajes[1].mochila.obj[LLAVE] = 0 ;
objetos[LLAVE].lugar = personajes[1].estancia ;
printf("nHas dejado una llave dorada.");
ej = 2 ;
}
cv = strcmp(verbo, "ir");
cn = strcmp(nombre, "norte");
if(0 == cv && 0 == cn && lugares[personajes[1].estancia].norte > 0){
personajes[1].estancia = lugares[personajes[1].estancia].norte ;
ej = 2 ;
}
cn = strcmp(nombre, "sur");
if(0 == cv && 0 == cn && lugares[personajes[1].estancia].sur > 0){
personajes[1].estancia = lugares[personajes[1].estancia].sur ;
ej = 2 ;
}
cn = strcmp(nombre, "este");
if(0 == cv && 0 == cn && lugares[personajes[1].estancia].este > 0){
personajes[1].estancia = lugares[personajes[1].estancia].este ;
ej = 2 ;
}
cn = strcmp(nombre, "oeste");
if(0 == cv && 0 == cn && lugares[personajes[1].estancia].oeste > 0){
personajes[1].estancia = lugares[personajes[1].estancia].oeste ;
ej = 2 ;
}
cv = strcmp(verbo, "dar");
cn = strcmp(nombre, "bombones");
if(0 == cv && 0 == cn && personajes[1].estancia == personajes[2].estancia && personajes[1].mochila.obj[BOMBONES] == BOMBONES){
personajes[1].mochila.obj[BOMBONES] = 0 ;
personajes[2].mochila.obj[BOMBONES] = BOMBONES ;
personajes[2].estado = 2 ;
printf("nAna acepta tus bombones y se sonroja mirandote dulcemente.");
ej = 2 ;
}
cv = strcmp(verbo, "pedir");
cn = strcmp(nombre, "cita");
if(0 == cv && 0 == cn && personajes[1].estancia == personajes[2].estancia){
if(personajes[2].mochila.obj[BOMBONES] == BOMBONES){
printf("Ana acepta tener una cita contigo sonrojandose; te dice que no llegues tarde, que te espera en los jardines.");
personajes[2].estancia = 8 ;
}
else{
printf("Ana no acepta tu propuesta para una cita, dice que tiene que pensarlo primero.");
}
ej = 2 ;
}
cv = strcmp(verbo, "usar");
cn = strcmp(nombre, "espada");
if(0 == cv && 0 == cn && personajes[1].estancia == personajes[2].estancia && personajes[1].mochila.obj[ESPADA] == ESPADA){
printf("nHaciendo uso de la espada, consigues liberar a Ana de su secuestrador, la cual se ella a tus brazos y te abraza.");
ej = 1 ;
}
cn = strcmp(nombre, "llave");
if(0 == cv && 0 == cn && personajes[1].estancia == 10){
personajes[1].estancia = 13 ;
ej = 2 ;
}
cn = strcmp(nombre, "bombones");
if(0 == cv && 0 == cn && personajes[1].estancia == personajes[2].estancia && personajes[1].mochila.obj[BOMBONES] == BOMBONES){
personajes[1].mochila.obj[BOMBONES] = 0 ;
personajes[2].mochila.obj[BOMBONES] = BOMBONES ;
personajes[2].estado = 2 ;
printf("nAna acepta tus bombones y se sonrojamirandote dulcemente.");
ej = 2 ;
}
if(ej == 3){
printf("nLa orden no es valida.");
}
}
if(personajes[1].estancia == 13 && personajes[1].mochila.obj[LLAVE] != LLAVE){
printf("nLa puerta de esta habitacion esta cerrada y no se puede abrir.");
personajes[1].estancia = 10 ;
}
if(personajes[1].estancia == 8 && personajes[2].estancia == 8 && personajes[3].estancia == 8){
printf("nUn tranquilo y agradable jardin, Ana y tu; has conseguido tu primera cita y en estos");
printf(" momentos el tiempo parece que se hubiera detenido.nDerrepente un hombre vestido de");
printf(" negro de pies a cabeza se avalancha sobre vosotros, intenta llevarse a Ana y aunque");
printf(" oponeis Ana y tu resistencia, de un tiron te arrebata a Ana de tus manos.nSale corr");
printf("iendo en la direccion de la vieja mansion practicamente en ruinas, corres tras el pe");
printf("ro no llegas a alcanzarlo, la ira y la rabia se apoderan de ti en ese momento en el ");
printf("que no puedes dejar de pensar y sufrir.nEstas decidido de recuperar a Ana aunque te");
printf(" valla la vida en ello, estas dispuesto a encontrar a Ana y su secuestrador en la ru");
printf("inosa mansion y rescatarla.n");
personajes[3].estancia = 14 ;
personajes[2].estancia = 14 ;
personajes[2].estado = 3 ;
}
}
while(ej > 1);
if(ej == 1){
printf("nn FIN");
}
else{
printf("nnnHas elegido cerrar el juego.");
}
getch();
return 0 ;
}

Seguramente os parecera algo sencillo, pero para ser el primero a mi me parece bien, cuando lo acabe esta mañana se me alegro el dia por muy simple que sea.

Responder
luisj
Respuestas: 235
(@luisj)
Estimable Member
Registrado: hace 18 años

Es porque no has linkado con SDL. De todas formas no te voy ayudar con programación gráfica mientras no nos hagas caso y hagas las cosas como tiene que ser: primero aprende a programar y luego ponte con gráficos.

No se si los otros te querrán ayudar, pero te hemos dicho varias veces que primero aprendas a programar y luego pases a "hacerlo bonito".

Si quieres ayuda para aprender a programar aquí estoy, si quieres te doy mi correo, pero para que hagas caso omiso de lo que te dice la gente del foro, no.

Responder
Página 14 / 29
Compartir: