• API
• FAQ
• Tools
• Archive
daily pastebin goal
45%
SHARE
TWEET

# Untitled

a guest Aug 29th, 2009 33 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. # corridors.py
2.
3. # This script makes a random expert-sized .mbf board with corridors
4. # of lengths 1-MAX_CORRIDOR_LENGTH all around the border. The idea
5. # is you start in the top left and go right - down the right hand
6. # side - left across the bottom - then up the left hand side. The
7. # starts of each of these straights are always safe (except with the
8. # side ones you have to start on the 3rd square from the edge)
9. # If you play the boards prior knowledge it is a good test of
10. # reaction time since if you go too fast you always blast when you
11. # get to a mine!
12.
13. import sys
14. import random
15.
16. MAX_CORRIDOR_LENGTH = 7
17.
18. class msboard:
19.    def __init__(self, width, height):
20.       self.width  = width
21.       self.height = height
22.       self.grid = [[0 for x in xrange(width)] for y in xrange(height)]
23.    def alter(self, x,y):
24.       if (0 <= x < self.width) and (0 <= y < self.height):
25.          self.grid[y][x] ^= 1
26.       else:
27.          print "Error. Out of range."
28.          return 0
29.    def display(self):
30.       for y in xrange(self.height):
31.          line = ""
32.          for val in self.grid[y]:
33.             if val: line += "m "
34.             else: line += ". "
35.          print line
36.    def mine_count(self):
37.       return sum([sum(row) for row in self.grid])
38.    def mbf(self):
39.       body = ""
40.       body += chr(self.width) + chr(self.height)
41.       mines = self.mine_count()
42.       body += chr(mines/2**8) + chr(mines%2**8)
43.       for y in xrange(self.height):
44.          for x in xrange(self.width):
45.             if self.grid[y][x] == 1: body += chr(x)+chr(y)
46.       if len(body) != 4+2*mines:
47.          print "Error! Invalid mbf format."
48.          return -1
49.       else: return body
50.
51. def main():
52.    argv = sys.argv
53.    argc = len(argv)
54.
55.    file_name = "corridor.mbf"
56.
57.    my_board = msboard(30, 16)
58.    for i in xrange(my_board.width):
59.       my_board.alter(i,1)
60.       my_board.alter(i,my_board.height-2)
61.    for i in xrange(2,my_board.height-2):
62.       my_board.alter(1,i)
63.       my_board.alter(my_board.width-2,i)
64.
65.    # rand mines around edge
66.    #top
67.    counter = 0
68.    while 1:
69.       counter += random.randint(1,MAX_CORRIDOR_LENGTH)
70.       if counter >= my_board.width: break
71.       my_board.alter(counter,0)
72.       counter += 1
73.    #rhs
74.    counter = 2
75.    while 1:
76.       counter += random.randint(1,MAX_CORRIDOR_LENGTH)
77.       if counter >= my_board.height-2: break
78.       my_board.alter(my_board.width-1,counter)
79.       counter += 1
80.    #bottom
81.    counter = 0
82.    while 1:
83.       counter += random.randint(1,MAX_CORRIDOR_LENGTH)
84.       if counter >= my_board.width: break
85.       my_board.alter(my_board.width-1-counter,my_board.height-1)
86.       counter += 1
87.    #lhs
88.    counter = 2
89.    while 1:
90.       counter += random.randint(1,MAX_CORRIDOR_LENGTH)
91.       if counter >= my_board.height-2: break
92.       my_board.alter(0,my_board.height-1-counter)
93.       counter += 1
94.
95.
96.    file_obj = open(file_name, 'wb')
97.    file_obj.write(my_board.mbf())
98.    file_obj.close()
99.
100. if __name__ == "__main__":
101.    main()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top