From 053974241ea2672c5b0d1b1050a0e61df328f05a Mon Sep 17 00:00:00 2001 From: panki27 Date: Wed, 18 Apr 2018 21:51:04 +0200 Subject: [PATCH] fixed godawful random generation --- minebash.py | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/minebash.py b/minebash.py index 06b25d2..d26cdff 100755 --- a/minebash.py +++ b/minebash.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -#TODO: Color, show controls, command line param +#TODO: show controls, restartable import readline, random, io, sys, time, os @@ -80,16 +80,11 @@ def setup_playfield(w, h, x, y): global playfield, FIELD_GENERATED, STARTTIME minesleft = MINECOUNT while minesleft > 0: - for rowindex, row in enumerate(playfield): - for colindex, cell in enumerate(row): - if colindex == x and rowindex == y: - continue - if minesleft > 0 and playfield[colindex][rowindex] != MINE: - if random.random() < 0.1: - minesleft -= 1 - playfield[colindex][rowindex] = MINE - else: - break + randx = random.randint(0, width-1) + randy = random.randint(1, height-1) + if playfield[randy][randx] != MINE and randx != x and randy != y: + playfield[randy][randx] = MINE + minesleft -= 1 FIELD_GENERATED = True STARTTIME = time.time() @@ -145,7 +140,7 @@ def gameover(win): def print_playfield(playfield, screen): currentline = 0 - screen.addstr(currentline, 10, headline) + screen.addstr(currentline, 10, headline, curses.color_pair(1)) currentline +=1 #print headline for rowindex, row in enumerate(playfield): @@ -162,13 +157,16 @@ def print_playfield(playfield, screen): pos += 1 # did we find a hint? if cell > 0: - screen.addstr(currentline, pos, str(cell)) + if cell == 1: color = curses.color_pair(3) #cyan + elif cell == 2: color = curses.color_pair(4) #blue + else: color = curses.color_pair(5) #yellow + screen.addstr(currentline, pos, str(cell), color) elif cell == 0: screen.addstr(currentline, pos, ' ') elif cell == UNKNOWN or cell == MINE: - screen.addstr(currentline, pos, '#') #rowstring+= '#' + screen.addstr(currentline, pos, '#', curses.color_pair(7)) #rowstring+= '#' elif cell == FLAG_MINE or cell == FLAG: - screen.addstr(currentline, pos, 'P') #rowstring += 'P' + screen.addstr(currentline, pos, 'P', curses.color_pair(2)) #rowstring += 'P' #elif cell == MINE: # rowstring += 'X' pos += 1 @@ -249,15 +247,25 @@ def handle_input(k): def print_score(screen): scorestr = 'Mines: {} Flags: {}'.format(MINECOUNT, FLAGCOUNT) - screen.addstr(19 ,20,scorestr) + screen.addstr(19 ,20, scorestr) + +def setup_colors(): + curses.start_color() + curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLACK) + curses.init_pair(2, curses.COLOR_RED, curses.COLOR_BLACK) + curses.init_pair(3, curses.COLOR_CYAN, curses.COLOR_BLACK) + curses.init_pair(4, curses.COLOR_BLUE, curses.COLOR_BLACK) + curses.init_pair(5, curses.COLOR_YELLOW, curses.COLOR_BLACK) + curses.init_pair(7, curses.COLOR_WHITE, curses.COLOR_WHITE) + def main(stdscr): global SCREEN SCREEN = stdscr stdscr.clear() setup_strings(width) + setup_colors() #generate mines: - #print_playfield(playfield) #TODO: user input while(True): print_playfield(playfield, stdscr)