Introducción a C++

1

Programación Orientada a Objetos en C++

2

Programación en C++: Memoria y Optimización de Recursos

Conceptos Generales de C++

3

Programación Orientada a Objetos con C++ Básico

Preparando el entorno de trabajo

4

Instalación de Código::Blocks en Windows

5

Instalación de CodeBlocks en Mac paso a paso

6

Programación C++: Crear tu Primer Proyecto en Consola

7

Programación C++: Uso de Librerías Estándar

Manejo de memoria

8

Tipos de Memoria en Computadoras: RAM vs. Disco Duro

9

Variables y Tipos de Datos en Programación

10

Operadores Aritméticos y Su Uso en Programación

11

Manejo de Memoria y Uso de Apuntadores en C++

12

Cálculo de Áreas: Círculo y Esfera paso a paso

Entrada de datos y funciones

13

Manipulación de Datos en C++ con Cin y Cout

14

Uso de Operadores Relacionales y Condicionales en Programación

15

Condicionales en Programación: Uso de If, Else, Elif y Switch

16

Funciones en C++: Encapsulamiento y Uso de Parámetros

17

Condicionales y Funciones en Programación C++

18

Programación de Aventura Interactiva en C++

Loops y arreglos

19

Manejo de arreglos en lenguaje C: ejemplos prácticos

20

Bucles y estructuras de control en programación.

21

Programación C: Contadores y Bucles Básicos

22

Manejo de Arreglos Multidimensionales en Programación

23

Programación en C++: Dibujar Mapas y Manipular Personajes

24

Programación de un Juego Interactivo en Python

25

Programación de Juegos: Manejo de Arreglos Bidimensionales en C#

26

Moviendo Personajes en C++ con Entradas de Usuario

Lectura de Archivos

27

Lectura y Escritura de Archivos en C++

28

Lectura y Escritura de Archivos en Python

29

Posicionamiento de Jugador en Mapas con fstream

Programación Orientada a Objetos

30

Clases y Objetos en Programación Orientada a Objetos

31

Programación Orientada a Objetos: Clases y Objetos en Java

32

Encapsulación en Programación Orientada a Objetos

33

Encapsulación y Abstracción en Programación Orientada a Objetos

34

Herencia en Programación Orientada a Objetos: Conceptos y Ejemplos

35

Herencia en Programación Orientada a Objetos

36

Polimorfismo en C++: Herencia y Apuntadores Prácticos

Finalizando nuestro proyecto

37

Creación de Archivos Encabezado y Fuente en C++

38

Carga y Manipulación de Mapas en Videojuegos

39

Clase para Dibujar Mapas Interactivos en Videojuegos

40

Programación de Juegos: Mover Personaje en un Mapa C++

41

Cargando y escribiendo archivos en C++

42

Colisiones en C++: Evitar que el Jugador Atravesara Paredes

43

Mover un Personaje sin Traspasar Paredes en Videojuegos

44

Comprendiendo Colisiones en Videojuegos: Teoría y Práctica

45

Implementación de Laberintos con Tesoro en C++

46

Programación Orientada a Objetos en Juegos Simples

47

Clase Base y Derivada en Programación Orientada a Objetos

No tienes acceso a esta clase

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

Cargando y escribiendo archivos en C++

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;
    }```