8 Commits

4 changed files with 36 additions and 18 deletions

View File

@@ -15,6 +15,8 @@ SRC_DIR := src
BIN_DIR := bin
DBG_DIR := $(BIN_DIR)/debug
RLS_DIR := $(BIN_DIR)/release
DBG_EXEC := $(DBG_DIR)/debug
RLS_STRIPPED_EXEC := $(RLS_DIR)/tuimine
# sources and objects
SRCS := $(wildcard $(SRC_DIR)/*.cpp)
@@ -29,22 +31,19 @@ $(shell mkdir -p $(BUILD_DIR))
# phony rules
.PHONY := all debug release clean
all: debug
all: release
debug: $(DBG_DIR)/debug
release: $(RLS_DIR)/release $(RLS_DIR)/release_stripped
debug: $(DBG_EXEC)
release: $(RLS_STRIPPED_EXEC)
both: debug release
# linking
$(DBG_DIR)/debug: $(DBG_OBJS)
$(DBG_EXEC): $(DBG_OBJS)
$(CXX) -o $@ $^ $(DBG_LDFLAGS)
$(RLS_DIR)/release_stripped: $(RLS_OBJS)
$(RLS_STRIPPED_EXEC): $(RLS_OBJS)
$(CXX) -o $@ $^ $(RLS_LDFLAGS)
$(RLS_DIR)/release: $(RLS_OBJS)
$(CXX) -o $@ $^ $(LDFLAGS)
# compiling
$(BUILD_DIR)/debug_%.o: $(SRC_DIR)/%.cpp
$(CXX) -c -o $@ $< $(DBG_CXXFLAGS)

View File

@@ -16,6 +16,8 @@ BIN_DIR := bin
DBG_DIR := $(BIN_DIR)\debug
RLS_DIR := $(BIN_DIR)\release
LIB_DIR := lib
DBG_EXEC := $(DBG_DIR)\debug.exe
RLS_STRIPPED_EXEC := $(RLS_DIR)\tuimine.exe
# sources and objects
LIBS := $(wildcard $(LIB_DIR)/*.dll)
@@ -33,25 +35,22 @@ $(shell if not exist $(BUILD_DIR) mkdir $(BUILD_DIR))
# phony rules
.PHONY := all debug release clean libraries_debug libraries_release both
all: debug
all: release
debug: $(DBG_DIR)/debug.exe libraries_debug
release: $(RLS_DIR)/release_stripped.exe $(RLS_DIR)/release.exe libraries_release
debug: $(DBG_EXEC) libraries_debug
release: $(RLS_STRIPPED_EXEC) libraries_release
both: debug release
libraries_debug: $(LIBS_DBG)
libraries_release: $(LIBS_RLS)
# linking
$(DBG_DIR)/debug.exe: $(DBG_OBJS)
$(DBG_EXEC): $(DBG_OBJS)
$(CXX) -o $@ $^ $(DBG_LDFLAGS)
$(RLS_DIR)/release_stripped.exe: $(RLS_OBJS)
$(RLS_STRIPPED_EXEC): $(RLS_OBJS)
$(CXX) -o $@ $^ $(RLS_STRP_LDFLAGS)
$(RLS_DIR)/release.exe: $(RLS_OBJS)
$(CXX) -o $@ $^ $(LDFLAGS)
# compiling
$(BUILD_DIR)/debug_%.o: $(SRC_DIR)/%.cpp
$(CXX) -c -o $@ $< $(DBG_CXXFLAGS)

View File

@@ -20,6 +20,10 @@ R to restart.
P to pause.
Q to quit.
You can't chord if the number isn't equal to the number of flags it's near.
You can't see the board if you're paused to (help) prevent cheating.
You can't flag already revealed cells.
## Compilation
By default, the Makefile compiles in debug mode, so to compile both, use `make both`.

View File

@@ -156,7 +156,7 @@ void startGame(Board &board)
cursorX = (cursorX < boardSize.x - 1) ? cursorX + 1 : 0;
break;
case 'q':
return;
exit(0);
break;
case 'z':
if (!somethingHasBeenDone)
@@ -167,6 +167,8 @@ void startGame(Board &board)
board.revealCellAt(cursorX, cursorY);
break;
case 'x':
if (board.getCellStateAt(cursorX, cursorY) == Cell::State::Revealed)
break;
if (!somethingHasBeenDone)
{
startTime = time(nullptr);
@@ -183,9 +185,11 @@ void startGame(Board &board)
board.flagCellAt(cursorX, cursorY);
break;
case 'r':
startTime = time(NULL);
startTime = 0;
minesLeft = board.getMineCount();
board.regenerateBoard();
somethingHasBeenDone = false;
elapsedTime = 0;
break;
case 'p':
if (isPaused)
@@ -200,12 +204,24 @@ void startGame(Board &board)
isPaused = !isPaused;
break;
case 'c':
if (board.getCellStateAt(cursorX, cursorY) != Cell::State::Revealed)
{
break;
}
if (!somethingHasBeenDone)
{
startTime = time(nullptr);
somethingHasBeenDone = true;
}
auto neighbors = board.getNeighborsOf(cursorX, cursorY);
int flagCount = 0;
for (const Cell &neighbor : neighbors)
{
if (neighbor.getState() == Cell::State::Flagged)
flagCount++;
}
if (static_cast<int>(board.revealCellAt(cursorX, cursorY).getContent()) > flagCount)
break;
for (const Cell &neighbor : neighbors)
{
if (neighbor.getState() == Cell::State::Flagged)