Introducción a C++

1

Todo lo que aprenderás sobre C++

2

¿Qué es programar y por qué aprender C++?

Conceptos Generales de C++

3

La Historia de C++ y sus diferencias con C

Preparando el entorno de trabajo

4

Instalando Codeblocks

5

Pasos para instalar en mac

6

Ejecutando nuestro primer programa

7

¿Qué son las librerías STD? - Portada del Proyecto

Manejo de memoria

8

¿Qué es la memoria y tipos de datos?

9

Alojando variables en memoria

10

¿Cómo usar operadores?

11

¿Qué son los apuntadores?

12

Reto: Escribir un programa que calcule áreas.

Entrada de datos y funciones

13

¿Cómo introducir datos a nuestro programa?

14

¿Cómo usar condicionales?

15

Usando condicionales

16

¿Cómo encapsular código en funciones ?

17

¿Qué son los parámetros y como usarlos?

18

Reto: Juego narrativo implementando condicionales y entrada de datos.

Loops y arreglos

19

¿Qué son los arreglos?

20

¿Qué son los Loops?

21

Programando Loops

22

Loops , arreglos y arreglos bidimensionales

23

Dibujando el mapa de nuestro juego con arreglos

24

Manipulando mi jugador con inputs en arreglos unidimensionales

25

Arreglos bidimensionales

26

Reto: Moviendo a mi personaje en mi arreglo bidimensional

Lectura de Archivos

27

Creando y leyendo un archivo externo

28

Leyendo archivos externos

29

Reto: En el mapa, crear punto de inicio y salida del jugador

Programación Orientada a Objetos

30

¿Qué es POO?

31

Definiendo una clase y creando sus instancias

32

Encapsulación

33

Abstracción

34

Herencia

35

Propiedades de clase en herencia

36

Polimorfismo

Finalizando nuestro proyecto

37

Creación de personaje y archivo de encabezado

38

Moviendo mi personaje con entrada de datos

39

Mapa

40

Interacción entre el personaje y el mapa

41

Paredes

42

Optimizando trazado de mapa

43

Colisiones

44

Creando nuestra portada de juego

45

Tesoro y victoria

46

Conclusiones

47

Proyecto final

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Paredes

41/47
Recursos

Vamos a crear un archivo de texto con nuestro mapa de celdas para crear niveles y laberintos tan avanzados como podamos. Vamos a crear la función LoadMapFromFile para imprimir este archivo de texto y convertir cada celda en una instancia de nuestra clase MapCell.

// GameMap.cpp
void GameMap::LoadFromFile()
{
        string line;
        ifstream  MyFile(""Map.txt"");

        if (MyFile.is_open())
        {
                // ...
        }
        else{
                cout << ""FATAL ERROR"" << endl;
        }
}

Importante: Recuerda que puedes programar la creación de este archivo desde el código C++ o crearlo directamente desde la carpeta de tu proyecto. También debemos incluir la librería fstream en todos los archivos donde trabajas con archivos del disco duro (en este caso, en el archivo GameMap.cpp).

Aportes 16

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Algo que me sirvió para comprender las coordenadas es no pensar en x,y ya que no se comporta como si estuviéramos en un plano cartesiano, si no mas bien son matrices que tienen i,j para indicar la posición, además de m y n, para indicar m la cantidad de filas y n la cantidad de columnas

Entonces a22 es como decir fila 2, columna 2. Por eso si queremos ir hacia arriba debemos restar a la fila (cuando en un plano cartesiano sumábamos), esa es la diferencia.

1111111111
1000000001
1000000001
1000000001
1000000001
1000000001
1000000001
1000000001
1000000001
1000000001
1000000001
1000000001
1000000001
1000000001
1111111111

Aqui les dejo el algoritmo para generar el mapa automaticamente sin necesidad de escribirlo nosotros mismos.

#include "GameMap.h"
#include <iostream>
#include <fstream>

using namespace std;


GameMap::GameMap()
{
    //ctor
    PlayerCell = NULL;
    LoadMap();
}
void GameMap::Draw(){
    for(int f=0; f<21; f++){
        for(int c=0; c<51; c++){
            cout << cells[f][c].id;
        }
        cout << endl;
    }
}

void GameMap::SetPlayerCell(int x, int y){
    if(PlayerCell != NULL){
        PlayerCell->id = ' ';
    }
    PlayerCell = &cells[y][x];
    PlayerCell->id = 'X';
}

void GameMap::LoadMap(){
    string line;
    ifstream MyMap("maze.txt");
    if(MyMap.is_open()){
        for(int f=0; f<21; f++){
            getline(MyMap,line);
            for(int c=0; c<51; c++){
                cells[f][c].id = line[c];
            }
        }
        MyMap.close();
    }else{
        cout << "Maze file could not be read" << endl;
    }
}

Mi Mapa (21 de alto x 51 de largo)

    |                                              
    V                                              
HHH O HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
HHH   HHH                  HHH                  HHH
HHH   HHH   HHHHHHHHHHHH   HHH   HHHHHHHHHHHH   HHH
HHH   HHH      HHH   HHH   HHH   HHH            HHH
HHH   HHHHHH   HHH   HHH   HHH   HHH   HHH   HHHHHH
HHH            HHH   HHH         HHH   HHH      HHH
HHH   HHHHHHHHHHHH   HHHHHHHHHHHHHHH   HHHHHH   HHH
HHH                     HHH               HHH   HHH
HHHHHHHHHHHHHHHHHHHHH   HHHHHHHHHHHHHHHHHHHHH   HHH
HHH               HHH   HHH                     HHH
HHH   HHHHHHHHH   HHHHHHHHH   HHHHHHHHHHHHHHHHHHHHH
HHH         HHH               HHH               HHH
HHHHHHHHH   HHHHHHHHHHHHHHHHHHHHH   HHHHHHHHH   HHH
HHH   HHH                     HHH   HHH         HHH
HHH   HHHHHHHHHHHHHHHHHHHHH   HHH   HHH   HHHHHHHHH
HHH                                 HHH         HHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH W HHH
                                              |    
                                              V    

Hola mi gente, les dejo mi codigo el cual crear un archivo “mapa” si este no existe, no hace falta comentarlo ya que si este existe simplemente no ejecutamos la logia ofstream, creo que lo hace un poco mas robusto ante errores. Abrazo! excelenete clase ❤️

void GameMap::loadMapFromFile()
{
    string line;
    ifstream file("Map.txt");

    if(file.is_open())
    {

    }else
    {
        ofstream createFile("Map.txt");

        if(createFile.is_open())
        {

        }else
        {
            cout <<"FATAL ERROR: Map can't be created" << endl;
        }
    }
}

Jujuu se está poniendo cada vez más complejo este último módulo. Me parece que lo voy a tener que repetir varias veces hasta entender bien qué es todo lo que está pasando 😅

😎

Excelente curso y muy buen profesor.

Gracias!

Excelente clase, siempre hay algo nuevo que aprender.
Gracias

HECHO

void Gamemapa::CargadeArchivo()
{
/*
ofstream archivocreado("map.txt");

 if(archivocreado.is_open())
 {

 }

 else
{
     cout << "el archivo no pudo cargarse"<<endl;

}
*/
string line; //esta linea va a estar cargando cada linea de mi archivo
ifstream  Myfile("map.txt"); //entrada de flujo de datos

if(Myfile.is_open())

{

}
else
{
    cout << "el archivo no pudo cargarse"<<endl;
}

}


// GameMap.cpp
void GameMap::LoadFromFile()
{
        string line;
        ifstream  MyFile(""Map.txt"");

        if (MyFile.is_open())
        {
                // ...
        }
        else{
                cout << ""FATAL ERROR"" << endl;
        }
}```

esta interesante 😄

Personalmente, comparto la idea del profesor, las funciones de crear los archivos una sola vez y luego ya no hacerlo, para tomarlo como una practica.

Jajaja yo tuve que cambiar los parametros completos, en vez de hacer la sustitucion de Y por X 😄

Crear el mapa automaticamente.
ROW y COL constantes que indican la dimension del mapa y asi hacerlo mucho mas personalizable.

 if (fileCreated.is_open()){
        for (int i = 0; i < ROW; i++){
            for (int j = 0; j < COL; j++){
                if (i == 0 || i == (ROW-1) || j == 0 || j == (COL-1)){
                    fileCreated << 1;
                }else{
                    fileCreated << 0;
                }
            }
            fileCreated << endl;
        }
    }else{
        cout << "FATAL ERROR: MAP FILE COULD NOT BE CREATED!" << endl;
    }```