Como han dicho algunos compañeros, primero debes decidir en que lenguaje vas a programarlo.
Si quieres algo sencillo y rápido usa VB o Java o parecidos. Si quieres algo más elaborado escoge C, junto a una buena librería para GUI.
Otra opción que creo que nadie ha comentado es el uso de C + OpenGL / Direct3D. Si vas a hacerlo solo para Windows la implementación de una ventana en D3D (Direct3D) es muy fácil, y mostrar textos y gráficos también lo es. (Y lo mismo para OpenGL si usas GLU)
El único problema que te podría presentar es si quieres usar controles (tipo campos de texto). D3DX lleva alguno, pero son un poco rollo de implementar.
No pretendo hacer spam ni mucho menos, pero en mi foro (verás el link en mi perfil/sig) tengo un tutorial en el qual se hace desde 0 un ahorcado en C, sin uso de gráfica ni nada, solo consola de comandos. Quizás te vaya bien para coger ideas sobre la estructuración de tu juego.
También, si al final te decides por D3D, tengo una librería propia (de hecho de momento solo son archivos de código, no libreria) en C++ para D3D9 que incluyen todos los controles (textbox, checkbox, label, button, etc.).
Echale una ojeada si quieres.
Puestos a comentar, la idea de rintin de hacerlo a base de PHP es muy buena. Conseguirás muy buenos resultados en muy poco tiempo, además de la opción de usar bases de datos MySQL para guardar las preguntas y respuestas. Y podrías hacer una buena interfaz en cuestión de segundos si te manejas bien en CSS.
Lo que viene ahora ya es más paranoia, así que quizás te lo quieras saltar. Y te aviso que la paranoia es grande grande xd
Mira, otra forma de hacerlo, en C, aunque es un poco más complicada y no muy convencional, eso sí, es muy práctica, sería mediante el uso de structs y punteros de memoria.
Imaginate que guardas en un archivo .txt en el siguiente formato:
int: posibles respuestas
int: respuesta correcta
char*: cadena
Podrías definir un par de estructuras de la siguiente forma:
struct cabecera{
int respuestas;
int correcta;
};
struct pregunta{
cabecera cb;
char *pregunta;
char *respuesta[4]; //Asumiend un máximo de 4 respuestas posibles
};
//Código
//Lees el archivo por completo:
FILE *fp = fopen("archivo", "rb"); //Abrimos en modo binario!
fseek(0, SEEK_END);
int size = ftell(fp);
rewind(fp);
char *buffer = (char*)malloc(size);
memset(buffer, 0, size); //Se podría no poner esta linea
fread(buffer, 1, size, fp);
//Leemos preguntas respuestas:
while(buffer){
pregunta *pg = (pregunta*)buffer;
//Seguramente fallaría al asignar las cadenas de texto, debido a que son punteros de los cuales no se sabe el tamaño, en cuyo caso haríamos:
/* buffer += sizeof(cb);
pg->pregunta = (char*)buffer;
buffer += strlen(pg->pregunta);
pg->respuesta[0] = (char*)buffer;
buffer += strlen(pg->respuesta[0]);
hasta resp[3], y no usando el código de a continuación
*/
buffer += sizeof(cb);
buffer += strlen(pg->pregunta);
buffer += strlen(pg->respuesta[0]);
buffer += strlen(pg->respuesta[1]);
buffer += strlen(pg->respuesta[2]);
buffer += strlen(pg->respuesta[3]);
}
/* No está probado ni nada, pero a nivel teórico es perfectamente posible. Ten en cuenta que
este sistema es lo mismo que usar una base de datos.
Hay una cosa que no estoy seguro, depende de como guardes las cadenas de texto en el archivo binario sería necesario que en las "buffer += strlen(...)" le añadieras un " + 1"
"buffer += strlen(pg->respuesta[2]) + 1;"
Luego puedes ir guardando estas preguntas en un vector de la struct pregunta o lo que sea.