Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mini-Juego Dungeon!

Estas en el tema de Mini-Juego Dungeon! en el foro de C/C++ en Foros del Web. Hola amigos acabo de crear un mini-juego algo estúpido y feo llamado Dungeon, pero tal vez a alguien le sirva de algo, solo tiene 1 ...
  #1 (permalink)  
Antiguo 14/11/2015, 09:11
Avatar de Andrek  
Fecha de Ingreso: enero-2012
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 1
Mini-Juego Dungeon!

Hola amigos acabo de crear un mini-juego algo estúpido y feo llamado Dungeon, pero tal vez a alguien le sirva de algo, solo tiene 1 nivel y no es nada difícil pasar, se juega con la consola, bueno suerte y cuídense!

Código:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>

using namespace std;

int LevelChest = 3;
bool DungeonCompleted = false;
int map[10][10] = {
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 0, 1, 0, 0, 0, 0, 0, 0, 1},
    {1, 0, 1, 3, 1, 1, 1, 1, 0, 1},
    {1, 0, 0, 1, 0, 0, 0, 1, 0, 1},
    {1, 0, 0, 0, 0, 0, 0, 1, 0, 1},
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
    {1, 1, 0, 2, 2, 3, 0, 0, 0, 1},
    {1, 1, 0, 0, 0, 0, 0, 0, 0, 1},
    {1, 3, 2, 0, 0, 0, 0, 0, 4, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};


void gotoxy(int x, int y) {
     HANDLE Console_Handle;
     Console_Handle = GetStdHandle(STD_OUTPUT_HANDLE);
     COORD coord;
     coord.X = x;
     coord.Y = y;
     SetConsoleCursorPosition(Console_Handle, coord);
}

void hide_cursor() {
     HANDLE Console_Handle;
     Console_Handle = GetStdHandle(STD_OUTPUT_HANDLE);
     CONSOLE_CURSOR_INFO cursor;
     cursor.bVisible = 0;
     cursor.dwSize = 1;
     SetConsoleCursorInfo(Console_Handle, &cursor);
}

struct Inventory {
       int Keys;
       int Chests;
};

struct PLAYER {
       int X;
       int Y;
       Inventory I;
       void SetXY(int x, int y) { X = x; Y = y; }
}Player;

void draw_tile(int x, int y) {
     switch(map[y][x]) {
                       case 0:
                            printf(" ");
                            break;
                       case 1:
                            printf("#");
                            break;
                       case 2:
                            printf("C");
                            break;
                       case 3:
                            printf("L");
                            break;
                       case 4:
                            if(Player.I.Chests >= LevelChest) { printf("E"); } else {printf(" ");}
                            break;
     }
}

void draw_map() {
    gotoxy(0, 2);
    int px = Player.X;
    int py = Player.Y;
    for(int y = 0; y < 10; y++) {
            for(int x = 0; x < 10; x++) {
                    if(px == x && py == y) {
                         printf("P");
                    } else {
                           draw_tile(x, y);
                    }
                    if(x == 9) { printf("\n"); }
            }
    }
}

void draw_notice(char string[10]) {
     gotoxy(0, 0);
     for(int i = 0; i < 80; i++) { printf(" "); }
     gotoxy(0, 0);
     printf("%s", string);
}

void pick_up() {
     switch(map[Player.Y][Player.X]) {
                                     case 2:
                                          if(Player.I.Keys > 0) {
                                                           map[Player.Y][Player.X] = 0;
                                                           Player.I.Keys--;
                                                           Player.I.Chests++;
                                                           draw_notice("Cofre abierto!");
                                          } else { draw_notice("Necesitas una llave!"); }
                                          break;
                                     case 3:
                                          map[Player.Y][Player.X] = 0;
                                          Player.I.Keys++;
                                          draw_notice("Llave recogida!");
                                     case 4:
                                          if(Player.I.Chests >= LevelChest) {
                                                             draw_notice("Felicidades completaste el calabozo! Presiona ESC para salir");
                                                             DungeonCompleted = true;
                                          }
     }
}
bool passable(int x, int y) {
     if(map[x][y] == 1) { return false; }
     return true;
}
int move_down() {
    if(passable(Player.Y + 1, Player.X)) {
                         gotoxy(Player.X, Player.Y + 2);
                         draw_tile(Player.X, Player.Y);
                         Player.Y += 1;
                         if(Player.Y > 9) { Player.Y = 9; }
                         gotoxy(Player.X, Player.Y + 2);
                         printf("P");
    }
}
int move_left() {
    if(passable(Player.Y, Player.X - 1)) {
                          gotoxy(Player.X, Player.Y + 2);
                          draw_tile(Player.X, Player.Y);
                          Player.X -= 1;
                          if(Player.X < 0) { Player.X = 0; }
                          gotoxy(Player.X, Player.Y + 2);
                          printf("P");
    }
}
int move_right() {
    if(passable(Player.Y, Player.X + 1)) {
                          gotoxy(Player.X, Player.Y + 2);
                          draw_tile(Player.X, Player.Y);
                          Player.X += 1;
                          if(Player.X > 9) { Player.X = 9; }
                          gotoxy(Player.X, Player.Y + 2);
                          printf("P");
    }
}
int move_up() {
    if(passable(Player.Y - 1, Player.X)) {
                         gotoxy(Player.X, Player.Y + 2);
                         draw_tile(Player.X, Player.Y);
                         Player.Y -= 1;
                         if(Player.Y < 0) { Player.Y = 0; }
                         gotoxy(Player.X, Player.Y + 2);
                         printf("P");
    }
}
void move_to(int new_x, int new_y) {
     Player.SetXY(new_x, new_y);
}

void draw_keys() {
     gotoxy(0, 13);
     printf("Llaves: %d", Player.I.Keys);
}

int main(void){
    char key;
    hide_cursor();
    move_to(1, 1);
    draw_map();
    draw_keys();
    gotoxy(0, 15);
    printf("WASD: Moverse\n");
    printf("Enter: Accion\n");
    printf("P: Jugador\n");
    printf("L: Llave\n");
    printf("C: Cofre\n");
    printf("E: Escaleras\n");
    printf("#: Muros\n");
    while(1) {
             if(DungeonCompleted == true) {
                                  if(kbhit()) {
                                              key = getch();
                                              if(key == 27) { return 0; }
                                  }
                                  continue;
             }
             if(kbhit()) {
                         key = getch();
                         switch(key) {
                                     case 's':
                                          move_down();
                                          draw_notice("");
                                          break;
                                     case 'a':
                                          move_left();
                                          draw_notice("");
                                          break;
                                     case 'd':
                                          move_right();
                                          draw_notice("");
                                          break;
                                     case 'w':
                                          move_up();
                                          draw_notice("");
                                          break;
                                     case 13:
                                          pick_up();
                                          draw_keys();
                                          if(Player.I.Chests >= LevelChest) { draw_map(); }
                                          break;
                                     case 27:
                                          return 0;
                         }
                 }
    }
    return 0;
}

Etiquetas: char, int, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:10.