Git Product home page Git Product logo

minegauler's People

Contributors

artemermulin avatar deepgandhi avatar dependabot[bot] avatar jesstoudic avatar legaul-cisco avatar lewisgaul avatar xilefg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

minegauler's Issues

Add minefield scrollbars

The main window shouldn't be made bigger than the available screen size - instead the minefield should use scrollbars.

Crash when exceeding number 18 in create mode

I think what we want to do is hard-code a max number that we support, which for now I'd set to 8*3=24 (8 cells, max 3 mines per cell). We should also handle the case where an image is missing (needed given 18 < 24!).

Save highscores to file with mouse tracking info

This can be used to play back the highscore in a video-like manner, which in turn gives a way to verify highscores to some degree.

  • Open highscore file and play
  • Save cell updates
  • Save mouse movement
  • Compress highscore file

Improve inter-widget communication

It would probably be better for the frontend to share state rather than multiple of them storing e.g. the game state. There's also calling between them (via the controller?) that could be done using signals (see the at_risk and no_risk signals).

Revert number of mines after loading custom board

Loading a custom board sets the board size, number of mines, and max mines per cell. Of those, only the board size should be permanent - when a new game is started the number of mines and max per cell should be reverted. Currently the max mines per cell are accidentally reverted.

Centre the text of the panel counters

The mines counter and timer text is slightly too high and far right (at least on my setup...). I would also prefer the black background to look more like my original Tkinter version (square corners and sunken border).

Highscore pop-up bug

Closing on a certain mode and then opening highscores whilst on the custom board setting opens the wrong highscore settings

The app seems to gradually slow down

Not sure if triggered by running for a long time, playing lots of games, completing lots of games or setting lots of highscores.

This has been seen once when running in WSL, mostly playing lots of beginner games over a period of an hour or two.

Add help menu options

There should be options to open text windows containing the contents of some of the files in minegauler/files/.

Fix the window sizing

For beginner the window is started up too big, and the window shouldn't be resizable in general.

Impossible to get rid of scrollbars

For some reason there is a case where scrollbars are appearing when the window is at maximum size, so the scrollbars shouldn't be needed. This is was seen on Windows 10 with Python 3.7, using requirements.txt.

Add the option of having multiple lives

Some of the infra is already in place - the difficulty is how far-reaching the changes need to be (from the game object, through the controller and into the panel widget for deciding which face to use, AND the menubar buttons passing back to the controller).

Come up with a mechanism for switching between controllers

Perhaps there should be an overall controller that passes calls to the registered controller, and that 'master' controller would receive the requests to switch modes. There's also some code that could be shared e.g. between the game controller and the create controller. Will need to make sure any changed settings are propagated to the new controller when switching out (can just create a new one with the current opts?).

Ensure double-clicks work

e.g. double left click in create mode, but also both click in a normal game (if done too quickly the second click isn't treated as a separate single click?).

Add local highscores

Needs some thought:

  • how to store them/load them in
  • how to validate them
  • how to retrieve them across versions
  • how to display them
  • how to filter them

Ensure the project works on Python 3.8

It seems the version of PyQt5-sip in use (PyQt5-sip==4.19.13) is not available on Python 3.8, but the latest version is causing a crash in the tests (not just on 3.8)...

Add 'split cells' mode

The idea is instead of beginner being 8x8 small cells it'd be 4x4 cells that are twice the size, the aim is still to click all safe cells - if you know a big cell is safe you can just click it to reveal a number, but if a big cell is unsafe you right click it and it splits into the 4 small cells and you then have to work out which of those is safe.

In other words you could first right-click all the big cells to get back to a normal beginner board, but that would be disallowed (wrong right clicks on big cells lose you the game).

Remaining items for sorting out highscores

  • Handle drag select changing [mid-game]
  • Achieve reasonable test coverage (at least the new backend code)
  • Show settings corresponding to displayed highscores in highscore window
  • Update displayed highscores when a new one is set (call get_highscores() again - add a 'refresh' button?)
  • Keep highscore window state when it is closed (e.g. the name filter)
  • Do some manual performance/scale testing
  • Add compatibility layer for legacy DB files and convert to current DB structure
  • Handle opening highscores window when a custom difficulty is in play

Originally posted by @LewisGaul in #37 (comment)

Add cell number detection option

In minesweeper the numbers represent the number of mines in the surrounding cells - neighbouring cells are those that share an edge or a corner, normally 8 cells. The strength of the detection could be changed such that only the surrounding 4 cells sharing a edge are detected, or such that a wider group of cells are detected.

An easy way to visualise this in-game is by clicking with the left and right mouse buttons both at once during a game.

Allow maximising the main window

This is unintentionally possible when running through an x-server (XLaunch), but actually it can be nice to block everything else out.

This state should be persisted over restart.

Requested by Kyle

Remaining refinements for scrollbars

The scrollbar work is half completed.

  • The main window still needs an absolute maximum size and to fall back on scrollbars in the case the max is hit.
  • If there are scrollbars and the size of the board is increased such that the window would be bigger than the current size, the scrollbars should remain rather than making the window bigger.
  • #120 Scrollbars always visible on certain displays
  • Persist the window size state.

Originally posted by @LewisGaul in #47 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.