Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
0c3955b5
Commit
0c3955b5
authored
Oct 19, 2014
by
Damien George
Browse files
examples: Update conwaylife to work with new LCD API.
parent
21ca2d76
Changes
3
Hide whitespace changes
Inline
Side-by-side
examples/conwaylife.py
View file @
0c3955b5
#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
(
30
0
)
pyb
.
delay
(
5
0
)
# PC testing
lcd
=
lcd
.
LCD
(
128
,
32
)
# testing
conway_rand
()
conway_go
(
100
0
)
conway_go
(
100
)
examples/lcd.py
deleted
100644 → 0
View file @
21ca2d76
# 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
examples/pyb.py
View file @
0c3955b5
...
...
@@ -6,8 +6,44 @@ def delay(n):
pass
rand_seed
=
1
def
r
and
():
def
r
ng
():
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
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment