Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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.
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.
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.
lacabra25, lo que no entiendo es qué quieres hacer con este código.
S2
Ranganok Schahzaman
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.
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.