C++ Minesweeper Implementation
github.comHello.
I make a implementation of minesweeper game in C++. I give link of the repository. Help with the project is appreciated, thank you.
The minesweeper is not yet finished, I have only written basic functions for initializing and displaying the game. However none of these functions have been called anywhere in the code so far: if you choose difficulty in the executable, the program will immidiately exit.
There is also documentation in progress. Any help with the documentation and/or source code will be appreciated.
This is all about this project for now. I have other repositories on my GitHub account but I guess that minesweeper is the easiest one to be written for now. Other projects like Voxelint (supposed to be an SDL voxel renderer) are mostly abandoned for now because they are too hard to be written and implemented. I'm still kind of a beginner in C++ language.
See you.
dawidg81
Nice start, but right now the program exits immediately because after selecting difficulty you just return from main. You never call initBoard() or displayBoard(), and there is no game loop (input -> update -> render). So there is no actual game yet.
bombMap is filled with rand()%2, which means ~50% of tiles are mines and the `mines` variable is basically unused. That’s not Minesweeper, that’s Russian roulette. Better: clear bombMap first, then place exactly `mines` mines randomly without duplicates.
tileMap is int, but you print it with putchar(). Zero prints nothing, so your board is mostly invisible. Either store ASCII chars ('#', '.', '', '1'..'8') or map numbers to chars when printing.
Utils.hpp include guard is broken: you have #ifndef but no #define. So the guard does nothing. Add #define or use #pragma once.
Utils::catchReturn() always returns 0, so errors are swallowed. You print “sending further” and then… don’t send anything further. Just return renum.
In editDiff(), custom values are not validated. Width/height should be 1..32, mines < wh. Otherwise you can overflow your arrays.
Also this line looks wrong: std::cout << Game::boardWidth; boardWidth is not static, and printing it there does nothing useful.
Main advice: first make a minimal playable version: - select difficulty - initBoard() - displayBoard() - simple input loop - win/lose check
No UI polish, no docs, just make it playable first. Then iterate.
Just focus on making one complete working path instead of half-implemented features.
Thank you for the advice. Well, indeed, when I looked at my code after reading your comment I've seen broken things I haven't seen before. You are also right about focusing on one thing, completing one working code.
Today in the code, (I hope that) I've fixed some of the bugs you've mentioned, for example tile map. It's still type of an integer but in displayBoard() I've made small number-to-character translation so for example if tileMap is 0 it puts a '#' (unrevealed tile).
I've also completely removed Utils class and files of it, I thought that I don't really need them. Recently I was just learning about classes in C++ and got a little crazy about them, okay maybe not crazy but interested. Utils class may come back if the code will be ever more complicated.
In editDiff() I've replaced functions from Utils class with traditional if statements checking if user doesn't want to put too big board width and height and amount of mines.
There is no game loop yet but I'm going to add it in near future in the main file. I've also made small changes in the initBoard() so the bomb map is cleared first with zeros. Though I'm not sure about the loops randomly filling the map with mines. I've added additional third loop in the two loops iterating.
After making a basic game loop i start making game logic.
Hello I'm back. I have added some basic game loop that does initBoard() and displayBoard() while inGame is true. I have also deleted everything that was CMake from the project and repository, I am not sure if that is a good decision, i just don't want too much... bloat. I'm propably not really well experienced what's heavy and whats not in software for hardware but I am pretty sure that GNU Make with Makefile is still lighter than CMake. Previously there were .vscode and .github directories in the project, which I now deleted for very similar reason: bloat. Switched from VS Code to Vim.
Even though the project feels for me lighter after CMake removal I feel like I just lost something. That could be the old fear of deleting whole directory with actually useful for me files.
Also when I looked in the repository statistics I didn't expect so much site visits. I'm pretty new in all this Hacker News website. I'm glad it's effective. Pretty cool website.
Ok This is propably all for now, see you