diff --git a/examples/conwaylife.py b/examples/conwaylife.py index 89ef94c8c..f99796175 100644 --- a/examples/conwaylife.py +++ b/examples/conwaylife.py @@ -1,7 +1,9 @@ #import essential libraries -import lcd import pyb +lcd = pyb.LCD('x') +lcd.light(1) + # do 1 iteration of Conway's Game of Life def conway_step(): for x in range(128): # loop over x coordinates @@ -21,26 +23,24 @@ def conway_step(): # apply the rules of life if self and not (2 <= num_neighbours <= 3): - lcd.reset(x, y) # not enough, or too many neighbours: cell dies + lcd.pixel(x, y, 0) # not enough, or too many neighbours: cell dies elif not self and num_neighbours == 3: - lcd.set(x, y) # exactly 3 neigbours around an empty cell: cell is born + lcd.pixel(x, y, 1) # exactly 3 neigbours around an empty cell: cell is born # randomise the start def conway_rand(): - lcd.clear() # clear the LCD + lcd.fill(0) # clear the LCD for x in range(128): # loop over x coordinates for y in range(32): # loop over y coordinates - if pyb.rand() & 1: # get a 1-bit random number - lcd.set(x, y) # set the pixel randomly + lcd.pixel(x, y, pyb.rng() & 1) # set the pixel randomly # loop for a certain number of frames, doing iterations of Conway's Game of Life def conway_go(num_frames): for i in range(num_frames): conway_step() # do 1 iteration lcd.show() # update the LCD - pyb.delay(300) + pyb.delay(50) -# PC testing -lcd = lcd.LCD(128, 32) +# testing conway_rand() -conway_go(1000) +conway_go(100) diff --git a/examples/lcd.py b/examples/lcd.py deleted file mode 100644 index 3303337bf..000000000 --- a/examples/lcd.py +++ /dev/null @@ -1,36 +0,0 @@ -# LCD testing object for PC -# uses double buffering -class LCD: - def __init__(self, width, height): - self.width = width - self.height = height - self.buf1 = [[0 for x in range(self.width)] for y in range(self.height)] - self.buf2 = [[0 for x in range(self.width)] for y in range(self.height)] - - def clear(self): - for y in range(self.height): - for x in range(self.width): - self.buf1[y][x] = self.buf2[y][x] = 0 - - def show(self): - print('') # blank line to separate frames - for y in range(self.height): - for x in range(self.width): - self.buf1[y][x] = self.buf2[y][x] - for y in range(self.height): - row = ''.join(['*' if self.buf1[y][x] else ' ' for x in range(self.width)]) - print(row) - - def get(self, x, y): - if 0 <= x < self.width and 0 <= y < self.height: - return self.buf1[y][x] - else: - return 0 - - def reset(self, x, y): - if 0 <= x < self.width and 0 <= y < self.height: - self.buf2[y][x] = 0 - - def set(self, x, y): - if 0 <= x < self.width and 0 <= y < self.height: - self.buf2[y][x] = 1 diff --git a/examples/pyb.py b/examples/pyb.py index 65fed6647..b303777e5 100644 --- a/examples/pyb.py +++ b/examples/pyb.py @@ -6,8 +6,44 @@ def delay(n): pass rand_seed = 1 -def rand(): +def rng(): global rand_seed # for these choice of numbers, see P L'Ecuyer, "Tables of linear congruential generators of different sizes and good lattice structure" rand_seed = (rand_seed * 653276) % 8388593 return rand_seed + +# LCD testing object for PC +# uses double buffering +class LCD: + def __init__(self, port): + self.width = 128 + self.height = 32 + self.buf1 = [[0 for x in range(self.width)] for y in range(self.height)] + self.buf2 = [[0 for x in range(self.width)] for y in range(self.height)] + + def light(self, value): + pass + + def fill(self, value): + for y in range(self.height): + for x in range(self.width): + self.buf1[y][x] = self.buf2[y][x] = value + + def show(self): + print('') # blank line to separate frames + for y in range(self.height): + for x in range(self.width): + self.buf1[y][x] = self.buf2[y][x] + for y in range(self.height): + row = ''.join(['*' if self.buf1[y][x] else ' ' for x in range(self.width)]) + print(row) + + def get(self, x, y): + if 0 <= x < self.width and 0 <= y < self.height: + return self.buf1[y][x] + else: + return 0 + + def pixel(self, x, y, value): + if 0 <= x < self.width and 0 <= y < self.height: + self.buf2[y][x] = value