增加了药品和杀怪升级的机制,同时,上下楼层是rogue游戏不可缺少的要素。
Makefile
objects = main.o makemap.o
rogue:$(objects)
g++ $(objects) -o rogue -lncurses
makemap.o:makemap.cpp
g++ -c makemap.cpp
main.o:main.cpp
g++ -c main.cpp
clean:
rm -rf *.o rogue
main.cpp
#include <curses.h>
#define EMPTY 0
#define ME 1
#define ME_ATK 10
#define ME_DEF 15
#define ME_HP 100
#define LEVEL_EXP 300
#define ATK_UP 5
#define DEF_UP 2
#define WALL 2
#define IN 4
#define OUT 5
#define MEDICINE 8
#define MED_HP 20
#define MONSTER_A 3
#define A_ATK 20
#define A_DEF 2
#define A_HP 20
#define A_EXP 20
#define MONSTER_B 6
#define B_ATK 20
#define B_DEF 5
#define B_HP 60
#define B_EXP 25
#define MONSTER_C 7
#define C_ATK 30
#define C_DEF 5
#define C_HP 70
#define C_EXP 30
#define LEGEND "\
<.>--<floor>\n\
<#>--<wall>\n\
<@>--<yourself>\n\
<+>--<medicine>\n\
<(>--<upstairs>\n\
<)>--<downstairs>\n\
<A><B><C>--<monster>\
"
#define INSTRUCTION mvprintw(1, 1, "My Rogue\n a/<left> w/<up> s/<down> d/<right> q/<exit> r/<restart>");\
mvprintw(offset_y+m_h+1, 0, LEGEND);\
box(stdscr, '|', '-');
#include <stdlib.h>
static char symbol[] = {'.', '@', '#', 'A', '(', ')', 'B', 'C', '+'};
static const int m_w = 50;
static const int m_h = 22;
static const int offset_x = 5;
static const int offset_y = 3;
static int **map;
int ** all_maps[100];
bool ** visited_maps[100];
int floor;
int reached_floor;
void MakeMap(int _w, int _h, int **_map, bool **_visited);
void drawMap()
{
for (int i = 0;i < m_w;++i)
for (int j = 0;j < m_h;++j)
if (visited_maps[floor-1][j][i] || i == 0 || j == 0 || i == m_w-1 || j == m_h-1)
mvaddch(j + offset_y, i + offset_x, symbol[map[j][i]]);
}
void MakeFloor()
{
all_maps[floor] = new int*[m_h];
for (int i = 0;i < m_h;++i)
all_maps[floor][i] = new int[m_w];
visited_maps[floor] = new bool*[m_h];
for (int i = 0;i < m_h;++i)
visited_maps[floor][i] = new bool[m_w];
MakeMap(m_w, m_h, all_maps[floor], visited_maps[floor]);
map = all_maps[floo