Volver
Crear un Juego sencillo en modo Texto con C#
(Basado en ejemplo de libro "Programación de Videojuegos con SDL")
Por Dark-N http://darknromhacking.com
17 de Julio 2006

Bajar aqui el Proyecto C# y Clase para Visual Studio .NET 2003.


La Idea

A todos aquellos que quieren empezar a hacer juegos, que mejor que partir con uno en DOS, sencillo, tipo Aventura Gráfica. Yo utilicé el lenguaje C# y lo hice con Visual Studio .NET 2003 (la competencia directa de JAVA ). 
La base de este codigo es del libro nombrado arriba, pero alli estaba escrito en el lenguaje C++.
Aquel Libro "Programacion de Videojuegos con SDL", es exelente para los que quieren hacer juegos con gráficas o animaciones. SDL es una librería gratis para el desarrollo de aplicaciones gráficas, esta librería utiliza OpenGL.

Argumento

“Fernando es un chico de 17 años, su vida es aparentemente normal. Su vecina Carolina, con
la que trata de salir desde los 11 años, tiene una especial atracción por todo lo paranormal. No
lejos de sus casas hay una pequeña vivienda que según cuentan está embrujada y a la cual
llaman la mansión del terror. Según Carolina, todo aquél que entra queda atrapado y sin salida
posible. Fernando, que además de no creer en fantasma es muy dado a las bravuconadas, ha
hecho una apuesta con Carolina. Si consigue salir de la casa, irá con él al baile de fin de
curso. Fernando ha entrado por una ventana, que se ha cerrado de golpe cortando su única
salida.
¿Conseguirá Fernando salir de la mansión del terror?
¿Conseguirá Fernando ir al baile con Carolina?
Todo depende de ti ahora...”


Los elementos del juego

Los detalles son importantes y hay que tenerlos claros:

¿Cómo va a ser la mansión?
¿Cuántas habitaciones tiene?
¿Qué objetos podemos encontrar?
¿Cómo conseguimos ganar?
¿Cuáles son las dificultades?

Es necesario hacerse todo este tipo de preguntas para tener claro como va a
desarrollarse una partida. Empecemos por nuestra misión. Para ganar, hemos de lograr
salir de la casa. Para ello hemos de conseguir la llave que abre la puerta de la misma.
Vamos a crear una mansión de pequeño tamaño, con sólo 9 habitaciones (utilizaremos
un mapa de 3x3).


Objeto 1 – Hueso – Está en la habitación 2.
Objeto 2 – Llave – Está en la habitación 3.
Objeto 3 – Escalera – Está en la habitación 9.
Objeto 4 – Perro – Está en la habitación 9.

Habitación 3 – Para coger la llave hay que tener la escalera, ya que la llave está sobre la
lámpara del techo.
Habitación 9 – Para poder coger la escalera hay que darle un hueso al perro rabioso.
Habitación 8 – Para abrir la puerta y salir de la mansión hay que tener la llave.

Ya con el mapa finalizado, los objetos y su función dentro del juego, vamos a ver qué
ordenes podemos darle a nuestro protagonista y sobre qué objetos.

Coger – Hueso, Llave, Escaleras.
Dar – Hueso.
Usar – Llave.
Ir


Manos a la Obra

Desde aqui se puede hacer el juego en el lenguaje que te acomode: VB, Vb.Net, C#, C++, PASCAL, etc... esto es porque el
juego es tan sencillo, que se puede hacer bajo DOS o Windows.
Yo usare C# ya que me gusta mucho.


Para crear una aplicacion Consola

ir a Inicio->Programas->Microsoft Visual Stidio .NET 2003


luego ->File->New->Proyect -> Windows C# Proyect -> ConsoleApplication


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();
            }
           
        }

       
    }
}



Finalmente, al compilar y correr se nos ver? asi:


2003-2009 Copyright (C) La web de Dark-N
Volver