From 33addd5f1775164482fb616ba7f3c336da5d22e4 Mon Sep 17 00:00:00 2001 From: Tom Banister Date: Wed, 20 Sep 2017 11:36:09 +0100 Subject: [PATCH 1/4] test rotate --- patterns/bounce.py | 118 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 96 insertions(+), 22 deletions(-) diff --git a/patterns/bounce.py b/patterns/bounce.py index 9b5fd5a..c5303c7 100644 --- a/patterns/bounce.py +++ b/patterns/bounce.py @@ -8,27 +8,101 @@ class Pattern(object): def init(self): - self.position = numpy.array([random.randint(1,self.cube.size)-1, random.randint(1,self.cube.size)-1, random.randint(1,self.cube.size)-1]) - self.randomise_direction() - return 1.0 / self.cube.size - def randomise_direction(self): - self.direction = numpy.array([random.randint(0,1),random.randint(0,1),random.randint(0,1)]) - for axis in range(0,3): - if (self.position[axis] == self.cube.size-1): - self.direction[axis] = 0 - if (self.position[axis] == 0): - self.direction[axis] = 1 - def moveaxis(self,axis): - if (self.direction[axis] == 1): - self.position[axis] += 1 - if (self.position[axis] == self.cube.size-1): - self.randomise_direction() - else: - self.position[axis] -= 1 - if (self.position[axis] == 0): - self.randomise_direction() + self.double_buffer = True + + self.time = 0; + + self.white = (255,255,255) + self.red = (255,0,0) + self.yellow = (255,255,0) + self.green = (0,128,0) + self.blue = (0,0,255) + self.orange = (255,165,0) + self.black = (0,0,0) + + self.n = 8 + + self.topFace = [[self.red]*3]*3 + self.bottomFace = [[self.green]*3]*3 + self.leftFace = [[self.orange]*3]*3 + self.rightFace = [[self.yellow]*3]*3 + self.frontFace = [[self.white]*3]*3 + self.backFace = [[self.blue]*3]*3 + + self.myCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] + self.oldCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] + + for a in range(3): + for b in range(3): + self.myCube[1 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[1 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[2 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[2 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] + for a in range(3): + for b in range(3): + self.myCube[1 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] + self.myCube[1 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] + self.myCube[2 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] + self.myCube[2 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] + + for a in range(3): + for b in range(3): + self.myCube[1 + (a*2)][0][1 + (b*2)] = self.leftFace[a][b] + self.myCube[1 + (a*2)][0][2 + (b*2)] = self.leftFace[a][b] + self.myCube[2 + (a*2)][0][1 + (b*2)] = self.leftFace[a][b] + self.myCube[2 + (a*2)][0][2 + (b*2)] = self.leftFace[a][b] + for a in range(3): + for b in range(3): + self.myCube[1 + (a*2)][7][1 + (b*2)] = self.rightFace[a][b] + self.myCube[1 + (a*2)][7][2 + (b*2)] = self.rightFace[a][b] + self.myCube[2 + (a*2)][7][1 + (b*2)] = self.rightFace[a][b] + self.myCube[2 + (a*2)][7][2 + (b*2)] = self.rightFace[a][b] + + for a in range(3): + for b in range(3): + self.myCube[0][1 + (a*2)][1 + (b*2)] = self.frontFace[a][b] + self.myCube[0][1 + (a*2)][2 + (b*2)] = self.frontFace[a][b] + self.myCube[0][2 + (a*2)][1 + (b*2)] = self.frontFace[a][b] + self.myCube[0][2 + (a*2)][2 + (b*2)] = self.frontFace[a][b] + for a in range(3): + for b in range(3): + self.myCube[7][1 + (a*2)][1 + (b*2)] = self.backFace[a][b] + self.myCube[7][1 + (a*2)][2 + (b*2)] = self.backFace[a][b] + self.myCube[7][2 + (a*2)][1 + (b*2)] = self.backFace[a][b] + self.myCube[7][2 + (a*2)][2 + (b*2)] = self.backFace[a][b] + + return 1.0 / 20 + + def rotateFrontFace(self): + for a in range(7): + self.myCube[1][a][0] = self.oldCube[1][a+1][0] + self.myCube[2][a][0] = self.oldCube[2][a+1][0] + + self.myCube[1][7][a] = self.oldCube[1][7][a+1] + self.myCube[2][7][a] = self.oldCube[2][7][a+1] + + b = 6-a + self.myCube[1][b+1][7] = self.oldCube[1][b][7] + self.myCube[2][b+1][7] = self.oldCube[2][b][7] + + self.myCube[1][0][b+1] = self.oldCube[1][0][b] + self.myCube[2][0][b+1] = self.oldCube[2][0][b] + + def tick(self): self.cube.clear() - for axis in range(0,random.randint(1,3)): - self.moveaxis(axis) - self.cube.set_pixel((self.position[0],self.position[1],self.position[2]),cubehelper.random_color()) + + self.time += 1 + + self.oldCube = self.myCube[:] + + if self.time < 999: + self.rotateFrontFace() + # + # print(self.myCube[1][1][0]) + # print(self.oldCube[1][1][0]) + + for a in range(8): + for b in range(8): + for c in range(8): + self.cube.set_pixel((a,b,c),self.myCube[a][b][c]) From f5fff172241bf4717ab060b97768b6ecf9e0d23b Mon Sep 17 00:00:00 2001 From: Tom Banister Date: Wed, 20 Sep 2017 18:00:07 +0100 Subject: [PATCH 2/4] it works --- patterns/rubix.py | 349 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 349 insertions(+) create mode 100644 patterns/rubix.py diff --git a/patterns/rubix.py b/patterns/rubix.py new file mode 100644 index 0000000..463bca2 --- /dev/null +++ b/patterns/rubix.py @@ -0,0 +1,349 @@ +# Bounce a pixel accross the cube in all three directions +# Copyright (C) Martyn Ranyard +# Released under the terms of the GNU General Public License version 3 + +import cubehelper +import random +import numpy +from copy import deepcopy + +class Pattern(object): + def init(self): + self.double_buffer = True + + self.time = 0; + + self.white = (255,255,255) + self.red = (255,0,0) + self.yellow = (255,255,0) + self.green = (0,128,0) + self.blue = (0,0,255) + self.orange = (255,165,0) + self.black = (0,0,0) + + self.n = 8 + + self.topFace = [[self.red for k in xrange(3)] for j in xrange(3)] + self.bottomFace = [[self.green for k in xrange(3)] for j in xrange(3)] + self.leftFace = [[self.orange for k in xrange(3)] for j in xrange(3)] + self.rightFace = [[self.white for k in xrange(3)] for j in xrange(3)] + self.frontFace = [[self.yellow for k in xrange(3)] for j in xrange(3)] + self.backFace = [[self.blue for k in xrange(3)] for j in xrange(3)] + + # self.leftFace[0][0] = self.black; + # self.topFace[0][0] = self.black; + # self.bottomFace[0][0] = self.black; + # self.rightFace[0][0] = self.black; + # self.frontFace[0][0] = self.black; + # self.backFace[0][0] = self.black; + + self.myCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] + self.oldCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] + + self.setCube(); + + self.moves = [] + + self.numMoves = 20 + + for x in range(self.numMoves): + self.moves.append(random.randint(0,12)) + + for move in reversed(self.moves): + if move % 2 == 0: + move += 1 + else: + move -= 1 + + if move == 0: + self.rotateTopFace() + elif move == 1: + self.rotateTopFace() + self.rotateTopFace() + self.rotateTopFace() + elif move == 2: + self.rotateBottomFace() + elif move == 3: + self.rotateBottomFace() + self.rotateBottomFace() + self.rotateBottomFace() + elif move == 4: + self.rotateLeftFace() + elif move == 5: + self.rotateLeftFace() + self.rotateLeftFace() + self.rotateLeftFace() + elif move == 6: + self.rotateRightFace() + elif move == 7: + self.rotateRightFace() + self.rotateRightFace() + self.rotateRightFace() + elif move == 8: + self.rotateFrontFace() + elif move == 9: + self.rotateFrontFace() + self.rotateFrontFace() + self.rotateFrontFace() + elif move == 10: + self.rotateBackFace() + elif move == 11: + self.rotateBackFace() + self.rotateBackFace() + self.rotateBackFace() + + return 1.0 / 5 + + def setCube(self): + for a in range(3): + for b in range(3): + self.myCube[1 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[1 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[2 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[2 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] + + self.myCube[1 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] + self.myCube[1 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] + self.myCube[2 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] + self.myCube[2 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] + + self.myCube[1 + (a*2)][0][1 + (b*2)] = self.rightFace[a][b] + self.myCube[1 + (a*2)][0][2 + (b*2)] = self.rightFace[a][b] + self.myCube[2 + (a*2)][0][1 + (b*2)] = self.rightFace[a][b] + self.myCube[2 + (a*2)][0][2 + (b*2)] = self.rightFace[a][b] + + self.myCube[1 + (a*2)][7][1 + (b*2)] = self.leftFace[a][b] + self.myCube[1 + (a*2)][7][2 + (b*2)] = self.leftFace[a][b] + self.myCube[2 + (a*2)][7][1 + (b*2)] = self.leftFace[a][b] + self.myCube[2 + (a*2)][7][2 + (b*2)] = self.leftFace[a][b] + + self.myCube[0][1 + (a*2)][1 + (b*2)] = self.frontFace[a][b] + self.myCube[0][1 + (a*2)][2 + (b*2)] = self.frontFace[a][b] + self.myCube[0][2 + (a*2)][1 + (b*2)] = self.frontFace[a][b] + self.myCube[0][2 + (a*2)][2 + (b*2)] = self.frontFace[a][b] + + self.myCube[7][1 + (a*2)][1 + (b*2)] = self.backFace[a][b] + self.myCube[7][1 + (a*2)][2 + (b*2)] = self.backFace[a][b] + self.myCube[7][2 + (a*2)][1 + (b*2)] = self.backFace[a][b] + self.myCube[7][2 + (a*2)][2 + (b*2)] = self.backFace[a][b] + + + def rotateFrontFace(self): + leftFaceTemp = deepcopy(self.leftFace) + topFaceTemp = deepcopy(self.topFace) + bottomFaceTemp = deepcopy(self.bottomFace) + rightFaceTemp = deepcopy(self.rightFace) + frontFaceTemp = deepcopy(self.frontFace) + backFaceTemp = deepcopy(self.backFace) + + self.frontFace[0][0] = frontFaceTemp[0][2] + self.frontFace[0][1] = frontFaceTemp[1][2] + + self.frontFace[0][2] = frontFaceTemp[2][2] + self.frontFace[1][2] = frontFaceTemp[2][1] + + self.frontFace[2][2] = frontFaceTemp[2][0] + self.frontFace[2][1] = frontFaceTemp[1][0] + + self.frontFace[2][0] = frontFaceTemp[0][0] + self.frontFace[1][0] = frontFaceTemp[0][1] + + for a in range(3): + self.leftFace[0][a] = bottomFaceTemp[0][a] + self.bottomFace[0][a] = rightFaceTemp[0][2-a] + self.rightFace[0][a] = topFaceTemp[0][a] + self.topFace[0][a] = leftFaceTemp[0][2-a] + + self.setCube(); + + def rotateBackFace(self): + leftFaceTemp = deepcopy(self.leftFace) + topFaceTemp = deepcopy(self.topFace) + bottomFaceTemp = deepcopy(self.bottomFace) + rightFaceTemp = deepcopy(self.rightFace) + frontFaceTemp = deepcopy(self.frontFace) + backFaceTemp = deepcopy(self.backFace) + + self.backFace[0][0] = backFaceTemp[0][2] + self.backFace[0][1] = backFaceTemp[1][2] + + self.backFace[0][2] = backFaceTemp[2][2] + self.backFace[1][2] = backFaceTemp[2][1] + + self.backFace[2][2] = backFaceTemp[2][0] + self.backFace[2][1] = backFaceTemp[1][0] + + self.backFace[2][0] = backFaceTemp[0][0] + self.backFace[1][0] = backFaceTemp[0][1] + + for a in range(3): + self.leftFace[2][a] = bottomFaceTemp[2][a] + self.bottomFace[2][a] = rightFaceTemp[2][2-a] + self.rightFace[2][a] = topFaceTemp[2][a] + self.topFace[2][a] = leftFaceTemp[2][2-a] + + self.setCube(); + + def rotateLeftFace(self): + leftFaceTemp = deepcopy(self.leftFace) + topFaceTemp = deepcopy(self.topFace) + bottomFaceTemp = deepcopy(self.bottomFace) + rightFaceTemp = deepcopy(self.rightFace) + frontFaceTemp = deepcopy(self.frontFace) + backFaceTemp = deepcopy(self.backFace) + + self.leftFace[0][0] = leftFaceTemp[0][2] + self.leftFace[0][1] = leftFaceTemp[1][2] + + self.leftFace[0][2] = leftFaceTemp[2][2] + self.leftFace[1][2] = leftFaceTemp[2][1] + + self.leftFace[2][2] = leftFaceTemp[2][0] + self.leftFace[2][1] = leftFaceTemp[1][0] + + self.leftFace[2][0] = leftFaceTemp[0][0] + self.leftFace[1][0] = leftFaceTemp[0][1] + + for a in range(3): + self.backFace[2][a] = bottomFaceTemp[a][2] + self.bottomFace[a][2] = frontFaceTemp[2][2-a] + self.frontFace[2][a] = topFaceTemp[a][2] + self.topFace[a][2] = backFaceTemp[2][2-a] + + self.setCube(); + + def rotateRightFace(self): + leftFaceTemp = deepcopy(self.leftFace) + topFaceTemp = deepcopy(self.topFace) + bottomFaceTemp = deepcopy(self.bottomFace) + rightFaceTemp = deepcopy(self.rightFace) + frontFaceTemp = deepcopy(self.frontFace) + backFaceTemp = deepcopy(self.backFace) + + self.rightFace[0][0] = rightFaceTemp[0][2] + self.rightFace[0][1] = rightFaceTemp[1][2] + + self.rightFace[0][2] = rightFaceTemp[2][2] + self.rightFace[1][2] = rightFaceTemp[2][1] + + self.rightFace[2][2] = rightFaceTemp[2][0] + self.rightFace[2][1] = rightFaceTemp[1][0] + + self.rightFace[2][0] = rightFaceTemp[0][0] + self.rightFace[1][0] = rightFaceTemp[0][1] + + for a in range(3): + self.backFace[0][a] = bottomFaceTemp[a][0] + self.bottomFace[a][0] = frontFaceTemp[0][2-a] + self.frontFace[0][a] = topFaceTemp[a][0] + self.topFace[a][0] = backFaceTemp[0][2-a] + + self.setCube(); + + def rotateTopFace(self): + leftFaceTemp = deepcopy(self.leftFace) + topFaceTemp = deepcopy(self.topFace) + bottomFaceTemp = deepcopy(self.bottomFace) + rightFaceTemp = deepcopy(self.rightFace) + frontFaceTemp = deepcopy(self.frontFace) + backFaceTemp = deepcopy(self.backFace) + + self.topFace[0][0] = topFaceTemp[0][2] + self.topFace[0][1] = topFaceTemp[1][2] + + self.topFace[0][2] = topFaceTemp[2][2] + self.topFace[1][2] = topFaceTemp[2][1] + + self.topFace[2][2] = topFaceTemp[2][0] + self.topFace[2][1] = topFaceTemp[1][0] + + self.topFace[2][0] = topFaceTemp[0][0] + self.topFace[1][0] = topFaceTemp[0][1] + + for a in range(3): + self.backFace[a][2] = rightFaceTemp[a][2] + self.rightFace[a][2] = frontFaceTemp[2-a][2] + self.frontFace[a][2] = leftFaceTemp[a][2] + self.leftFace[a][2] = backFaceTemp[2-a][2] + + self.setCube(); + + def rotateBottomFace(self): + leftFaceTemp = deepcopy(self.leftFace) + topFaceTemp = deepcopy(self.topFace) + bottomFaceTemp = deepcopy(self.bottomFace) + rightFaceTemp = deepcopy(self.rightFace) + frontFaceTemp = deepcopy(self.frontFace) + backFaceTemp = deepcopy(self.backFace) + + self.bottomFace[0][0] = bottomFaceTemp[0][2] + self.bottomFace[0][1] = bottomFaceTemp[1][2] + + self.bottomFace[0][2] = bottomFaceTemp[2][2] + self.bottomFace[1][2] = bottomFaceTemp[2][1] + + self.bottomFace[2][2] = bottomFaceTemp[2][0] + self.bottomFace[2][1] = bottomFaceTemp[1][0] + + self.bottomFace[2][0] = bottomFaceTemp[0][0] + self.bottomFace[1][0] = bottomFaceTemp[0][1] + + for a in range(3): + self.backFace[a][0] = rightFaceTemp[a][0] + self.rightFace[a][0] = frontFaceTemp[2-a][0] + self.frontFace[a][0] = leftFaceTemp[a][0] + self.leftFace[a][0] = backFaceTemp[2-a][0] + + self.setCube(); + + def tick(self): + self.cube.clear() + + self.oldCube = self.myCube[:] + + if self.time < self.numMoves: + move = self.moves[self.time] + + if move == 0: + self.rotateTopFace() + elif move == 1: + self.rotateTopFace() + self.rotateTopFace() + self.rotateTopFace() + elif move == 2: + self.rotateBottomFace() + elif move == 3: + self.rotateBottomFace() + self.rotateBottomFace() + self.rotateBottomFace() + elif move == 4: + self.rotateLeftFace() + elif move == 5: + self.rotateLeftFace() + self.rotateLeftFace() + self.rotateLeftFace() + elif move == 6: + self.rotateRightFace() + elif move == 7: + self.rotateRightFace() + self.rotateRightFace() + self.rotateRightFace() + elif move == 8: + self.rotateFrontFace() + elif move == 9: + self.rotateFrontFace() + self.rotateFrontFace() + self.rotateFrontFace() + elif move == 10: + self.rotateBackFace() + elif move == 11: + self.rotateBackFace() + self.rotateBackFace() + self.rotateBackFace() + + for a in range(8): + for b in range(8): + for c in range(8): + self.cube.set_pixel((a,b,c),self.myCube[a][b][c]) + + self.time += 1 From 8c752ab4c8512ee1f5baba448d67d28daba8a9aa Mon Sep 17 00:00:00 2001 From: Tom Banister Date: Wed, 20 Sep 2017 18:02:07 +0100 Subject: [PATCH 3/4] replace bounce.py --- patterns/bounce.py | 118 +++++++++------------------------------------ 1 file changed, 22 insertions(+), 96 deletions(-) diff --git a/patterns/bounce.py b/patterns/bounce.py index c5303c7..9b5fd5a 100644 --- a/patterns/bounce.py +++ b/patterns/bounce.py @@ -8,101 +8,27 @@ class Pattern(object): def init(self): - self.double_buffer = True - - self.time = 0; - - self.white = (255,255,255) - self.red = (255,0,0) - self.yellow = (255,255,0) - self.green = (0,128,0) - self.blue = (0,0,255) - self.orange = (255,165,0) - self.black = (0,0,0) - - self.n = 8 - - self.topFace = [[self.red]*3]*3 - self.bottomFace = [[self.green]*3]*3 - self.leftFace = [[self.orange]*3]*3 - self.rightFace = [[self.yellow]*3]*3 - self.frontFace = [[self.white]*3]*3 - self.backFace = [[self.blue]*3]*3 - - self.myCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] - self.oldCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] - - for a in range(3): - for b in range(3): - self.myCube[1 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] - self.myCube[1 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] - self.myCube[2 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] - self.myCube[2 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] - for a in range(3): - for b in range(3): - self.myCube[1 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] - self.myCube[1 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] - self.myCube[2 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] - self.myCube[2 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] - - for a in range(3): - for b in range(3): - self.myCube[1 + (a*2)][0][1 + (b*2)] = self.leftFace[a][b] - self.myCube[1 + (a*2)][0][2 + (b*2)] = self.leftFace[a][b] - self.myCube[2 + (a*2)][0][1 + (b*2)] = self.leftFace[a][b] - self.myCube[2 + (a*2)][0][2 + (b*2)] = self.leftFace[a][b] - for a in range(3): - for b in range(3): - self.myCube[1 + (a*2)][7][1 + (b*2)] = self.rightFace[a][b] - self.myCube[1 + (a*2)][7][2 + (b*2)] = self.rightFace[a][b] - self.myCube[2 + (a*2)][7][1 + (b*2)] = self.rightFace[a][b] - self.myCube[2 + (a*2)][7][2 + (b*2)] = self.rightFace[a][b] - - for a in range(3): - for b in range(3): - self.myCube[0][1 + (a*2)][1 + (b*2)] = self.frontFace[a][b] - self.myCube[0][1 + (a*2)][2 + (b*2)] = self.frontFace[a][b] - self.myCube[0][2 + (a*2)][1 + (b*2)] = self.frontFace[a][b] - self.myCube[0][2 + (a*2)][2 + (b*2)] = self.frontFace[a][b] - for a in range(3): - for b in range(3): - self.myCube[7][1 + (a*2)][1 + (b*2)] = self.backFace[a][b] - self.myCube[7][1 + (a*2)][2 + (b*2)] = self.backFace[a][b] - self.myCube[7][2 + (a*2)][1 + (b*2)] = self.backFace[a][b] - self.myCube[7][2 + (a*2)][2 + (b*2)] = self.backFace[a][b] - - return 1.0 / 20 - - def rotateFrontFace(self): - for a in range(7): - self.myCube[1][a][0] = self.oldCube[1][a+1][0] - self.myCube[2][a][0] = self.oldCube[2][a+1][0] - - self.myCube[1][7][a] = self.oldCube[1][7][a+1] - self.myCube[2][7][a] = self.oldCube[2][7][a+1] - - b = 6-a - self.myCube[1][b+1][7] = self.oldCube[1][b][7] - self.myCube[2][b+1][7] = self.oldCube[2][b][7] - - self.myCube[1][0][b+1] = self.oldCube[1][0][b] - self.myCube[2][0][b+1] = self.oldCube[2][0][b] - - + self.position = numpy.array([random.randint(1,self.cube.size)-1, random.randint(1,self.cube.size)-1, random.randint(1,self.cube.size)-1]) + self.randomise_direction() + return 1.0 / self.cube.size + def randomise_direction(self): + self.direction = numpy.array([random.randint(0,1),random.randint(0,1),random.randint(0,1)]) + for axis in range(0,3): + if (self.position[axis] == self.cube.size-1): + self.direction[axis] = 0 + if (self.position[axis] == 0): + self.direction[axis] = 1 + def moveaxis(self,axis): + if (self.direction[axis] == 1): + self.position[axis] += 1 + if (self.position[axis] == self.cube.size-1): + self.randomise_direction() + else: + self.position[axis] -= 1 + if (self.position[axis] == 0): + self.randomise_direction() def tick(self): self.cube.clear() - - self.time += 1 - - self.oldCube = self.myCube[:] - - if self.time < 999: - self.rotateFrontFace() - # - # print(self.myCube[1][1][0]) - # print(self.oldCube[1][1][0]) - - for a in range(8): - for b in range(8): - for c in range(8): - self.cube.set_pixel((a,b,c),self.myCube[a][b][c]) + for axis in range(0,random.randint(1,3)): + self.moveaxis(axis) + self.cube.set_pixel((self.position[0],self.position[1],self.position[2]),cubehelper.random_color()) From 70abef0f6e2d66018b47b2bbe0582f3d316c3650 Mon Sep 17 00:00:00 2001 From: Tom Banister Date: Wed, 20 Sep 2017 18:15:51 +0100 Subject: [PATCH 4/4] refactored reotating --- patterns/rubix.py | 364 ++++++++++++++++++---------------------------- 1 file changed, 142 insertions(+), 222 deletions(-) diff --git a/patterns/rubix.py b/patterns/rubix.py index 463bca2..10a1073 100644 --- a/patterns/rubix.py +++ b/patterns/rubix.py @@ -8,126 +8,6 @@ from copy import deepcopy class Pattern(object): - def init(self): - self.double_buffer = True - - self.time = 0; - - self.white = (255,255,255) - self.red = (255,0,0) - self.yellow = (255,255,0) - self.green = (0,128,0) - self.blue = (0,0,255) - self.orange = (255,165,0) - self.black = (0,0,0) - - self.n = 8 - - self.topFace = [[self.red for k in xrange(3)] for j in xrange(3)] - self.bottomFace = [[self.green for k in xrange(3)] for j in xrange(3)] - self.leftFace = [[self.orange for k in xrange(3)] for j in xrange(3)] - self.rightFace = [[self.white for k in xrange(3)] for j in xrange(3)] - self.frontFace = [[self.yellow for k in xrange(3)] for j in xrange(3)] - self.backFace = [[self.blue for k in xrange(3)] for j in xrange(3)] - - # self.leftFace[0][0] = self.black; - # self.topFace[0][0] = self.black; - # self.bottomFace[0][0] = self.black; - # self.rightFace[0][0] = self.black; - # self.frontFace[0][0] = self.black; - # self.backFace[0][0] = self.black; - - self.myCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] - self.oldCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] - - self.setCube(); - - self.moves = [] - - self.numMoves = 20 - - for x in range(self.numMoves): - self.moves.append(random.randint(0,12)) - - for move in reversed(self.moves): - if move % 2 == 0: - move += 1 - else: - move -= 1 - - if move == 0: - self.rotateTopFace() - elif move == 1: - self.rotateTopFace() - self.rotateTopFace() - self.rotateTopFace() - elif move == 2: - self.rotateBottomFace() - elif move == 3: - self.rotateBottomFace() - self.rotateBottomFace() - self.rotateBottomFace() - elif move == 4: - self.rotateLeftFace() - elif move == 5: - self.rotateLeftFace() - self.rotateLeftFace() - self.rotateLeftFace() - elif move == 6: - self.rotateRightFace() - elif move == 7: - self.rotateRightFace() - self.rotateRightFace() - self.rotateRightFace() - elif move == 8: - self.rotateFrontFace() - elif move == 9: - self.rotateFrontFace() - self.rotateFrontFace() - self.rotateFrontFace() - elif move == 10: - self.rotateBackFace() - elif move == 11: - self.rotateBackFace() - self.rotateBackFace() - self.rotateBackFace() - - return 1.0 / 5 - - def setCube(self): - for a in range(3): - for b in range(3): - self.myCube[1 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] - self.myCube[1 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] - self.myCube[2 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] - self.myCube[2 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] - - self.myCube[1 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] - self.myCube[1 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] - self.myCube[2 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] - self.myCube[2 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] - - self.myCube[1 + (a*2)][0][1 + (b*2)] = self.rightFace[a][b] - self.myCube[1 + (a*2)][0][2 + (b*2)] = self.rightFace[a][b] - self.myCube[2 + (a*2)][0][1 + (b*2)] = self.rightFace[a][b] - self.myCube[2 + (a*2)][0][2 + (b*2)] = self.rightFace[a][b] - - self.myCube[1 + (a*2)][7][1 + (b*2)] = self.leftFace[a][b] - self.myCube[1 + (a*2)][7][2 + (b*2)] = self.leftFace[a][b] - self.myCube[2 + (a*2)][7][1 + (b*2)] = self.leftFace[a][b] - self.myCube[2 + (a*2)][7][2 + (b*2)] = self.leftFace[a][b] - - self.myCube[0][1 + (a*2)][1 + (b*2)] = self.frontFace[a][b] - self.myCube[0][1 + (a*2)][2 + (b*2)] = self.frontFace[a][b] - self.myCube[0][2 + (a*2)][1 + (b*2)] = self.frontFace[a][b] - self.myCube[0][2 + (a*2)][2 + (b*2)] = self.frontFace[a][b] - - self.myCube[7][1 + (a*2)][1 + (b*2)] = self.backFace[a][b] - self.myCube[7][1 + (a*2)][2 + (b*2)] = self.backFace[a][b] - self.myCube[7][2 + (a*2)][1 + (b*2)] = self.backFace[a][b] - self.myCube[7][2 + (a*2)][2 + (b*2)] = self.backFace[a][b] - - def rotateFrontFace(self): leftFaceTemp = deepcopy(self.leftFace) topFaceTemp = deepcopy(self.topFace) @@ -136,17 +16,7 @@ def rotateFrontFace(self): frontFaceTemp = deepcopy(self.frontFace) backFaceTemp = deepcopy(self.backFace) - self.frontFace[0][0] = frontFaceTemp[0][2] - self.frontFace[0][1] = frontFaceTemp[1][2] - - self.frontFace[0][2] = frontFaceTemp[2][2] - self.frontFace[1][2] = frontFaceTemp[2][1] - - self.frontFace[2][2] = frontFaceTemp[2][0] - self.frontFace[2][1] = frontFaceTemp[1][0] - - self.frontFace[2][0] = frontFaceTemp[0][0] - self.frontFace[1][0] = frontFaceTemp[0][1] + self.rotateFace(self.frontFace, frontFaceTemp) for a in range(3): self.leftFace[0][a] = bottomFaceTemp[0][a] @@ -164,17 +34,7 @@ def rotateBackFace(self): frontFaceTemp = deepcopy(self.frontFace) backFaceTemp = deepcopy(self.backFace) - self.backFace[0][0] = backFaceTemp[0][2] - self.backFace[0][1] = backFaceTemp[1][2] - - self.backFace[0][2] = backFaceTemp[2][2] - self.backFace[1][2] = backFaceTemp[2][1] - - self.backFace[2][2] = backFaceTemp[2][0] - self.backFace[2][1] = backFaceTemp[1][0] - - self.backFace[2][0] = backFaceTemp[0][0] - self.backFace[1][0] = backFaceTemp[0][1] + self.rotateFace(self.backFace, backFaceTemp) for a in range(3): self.leftFace[2][a] = bottomFaceTemp[2][a] @@ -192,17 +52,7 @@ def rotateLeftFace(self): frontFaceTemp = deepcopy(self.frontFace) backFaceTemp = deepcopy(self.backFace) - self.leftFace[0][0] = leftFaceTemp[0][2] - self.leftFace[0][1] = leftFaceTemp[1][2] - - self.leftFace[0][2] = leftFaceTemp[2][2] - self.leftFace[1][2] = leftFaceTemp[2][1] - - self.leftFace[2][2] = leftFaceTemp[2][0] - self.leftFace[2][1] = leftFaceTemp[1][0] - - self.leftFace[2][0] = leftFaceTemp[0][0] - self.leftFace[1][0] = leftFaceTemp[0][1] + self.rotateFace(self.leftFace, leftFaceTemp) for a in range(3): self.backFace[2][a] = bottomFaceTemp[a][2] @@ -220,17 +70,7 @@ def rotateRightFace(self): frontFaceTemp = deepcopy(self.frontFace) backFaceTemp = deepcopy(self.backFace) - self.rightFace[0][0] = rightFaceTemp[0][2] - self.rightFace[0][1] = rightFaceTemp[1][2] - - self.rightFace[0][2] = rightFaceTemp[2][2] - self.rightFace[1][2] = rightFaceTemp[2][1] - - self.rightFace[2][2] = rightFaceTemp[2][0] - self.rightFace[2][1] = rightFaceTemp[1][0] - - self.rightFace[2][0] = rightFaceTemp[0][0] - self.rightFace[1][0] = rightFaceTemp[0][1] + self.rotateFace(self.rightFace, rightFaceTemp) for a in range(3): self.backFace[0][a] = bottomFaceTemp[a][0] @@ -248,17 +88,7 @@ def rotateTopFace(self): frontFaceTemp = deepcopy(self.frontFace) backFaceTemp = deepcopy(self.backFace) - self.topFace[0][0] = topFaceTemp[0][2] - self.topFace[0][1] = topFaceTemp[1][2] - - self.topFace[0][2] = topFaceTemp[2][2] - self.topFace[1][2] = topFaceTemp[2][1] - - self.topFace[2][2] = topFaceTemp[2][0] - self.topFace[2][1] = topFaceTemp[1][0] - - self.topFace[2][0] = topFaceTemp[0][0] - self.topFace[1][0] = topFaceTemp[0][1] + self.rotateFace(self.topFace, topFaceTemp) for a in range(3): self.backFace[a][2] = rightFaceTemp[a][2] @@ -276,17 +106,7 @@ def rotateBottomFace(self): frontFaceTemp = deepcopy(self.frontFace) backFaceTemp = deepcopy(self.backFace) - self.bottomFace[0][0] = bottomFaceTemp[0][2] - self.bottomFace[0][1] = bottomFaceTemp[1][2] - - self.bottomFace[0][2] = bottomFaceTemp[2][2] - self.bottomFace[1][2] = bottomFaceTemp[2][1] - - self.bottomFace[2][2] = bottomFaceTemp[2][0] - self.bottomFace[2][1] = bottomFaceTemp[1][0] - - self.bottomFace[2][0] = bottomFaceTemp[0][0] - self.bottomFace[1][0] = bottomFaceTemp[0][1] + self.rotateFace(self.bottomFace, bottomFaceTemp) for a in range(3): self.backFace[a][0] = rightFaceTemp[a][0] @@ -296,6 +116,141 @@ def rotateBottomFace(self): self.setCube(); + def makeMove(self, move): + if move == 0: + self.rotateTopFace() + elif move == 1: + self.rotateTopFace() + self.rotateTopFace() + self.rotateTopFace() + elif move == 2: + self.rotateBottomFace() + elif move == 3: + self.rotateBottomFace() + self.rotateBottomFace() + self.rotateBottomFace() + elif move == 4: + self.rotateLeftFace() + elif move == 5: + self.rotateLeftFace() + self.rotateLeftFace() + self.rotateLeftFace() + elif move == 6: + self.rotateRightFace() + elif move == 7: + self.rotateRightFace() + self.rotateRightFace() + self.rotateRightFace() + elif move == 8: + self.rotateFrontFace() + elif move == 9: + self.rotateFrontFace() + self.rotateFrontFace() + self.rotateFrontFace() + elif move == 10: + self.rotateBackFace() + elif move == 11: + self.rotateBackFace() + self.rotateBackFace() + self.rotateBackFace() + + def rotateFace(self, face, faceTemp): + face[0][0] = faceTemp[0][2] + face[0][1] = faceTemp[1][2] + + face[0][2] = faceTemp[2][2] + face[1][2] = faceTemp[2][1] + + face[2][2] = faceTemp[2][0] + face[2][1] = faceTemp[1][0] + + face[2][0] = faceTemp[0][0] + face[1][0] = faceTemp[0][1] + + def init(self): + self.double_buffer = True + + self.time = 0; + + self.white = (255,255,255) + self.red = (255,0,0) + self.yellow = (255,255,0) + self.green = (0,128,0) + self.blue = (0,0,255) + self.orange = (255,165,0) + self.black = (0,0,0) + + self.n = 8 + + self.topFace = [[self.red for k in xrange(3)] for j in xrange(3)] + self.bottomFace = [[self.green for k in xrange(3)] for j in xrange(3)] + self.leftFace = [[self.orange for k in xrange(3)] for j in xrange(3)] + self.rightFace = [[self.white for k in xrange(3)] for j in xrange(3)] + self.frontFace = [[self.yellow for k in xrange(3)] for j in xrange(3)] + self.backFace = [[self.blue for k in xrange(3)] for j in xrange(3)] + + # self.leftFace[0][0] = self.black; + # self.topFace[0][0] = self.black; + # self.bottomFace[0][0] = self.black; + # self.rightFace[0][0] = self.black; + # self.frontFace[0][0] = self.black; + # self.backFace[0][0] = self.black; + + self.myCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] + self.oldCube = [[[self.black for k in xrange(self.n)] for j in xrange(self.n)] for i in xrange(self.n)] + + self.setCube(); + + self.moves = [] + + self.numMoves = 20 + + for x in range(self.numMoves): + self.moves.append(random.randint(0,12)) + + for move in reversed(self.moves): + if move % 2 == 0: + move += 1 + else: + move -= 1 + + self.makeMove(move) + + return 1.0 / 5 + + def setCube(self): + for a in range(3): + for b in range(3): + self.myCube[1 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[1 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[2 + (a*2)][1 + (b*2)][0] = self.bottomFace[a][b] + self.myCube[2 + (a*2)][2 + (b*2)][0] = self.bottomFace[a][b] + + self.myCube[1 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] + self.myCube[1 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] + self.myCube[2 + (a*2)][1 + (b*2)][7] = self.topFace[a][b] + self.myCube[2 + (a*2)][2 + (b*2)][7] = self.topFace[a][b] + + self.myCube[1 + (a*2)][0][1 + (b*2)] = self.rightFace[a][b] + self.myCube[1 + (a*2)][0][2 + (b*2)] = self.rightFace[a][b] + self.myCube[2 + (a*2)][0][1 + (b*2)] = self.rightFace[a][b] + self.myCube[2 + (a*2)][0][2 + (b*2)] = self.rightFace[a][b] + + self.myCube[1 + (a*2)][7][1 + (b*2)] = self.leftFace[a][b] + self.myCube[1 + (a*2)][7][2 + (b*2)] = self.leftFace[a][b] + self.myCube[2 + (a*2)][7][1 + (b*2)] = self.leftFace[a][b] + self.myCube[2 + (a*2)][7][2 + (b*2)] = self.leftFace[a][b] + + self.myCube[0][1 + (a*2)][1 + (b*2)] = self.frontFace[a][b] + self.myCube[0][1 + (a*2)][2 + (b*2)] = self.frontFace[a][b] + self.myCube[0][2 + (a*2)][1 + (b*2)] = self.frontFace[a][b] + self.myCube[0][2 + (a*2)][2 + (b*2)] = self.frontFace[a][b] + + self.myCube[7][1 + (a*2)][1 + (b*2)] = self.backFace[a][b] + self.myCube[7][1 + (a*2)][2 + (b*2)] = self.backFace[a][b] + self.myCube[7][2 + (a*2)][1 + (b*2)] = self.backFace[a][b] + self.myCube[7][2 + (a*2)][2 + (b*2)] = self.backFace[a][b] + def tick(self): self.cube.clear() @@ -304,42 +259,7 @@ def tick(self): if self.time < self.numMoves: move = self.moves[self.time] - if move == 0: - self.rotateTopFace() - elif move == 1: - self.rotateTopFace() - self.rotateTopFace() - self.rotateTopFace() - elif move == 2: - self.rotateBottomFace() - elif move == 3: - self.rotateBottomFace() - self.rotateBottomFace() - self.rotateBottomFace() - elif move == 4: - self.rotateLeftFace() - elif move == 5: - self.rotateLeftFace() - self.rotateLeftFace() - self.rotateLeftFace() - elif move == 6: - self.rotateRightFace() - elif move == 7: - self.rotateRightFace() - self.rotateRightFace() - self.rotateRightFace() - elif move == 8: - self.rotateFrontFace() - elif move == 9: - self.rotateFrontFace() - self.rotateFrontFace() - self.rotateFrontFace() - elif move == 10: - self.rotateBackFace() - elif move == 11: - self.rotateBackFace() - self.rotateBackFace() - self.rotateBackFace() + self.makeMove(move) for a in range(8): for b in range(8):