CODIGO FUENTE /* * Juego hecho en C# con Visual Studio .NET 2003 * Ejemplo pequeño juego de aventura grafica en modo texto * Corre bajo consola (DOS). * Por Dark-N ( www.nekein.com/tyh ) - Julio 2006 * * Codigo Fuente en C++ usado de base es del libro * "Programacion de Videojuegos con SDL", y fue convertida a C#. * * UPDATE1: Se modifica fuente para que se muestre siempre el inventario y las acciones */ //Archivo: Consola.cs using System; using System.Collections; //Para objeto ArrayList usado en inventario namespace ejConsola { /// <summary> /// Summary description for Class1. /// </summary> /// // Estructura de una habitacion. Habitaciones 1-9 public struct habitacion { public int norte, sur, este, oeste; public string desc; public habitacion(string d, int n, int s, int e, int o) { desc = d; //descripción de la habitación norte = n; //que número de habitacion si vas al norte sur = s; //que habitación esta al sur este = e; //que habitación esta al este oeste = o; //que habitación esta al oeste } } // Estructuras de datos para los objetos. Objetos 1-4. public struct objeto { public int estado, hab, lotengo; // Estado del objeto public string desc1, desc2, nomb; // Descripción para estado 1 public objeto (int est, string des1, string des2, int habit, int tengo, string nombre) { estado = est; // Estado del objeto desc1 = des1; // Descripción para estado 1 desc2 = des2; // Descripción para estado 2 hab = habit; // Habitación en la que se encuentra lotengo = tengo; // Indica si tengo este objeto en mi inventario nomb = nombre; // Nombre del objeto (usado para inventario) } } class Consola { /// <summary> /// The main entry point for the application. /// </summary> /// public static int habitacionActual; enum var {HUESO=1, LLAVE, ESCALERA, PERRO}; //En C++ teniamos estos Define //#define HUESO 1 //#define LLAVE 2 //#define ESCALERA 3 //#define PERRO 4 [STAThread] static void Main(string[] args) { habitacion []habitaciones = new habitacion[10]; objeto []objetos = new objeto[5]; habitacionActual = 1; string verbo = ""; string accion_obj = ""; int accion = 0; int done = 0; string inventario = ""; ArrayList items = new ArrayList(); /* Estructura de la Casa 1. Inicio 2. 3. nada hueso llave sobre lampara 4. 5. 6. nada nada nada 7. 8. entrada/salida casa 9. nada nada perro, escalera */ habitaciones[0] = new habitacion("", 0, 0, 0, 0); habitaciones[1] = new habitacion("Estas en una pequeña habitación pintada de blanco. Junto a ti puedes ver una cama y una mesita de noche.", 0, 4, 0, 0); habitaciones[2] = new habitacion("Estas en una habitación pintada de verde. Junto a ti puedes ver una cama y una mesita de noche.", 0, 5, 0, 0); habitaciones[3] = new habitacion("Estas en el salón de la casa. Puedes ver una gran mesa rodeada de sillas.", 0, 6, 0, 0); habitaciones[4] = new habitacion("Estas en el pasillo.", 1, 7, 5, 0); habitaciones[5] = new habitacion("Estas en el pasillo.", 2, 8, 6, 4); habitaciones[6] = new habitacion("Estas en el pasillo.", 3, 9, 0, 5); habitaciones[7] = new habitacion("Estas en el típico servicio, con sus típicas piezas.", 4, 0, 0, 0); habitaciones[8] = new habitacion("Estas en la entrada de la casa. Puedes ver la puerta cerrada.", 5, 0, 0, 0); habitaciones[9] = new habitacion("Estas en la cocina.", 6, 0, 0, 0); objetos[0] = new objeto(0, "", "", 0, 0, ""); objetos[(int) var.HUESO] = new objeto(1, "un hueso", "un hueso", 2, 0, "Hueso"); objetos[(int) var.LLAVE] = new objeto(1, "una llave sobre la lampara", "una llave sobre la lampara", 3, 0, "LLave"); objetos[(int) var.ESCALERA] = new objeto(1, "una escalera", "una escalera", 9, 0, "Escalera"); objetos[(int) var.PERRO] = new objeto(1, "un perro rabioso", "un perro comiéndose un hueso", 9, 0, "Perro"); Console.Write ("Ejemplo Juego modo Texto hecho en C#"); Console.Write("\n------------------------------------"); Console.Write("\nBasado en Ejemplo de Libro Programacion de Videojuegos con SDL\n"); //game loop while (done == 0) { ///////// Mostramos información de la habitación //////////// Console.WriteLine("\n"+ habitaciones[habitacionActual].desc); // Mostramos si hay algún objeto for (int i=1 ; i< objetos.Length ; i++) { if (objetos[i].hab == habitacionActual) { Console.Write("\nTambien puedes ver "); // mostramos la descripción del objeto según su estado if (objetos[i].estado == 1) { Console.Write(objetos[i].desc1); } else { Console.Write(objetos[i].desc2); } } } // Mostramos las posibles salidas Console.Write("\nPuedes ir dirección: "); if (habitaciones[habitacionActual].norte != 0) Console.Write ("Norte "); if (habitaciones[habitacionActual].sur != 0) Console.Write ("Sur "); if (habitaciones[habitacionActual].este != 0) Console.Write ("Este "); if (habitaciones[habitacionActual].oeste != 0) Console.Write ("Oeste "); // visualizamos inventario for (int i=0; i < items.Count; i++) { if (i == 0) inventario = items[i].ToString(); else inventario = inventario + ", " + items[i].ToString(); } Console.Write ("\n[Inventario: " + inventario +"]"); inventario=""; Console.Write ("\n[Comandos: ir, coger, dar, usar. Para salir: exit]"); /////////////// Leemos la entrada del jugador ////////////// Console.Write("\n\n>>>"); verbo = Console.ReadLine(); verbo = verbo.ToLower(); if (verbo == "exit") { break; } string[] arrIdItems; arrIdItems = verbo.Split(' '); verbo = arrIdItems[0]; accion_obj = arrIdItems[1]; /////////////// Procesamos la entrada del jugador///////////// // coger if (verbo == "coger") { accion = 0; // Hueso if (accion_obj == "hueso" && objetos[(int)var.HUESO].hab == habitacionActual && objetos[(int)var.HUESO].lotengo ==0) { accion = 1; objetos[(int)var.HUESO].hab=0; objetos[(int)var.HUESO].lotengo=1; Console.Write("\nHas cogido el hueso."); } // Llave if (accion_obj == "llave" && objetos[(int)var.LLAVE].hab == habitacionActual && objetos[(int)var.LLAVE].lotengo == 0) { accion = 1; // para coger la llave necesitamos la escalera if (objetos[(int)var.ESCALERA].lotengo == 1) { objetos[(int)var.LLAVE].hab=0; objetos[(int)var.LLAVE].lotengo=1; Console.Write("\nTras subirte a la escalera, alcanzas la llave."); } else { Console.Write("\nNo alcanzo la llave. Está demasiado alta."); } } // Escaleras if (accion_obj == "escalera" && objetos[(int)var.ESCALERA].hab == habitacionActual && objetos[(int)var.ESCALERA].lotengo ==0) { accion = 1; if (objetos[(int)var.PERRO].estado == 2) { objetos[(int)var.ESCALERA].hab=0; objetos[(int)var.ESCALERA].lotengo=1; Console.Write("\nHas cogido las escaleras."); } else { Console.Write("\nEl perro gruñe y ladra y no te deja cogerlo."); } } // se agrega item al inventario if (accion == 1) items.Add(accion_obj); if (accion == 0) Console.Write("\nNo puedes hacer eso."); } //fin accion coger // dar if (verbo == "dar") { accion = 0; // Hueso if (accion_obj == "hueso" && objetos[(int)var.HUESO].lotengo == 1 && objetos[(int)var.PERRO].hab == habitacionActual) { accion = 1; objetos[(int)var.HUESO].lotengo=0; objetos[(int)var.PERRO].estado=2; Console.Write("\nEl perro coge el hueso y se retira a comerselo tranquilamente."); } if (accion == 1) items.Remove(accion_obj); if (accion == 0) Console.Write("\nNo puedes hacer eso."); } //fin accion dar // usar if (verbo == "usar") { accion = 0; // Hueso if (accion_obj == "llave" && objetos[(int)var.LLAVE].lotengo == 1 && habitacionActual == 8) { accion = 1; Console.Write("\nFELICITACIONES!!! Has escapado de la mansión del terror."); done = 1; } if (accion == 0) Console.Write("\nNo puedes hacer eso."); } //fin accion usar // ir if (verbo == "ir") { accion = 0; // norte if (accion_obj == "norte" && habitaciones[habitacionActual].norte != 0) { accion = 1; habitacionActual=habitaciones[habitacionActual].norte; } // sur if (accion_obj == "sur" && habitaciones[habitacionActual].sur != 0) { accion = 1; habitacionActual=habitaciones[habitacionActual].sur; } // este if (accion_obj == "este" && habitaciones[habitacionActual].este != 0) { accion = 1; habitacionActual=habitaciones[habitacionActual].este; } // oeste if (accion_obj == "oeste" && habitaciones[habitacionActual].oeste != 0) { accion = 1; habitacionActual=habitaciones[habitacionActual].oeste; } if (accion == 0) Console.Write("\nNo puedes hacer eso."); } //fin accion ir } //fin cilo While if (done == 1) { Console.Write("\n\nPresione <Enter> para Salir."); Console.Read(); } } } } |