From 878248417e668daaeb8e7975b8a77e33dbd8c66a Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Wed, 2 Mar 2016 20:48:13 -0500 Subject: [PATCH 01/23] made some files --- game.py | 0 models.py | 0 requirements.txt | 1 + 3 files changed, 1 insertion(+) create mode 100644 game.py create mode 100644 models.py create mode 100644 requirements.txt diff --git a/game.py b/game.py new file mode 100644 index 0000000..e69de29 diff --git a/models.py b/models.py new file mode 100644 index 0000000..e69de29 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b9d12f3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +hg+http://bitbucket.org/pygame/pygame From 631474e3071ded455d5ca03774cb3abbd15d3064 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Thu, 3 Mar 2016 00:52:23 -0500 Subject: [PATCH 02/23] made grid, square snake --- .game.py.swp | Bin 0 -> 12288 bytes .models.py.swp | Bin 0 -> 12288 bytes game.py | 24 ++++++++++ models.py | 116 +++++++++++++++++++++++++++++++++++++++++++++++++ models.pyc | Bin 0 -> 6106 bytes 5 files changed, 140 insertions(+) create mode 100644 .game.py.swp create mode 100644 .models.py.swp create mode 100644 models.pyc diff --git a/.game.py.swp b/.game.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..b55c8889d924e48e9d6f81fb7b6c41fb2ae383b8 GIT binary patch literal 12288 zcmeI2y>1gh5XZ-KSA-zaL_o1XkxK+;8xnycxe6b05%HC{J#BpB^GbJn$KKkODWIUD zrQ;Dmf=A#HBB-c%1qw<;!R*}`#}py0r8(*E_1*kuX7_iM;y)3aP#g8+`iRrxuomYu8OsbhiA`cClg=-On?b60Vco%m;e)C z0!vT8<_&m7r#M%iWW8P+|E%>bFHC?5FaajO1egF5U;<2l2`~XBzyz4U5)zORfLQ_f zL3029&wl^^Tm|?}`bzpj`b_#n`bc_9dQG}VxA>esd(R6i@Am)D1YPC1P^TrA%L1g5_ zcXwVt)7E53f+iSB9VHmz7`64w&(h(Uk=8V-Ejr?XObT>aY9LBOV5d2XPDkX^a*+GU zVfSE{41>&62BGvURwcw}{Y|n=hAKf(m!|u9lLIrN+42(`qs9+uN__9{PW?2CFrm%4 zv((WZeXX9~5Jlf0YFeL7CtJ26&A0|>op2%rXpbcHF zU#J&Ib=*QO|73ZwCFaEzJ1>MNy{@jbA`(C(!%)-l!q9Qt2*Xq=9fljb0P~8}Zl?_k f4Lib(_Np|`j1}%Z!@y*zC=XeP`uWz(P&I`=S!Cjm literal 0 HcmV?d00001 diff --git a/.models.py.swp b/.models.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..1ed4e010cfe877ed8334ab85031a3d3e0b48c6bd GIT binary patch literal 12288 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 Date: Thu, 3 Mar 2016 00:56:05 -0500 Subject: [PATCH 03/23] cleaned up --- .game.py.swp | Bin 12288 -> 0 bytes .gitignore | 2 ++ .models.py.swp | Bin 12288 -> 0 bytes models.pyc | Bin 6106 -> 0 bytes 4 files changed, 2 insertions(+) delete mode 100644 .game.py.swp create mode 100644 .gitignore delete mode 100644 .models.py.swp delete mode 100644 models.pyc diff --git a/.game.py.swp b/.game.py.swp deleted file mode 100644 index b55c8889d924e48e9d6f81fb7b6c41fb2ae383b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2y>1gh5XZ-KSA-zaL_o1XkxK+;8xnycxe6b05%HC{J#BpB^GbJn$KKkODWIUD zrQ;Dmf=A#HBB-c%1qw<;!R*}`#}py0r8(*E_1*kuX7_iM;y)3aP#g8+`iRrxuomYu8OsbhiA`cClg=-On?b60Vco%m;e)C z0!vT8<_&m7r#M%iWW8P+|E%>bFHC?5FaajO1egF5U;<2l2`~XBzyz4U5)zORfLQ_f zL3029&wl^^Tm|?}`bzpj`b_#n`bc_9dQG}VxA>esd(R6i@Am)D1YPC1P^TrA%L1g5_ zcXwVt)7E53f+iSB9VHmz7`64w&(h(Uk=8V-Ejr?XObT>aY9LBOV5d2XPDkX^a*+GU zVfSE{41>&62BGvURwcw}{Y|n=hAKf(m!|u9lLIrN+42(`qs9+uN__9{PW?2CFrm%4 zv((WZeXX9~5Jlf0YFeL7CtJ26&A0|>op2%rXpbcHF zU#J&Ib=*QO|73ZwCFaEzJ1>MNy{@jbA`(C(!%)-l!q9Qt2*Xq=9fljb0P~8}Zl?_k f4Lib(_Np|`j1}%Z!@y*zC=XeP`uWz(P&I`=S!Cjm diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c9b568f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyc +*.swp diff --git a/.models.py.swp b/.models.py.swp deleted file mode 100644 index 1ed4e010cfe877ed8334ab85031a3d3e0b48c6bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2U1%It6vuD889P_X(xXJ&V2(j?Lc3x!$uWq0R( zoOA!@+;eY8CPz-}KPVqJwh6rM72=ccE}ghq+93S05K*h6!iXA{e;u`2+jfp0QOoxd z;)Qs^;ijXf+LOckJ*`5kuANzRIP{yL)oM9jbGYT(%8iVm^Iy~D?YRQE0ym_FM&z$BzOq?wOWWv;8XAx2*Efoz#8y#L5Pds z0yqa=0XBFFtO6^+mAi!a7VH3zfcwCYtAzLgTmK&>eG|f_^+(wyt)qU3wF>f(c zc2U$_D~coyDEX7qs;;?DfQL!b9^bdqO$D0B2&_;?)sdRf!A#mWJFuQ@n2#Ig(J&|v z`m;)6Wh(Swi8>Dq49H{FjEbZsbvtmC^cynpBS$;FhsN0Z7RIsXLu6#0e|F$uA!81f zsz*Icw!^nOhv8YNJJC>Y%5tr%hvPXq(IeG7mMoX&xqiJc&C8?Zmhh!hUUWKcfqOlT zo1s!(SLLjaDY+BvDB#ukTD4Py6;c?hERaR|Y>;XNQkB1vt_{SIzCc+S(fZ@Cz&=I3 z9oUxcs>jV7+HR6?T0|Q8)})E?7-Oi4!ov}4Z{io<=Le}zNgp-EoZvFoc?%TN`Gv3V0AGO z7L4jG3d^Z3o~oG<@wV-ihIB6Vrs6pQ%)R?U1vQ2J}>j*NY& z$fLCLO6mTTCETB!!Ps7y`kl}vuFjci)NijmHiB&GNBJQAi)5xO#TNKqCymrnsRGH( z5=RBL3e^sFB<{u@r%E?7pgMY|7sRNFlH3yL;2}6asC)jo4dv*4)JzLjbG>q zw%kqdnOa+9q4erQM4Q7U|7ciCQC z9&sI^s|s!^Jl64WuHxWzLh1L5j)ZV%_huCiWbG&F$`Ds7oO-z5pfY0L;0hG=t~WfL ziP9Q4^Y{O5;w5iyo%Nt9MnIbglXfPF}p!d|d@PJ_>ss`myJtA6I@pf(@R7N9wRMhPsY7 z(g3C)30*fWjhn_~TO(MgC)~B`2lP+;JVFcD#C8@cQ*wsnbh*qvFF1dD*NM2u^-m>S zJ|N=K*N+AL|nu$?fe9mY}m78%Z3F@_WS_&zFYmU<8WXU%c^qK?c29*-N#qARQuOl z>ra3E+b4a=KQ;XS8Cv=ebOF9bMj{&+cw&ug8VPFhLgcx~ryHIG^@2K8Qfm@43hKF% zT9;tDpf*eDlmxAUI#W^`63iCVxsrNLg7XFSLP?#L;9^0&R8pH_TN1n>+nywU7mH=) z<++iK8L=~R|AR<3_HgMkHW~gKpS5fn!~4A*`$=e@me%k+>3GyT)QH&|2ffTL(L+ADGx{skeyDzh3SGYGbEPu~7XKpTG|^HfmY4Zw1}kvsu&tn_bLdJ04Jy2(R81p& zPhI1tpuZ*ps@<+ZOiC@pg)qan4B^kPI+OzHA-9H}Y}X`dE1Hv9Q)*q0qDTXIDu+Kt z`*50&#_&EtZ4%0IYKx(cqvkClk|zd-S0#5w<^HAMRapIka<9Bf?ySnaW=?7Lf9eaF zRQZ&?b1HZLHRWE(EZI%8N%+u@W#JpkZXl?vm{V)HWdW&H8zr>C@ z`rkxXY4)11z>J~jlxfm1&05BTfuQg)OPUf7m{fPjM`l~#0g>Qji3LcYqr>l_D{-Mr z!F!-)nio8|0ef10AWb0X&79;C%Js-g@VUne`TyG*P1I*CWbaBV#t*f=k7L89%{4q8 zG6wv&$wgM@XyR=U?${^|<0!2xIkAt`E#HUKl-Mff0&u=hE3lP&?_&bhnW=7D7!;+~ z!my6|=LBI&Zs&xCLMdt|fXWG;N|dXfj#~zc$r6KKqkb)ptXf5F;a>;6igM*(%Bbg@ zji@!MnFE)garf{n%=9$~{V|#|lXuh1d#?;|@>T2UXma0t3&P&zqTCYCJ^v;KbcTM) zbM9?S%ea1V@|?>r5PEN*Pc^V9kNLQQmi`glK%I*#!@=h~OAxMz=(~@9Uz{B3UNC`b z4xS!o35#O{5?BQ59fNEj6(>Zsa%~b1yDNm>`Ogz46#af&U%Ox!v{NXjCDl|82g(64HMYUFEUKomJYC zhXZdf^X4MjW%EOKi=oaX4@^nx@ItadRH4n)#;}}Penl-0h;d+o^Bcy+lONy}43G1x z=}-?WD%#YPWp`2VU58=aZE+22uxU9{&{{sPdk%J}Vwxq#a*59pJ5IVFHx2)e$O_v#9xFry*E1G-{6gKhisSojf|E2|M7yyLp1 z7pYTqQ2vNhvRBLMX!7_Zbm%GQis)vuIi0cA)pO=f92`EtcKaacr^J>knA+mZd_@7R zXVrke8W6B(lSdWJ_8YX~=0Yutwn92{jjAFk74jCKXr83`TyGxv-I@mJ@N%7YdYx=< zjC*pt*(ns(3f%p2^->*BL6-kLi12TrJB#gUDF|750!!_pc{z5tf1g~{YC4+SqKp)z zN)bD#YU`N2AICu-|MgQQ=QO5PlM}ToA30AiVx(AdW=j1O5@~&PGs2k_<7svNCsx$( zT4IAfH&C<{iscq@9=bdEnu>S2lS>hy+REgnC8)++j<6%Ae5p7zfz#Kmr^4Btq#OM9SXAP)jpRei6=|ji2&opjoedwf$Cm4sEL4YS-G0Su< Date: Sat, 5 Mar 2016 23:19:23 -0500 Subject: [PATCH 04/23] snake moves now --- game.py | 7 +++-- linkedlist.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++ models.py | 76 ++++++++++++++++++++++++++++++++------------------- 3 files changed, 122 insertions(+), 30 deletions(-) create mode 100644 linkedlist.py diff --git a/game.py b/game.py index 144bd6c..92c443e 100644 --- a/game.py +++ b/game.py @@ -2,12 +2,14 @@ from models import * import time -square_width = 10 +square_width = 10 #pixels grid_width = 51 +pixels_wide = square_width * grid_width +speed = 10 #blocks per second if __name__ == '__main__': pygame.init() - size = (square_width * grid_width, square_width * grid_width) + size = (pixels_wide, pixels_wide) screen = pygame.display.set_mode(size) model = GameModel(grid_width) @@ -20,5 +22,6 @@ if event.type == pygame.QUIT: running = False controller.handle_event(event) + model.update_snake() view.draw() time.sleep(.001) diff --git a/linkedlist.py b/linkedlist.py new file mode 100644 index 0000000..b33d634 --- /dev/null +++ b/linkedlist.py @@ -0,0 +1,69 @@ +class Node(object): + def __init__(self, data=None, next_node=None): + self.data = data + self.next_node = next_node + + def get_data(self): + return self.data + + def get_next(self): + return self.next_node + + def set_next(self, new_next): + self.next_node = new_next + +class LinkedList(object): + def __init__(self, head=None): + self.head = head + + def insert(self, data): + new_node = Node(data) + new_node.set_next(self.head) + self.head = new_node + + def size(self): + current = self.head + count = 0 + while current: + count += 1 + current = current.get_next() + return count + + def search(self, data): + current = self.head + found = False + while current and found is False: + if current.get_data() == data: + found = True + else: + current = current.get_next() + if current is None: + raise ValueError('Data not in list') + return current + + def delete(self, data=None): + """Deletes the node with specified data from the list. + If no data is specified, deletes the last element in the list""" + current = self.head + previous = None + found = False + while current and found is False: + if data is not None and current.get_data() == data: + found = True + elif data is None and current.get_next() is None: + found = True + else: + previous = current + current = current.get_next() + if current is None: + raise ValueError('Data not in list') + else: + previous.set_next(current.get_next()) + + def get_list(self): + current = self.head + unlinked = [] + while current: + unlinked.append(current.data) + current = current.get_next() + return unlinked diff --git a/models.py b/models.py index 784d153..d6dd25c 100644 --- a/models.py +++ b/models.py @@ -1,4 +1,6 @@ import pygame +from linkedlist import Node, LinkedList +import random class GameView(object): def __init__(self, model, screen, square_size=10): @@ -34,34 +36,51 @@ def handle_event(self, event): if event.type != pygame.KEYDOWN: return if event.key == pygame.K_LEFT: - x = self.model.snake.parts[0].x - y = self.model.snake.parts[0].y - self.model.move_snake(x - 1, y) + self.model.snake.direction = 'left' + #self.model.move_snake(x - 1, y) if event.key == pygame.K_RIGHT: - x = self.model.snake.parts[0].x - y = self.model.snake.parts[0].y - self.model.move_snake(x + 1, y) + self.model.snake.direction = 'right' + #self.model.move_snake(x + 1, y) if event.key == pygame.K_UP: - x = self.model.snake.parts[0].x - y = self.model.snake.parts[0].y - self.model.move_snake(x, y - 1) + self.model.snake.direction = 'up' + #self.model.move_snake(x, y - 1) if event.key == pygame.K_DOWN: - x = self.model.snake.parts[0].x - y = self.model.snake.parts[0].y - self.model.move_snake(x, y + 1) + self.model.snake.direction = 'down' + #self.model.move_snake(x, y + 1) class GameModel(object): def __init__(self, dimensions=50): self.grid = GameGrid(dimensions) self.snake = Snake(dimensions/2) - self.grid.grid[dimensions/2][dimensions/2] = self.snake + self.grid.grid[dimensions/2][dimensions/2] = self.snake.head.data + self.make_food() def move_snake(self, to_x, to_y): # Delete in the grid - self.grid.grid[self.snake.parts[0].x][self.snake.parts[0].y] = None # Be careful in the future when implementing more snake per snake + for part in self.snake.get_list(): + self.grid.grid[part.x][part.y] = None + # Move snake internally self.snake.move(to_x, to_y) # Update in grid - self.grid.grid[to_x][to_y] = self.snake.parts[0] + for part in self.snake.get_list(): + self.grid.grid[part.x][part.y] = part + + def make_food(self): + x = random.randrange(len(self.grid.grid)) + y = random.randrange(len(self.grid.grid[x])) + self.grid.grid[x][y] = Food() + + def update_snake(self): + x = self.snake.head.data.x + y = self.snake.head.data.y + if self.snake.direction == 'left': + self.move_snake(x - 1, y) + if self.snake.direction == 'right': + self.move_snake(x + 1, y) + if self.snake.direction == 'up': + self.move_snake(x, y - 1) + if self.snake.direction == 'down': + self.move_snake(x, y + 1) class GameGrid(object): def __init__(self, dimensions): @@ -81,29 +100,30 @@ def __repr__(self): repr_string += ('\n') return repr_string - def update(self, snake): - for part in snake.parts: - x = part.x - y = part.y - self.grid[x][y] = part - class SnakeBodyPart(object): color = 'green' - def __init__(self, x, y): + def __init__(self, x, y, index=0): self.x, self.y = (x, y) + self.index = index -class Snake(object): - def __init__(self, position): - self.parts = [SnakeBodyPart(position, position)] +class Snake(LinkedList): + def __init__(self, position, direction=None): + head = Node(SnakeBodyPart(position, position)) + super(Snake, self).__init__(head) + self.direction = direction def move(self, to_x, to_y): """ Takes a tuple of position""" # Move internally - self.parts[0].x = to_x - self.parts[0].y = to_y + new_head = SnakeBodyPart(to_x, to_y) + self.insert(new_head) + self.delete() class Food(object): - pass + color = 'yellow' + + def __repr__(self): + return 'Food' class Wall(object): color = 'red' From 2bf05835036d0de8c8cecfd4f77798b9b035a4c2 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Sun, 6 Mar 2016 14:13:52 -0500 Subject: [PATCH 05/23] changed food --- models.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/models.py b/models.py index d6dd25c..bf48384 100644 --- a/models.py +++ b/models.py @@ -68,7 +68,8 @@ def move_snake(self, to_x, to_y): def make_food(self): x = random.randrange(len(self.grid.grid)) y = random.randrange(len(self.grid.grid[x])) - self.grid.grid[x][y] = Food() + self.food = Food(x, y) + self.grid.grid[x][y] = self.food def update_snake(self): x = self.snake.head.data.x @@ -122,6 +123,10 @@ def move(self, to_x, to_y): class Food(object): color = 'yellow' + def __init__(self, x, y): + self.x = x + self.y = y + def __repr__(self): return 'Food' From 9cf31dbe9c97e7e06703725614b68f043d9470b1 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Sun, 6 Mar 2016 16:40:38 -0500 Subject: [PATCH 06/23] 2D Snake now operational --- game.py | 9 +++- linkedlist.py | 12 ++++-- models.py | 116 +++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 106 insertions(+), 31 deletions(-) diff --git a/game.py b/game.py index 92c443e..e5093e4 100644 --- a/game.py +++ b/game.py @@ -5,7 +5,7 @@ square_width = 10 #pixels grid_width = 51 pixels_wide = square_width * grid_width -speed = 10 #blocks per second +ms_per_block = 5 # screen refreshes per move if __name__ == '__main__': pygame.init() @@ -17,11 +17,16 @@ controller = GameController(model) running = True + count = 0 while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False controller.handle_event(event) - model.update_snake() + count += 1 + if count == ms_per_block: + model.update_snake() + model.collision() + count = 0 view.draw() time.sleep(.001) diff --git a/linkedlist.py b/linkedlist.py index b33d634..684f4d6 100644 --- a/linkedlist.py +++ b/linkedlist.py @@ -16,10 +16,16 @@ class LinkedList(object): def __init__(self, head=None): self.head = head - def insert(self, data): + def insert(self, data, index=0): new_node = Node(data) - new_node.set_next(self.head) - self.head = new_node + current = self.head + count = 0 + while count < index: + count += 1 + current = current.get_next() + new_node.set_next(current) + if index == 0: + self.head = new_node def size(self): current = self.head diff --git a/models.py b/models.py index bf48384..80df68d 100644 --- a/models.py +++ b/models.py @@ -35,24 +35,31 @@ def __init__(self, model): def handle_event(self, event): if event.type != pygame.KEYDOWN: return - if event.key == pygame.K_LEFT: - self.model.snake.direction = 'left' - #self.model.move_snake(x - 1, y) - if event.key == pygame.K_RIGHT: - self.model.snake.direction = 'right' - #self.model.move_snake(x + 1, y) - if event.key == pygame.K_UP: - self.model.snake.direction = 'up' - #self.model.move_snake(x, y - 1) - if event.key == pygame.K_DOWN: - self.model.snake.direction = 'down' - #self.model.move_snake(x, y + 1) - + control_dict = { + pygame.K_LEFT: 'left', + pygame.K_RIGHT: 'right', + pygame.K_UP: 'up', + pygame.K_DOWN: 'down' + } + opposite = { + 'up': 'down', + 'down': 'up', + 'left': 'right', + 'right': 'left', + None: None + } + new_direction = control_dict[event.key] + if new_direction != opposite[self.model.snake.direction]: + self.model.snake.direction = new_direction class GameModel(object): def __init__(self, dimensions=50): self.grid = GameGrid(dimensions) self.snake = Snake(dimensions/2) self.grid.grid[dimensions/2][dimensions/2] = self.snake.head.data + self.foods = [] + self.walls = [] + self.dead = False + self.make_first_walls() self.make_food() def move_snake(self, to_x, to_y): @@ -60,18 +67,24 @@ def move_snake(self, to_x, to_y): for part in self.snake.get_list(): self.grid.grid[part.x][part.y] = None # Move snake internally - self.snake.move(to_x, to_y) + grow = bool(self.snake.growth_counter) + self.snake.move(to_x, to_y, grow) + if grow: + self.snake.growth_counter -= 1 # Update in grid for part in self.snake.get_list(): self.grid.grid[part.x][part.y] = part def make_food(self): - x = random.randrange(len(self.grid.grid)) - y = random.randrange(len(self.grid.grid[x])) - self.food = Food(x, y) - self.grid.grid[x][y] = self.food + x = random.randrange(1, len(self.grid.grid) - 1) + y = random.randrange(1, len(self.grid.grid[x]) - 1) + new_food = Food(x, y) + self.foods.append(new_food) + self.grid.grid[x][y] = new_food def update_snake(self): + if self.dead: + return x = self.snake.head.data.x y = self.snake.head.data.y if self.snake.direction == 'left': @@ -83,6 +96,50 @@ def update_snake(self): if self.snake.direction == 'down': self.move_snake(x, y + 1) + def collision(self): + """ + Check if the Snake's head is hitting a wall or a food. + Act on those. + """ + x = self.snake.head.data.x + y = self.snake.head.data.y + + # Check for wall collision + for a_wall in self.walls: + if a_wall.x == x and a_wall.y == y: + self.die() + + # Check for food collision + for i, apple in enumerate(self.foods): + if apple.x == x and apple.y == y: + self.snake.grow() + del self.foods[i] + self.make_food() + + # Check for snake collisions + for part in self.snake.get_list()[1:]: # Don't check against the head + if part.x == x and part.y == y: + self.die() + + def die(self): + self.dead = True + + def make_first_walls(self): + for i in range(len(self.grid.grid)): + first_wall = Wall(i, 0) + last_wall = Wall(i, len(self.grid.grid[i])-1) + self.grid.grid[i][0] = first_wall # Make top and bottom lines + self.grid.grid[i][-1] = last_wall + self.walls.extend((first_wall, last_wall)) + + for j in range(1, len(self.grid.grid[0])): # Make side walls + first_wall = Wall(0, j) + last_wall = Wall(len(self.grid.grid[j])-1, j) + self.grid.grid[0][j] = first_wall + self.grid.grid[-1][j] = last_wall + self.walls.extend((first_wall, last_wall)) + + class GameGrid(object): def __init__(self, dimensions): self.grid = [] @@ -90,9 +147,7 @@ def __init__(self, dimensions): self.grid.append([]) for j in range(dimensions): self.grid[i].append(None) - if i == 0 or i == dimensions - 1 or j == 0 or j == dimensions - 1: - self.grid[i][j] = Wall() - + def __repr__(self): repr_string = '' for i in range(len(self.grid)): @@ -108,24 +163,30 @@ def __init__(self, x, y, index=0): self.index = index class Snake(LinkedList): - def __init__(self, position, direction=None): + def __init__(self, position, direction=None, growth_rate=3): head = Node(SnakeBodyPart(position, position)) super(Snake, self).__init__(head) self.direction = direction + self.growth_counter = 0 + self.growth_rate = growth_rate - def move(self, to_x, to_y): + def move(self, to_x, to_y, eaten=False): """ Takes a tuple of position""" # Move internally new_head = SnakeBodyPart(to_x, to_y) self.insert(new_head) - self.delete() + if not eaten: + self.delete() + + def grow(self): + self.growth_counter += self.growth_rate + class Food(object): color = 'yellow' def __init__(self, x, y): - self.x = x - self.y = y + self.x, self.y = (x, y) def __repr__(self): return 'Food' @@ -133,6 +194,9 @@ def __repr__(self): class Wall(object): color = 'red' + def __init__(self, x, y): + self.x, self.y = (x, y) + def __repr__(self): return 'Wall' From b05fde23485228710ba4c25221a755e7b9aad385 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Sun, 6 Mar 2016 17:53:49 -0500 Subject: [PATCH 07/23] minor tweaks --- game.py | 4 +-- models.py | 73 ++++++++++++++++++++++++++++++------------------------- 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/game.py b/game.py index e5093e4..9fee6c7 100644 --- a/game.py +++ b/game.py @@ -5,7 +5,7 @@ square_width = 10 #pixels grid_width = 51 pixels_wide = square_width * grid_width -ms_per_block = 5 # screen refreshes per move +ms_per_block = 6 # screen refreshes per move if __name__ == '__main__': pygame.init() @@ -26,7 +26,7 @@ count += 1 if count == ms_per_block: model.update_snake() - model.collision() + model.check_collision() count = 0 view.draw() time.sleep(.001) diff --git a/models.py b/models.py index 80df68d..d699fe0 100644 --- a/models.py +++ b/models.py @@ -18,8 +18,7 @@ def draw(self): except: color = 'black' pygame.draw.rect(self.screen, pygame.Color(color), get_rect) - pygame.display.update() - + pygame.display.update() def coord_to_pixels(self, coords): """Take a coordinate pair on the grid and convert to pygame rectangle parameters""" @@ -28,6 +27,7 @@ def coord_to_pixels(self, coords): width, height = (self.square_size, self.square_size) return (left, top, width, height) + class GameController(object): def __init__(self, model): self.model = model @@ -50,7 +50,9 @@ def handle_event(self, event): } new_direction = control_dict[event.key] if new_direction != opposite[self.model.snake.direction]: - self.model.snake.direction = new_direction + self.model.snake.direction = new_direction + + class GameModel(object): def __init__(self, dimensions=50): self.grid = GameGrid(dimensions) @@ -62,6 +64,32 @@ def __init__(self, dimensions=50): self.make_first_walls() self.make_food() + def make_first_walls(self): + for i in range(len(self.grid.grid)): + first_wall = Wall(i, 0) + last_wall = Wall(i, len(self.grid.grid[i])-1) + self.grid.grid[i][0] = first_wall # Make top and bottom lines + self.grid.grid[i][-1] = last_wall + self.walls.extend((first_wall, last_wall)) + for j in range(1, len(self.grid.grid[0])): # Make side walls + first_wall = Wall(0, j) + last_wall = Wall(len(self.grid.grid[j])-1, j) + self.grid.grid[0][j] = first_wall + self.grid.grid[-1][j] = last_wall + self.walls.extend((first_wall, last_wall)) + + def make_food(self): + def random_point(): + x = random.randrange(1, len(self.grid.grid) - 1) + y = random.randrange(1, len(self.grid.grid[x]) - 1) + return (x, y) + point = random_point() + while SnakeBodyPart(*point) in self.snake.get_list(): + point = random_point() + new_food = Food(*point) + self.foods.append(new_food) + self.grid.grid[point[0]][point[1]] = new_food + def move_snake(self, to_x, to_y): # Delete in the grid for part in self.snake.get_list(): @@ -75,15 +103,8 @@ def move_snake(self, to_x, to_y): for part in self.snake.get_list(): self.grid.grid[part.x][part.y] = part - def make_food(self): - x = random.randrange(1, len(self.grid.grid) - 1) - y = random.randrange(1, len(self.grid.grid[x]) - 1) - new_food = Food(x, y) - self.foods.append(new_food) - self.grid.grid[x][y] = new_food - def update_snake(self): - if self.dead: + if self.snake.dead: return x = self.snake.head.data.x y = self.snake.head.data.y @@ -96,7 +117,7 @@ def update_snake(self): if self.snake.direction == 'down': self.move_snake(x, y + 1) - def collision(self): + def check_collision(self): """ Check if the Snake's head is hitting a wall or a food. Act on those. @@ -107,7 +128,7 @@ def collision(self): # Check for wall collision for a_wall in self.walls: if a_wall.x == x and a_wall.y == y: - self.die() + self.snake.die() # Check for food collision for i, apple in enumerate(self.foods): @@ -119,26 +140,8 @@ def collision(self): # Check for snake collisions for part in self.snake.get_list()[1:]: # Don't check against the head if part.x == x and part.y == y: - self.die() + self.snake.die() - def die(self): - self.dead = True - - def make_first_walls(self): - for i in range(len(self.grid.grid)): - first_wall = Wall(i, 0) - last_wall = Wall(i, len(self.grid.grid[i])-1) - self.grid.grid[i][0] = first_wall # Make top and bottom lines - self.grid.grid[i][-1] = last_wall - self.walls.extend((first_wall, last_wall)) - - for j in range(1, len(self.grid.grid[0])): # Make side walls - first_wall = Wall(0, j) - last_wall = Wall(len(self.grid.grid[j])-1, j) - self.grid.grid[0][j] = first_wall - self.grid.grid[-1][j] = last_wall - self.walls.extend((first_wall, last_wall)) - class GameGrid(object): def __init__(self, dimensions): @@ -163,12 +166,13 @@ def __init__(self, x, y, index=0): self.index = index class Snake(LinkedList): - def __init__(self, position, direction=None, growth_rate=3): + def __init__(self, position, direction=None, growth_rate=4): head = Node(SnakeBodyPart(position, position)) super(Snake, self).__init__(head) self.direction = direction self.growth_counter = 0 self.growth_rate = growth_rate + self.dead = False def move(self, to_x, to_y, eaten=False): """ Takes a tuple of position""" @@ -181,6 +185,9 @@ def move(self, to_x, to_y, eaten=False): def grow(self): self.growth_counter += self.growth_rate + def die(self): + self.dead = True + class Food(object): color = 'yellow' From 83c4399a96259667050c96f377cbe55b17927883 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Mon, 7 Mar 2016 15:31:32 -0500 Subject: [PATCH 08/23] making sure this is up to date --- models.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/models.py b/models.py index d699fe0..445ac61 100644 --- a/models.py +++ b/models.py @@ -41,7 +41,7 @@ def handle_event(self, event): pygame.K_UP: 'up', pygame.K_DOWN: 'down' } - opposite = { + opposites = { 'up': 'down', 'down': 'up', 'left': 'right', @@ -49,7 +49,7 @@ def handle_event(self, event): None: None } new_direction = control_dict[event.key] - if new_direction != opposite[self.model.snake.direction]: + if new_direction != opposites[self.model.snake.direction] or self.model.snake.size() == 1: self.model.snake.direction = new_direction @@ -84,7 +84,7 @@ def random_point(): y = random.randrange(1, len(self.grid.grid[x]) - 1) return (x, y) point = random_point() - while SnakeBodyPart(*point) in self.snake.get_list(): + while SnakeBodyPart(point[0], point[1]) in self.snake.get_list(): point = random_point() new_food = Food(*point) self.foods.append(new_food) @@ -159,12 +159,14 @@ def __repr__(self): repr_string += ('\n') return repr_string + class SnakeBodyPart(object): color = 'green' def __init__(self, x, y, index=0): self.x, self.y = (x, y) self.index = index + class Snake(LinkedList): def __init__(self, position, direction=None, growth_rate=4): head = Node(SnakeBodyPart(position, position)) @@ -198,6 +200,7 @@ def __init__(self, x, y): def __repr__(self): return 'Food' + class Wall(object): color = 'red' @@ -206,7 +209,3 @@ def __init__(self, x, y): def __repr__(self): return 'Wall' - -if __name__ == '__main__': - grid = GameGrid(11) - print grid From d06f65e052236737476499987f9a3c2c4fd89746 Mon Sep 17 00:00:00 2001 From: Matthew Beaudouin-Lafon Date: Tue, 8 Mar 2016 15:20:39 -0500 Subject: [PATCH 09/23] End game splash. Resized window to display score, implement two types of score. --- game.py | 3 ++- models.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/game.py b/game.py index 9fee6c7..7c18eab 100644 --- a/game.py +++ b/game.py @@ -6,10 +6,11 @@ grid_width = 51 pixels_wide = square_width * grid_width ms_per_block = 6 # screen refreshes per move +score_font_size = 14 if __name__ == '__main__': pygame.init() - size = (pixels_wide, pixels_wide) + size = (pixels_wide, pixels_wide + score_font_size + 14) screen = pygame.display.set_mode(size) model = GameModel(grid_width) diff --git a/models.py b/models.py index 445ac61..31041fa 100644 --- a/models.py +++ b/models.py @@ -10,14 +10,23 @@ def __init__(self, model, screen, square_size=10): def draw(self): self.screen.fill(pygame.Color('black')) + + # Place the appropriate rectangle for every element of the grid (None, SnakeBodyPart, Wall or Food) for i in range(len(self.model.grid.grid)): for j in range(len(self.model.grid.grid[i])): get_rect = pygame.Rect(*self.coord_to_pixels((i, j))) try: # try to get color attribute, if - color = self.model.grid.grid[i][j].color + color = self.model.grid.grid[i][j].color if not self.model.snake.dead else self.model.grid.grid[i][j].dead_color except: - color = 'black' - pygame.draw.rect(self.screen, pygame.Color(color), get_rect) + color = pygame.Color('black') + pygame.draw.rect(self.screen, color, get_rect) + + self.print_score() + + # Blit the death screen if the snake is dead + if self.model.snake.dead: + self.print_death_text('Wasted', 64) + pygame.display.update() def coord_to_pixels(self, coords): @@ -27,6 +36,33 @@ def coord_to_pixels(self, coords): width, height = (self.square_size, self.square_size) return (left, top, width, height) + def print_death_text(self, death_message, font_size): + font = pygame.font.Font(None, font_size) + + background = pygame.Surface(self.screen.get_size()) + background = background.convert() + + text = font.render(death_message, 1, (200, 0, 0, 1)) + textpos = text.get_rect() + textpos.centerx = background.get_rect().centerx + textpos.centery = background.get_rect().centerx # centerx such that the text is at the center of the square field + self.screen.blit(text, textpos) + + def print_score(self): + score_str = 'Score: ' + str(self.model.score2) + + font = pygame.font.Font(None, 20) # How to pass font size? + screen_size = self.screen.get_size() + background = pygame.Surface( ( screen_size[0], screen_size[1]-screen_size[0] ) ) + background = background.convert() + + text = font.render(score_str, 1, (255, 255, 255, 1)) + textpos = text.get_rect() + textpos.x = 10 + textpos.centery = sum(screen_size)/2 + self.screen.blit(text, textpos) + + class GameController(object): def __init__(self, model): @@ -51,6 +87,8 @@ def handle_event(self, event): new_direction = control_dict[event.key] if new_direction != opposites[self.model.snake.direction] or self.model.snake.size() == 1: self.model.snake.direction = new_direction + self.model.score2 -= 1 + class GameModel(object): @@ -63,6 +101,8 @@ def __init__(self, dimensions=50): self.dead = False self.make_first_walls() self.make_food() + self.score = 0 + self.score2 = 0 def make_first_walls(self): for i in range(len(self.grid.grid)): @@ -136,6 +176,8 @@ def check_collision(self): self.snake.grow() del self.foods[i] self.make_food() + self.score += 10 # Have the score based off of len(snake)? + self.score2 += 10 # Check for snake collisions for part in self.snake.get_list()[1:]: # Don't check against the head @@ -161,7 +203,8 @@ def __repr__(self): class SnakeBodyPart(object): - color = 'green' + color = pygame.Color('green') + dead_color = pygame.Color(78 ,78 ,78 ,255) def __init__(self, x, y, index=0): self.x, self.y = (x, y) self.index = index @@ -192,7 +235,8 @@ def die(self): class Food(object): - color = 'yellow' + color = pygame.Color('yellow') + dead_color = pygame.Color(210, 210, 210, 255) def __init__(self, x, y): self.x, self.y = (x, y) @@ -202,8 +246,8 @@ def __repr__(self): class Wall(object): - color = 'red' - + color = pygame.Color('red') + dead_color = pygame.Color(128, 128, 128, 255) def __init__(self, x, y): self.x, self.y = (x, y) From 27d21a4bc12a29cee6dded032e16f5e096c36770 Mon Sep 17 00:00:00 2001 From: Matthew Beaudouin-Lafon Date: Wed, 9 Mar 2016 14:57:42 -0500 Subject: [PATCH 10/23] Modified Score to display as a percentage of the screen. R and Q map to replay and quit. --- game.py | 11 ++++++----- models.py | 33 +++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/game.py b/game.py index 7c18eab..db1b1d5 100644 --- a/game.py +++ b/game.py @@ -2,7 +2,7 @@ from models import * import time -square_width = 10 #pixels +square_width = 10 # pixels grid_width = 51 pixels_wide = square_width * grid_width ms_per_block = 6 # screen refreshes per move @@ -10,7 +10,7 @@ if __name__ == '__main__': pygame.init() - size = (pixels_wide, pixels_wide + score_font_size + 14) + size = (pixels_wide, int(pixels_wide*1.08) )# + score_font_size + 14) screen = pygame.display.set_mode(size) model = GameModel(grid_width) @@ -21,9 +21,9 @@ count = 0 while running: for event in pygame.event.get(): - if event.type == pygame.QUIT: - running = False - controller.handle_event(event) + # if event.type == pygame.QUIT: + # running = False + running = controller.handle_event(event) count += 1 if count == ms_per_block: model.update_snake() @@ -31,3 +31,4 @@ count = 0 view.draw() time.sleep(.001) + pygame.QUIT diff --git a/models.py b/models.py index 31041fa..7673329 100644 --- a/models.py +++ b/models.py @@ -37,6 +37,8 @@ def coord_to_pixels(self, coords): return (left, top, width, height) def print_death_text(self, death_message, font_size): + + font = pygame.font.Font(None, font_size) background = pygame.Surface(self.screen.get_size()) @@ -51,14 +53,14 @@ def print_death_text(self, death_message, font_size): def print_score(self): score_str = 'Score: ' + str(self.model.score2) - font = pygame.font.Font(None, 20) # How to pass font size? screen_size = self.screen.get_size() + font = pygame.font.Font(None, int(0.06*screen_size[0]))#20) # How to pass font size? background = pygame.Surface( ( screen_size[0], screen_size[1]-screen_size[0] ) ) background = background.convert() text = font.render(score_str, 1, (255, 255, 255, 1)) textpos = text.get_rect() - textpos.x = 10 + textpos.x = int(0.03*screen_size[0]) textpos.centery = sum(screen_size)/2 self.screen.blit(text, textpos) @@ -69,8 +71,21 @@ def __init__(self, model): self.model = model def handle_event(self, event): + if event.type == pygame.QUIT: + return False + if event.type != pygame.KEYDOWN: - return + return True + + if self.model.snake.dead: + if event.key == pygame.K_q: + # Quit + return False + elif event.key == pygame.K_r: + # Restart the game. + self.model.__init__() + return True + control_dict = { pygame.K_LEFT: 'left', pygame.K_RIGHT: 'right', @@ -84,11 +99,16 @@ def handle_event(self, event): 'right': 'left', None: None } - new_direction = control_dict[event.key] - if new_direction != opposites[self.model.snake.direction] or self.model.snake.size() == 1: + + new_direction = control_dict.get(event.key, None) # control_dict[event.key] + if new_direction == None: + return True + if (new_direction != opposites[self.model.snake.direction] or self.model.snake.size() == 1): self.model.snake.direction = new_direction self.model.score2 -= 1 + return True + class GameModel(object): @@ -182,7 +202,8 @@ def check_collision(self): # Check for snake collisions for part in self.snake.get_list()[1:]: # Don't check against the head if part.x == x and part.y == y: - self.snake.die() + self.snake.die() + class GameGrid(object): From df07f0645db660234e8b528d8937592863446ccd Mon Sep 17 00:00:00 2001 From: Matthew Beaudouin-Lafon Date: Wed, 9 Mar 2016 20:58:32 -0500 Subject: [PATCH 11/23] Added 'Play again' and 'Quit' indicators on death screen --- models.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/models.py b/models.py index 7673329..2d739ca 100644 --- a/models.py +++ b/models.py @@ -39,17 +39,35 @@ def coord_to_pixels(self, coords): def print_death_text(self, death_message, font_size): - font = pygame.font.Font(None, font_size) + dead_font = pygame.font.Font(None, font_size) + options_font = pygame.font.Font(None, font_size/2) + options_color = (181, 180, 103) background = pygame.Surface(self.screen.get_size()) background = background.convert() - text = font.render(death_message, 1, (200, 0, 0, 1)) + # Wasted + text = dead_font.render(death_message, 1, (200, 0, 0, 1)) textpos = text.get_rect() textpos.centerx = background.get_rect().centerx textpos.centery = background.get_rect().centerx # centerx such that the text is at the center of the square field self.screen.blit(text, textpos) + # Play Again + replay = options_font.render("R: Play Again", 1, options_color) + replay_pos = replay.get_rect() + replay_pos.centerx = background.get_rect().centerx + replay_pos.centery = background.get_rect().centerx + font_size*3/4 # centerx such that the text is at the center of the square field + self.screen.blit(replay, replay_pos) + + # Play Again + quit = options_font.render("Q: Quit", 1, options_color) + quit_pos = quit.get_rect() + quit_pos.centerx = background.get_rect().centerx + quit_pos.centery = background.get_rect().centerx + font_size*3/4 + font_size/2 # centerx such that the text is at the center of the square field + self.screen.blit(quit, quit_pos) + + def print_score(self): score_str = 'Score: ' + str(self.model.score2) From c88fa7cabcf7403f57150aba1e5a2ca3fe43de14 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Wed, 9 Mar 2016 22:15:23 -0500 Subject: [PATCH 12/23] 3D working (basically) --- .models.py.swo | Bin 0 -> 28672 bytes models.py | 186 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 135 insertions(+), 51 deletions(-) create mode 100644 .models.py.swo diff --git a/.models.py.swo b/.models.py.swo new file mode 100644 index 0000000000000000000000000000000000000000..ecb3134c1218a573baf2ba1512077f69b12e79c5 GIT binary patch literal 28672 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 literal 0 HcmV?d00001 diff --git a/models.py b/models.py index 445ac61..6f32b61 100644 --- a/models.py +++ b/models.py @@ -1,20 +1,60 @@ import pygame from linkedlist import Node, LinkedList import random +import numpy as np class GameView(object): def __init__(self, model, screen, square_size=10): self.model = model self.screen = screen - self.square_size = square_size + self.square_size = square_size + + def get_slice(self): + + def map_origin(): + map_dict = {-1: len(cube) - 1, 1: 0, 0: depth} + mapped = [map_dict[value] for value in direction_vector] + return tuple(mapped) + + up_vector = self.model.plane.up + right_vector = self.model.plane.right + direction_vector = np.add(up_vector, right_vector) + depth = self.model.plane.depth + cube = self.model.grid.grid + origin = map_origin() + + grid = [] + for i in range(len(cube)): + row = [] + for j in range(len(cube)): + position = np.add(origin, np.add(np.multiply(i, right_vector), np.multiply(j, up_vector))) + x, y, z = (position[0], position[1], position[2]) + row.append(cube[x][y][z]) + grid.append(row) + return grid + #xy = (1, 1, 0) + #yz = (0, 1, 1) + #xz = (1, 0, 1) + #if tuple(np.abs(np.add(up, right))) == xy: + # z = self.model.plane.depth + # newgrid = [[y[z] for y in x] for x in cube] + #if tuple(np.abs(np.add(up, right))) == xz: + # y = self.model.plane.depth + # newgrid = [[z for z in x[y]] for x in cube] + #if tuple(np.abs(np.add(up, right))) == yz: + # x = self.model.plane.depth + # newgrid = [[z for z in y] for y in cube[x]] + #return newgrid + def draw(self): + plane = self.get_slice() self.screen.fill(pygame.Color('black')) - for i in range(len(self.model.grid.grid)): - for j in range(len(self.model.grid.grid[i])): + for i in range(len(plane)): + for j in range(len(plane[i])): get_rect = pygame.Rect(*self.coord_to_pixels((i, j))) try: # try to get color attribute, if - color = self.model.grid.grid[i][j].color + color = plane[i][j].color except: color = 'black' pygame.draw.rect(self.screen, pygame.Color(color), get_rect) @@ -35,35 +75,33 @@ def __init__(self, model): def handle_event(self, event): if event.type != pygame.KEYDOWN: return - control_dict = { - pygame.K_LEFT: 'left', - pygame.K_RIGHT: 'right', - pygame.K_UP: 'up', - pygame.K_DOWN: 'down' - } - opposites = { - 'up': 'down', - 'down': 'up', - 'left': 'right', - 'right': 'left', - None: None - } - new_direction = control_dict[event.key] - if new_direction != opposites[self.model.snake.direction] or self.model.snake.size() == 1: - self.model.snake.direction = new_direction + + directions = ['up', 'left', 'down', 'right'] + + direction_keys = [pygame.K_UP, pygame.K_LEFT, pygame.K_DOWN, pygame.K_RIGHT] + control_dict = {key: value for key, value in zip(direction_keys, directions)} + + orientation_keys = [pygame.K_w, pygame.K_a, pygame.K_s, pygame.K_d] + orient_dict = {key: value for key, value in zip(orientation_keys, directions)} + + if event.key in direction_keys: + self.model.snake.change_direction(control_dict[event.key]) + if event.key in orientation_keys: + self.model.change_orientation(orient_dict[event.key]) class GameModel(object): def __init__(self, dimensions=50): self.grid = GameGrid(dimensions) self.snake = Snake(dimensions/2) - self.grid.grid[dimensions/2][dimensions/2] = self.snake.head.data + self.grid.grid[dimensions/2][dimensions/2][0] = self.snake.head.data self.foods = [] self.walls = [] self.dead = False - self.make_first_walls() + self.plane = Plane() + #self.make_first_walls() self.make_food() - + def make_first_walls(self): for i in range(len(self.grid.grid)): first_wall = Wall(i, 0) @@ -82,40 +120,54 @@ def make_food(self): def random_point(): x = random.randrange(1, len(self.grid.grid) - 1) y = random.randrange(1, len(self.grid.grid[x]) - 1) - return (x, y) + z = 0 #random.randrange(1, len(self.grid.grid[x][y]) - 1) + return (x, y, z) point = random_point() - while SnakeBodyPart(point[0], point[1]) in self.snake.get_list(): + while SnakeBodyPart(*point) in self.snake.get_list(): point = random_point() new_food = Food(*point) self.foods.append(new_food) - self.grid.grid[point[0]][point[1]] = new_food + self.grid.grid[point[0]][point[1]][point[2]] = new_food - def move_snake(self, to_x, to_y): + def move_snake(self, to_x, to_y, to_z): # Delete in the grid for part in self.snake.get_list(): - self.grid.grid[part.x][part.y] = None + self.grid.grid[part.x][part.y][part.z] = None # Move snake internally grow = bool(self.snake.growth_counter) - self.snake.move(to_x, to_y, grow) + self.snake.move(to_x, to_y, to_z, grow) if grow: self.snake.growth_counter -= 1 # Update in grid for part in self.snake.get_list(): - self.grid.grid[part.x][part.y] = part + self.grid.grid[part.x][part.y][part.z] = part def update_snake(self): if self.snake.dead: return x = self.snake.head.data.x y = self.snake.head.data.y - if self.snake.direction == 'left': - self.move_snake(x - 1, y) - if self.snake.direction == 'right': - self.move_snake(x + 1, y) + z = self.snake.head.data.z + position = (x, y, z) if self.snake.direction == 'up': - self.move_snake(x, y - 1) - if self.snake.direction == 'down': - self.move_snake(x, y + 1) + new_position = tuple(np.subtract(position, self.plane.up)) + elif self.snake.direction == 'left': + new_position = tuple(np.subtract(position, self.plane.right)) + elif self.snake.direction == 'down': + new_position = tuple(np.add(position, self.plane.up)) + elif self.snake.direction == 'right': + new_position = tuple(np.add(position, self.plane.right)) + else: + new_position = position + self.move_snake(*new_position) + print new_position + + def change_orientation(self, direction): + getattr(self.plane, 'turn_' + direction)() # re-orient the plane accordingly + head = self.snake.head.data + position = (head.x, head.y, head.z) + depth_vector = np.multiply((1, 1, 1) - abs(np.add(self.plane.up, self.plane.right)), position) + self.plane.depth = [x for x in depth_vector if x != 0][0] def check_collision(self): """ @@ -124,6 +176,7 @@ def check_collision(self): """ x = self.snake.head.data.x y = self.snake.head.data.y + z = self.snake.head.data.z # Check for wall collision for a_wall in self.walls: @@ -132,15 +185,15 @@ def check_collision(self): # Check for food collision for i, apple in enumerate(self.foods): - if apple.x == x and apple.y == y: + if apple.x == x and apple.y == y and apple.z == z: self.snake.grow() del self.foods[i] self.make_food() # Check for snake collisions for part in self.snake.get_list()[1:]: # Don't check against the head - if part.x == x and part.y == y: - self.snake.die() + if part.x == x and part.y == y and part.z == z: + self.snake.die() class GameGrid(object): @@ -149,7 +202,9 @@ def __init__(self, dimensions): for i in range(dimensions): self.grid.append([]) for j in range(dimensions): - self.grid[i].append(None) + self.grid[i].append([]) + for k in range(dimensions): + self.grid[i][j].append(None) def __repr__(self): repr_string = '' @@ -160,26 +215,54 @@ def __repr__(self): return repr_string +class Plane(object): + def __init__(self): + self.up = (0, -1, 0) #default 'up' direction is -y + self.right = (1, 0, 0) #default 'right' direction is +x + self.depth = 0 + + def turn_up(self): + self.up = tuple(np.cross(self.up, self.right)) + + def turn_right(self): + self.right = tuple(np.cross(self.up, self.right)) + + def turn_down(self): + self.up = tuple(np.cross(self.right, self.up)) + + def turn_left(self): + self.right = tuple(np.cross(self.right, self.up)) + + class SnakeBodyPart(object): color = 'green' - def __init__(self, x, y, index=0): - self.x, self.y = (x, y) + def __init__(self, x, y, z, index=0): + self.x, self.y, self.z = (x, y, z) self.index = index class Snake(LinkedList): def __init__(self, position, direction=None, growth_rate=4): - head = Node(SnakeBodyPart(position, position)) + head = Node(SnakeBodyPart(position, position, z=0)) super(Snake, self).__init__(head) self.direction = direction self.growth_counter = 0 self.growth_rate = growth_rate self.dead = False - - def move(self, to_x, to_y, eaten=False): + + def change_direction(self, new_direction): + opposites = {'up': 'down', + 'left': 'right', + 'down': 'up', + 'right': 'left', + None: None} + if new_direction != opposites[self.direction] or self.size() == 1: + self.direction = new_direction + + def move(self, to_x, to_y, to_z, eaten=False): """ Takes a tuple of position""" # Move internally - new_head = SnakeBodyPart(to_x, to_y) + new_head = SnakeBodyPart(to_x, to_y, to_z) self.insert(new_head) if not eaten: self.delete() @@ -194,8 +277,8 @@ def die(self): class Food(object): color = 'yellow' - def __init__(self, x, y): - self.x, self.y = (x, y) + def __init__(self, x, y, z): + self.x, self.y, self.z = (x, y, z) def __repr__(self): return 'Food' @@ -204,8 +287,9 @@ def __repr__(self): class Wall(object): color = 'red' - def __init__(self, x, y): - self.x, self.y = (x, y) + def __init__(self, x, y, z): + self.x, self.y, self.z = (x, y, z) def __repr__(self): return 'Wall' + From e8a4e4a1d7efc6cfa8face4877e196714294a212 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Wed, 9 Mar 2016 22:36:05 -0500 Subject: [PATCH 13/23] merged --- .models.py.swo | Bin 24576 -> 24576 bytes models.py | 16 +--------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/.models.py.swo b/.models.py.swo index 79248b7f955edfdc41b45129ec89fe2c12b456d3..bb5d3692bbbdae05788cf918921867fef66d032e 100644 GIT binary patch delta 502 zcma*j&nv@m9LMqZw;B6k?K^AAkJ>K>%&$<(xX4mu<+LBi(b8(xLQ2$D{s8JrSve?_ zqxoLsw4@vzP@FiqC@DLrT|C!rT)gX1uU?;e*ZWf_D}}P+S{RDXL_EQPQDIaO=lg5) zsN|~Jm4xn4zwEZKLFA^P{+Q4lo}GNGS!5akC=e8_BAZCSjfzF&5W84L2xI7i9~HC6 z6G}M8KK779J1QoTI~-sQtC+yJN%9gRSn${+qT>Qvh$DtMsHilGTqA-2deMPrqsS$; zQRTD;+@p5pDNb;VMTF6cH@@K(MT1i$O_)U|Ecn(--k>sU_Iu_t$qmosQZk(tF`NGu zzZ%Wz>o=^Va+=NOM!-nUBx~v4?T6Q^sZ%Z5r&rb7zBb+AzcLzGl1*tZ-GlX{`+C+D JJ>GXV@&l56V+#NP delta 794 zcmbW!%}d-s7zXe+wN}$wR#Ep>7(WghiCaGw1aZM06a~GC5Yy6i;~K1SiMu+J%X;!E z82q|;5Za3%XuyJn;@{BfL3=5sc<>^nwgtWTOm+niQfLD|=AFq4Pu|JGp|WtO)Ti1; z28UT!JVAJ>iKfoKj=bBgzm6!Gpr-m~pIX)VWU=utL;6MjN;rm0P85o8kNWyg)(P>#NrbY1# ze&b$#!CA1|(53j1MlHB#J}CFMTI>9smgjN}zO~FL1Ei`=u9eHX4s)#ejBBUmiCU^z zk{O1_CT3jbG23Cn3~M3l@qEfMxM_y{-0zLo*=Z}Ao0NNdg5~nrH&)Ea#$Tsq!zG=L z<+D0-?aX9O(=?V$GU0XqEsYz(EC%x1z+#&CuQYy7nlQXOBk_CFJegMb*V(uTXX763 mFxIZKHl4L=a#|6d$nEV37o{HACVNUhr1Upbxdzj^-+2R~hQ9m& diff --git a/models.py b/models.py index e1638c3..7307171 100644 --- a/models.py +++ b/models.py @@ -32,20 +32,6 @@ def map_origin(): row.append(cube[x][y][z]) grid.append(row) return grid - #xy = (1, 1, 0) - #yz = (0, 1, 1) - #xz = (1, 0, 1) - #if tuple(np.abs(np.add(up, right))) == xy: - # z = self.model.plane.depth - # newgrid = [[y[z] for y in x] for x in cube] - #if tuple(np.abs(np.add(up, right))) == xz: - # y = self.model.plane.depth - # newgrid = [[z for z in x[y]] for x in cube] - #if tuple(np.abs(np.add(up, right))) == yz: - # x = self.model.plane.depth - # newgrid = [[z for z in y] for y in cube[x]] - #return newgrid - def draw(self): plane = self.get_slice() @@ -56,7 +42,7 @@ def draw(self): for j in range(len(plane[i])): get_rect = pygame.Rect(*self.coord_to_pixels((i, j))) try: # try to get color attribute, if - color = self.model.grid.grid[i][j].color if not self.model.snake.dead else self.model.grid.grid[i][j].dead_color + color = plane[i][j].color if not self.model.snake.dead else plane[i][j].dead_color except: color = pygame.Color('black') pygame.draw.rect(self.screen, color, get_rect) From c298f1ac4d9728374032c10dadfa7f1783251b22 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Wed, 9 Mar 2016 22:38:07 -0500 Subject: [PATCH 14/23] merged --- .models.py.swo | Bin 24576 -> 16384 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.models.py.swo b/.models.py.swo index bb5d3692bbbdae05788cf918921867fef66d032e..c698d55e5844423319569eb7395bd5257451b9a1 100644 GIT binary patch delta 811 zcmXxiT}V@59LMqh+1as8r<;(dS+GisG08AzF(qcf0zp@jqP>9lg3i%}7hb3rTP=(k zWNTNFE*B`>l^ibuA-wX&2w%V;4aAGy?d>uo`yM<#@Ohr+Jm=y0Kb-T6Ehw>=@~BAJ zoh@EglkJ-RLp|(psuC3u3yjv6%6Ao3?wM_1e^DalsF>qF^Zls#ye0aOYs8s+>3;0C z=6YD&F}AumPtSKpl;EgU8>|A|J4U*La3u zbfFVL9K$Dv$O`5$lHEnK`wcNs>0s^PRG(@J G+WrHAoP)mr literal 24576 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 From 59c20d0874c48c398f5f52efa26ceac1d58b18cd Mon Sep 17 00:00:00 2001 From: Matthew Beaudouin-Lafon Date: Thu, 10 Mar 2016 00:38:56 -0500 Subject: [PATCH 15/23] Added basic wall generation. Parameters unclear to properly populate the grid. --- models.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/models.py b/models.py index 7307171..f057378 100644 --- a/models.py +++ b/models.py @@ -157,6 +157,7 @@ def __init__(self, dimensions=50): self.dead = False self.plane = Plane() #self.make_first_walls() + self.make_random_walls() self.make_food() self.score = 0 self.score2 = 0 @@ -175,6 +176,52 @@ def make_first_walls(self): self.grid.grid[-1][j] = last_wall self.walls.extend((first_wall, last_wall)) + def make_random_walls(self): + square_dimensions = len(self.grid.grid[0][0]) + num_blocks = 1000 + block_length = 200 + directions = [(1,0,0),(0,1,0),(0,0,1),(-1,0,0),(0,-1,0),(0,0,-1)] + + # Number of block walls + for block in range(num_blocks): + print 'block:', block + stagnate = 100 + + # Select a random start point (that isn't a wall) + origin = self.rand_3tuple(0, square_dimensions-1) + x,y,z = origin + + # Make sure there is nothing there + while self.grid.grid[x][y][z] != None: + origin = self.rand_3tuple(0, square_dimensions-1) + + # Sequentially choose where the next walls will be, add them to the grid and the list of walls + block_count = block_length + while block_length: + + one_direction = random.choice(directions) + n_x,n_y,n_z = tuple(np.add(origin,one_direction) % square_dimensions) + cell_content = self.grid.grid[n_x][n_y][n_z] + + for a_wall in self.walls: + print 'wall check' + if a_wall == cell_content: + origin = (a_wall.x, a_wall.y, a_wall.z) + block_length -= 1 + stagnate -= 1 + + if cell_content == None: + origin = (n_x,n_y,n_z) + new_wall = Wall(n_x,n_y,n_z) + self.walls.append(new_wall) + self.grid.grid[n_x][n_y][n_z] = new_wall + block_length -= 1 + + if stagnate == 0: + block_length = 0 + print 'Number of Walls:', len(self.walls) + + def make_food(self): def random_point(): x = random.randrange(1, len(self.grid.grid) - 1) @@ -255,6 +302,12 @@ def check_collision(self): for part in self.snake.get_list()[1:]: # Don't check against the head if part.x == x and part.y == y and part.z == z: self.snake.die() + + def rand_3tuple(self, lower, higher): + """ + Returns random 3-tuple (N_0, N_1, N_2) where lower <= N_x <= higher + """ + return (random.randint(lower, higher),random.randint(lower, higher) ,random.randint(lower, higher)) class GameGrid(object): From f1e0394c296529a123194d74c855a2f9c49fe097 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Thu, 10 Mar 2016 00:43:50 -0500 Subject: [PATCH 16/23] working on overlay --- .game.py.swo | Bin 0 -> 12288 bytes .models.py.swo | Bin 16384 -> 0 bytes game.py | 4 ++-- models.py | 56 ++++++++++++++++++++++++++++++------------------- 4 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 .game.py.swo delete mode 100644 .models.py.swo diff --git a/.game.py.swo b/.game.py.swo new file mode 100644 index 0000000000000000000000000000000000000000..700d77541e18f7593d6d4a2e080c644d288c3b3e GIT binary patch literal 12288 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 Date: Thu, 10 Mar 2016 03:24:52 -0500 Subject: [PATCH 17/23] Added various levels of wall generation (blob is probably the best). Edited README. --- README.md | 9 ++++++-- models.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 61ec120..c6f2439 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ -# InteractiveProgramming -This is the base repo for the interactive programming project for Software Design, Spring 2016 at Olin College. +# SNAK3D +by Sam Myers and Matthew Beaudouin-Lafon for Software Design Spring 2016 + +To run this game, you need NumPy and PyGame installed. +Then just run game.py. + +Use the arrow keys to move the snake around, and WASD to rotate the orientation of the cube. diff --git a/models.py b/models.py index bce289d..d61e905 100644 --- a/models.py +++ b/models.py @@ -160,7 +160,8 @@ def __init__(self, dimensions=50): self.dead = False self.plane = Plane() #self.make_first_walls() - self.make_random_walls() + #self.make_random_walls() + self.make_blob_walls(6, 9) self.make_food() self.score = 0 self.score2 = 0 @@ -224,6 +225,61 @@ def make_random_walls(self): block_length = 0 print 'Number of Walls:', len(self.walls) + def make_blob_walls(self, num_blobs, size_blobs): + square_dimensions = len(self.grid.grid[0][0]) + # Generate a bunch of points (blob centers) + for a_blob in range(num_blobs): + origin = self.rand_3tuple(0, square_dimensions-1) + + # Make sure there is nothing there + while self.grid.tuple_get(origin) != None: + origin = self.rand_3tuple(0, square_dimensions-1) + + # Make blobs off of those + self.make_blob(origin, 0.6, size_blobs) + + print len(self.walls) + + + def make_blob(self, origin, proba, depth): + square_dimensions = len(self.grid.grid[0][0]) + + print 'Recursing' + + if depth == 0: + print 'Stopping Condition' + return + + directions = [(1,0,0),(0,1,0),(0,0,1),(-1,0,0),(0,-1,0),(0,0,-1)] + for one_direction in directions: + new_origin = tuple(np.add(origin,one_direction)) + + print self.grid.tuple_get(new_origin) != None + print self.tuple_in_range(new_origin, 0, square_dimensions-1) + print random.random() < proba + print + + + if (self.grid.tuple_get(new_origin) == None) and self.tuple_in_range(new_origin, 0, square_dimensions-1) and (random.random() < proba): + print 'Making new wall' + + # Set walls in internal list of walls + new_wall = Wall(*new_origin) + self.walls.append(new_wall) + # Set wall in the grid + self.grid.tuple_set(new_origin, new_origin) + # Recurse + #self.make_blob(new_origin, proba*(1-1/float(depth)), depth-1) + self.make_blob(new_origin, proba, depth-1) + + def tuple_in_range(self, your_tuple, a, b): + """ + Return true if each element of the tuple is within the range (a,b) inclusive + """ + for element in your_tuple: + if not (a <= element and element <= b): + return False + return True def make_food(self): def random_point(): @@ -336,6 +392,15 @@ def __repr__(self): repr_string += ('\n') return repr_string + def tuple_get(self, xyz): + x, y, z = xyz + return self.grid[x][y][z] + + def tuple_set(self, xyz, value): + x, y, z = xyz + self.grid[x][y][z] = value + return + class Plane(object): def __init__(self): From d03790e5a92635543125b74c02c83d70b0c50e6c Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Thu, 10 Mar 2016 03:49:59 -0500 Subject: [PATCH 18/23] did some documentation --- .game.py.swo | Bin 12288 -> 12288 bytes .models.py.swo | Bin 0 -> 40960 bytes classes_No_Name.dot | 17 ++++ game.py | 4 +- models.py | 183 ++++++++++++++++++++++++++++---------------- 5 files changed, 135 insertions(+), 69 deletions(-) create mode 100644 .models.py.swo create mode 100644 classes_No_Name.dot diff --git a/.game.py.swo b/.game.py.swo index 700d77541e18f7593d6d4a2e080c644d288c3b3e..bdd356240103192d2b6e8141dc3649149d9b634b 100644 GIT binary patch delta 78 zcmZojXh;xEG6?hZRWR2xVE_UF28M4Y55taa6n!tx>cGRm@MJQlLO<(A5Nq>X1$Q2P f&VtJH#N1T9z);T+22Re+pLKGW7!4;U=q~^Oha?x1 delta 78 zcmZojXh;xEG6?hZRWR2xVE_UF1_p({55g8~6n!txYR|*K@OUz(LO<&V5Nq>X1$Q3) fg39#7+*G~5P|pwsPEO^`pLKGW7)>T8=q~^Oe~=e= diff --git a/.models.py.swo b/.models.py.swo new file mode 100644 index 0000000000000000000000000000000000000000..dd60ced1aa4b0ae6c3900b00b8960261f6e0024f GIT binary patch literal 40960 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 MSM~bX>5aYr52B{I1poj5 literal 0 HcmV?d00001 diff --git a/classes_No_Name.dot b/classes_No_Name.dot new file mode 100644 index 0000000..29d9af1 --- /dev/null +++ b/classes_No_Name.dot @@ -0,0 +1,17 @@ +digraph "classes_No_Name" { +charset="utf-8" +rankdir=BT +"0" [label="{BackgroundObject|color\l|}", shape="record"]; +"1" [label="{Food|y\lx\lz\lcolor\ldead_color\lbackground_color\l|}", shape="record"]; +"2" [label="{GameController|model\l|handle_event()\l}", shape="record"]; +"3" [label="{GameGrid|grid\l|}", shape="record"]; +"4" [label="{GameModel|plane\lwalls : list\ldead : bool\lfoods : list\lscore : int\lgrid\lsnake\lscore2 : int\l|make_food()\lmove_snake()\lchange_orientation()\lcheck_collision()\lmake_random_walls()\lrestart()\lrand_3tuple()\lupdate_snake()\l}", shape="record"]; +"5" [label="{GameView|square_size : int\lmodel\lscreen\l|draw()\lcoord_to_pixels()\lprint_score()\lget_slice()\lprint_death_text()\l}", shape="record"]; +"6" [label="{Plane|depth : int\lright : tuple\lup : tuple\l|turn_up()\lturn_left()\lturn_right()\lturn_down()\l}", shape="record"]; +"7" [label="{Snake|growth_counter : int\ldirection : NoneType\ldead : bool\lgrowth_rate : int\l|die()\lmove()\lchange_direction()\lgrow()\l}", shape="record"]; +"8" [label="{SnakeBodyPart|y\lx\lz\lcolor\ldead_color\lbackground_color\l|}", shape="record"]; +"9" [label="{Wall|y\lx\lz\lcolor\ldead_color\lbackground_color\l|}", shape="record"]; +"3" -> "4" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="grid", style="solid"]; +"6" -> "4" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="plane", style="solid"]; +"7" -> "4" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="snake", style="solid"]; +} diff --git a/game.py b/game.py index 4d510cb..3fd7f8d 100644 --- a/game.py +++ b/game.py @@ -5,7 +5,7 @@ square_width = 10 # pixels grid_width = 51 pixels_wide = square_width * grid_width -ms_per_block = 4 # screen refreshes per move +ms_per_block = 1 # screen refreshes per move score_font_size = 14 if __name__ == '__main__': @@ -30,5 +30,5 @@ model.check_collision() count = 0 view.draw() - #time.sleep(.001) + time.sleep(.001) pygame.QUIT diff --git a/models.py b/models.py index bce289d..90bc684 100644 --- a/models.py +++ b/models.py @@ -4,36 +4,53 @@ import numpy as np class GameView(object): + """ + Creates the player's view of the game state. Slices the 3D grid appropriately depending on the state of the model. + """ def __init__(self, model, screen, square_size=10): self.model = model self.screen = screen - self.square_size = square_size + self.square_size = square_size #Width/height in pixels of individual squares def get_slice(self): - + """Return a 2-dimensional array for the plane that the snake is currently moving in""" def map_origin(depth): + """Return the location of the bottom-left corner of the plane, adjusted for orientation""" map_dict = {-1: len(cube) - 1, 1: 0, 0: depth} mapped = [map_dict[value] for value in direction_vector] return tuple(mapped) - - up_vector = self.model.plane.up + + #Orientation vectors from the perspective of the player + up_vector = self.model.plane.up right_vector = self.model.plane.right direction_vector = np.add(up_vector, right_vector) + slice_depth = self.model.plane.depth - cube = self.model.grid.grid - origin = map_origin(slice_depth) - grid = [[None for y in range(len(cube))] for x in range(len(cube))] - # for depth in range(len(cube)):# + range(slice_depth + 1, len(cube)): - #origin = map_origin(depth) + cube = self.model.grid.grid + grid = [[None for y in range(len(cube))] for x in range(len(cube))] #Initialize empty 2D grid + + background_slices = [depth for depth in range(len(cube)) if depth != slice_depth] #All slice indices except the foreground + for depth in background_slices: + origin = map_origin(depth) #Starting point (lower-right corner) for a given slice + for i in range(len(cube)): + for j in range(len(cube)): + #Move from the origin, in a direction determined by relative up and right + position = np.add(origin, np.add(np.multiply(i, right_vector), np.multiply(j, up_vector))) + x, y, z = (position[0], position[1], position[2]) + if cube[x][y][z] is not None: + grid[i][j] = BackgroundObject(cube[x][y][z]) #Overlay background block onto the grid + slice_origin = map_origin(slice_depth) + #Overlay foreground blocks for i in range(len(cube)): for j in range(len(cube)): - position = np.add(origin, np.add(np.multiply(i, right_vector), np.multiply(j, up_vector))) + position = np.add(slice_origin, np.add(np.multiply(i, right_vector), np.multiply(j, up_vector))) x, y, z = (position[0], position[1], position[2]) - grid[i][j] = cube[x][y][z] - slice_origin = map_origin(slice_depth) + if cube[x][y][z] is not None: + grid[i][j] = cube[x][y][z] return grid def draw(self): + """Print the current grid slice to the screen""" plane = self.get_slice() self.screen.fill(pygame.Color('black')) @@ -41,9 +58,9 @@ def draw(self): for i in range(len(plane)): for j in range(len(plane[i])): get_rect = pygame.Rect(*self.coord_to_pixels((i, j))) - try: # try to get color attribute, if - color = plane[i][j].background_color if not self.model.snake.dead else plane[i][j].dead_color - except: + try: #Try to get color attribute + color = plane[i][j].color if not self.model.snake.dead else plane[i][j].dead_color + except: #If the block is empty color = pygame.Color('black') pygame.draw.rect(self.screen, color, get_rect) @@ -109,10 +126,19 @@ def print_score(self): class GameController(object): + """ + Manipulates the model according to user input. + + Actions: + * Change direction of the snake + * Change orientation of the axes + * Quit or restart game after death + """ def __init__(self, model): self.model = model def handle_event(self, event): + """Respond to key presses, return boolean for whether to continue running the program""" if event.type == pygame.QUIT: return False @@ -138,12 +164,12 @@ def handle_event(self, event): orientation_keys = [pygame.K_w, pygame.K_a, pygame.K_s, pygame.K_d] orient_dict = {key: value for key, value in zip(orientation_keys, directions)} - if event.key in direction_keys: + if event.key in direction_keys: #Change direction of the snake, decrease score by 1 self.model.snake.change_direction(control_dict[event.key]) if old_direction is not None and old_direction != self.model.snake.direction: self.model.score2 -= 1 - if event.key in orientation_keys: + if event.key in orientation_keys: #Change orientation of the model, decrease score by 1 self.model.change_orientation(orient_dict[event.key]) if old_direction is not None: self.model.score2 -= 1 @@ -151,6 +177,16 @@ def handle_event(self, event): class GameModel(object): + """ + Stores all information about the current state of the game. + + Data: + grid: 3D array containing all of the blocks in the game. + snake: The snake itself, which stores its own direction and the positions of its component parts. + foods: A list of the food objects currently contained in the model. + walls: Same as above, for wall objects. + plane: A plane object containing the state of the current slice the snake is moving in. + """ def __init__(self, dimensions=50): self.grid = GameGrid(dimensions) self.snake = Snake(dimensions/2) @@ -159,27 +195,13 @@ def __init__(self, dimensions=50): self.walls = [] self.dead = False self.plane = Plane() - #self.make_first_walls() - self.make_random_walls() + #self.make_random_walls() self.make_food() self.score = 0 - self.score2 = 0 - - def make_first_walls(self): - for i in range(len(self.grid.grid)): - first_wall = Wall(i, 0) - last_wall = Wall(i, len(self.grid.grid[i])-1) - self.grid.grid[i][0] = first_wall # Make top and bottom lines - self.grid.grid[i][-1] = last_wall - self.walls.extend((first_wall, last_wall)) - for j in range(1, len(self.grid.grid[0])): # Make side walls - first_wall = Wall(0, j) - last_wall = Wall(len(self.grid.grid[j])-1, j) - self.grid.grid[0][j] = first_wall - self.grid.grid[-1][j] = last_wall - self.walls.extend((first_wall, last_wall)) + self.score2 = 0 def make_random_walls(self): + """Procedurally generate obstacles in 3 dimensions at the start of the game""" square_dimensions = len(self.grid.grid[0][0]) num_blocks = 1000 block_length = 200 @@ -187,7 +209,7 @@ def make_random_walls(self): # Number of block walls for block in range(num_blocks): - print 'block:', block + #print 'block:', block stagnate = 100 # Select a random start point (that isn't a wall) @@ -207,7 +229,7 @@ def make_random_walls(self): cell_content = self.grid.grid[n_x][n_y][n_z] for a_wall in self.walls: - print 'wall check' + #print 'wall check' if a_wall == cell_content: origin = (a_wall.x, a_wall.y, a_wall.z) block_length -= 1 @@ -226,25 +248,32 @@ def make_random_walls(self): def make_food(self): + """Generate a new food block in a random location; invoked at start of game or when the snake eats""" def random_point(): x = random.randrange(1, len(self.grid.grid) - 1) y = random.randrange(1, len(self.grid.grid[x]) - 1) z = random.randrange(1, len(self.grid.grid[x][y]) - 1) return (x, y, z) point = random_point() - while SnakeBodyPart(*point) in self.snake.get_list(): + while SnakeBodyPart(*point) in self.snake.get_list() or Wall(*point) in self.walls: #Retry if it overlaps with the snake or with a wall block point = random_point() new_food = Food(*point) - self.foods.append(new_food) - self.grid.grid[point[0]][point[1]][point[2]] = new_food + self.foods.append(new_food) #Update the model's food list + self.grid.grid[point[0]][point[1]][point[2]] = new_food #Update the grid + print point def move_snake(self, to_x, to_y, to_z): + """Move the head of the snake to a given point""" + if any(x < 0 or x > (len(self.grid.grid) - 1) for x in [to_x, to_y, to_z]): + #Wrap the snake around the edge when it reaches a corner + self.change_orientation(self.snake.direction) + return # Delete in the grid for part in self.snake.get_list(): self.grid.grid[part.x][part.y][part.z] = None # Move snake internally - grow = bool(self.snake.growth_counter) - self.snake.move(to_x, to_y, to_z, grow) + grow = bool(self.snake.growth_counter) #If the snake is in the process of growing + self.snake.move(to_x, to_y, to_z, grow) #Pass this to the snake's internal move function if grow: self.snake.growth_counter -= 1 # Update in grid @@ -252,12 +281,14 @@ def move_snake(self, to_x, to_y, to_z): self.grid.grid[part.x][part.y][part.z] = part def update_snake(self): + """Incrementally move the snake in whichever direction it's currently moving""" if self.snake.dead: return x = self.snake.head.data.x y = self.snake.head.data.y z = self.snake.head.data.z position = (x, y, z) + #Use the plane's direction vectors to find the snake's next position if self.snake.direction == 'up': new_position = tuple(np.subtract(position, self.plane.up)) elif self.snake.direction == 'left': @@ -268,22 +299,23 @@ def update_snake(self): new_position = tuple(np.add(position, self.plane.right)) else: new_position = position - self.move_snake(*new_position) - print new_position + self.move_snake(*new_position) #Move the snake to the new position - def change_orientation(self, direction): - getattr(self.plane, 'turn_' + direction)() # re-orient the plane accordingly + def change_orientation(self, direction): + """Re-orient the plane by rotating the view in a given direction""" + getattr(self.plane, 'turn_' + direction)() head = self.snake.head.data - direction = tuple(np.add(self.plane.up, self.plane.right)) - position = (head.x, head.y, head.z) - depth_index = direction.index(0) - depth = position[depth_index] + direction_vector = tuple(np.add(self.plane.up, self.plane.right)) + position_vector = (head.x, head.y, head.z) + #Re-set the depth to the position value of the coordinate not contained in the new direction vector + #(e.g. if in the xy plane, depth is the current z position) + depth_index = direction_vector.index(0) + depth = position_vector[depth_index] self.plane.depth = depth def check_collision(self): """ - Check if the Snake's head is hitting a wall or a food. - Act on those. + Check if the Snake's head is hitting anything. Act accordingly. """ x = self.snake.head.data.x y = self.snake.head.data.y @@ -309,24 +341,20 @@ def check_collision(self): self.snake.die() def restart(self): + """Restart the game by re-initializing the model to default values""" self.__init__() def rand_3tuple(self, lower, higher): - """ - Returns random 3-tuple (N_0, N_1, N_2) where lower <= N_x <= higher - """ + """Return random 3-tuple (N_0, N_1, N_2) where lower <= N_x <= higher""" return (random.randint(lower, higher),random.randint(lower, higher) ,random.randint(lower, higher)) class GameGrid(object): + """ + Coordinate array that stores the positional data for all of the game blocks + """ def __init__(self, dimensions): - self.grid = [] - for i in range(dimensions): - self.grid.append([]) - for j in range(dimensions): - self.grid[i].append([]) - for k in range(dimensions): - self.grid[i][j].append(None) + self.grid = np.array([[[None for z in range(dimensions)] for y in range(dimensions)] for x in range(dimensions)]) def __repr__(self): repr_string = '' @@ -338,6 +366,10 @@ def __repr__(self): class Plane(object): + """ + Stores information about the slice of the grid with the snake's current position. + Contains methods for rotating itself in all four directions. + """ def __init__(self): self.up = (0, -1, 0) #default 'up' direction is -y self.right = (1, 0, 0) #default 'right' direction is +x @@ -357,7 +389,9 @@ def turn_left(self): class SnakeBodyPart(object): - + """ + Snake component block to be stored in the grid or contained in a Snake object. + """ color = pygame.Color('green') dead_color = pygame.Color(78, 78, 78, 255) background_color = pygame.Color(78, 78, 78, 100) @@ -367,6 +401,10 @@ def __init__(self, x, y, z): class Snake(LinkedList): + """ + Contains all of the individual snake components, as well as information about its own direction and state of growth. + The snake's head is stored as the head of a linked list. + """ def __init__(self, position, direction=None, growth_rate=4): head = Node(SnakeBodyPart(position, position, z=0)) super(Snake, self).__init__(head) @@ -375,7 +413,8 @@ def __init__(self, position, direction=None, growth_rate=4): self.growth_rate = growth_rate self.dead = False - def change_direction(self, new_direction): + def change_direction(self, new_direction): + """Checks if a direction change is legal and acts on it if appropriate""" opposites = {'up': 'down', 'left': 'right', 'down': 'up', @@ -385,22 +424,25 @@ def change_direction(self, new_direction): self.direction = new_direction def move(self, to_x, to_y, to_z, eaten=False): - """ Takes a tuple of position""" + """Move the snake head to a given set of coordinates by creating a new head""" # Move internally new_head = SnakeBodyPart(to_x, to_y, to_z) self.insert(new_head) if not eaten: - self.delete() + self.delete() #Shift the rest of the snake forward by deleting the tail. + #If the snake has eaten, allow it to grow by just moving the head forward. def grow(self): + """Respond to the snake eating a food block by initializing an increase in length""" self.growth_counter += self.growth_rate def die(self): + """Pretty self-explanatory""" self.dead = True class Food(object): - + """A food block with its own position and color data, to be stored in the model and in the grid""" color = pygame.Color('yellow') dead_color = pygame.Color(210, 210, 210, 255) background_color = pygame.Color(210, 210, 210, 100) @@ -413,7 +455,7 @@ def __repr__(self): class Wall(object): - + """Wall block, used in the same manner as a food block""" color = pygame.Color('red') dead_color = pygame.Color(128, 128, 128, 255) background_color = pygame.Color(128, 128, 128, 100) @@ -424,3 +466,10 @@ def __init__(self, x, y, z): def __repr__(self): return 'Wall' + +class BackgroundObject(object): + """A mostly stateless object to be placed in the grid to represent an object outside of the current plane.""" + def __init__(self, block): + """Set this block's color based on the background color of the original block, so the view function can use it""" + self.color = block.background_color + From f57a0f1c5b94da9053b5bff8c2aace764e5fb381 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Thu, 10 Mar 2016 03:52:55 -0500 Subject: [PATCH 19/23] merged documentation --- .models.py.swo | Bin 24576 -> 32768 bytes models.py | 23 +++++++++-------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.models.py.swo b/.models.py.swo index 00266f2099898a00f438029b218d0fe684ef05c5..19f401e58d0ede71173fa38aa709707d30657a93 100644 GIT binary patch delta 7743 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 ae84e2841f10cb69b53f174d8444c26cf6d2017a self.make_food() self.score = 0 self.score2 = 0 @@ -250,7 +245,7 @@ def make_random_walls(self): if stagnate == 0: block_length = 0 - print 'Number of Walls:', len(self.walls) + #print 'Number of Walls:', len(self.walls) def make_blob_walls(self, num_blobs, size_blobs): square_dimensions = len(self.grid.grid[0][0]) @@ -265,30 +260,30 @@ def make_blob_walls(self, num_blobs, size_blobs): # Make blobs off of those self.make_blob(origin, 0.6, size_blobs) - print len(self.walls) + #print len(self.walls) def make_blob(self, origin, proba, depth): square_dimensions = len(self.grid.grid[0][0]) - print 'Recursing' + #print 'Recursing' if depth == 0: - print 'Stopping Condition' + #print 'Stopping Condition' return directions = [(1,0,0),(0,1,0),(0,0,1),(-1,0,0),(0,-1,0),(0,0,-1)] for one_direction in directions: new_origin = tuple(np.add(origin,one_direction)) - print self.grid.tuple_get(new_origin) != None - print self.tuple_in_range(new_origin, 0, square_dimensions-1) - print random.random() < proba - print + # print self.grid.tuple_get(new_origin) != None + # print self.tuple_in_range(new_origin, 0, square_dimensions-1) + # print random.random() < proba + # print if (self.grid.tuple_get(new_origin) == None) and self.tuple_in_range(new_origin, 0, square_dimensions-1) and (random.random() < proba): - print 'Making new wall' + #print 'Making new wall' # Set walls in internal list of walls new_wall = Wall(*new_origin) From 143ff1d1f795294aeab3f497c41b04f8768c99c0 Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Thu, 10 Mar 2016 04:15:12 -0500 Subject: [PATCH 20/23] split files --- .game.py.swo | Bin 12288 -> 12288 bytes .models.py.swo | Bin 32768 -> 0 bytes controller.py | 53 +++++++++++++ game.py | 4 +- models.py => model.py | 173 ------------------------------------------ view.py | 125 ++++++++++++++++++++++++++++++ 6 files changed, 181 insertions(+), 174 deletions(-) delete mode 100644 .models.py.swo create mode 100644 controller.py rename models.py => model.py (64%) create mode 100644 view.py diff --git a/.game.py.swo b/.game.py.swo index bdd356240103192d2b6e8141dc3649149d9b634b..1511bd9be63a99b72eaf5ca9514b101a9b30d9c3 100644 GIT binary patch delta 317 zcmZojXh@JsG6?hZRWR2xVE_UF1_m#yhhdqv5)5788>PPSGpcMB6!^?v|B;)4VJ;6u zg$hU|5PafiV7Lavdw_Tv5O)D_ClKcWaU2kv0Wl{Kf8k?b_zc81fcPX3Hvw@J5Jv*B z6%g|P@e5uChUY+h9f;2W@g5+a3B+YUoWRSV#9#tsr~@%K5Pt?bhG%%JhSf;4a`jSK%*zTPjL1>$^`jQ2U}2YVc#mX9*oU8M9MKd03+cZ^ z-aOG2E^vlDY+wczD1ZtAFgS&Y*06#F)F2BoBq0VqxP^!gu!Sk~LnKfYMFjz(;D?uc l>cQD5R^&VZdztxqlg6N}_eNsZFbBi2m?pQFlTOpn=?7=JE{*^I diff --git a/.models.py.swo b/.models.py.swo deleted file mode 100644 index 19f401e58d0ede71173fa38aa709707d30657a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/controller.py b/controller.py new file mode 100644 index 0000000..aa65272 --- /dev/null +++ b/controller.py @@ -0,0 +1,53 @@ +import pygame +import numpy as np + +class GameController(object): + """ + Manipulates the model according to user input. + + Actions: + * Change direction of the snake + * Change orientation of the axes + * Quit or restart game after death + """ + def __init__(self, model): + self.model = model + + def handle_event(self, event): + """Respond to key presses, return boolean for whether to continue running the program""" + if event.type == pygame.QUIT: + return False + + if event.type != pygame.KEYDOWN: + return True + + if self.model.snake.dead: + if event.key == pygame.K_q: + # Quit + return False + elif event.key == pygame.K_r: + # Restart the game. + self.model.restart() + return True + + old_direction = self.model.snake.direction + + directions = ['up', 'left', 'down', 'right'] + + direction_keys = [pygame.K_UP, pygame.K_LEFT, pygame.K_DOWN, pygame.K_RIGHT] + control_dict = {key: value for key, value in zip(direction_keys, directions)} + + orientation_keys = [pygame.K_w, pygame.K_a, pygame.K_s, pygame.K_d] + orient_dict = {key: value for key, value in zip(orientation_keys, directions)} + + if event.key in direction_keys: #Change direction of the snake, decrease score by 1 + self.model.snake.change_direction(control_dict[event.key]) + if old_direction is not None and old_direction != self.model.snake.direction: + self.model.score2 -= 1 + + if event.key in orientation_keys: #Change orientation of the model, decrease score by 1 + self.model.change_orientation(orient_dict[event.key]) + if old_direction is not None: + self.model.score2 -= 1 + return True + diff --git a/game.py b/game.py index 3fd7f8d..76178c7 100644 --- a/game.py +++ b/game.py @@ -1,5 +1,7 @@ import pygame -from models import * +from model import GameModel +from view import GameView +from controller import GameController import time square_width = 10 # pixels diff --git a/models.py b/model.py similarity index 64% rename from models.py rename to model.py index e9a23ac..38f609b 100644 --- a/models.py +++ b/model.py @@ -3,179 +3,6 @@ import random import numpy as np -class GameView(object): - """ - Creates the player's view of the game state. Slices the 3D grid appropriately depending on the state of the model. - """ - def __init__(self, model, screen, square_size=10): - self.model = model - self.screen = screen - self.square_size = square_size #Width/height in pixels of individual squares - - def get_slice(self): - """Return a 2-dimensional array for the plane that the snake is currently moving in""" - def map_origin(depth): - """Return the location of the bottom-left corner of the plane, adjusted for orientation""" - map_dict = {-1: len(cube) - 1, 1: 0, 0: depth} - mapped = [map_dict[value] for value in direction_vector] - return tuple(mapped) - - #Orientation vectors from the perspective of the player - up_vector = self.model.plane.up - right_vector = self.model.plane.right - direction_vector = np.add(up_vector, right_vector) - - slice_depth = self.model.plane.depth - cube = self.model.grid.grid - grid = [[None for y in range(len(cube))] for x in range(len(cube))] #Initialize empty 2D grid - - background_slices = [depth for depth in range(len(cube)) if depth != slice_depth] #All slice indices except the foreground - for depth in background_slices: - origin = map_origin(depth) #Starting point (lower-right corner) for a given slice - for i in range(len(cube)): - for j in range(len(cube)): - #Move from the origin, in a direction determined by relative up and right - position = np.add(origin, np.add(np.multiply(i, right_vector), np.multiply(j, up_vector))) - x, y, z = (position[0], position[1], position[2]) - if cube[x][y][z] is not None: - grid[i][j] = BackgroundObject(cube[x][y][z]) #Overlay background block onto the grid - slice_origin = map_origin(slice_depth) - #Overlay foreground blocks - for i in range(len(cube)): - for j in range(len(cube)): - position = np.add(slice_origin, np.add(np.multiply(i, right_vector), np.multiply(j, up_vector))) - x, y, z = (position[0], position[1], position[2]) - if cube[x][y][z] is not None: - grid[i][j] = cube[x][y][z] - return grid - - def draw(self): - """Print the current grid slice to the screen""" - plane = self.get_slice() - self.screen.fill(pygame.Color('black')) - - # Place the appropriate rectangle for every element of the grid (None, SnakeBodyPart, Wall or Food) - for i in range(len(plane)): - for j in range(len(plane[i])): - get_rect = pygame.Rect(*self.coord_to_pixels((i, j))) - try: #Try to get color attribute - color = plane[i][j].color if not self.model.snake.dead else plane[i][j].dead_color - except: #If the block is empty - color = pygame.Color('black') - pygame.draw.rect(self.screen, color, get_rect) - - self.print_score() - - # Blit the death screen if the snake is dead - if self.model.snake.dead: - self.print_death_text('Wasted', 64) - - pygame.display.update() - - def coord_to_pixels(self, coords): - """Take a coordinate pair on the grid and convert to pygame rectangle parameters""" - left = self.square_size * coords[0] - top = self.square_size * coords[1] - width, height = (self.square_size, self.square_size) - return (left, top, width, height) - - def print_death_text(self, death_message, font_size): - - dead_font = pygame.font.Font(None, font_size) - options_font = pygame.font.Font(None, font_size/2) - options_color = (181, 180, 103) - - background = pygame.Surface(self.screen.get_size()) - background = background.convert() - - # Wasted - text = dead_font.render(death_message, 1, (200, 0, 0, 1)) - textpos = text.get_rect() - textpos.centerx = background.get_rect().centerx - textpos.centery = background.get_rect().centerx # centerx such that the text is at the center of the square field - self.screen.blit(text, textpos) - - # Play Again - replay = options_font.render("R: Play Again", 1, options_color) - replay_pos = replay.get_rect() - replay_pos.centerx = background.get_rect().centerx - replay_pos.centery = background.get_rect().centerx + font_size*3/4 # centerx such that the text is at the center of the square field - self.screen.blit(replay, replay_pos) - - # Play Again - quit = options_font.render("Q: Quit", 1, options_color) - quit_pos = quit.get_rect() - quit_pos.centerx = background.get_rect().centerx - quit_pos.centery = background.get_rect().centerx + font_size*3/4 + font_size/2 # centerx such that the text is at the center of the square field - self.screen.blit(quit, quit_pos) - - - def print_score(self): - score_str = 'Score: ' + str(self.model.score2) - - screen_size = self.screen.get_size() - font = pygame.font.Font(None, int(0.06*screen_size[0]))#20) # How to pass font size? - background = pygame.Surface( ( screen_size[0], screen_size[1]-screen_size[0] ) ) - background = background.convert() - - text = font.render(score_str, 1, (255, 255, 255, 1)) - textpos = text.get_rect() - textpos.x = int(0.03*screen_size[0]) - textpos.centery = sum(screen_size)/2 - self.screen.blit(text, textpos) - - -class GameController(object): - """ - Manipulates the model according to user input. - - Actions: - * Change direction of the snake - * Change orientation of the axes - * Quit or restart game after death - """ - def __init__(self, model): - self.model = model - - def handle_event(self, event): - """Respond to key presses, return boolean for whether to continue running the program""" - if event.type == pygame.QUIT: - return False - - if event.type != pygame.KEYDOWN: - return True - - if self.model.snake.dead: - if event.key == pygame.K_q: - # Quit - return False - elif event.key == pygame.K_r: - # Restart the game. - self.model.restart() - return True - - old_direction = self.model.snake.direction - - directions = ['up', 'left', 'down', 'right'] - - direction_keys = [pygame.K_UP, pygame.K_LEFT, pygame.K_DOWN, pygame.K_RIGHT] - control_dict = {key: value for key, value in zip(direction_keys, directions)} - - orientation_keys = [pygame.K_w, pygame.K_a, pygame.K_s, pygame.K_d] - orient_dict = {key: value for key, value in zip(orientation_keys, directions)} - - if event.key in direction_keys: #Change direction of the snake, decrease score by 1 - self.model.snake.change_direction(control_dict[event.key]) - if old_direction is not None and old_direction != self.model.snake.direction: - self.model.score2 -= 1 - - if event.key in orientation_keys: #Change orientation of the model, decrease score by 1 - self.model.change_orientation(orient_dict[event.key]) - if old_direction is not None: - self.model.score2 -= 1 - return True - - class GameModel(object): """ Stores all information about the current state of the game. diff --git a/view.py b/view.py new file mode 100644 index 0000000..4bc4255 --- /dev/null +++ b/view.py @@ -0,0 +1,125 @@ +import pygame +import numpy as np +from model import BackgroundObject + +class GameView(object): + """ + Creates the player's view of the game state. Slices the 3D grid appropriately depending on the state of the model. + """ + def __init__(self, model, screen, square_size=10): + self.model = model + self.screen = screen + self.square_size = square_size #Width/height in pixels of individual squares + + def get_slice(self): + """Return a 2-dimensional array for the plane that the snake is currently moving in""" + def map_origin(depth): + """Return the location of the bottom-left corner of the plane, adjusted for orientation""" + map_dict = {-1: len(cube) - 1, 1: 0, 0: depth} + mapped = [map_dict[value] for value in direction_vector] + return tuple(mapped) + + #Orientation vectors from the perspective of the player + up_vector = self.model.plane.up + right_vector = self.model.plane.right + direction_vector = np.add(up_vector, right_vector) + + slice_depth = self.model.plane.depth + cube = self.model.grid.grid + grid = [[None for y in range(len(cube))] for x in range(len(cube))] #Initialize empty 2D grid + + background_slices = [depth for depth in range(len(cube)) if depth != slice_depth] #All slice indices except the foreground + for depth in background_slices: + origin = map_origin(depth) #Starting point (lower-right corner) for a given slice + for i in range(len(cube)): + for j in range(len(cube)): + #Move from the origin, in a direction determined by relative up and right + position = np.add(origin, np.add(np.multiply(i, right_vector), np.multiply(j, up_vector))) + x, y, z = (position[0], position[1], position[2]) + if cube[x][y][z] is not None: + grid[i][j] = BackgroundObject(cube[x][y][z]) #Overlay background block onto the grid + slice_origin = map_origin(slice_depth) + #Overlay foreground blocks + for i in range(len(cube)): + for j in range(len(cube)): + position = np.add(slice_origin, np.add(np.multiply(i, right_vector), np.multiply(j, up_vector))) + x, y, z = (position[0], position[1], position[2]) + if cube[x][y][z] is not None: + grid[i][j] = cube[x][y][z] + return grid + + def draw(self): + """Print the current grid slice to the screen""" + plane = self.get_slice() + self.screen.fill(pygame.Color('black')) + + # Place the appropriate rectangle for every element of the grid (None, SnakeBodyPart, Wall or Food) + for i in range(len(plane)): + for j in range(len(plane[i])): + get_rect = pygame.Rect(*self.coord_to_pixels((i, j))) + try: #Try to get color attribute + color = plane[i][j].color if not self.model.snake.dead else plane[i][j].dead_color + except: #If the block is empty + color = pygame.Color('black') + pygame.draw.rect(self.screen, color, get_rect) + + self.print_score() + + # Blit the death screen if the snake is dead + if self.model.snake.dead: + self.print_death_text('Wasted', 64) + + pygame.display.update() + + def coord_to_pixels(self, coords): + """Take a coordinate pair on the grid and convert to pygame rectangle parameters""" + left = self.square_size * coords[0] + top = self.square_size * coords[1] + width, height = (self.square_size, self.square_size) + return (left, top, width, height) + + def print_death_text(self, death_message, font_size): + + dead_font = pygame.font.Font(None, font_size) + options_font = pygame.font.Font(None, font_size/2) + options_color = (181, 180, 103) + + background = pygame.Surface(self.screen.get_size()) + background = background.convert() + + # Wasted + text = dead_font.render(death_message, 1, (200, 0, 0, 1)) + textpos = text.get_rect() + textpos.centerx = background.get_rect().centerx + textpos.centery = background.get_rect().centerx # centerx such that the text is at the center of the square field + self.screen.blit(text, textpos) + + # Play Again + replay = options_font.render("R: Play Again", 1, options_color) + replay_pos = replay.get_rect() + replay_pos.centerx = background.get_rect().centerx + replay_pos.centery = background.get_rect().centerx + font_size*3/4 # centerx such that the text is at the center of the square field + self.screen.blit(replay, replay_pos) + + # Play Again + quit = options_font.render("Q: Quit", 1, options_color) + quit_pos = quit.get_rect() + + quit_pos.centerx = background.get_rect().centerx + quit_pos.centery = background.get_rect().centerx + font_size*3/4 + font_size/2 # centerx such that the text is at the center of the square field + self.screen.blit(quit, quit_pos) + + def print_score(self): + score_str = 'Score: ' + str(self.model.score2) + + screen_size = self.screen.get_size() + font = pygame.font.Font(None, int(0.06*screen_size[0]))#20) # How to pass font size? + background = pygame.Surface( ( screen_size[0], screen_size[1]-screen_size[0] ) ) + background = background.convert() + + text = font.render(score_str, 1, (255, 255, 255, 1)) + textpos = text.get_rect() + textpos.x = int(0.03*screen_size[0]) + textpos.centery = sum(screen_size)/2 + self.screen.blit(text, textpos) + From d05114e2941a2ef085f1e476feae679a1acc5aa5 Mon Sep 17 00:00:00 2001 From: Matthew Beaudouin-Lafon Date: Thu, 10 Mar 2016 04:19:01 -0500 Subject: [PATCH 21/23] fixed 3D wall collision --- models.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/models.py b/models.py index e9a23ac..52d62cf 100644 --- a/models.py +++ b/models.py @@ -68,7 +68,7 @@ def draw(self): # Blit the death screen if the snake is dead if self.model.snake.dead: - self.print_death_text('Wasted', 64) + self.print_death_text('WASTED', 64) pygame.display.update() @@ -282,14 +282,14 @@ def make_blob(self, origin, proba, depth): # print - if (self.grid.tuple_get(new_origin) == None) and self.tuple_in_range(new_origin, 0, square_dimensions-1) and (random.random() < proba): + if self.tuple_in_range(new_origin, 0, square_dimensions-1) and (self.grid.tuple_get(new_origin) == None) and (random.random() < proba): #print 'Making new wall' # Set walls in internal list of walls new_wall = Wall(*new_origin) self.walls.append(new_wall) # Set wall in the grid - self.grid.tuple_set(new_origin, new_origin) + self.grid.tuple_set(new_origin, Wall(*new_origin)) # Recurse #self.make_blob(new_origin, proba*(1-1/float(depth)), depth-1) self.make_blob(new_origin, proba, depth-1) @@ -379,7 +379,7 @@ def check_collision(self): # Check for wall collision for a_wall in self.walls: - if a_wall.x == x and a_wall.y == y: + if a_wall.x == x and a_wall.y == y and a_wall.z == z: self.snake.die() # Check for food collision From 8b4c8c7012315587f2e639963b50aaef488c228c Mon Sep 17 00:00:00 2001 From: Sam Myers Date: Thu, 10 Mar 2016 14:24:57 -0500 Subject: [PATCH 22/23] made generic block object --- .game.py.swo | Bin 12288 -> 0 bytes model.py | 40 +++++++++++++++++++--------------------- 2 files changed, 19 insertions(+), 21 deletions(-) delete mode 100644 .game.py.swo diff --git a/.game.py.swo b/.game.py.swo deleted file mode 100644 index 1511bd9be63a99b72eaf5ca9514b101a9b30d9c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2yKWOf6ow~sRuVwaP!1R=>m+P!Fc4XC6$uoih+7f_1;b`{Y>%=xX2&+B0Evz~ z01^c+z%zsgKu|+kDrg}*0RLW0HYq|VBOOb>XJ^i3&iQ5=%d=5mUtZzY?Iy$LG-J0~ z-_}+89NT)pSQ3n+PEy0+pZiYGT)KTv9`421i#*{%SD9XaV_`WoQai3u19?YBUF`&c z3cCwkCy;hL`d2ct69FP{bOL?TxwJUVu3T=^)1c~w^Ze|YwWG(AClMe5M1Tko0U|&I zhyW2F0>_?!i6_`gbaA5S@uF(lx4 zjQyNs?A;WK$N&H1-~Yc(G4=)8hTcG1&}%4!9z)ll3iSIVW4q7}^bvXmJ%S!WEoch* zG0oU_=qvOY+J@dj1Lz6Vgl3>gXcu+tK%bxw(0eGW?HID9l8FEjAOb{y2oM1xKm>>Y z5%>=Rm3Wlh2EMztyviySqi{1g@uiF{yIyb9uryF|XnWcjTIsCfM*Yz6Hm|3XAo8Sd zyFKY{3ODk7m8dAp{c=-3_8cQc5;~hQTUQ-kWN7ms5wX-_!;jp}7SiR0xi)X4xphAb zaakE#xlw2|vP*6EoY3>7kOLVSEBnrhs`8Ti4aZMpnxV?ETjpe&Q7n18%}d>;J9Z+S zJ8%__ZFxXf8mk7EVNdyz7qwtsYJac5Ro%zUY}m$iqUf8rW4-iu!OC!;)|6&pUB_d- zKF(3=;867CsU-HDk)22*(pW1|&n5Dt z1H7zQJ(GTt#>;uMY|0C>4ZFTr}s+7u#1 zJ0nEks8EQR7VfnlNPshKvhsPOng*{HeRC~4S|&Z2aJ&#ahz63CN`-Hk3!mkC6xiM) z+^#m*K2K~?$1Zs;##9hT+VJ!xXB`~{r8kQgw*AMJdu3- Date: Thu, 10 Mar 2016 18:06:40 -0500 Subject: [PATCH 23/23] added writeup --- .game.py.swo | Bin 0 -> 12288 bytes InteractiveProgrammingWriteup.pdf | Bin 0 -> 371759 bytes classes_No_Name.dot | 17 ----------------- game.py | 5 +++-- helpers.py | 8 ++++++++ requirements.txt | 1 - view.py | 6 ++++-- 7 files changed, 15 insertions(+), 22 deletions(-) create mode 100644 .game.py.swo create mode 100644 InteractiveProgrammingWriteup.pdf delete mode 100644 classes_No_Name.dot create mode 100644 helpers.py delete mode 100644 requirements.txt diff --git a/.game.py.swo b/.game.py.swo new file mode 100644 index 0000000000000000000000000000000000000000..614f4fead37dd98f8d217896547359e0cfc2e590 GIT binary patch literal 12288 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�)-l0*I8Suf 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
  • xEC~|5>NU*){x8i{v5h0D9qtnC*tJ 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

    h3$ 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 D#SII^ literal 0 HcmV?d00001 diff --git a/classes_No_Name.dot b/classes_No_Name.dot deleted file mode 100644 index 29d9af1..0000000 --- a/classes_No_Name.dot +++ /dev/null @@ -1,17 +0,0 @@ -digraph "classes_No_Name" { -charset="utf-8" -rankdir=BT -"0" [label="{BackgroundObject|color\l|}", shape="record"]; -"1" [label="{Food|y\lx\lz\lcolor\ldead_color\lbackground_color\l|}", shape="record"]; -"2" [label="{GameController|model\l|handle_event()\l}", shape="record"]; -"3" [label="{GameGrid|grid\l|}", shape="record"]; -"4" [label="{GameModel|plane\lwalls : list\ldead : bool\lfoods : list\lscore : int\lgrid\lsnake\lscore2 : int\l|make_food()\lmove_snake()\lchange_orientation()\lcheck_collision()\lmake_random_walls()\lrestart()\lrand_3tuple()\lupdate_snake()\l}", shape="record"]; -"5" [label="{GameView|square_size : int\lmodel\lscreen\l|draw()\lcoord_to_pixels()\lprint_score()\lget_slice()\lprint_death_text()\l}", shape="record"]; -"6" [label="{Plane|depth : int\lright : tuple\lup : tuple\l|turn_up()\lturn_left()\lturn_right()\lturn_down()\l}", shape="record"]; -"7" [label="{Snake|growth_counter : int\ldirection : NoneType\ldead : bool\lgrowth_rate : int\l|die()\lmove()\lchange_direction()\lgrow()\l}", shape="record"]; -"8" [label="{SnakeBodyPart|y\lx\lz\lcolor\ldead_color\lbackground_color\l|}", shape="record"]; -"9" [label="{Wall|y\lx\lz\lcolor\ldead_color\lbackground_color\l|}", shape="record"]; -"3" -> "4" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="grid", style="solid"]; -"6" -> "4" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="plane", style="solid"]; -"7" -> "4" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="snake", style="solid"]; -} diff --git a/game.py b/game.py index 76178c7..2e2a330 100644 --- a/game.py +++ b/game.py @@ -7,7 +7,7 @@ square_width = 10 # pixels grid_width = 51 pixels_wide = square_width * grid_width -ms_per_block = 1 # screen refreshes per move +ms_per_block = 2 # screen refreshes per move score_font_size = 14 if __name__ == '__main__': @@ -22,6 +22,7 @@ running = True count = 0 while running: + view.draw() for event in pygame.event.get(): # if event.type == pygame.QUIT: # running = False @@ -31,6 +32,6 @@ model.update_snake() model.check_collision() count = 0 - view.draw() + time.sleep(.001) pygame.QUIT diff --git a/helpers.py b/helpers.py new file mode 100644 index 0000000..0a39a37 --- /dev/null +++ b/helpers.py @@ -0,0 +1,8 @@ +def vector_add(*args): + i = sum([arg[0] for arg in args]) + j = sum([arg[1] for arg in args]) + k = sum([arg[2] for arg in args]) + return (i, j, k) + +def vector_multiply(scalar, vector): + return tuple([scalar * component for component in vector]) diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index b9d12f3..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -hg+http://bitbucket.org/pygame/pygame diff --git a/view.py b/view.py index 4bc4255..be900d8 100644 --- a/view.py +++ b/view.py @@ -1,6 +1,7 @@ import pygame import numpy as np from model import BackgroundObject +from helpers import vector_add, vector_multiply class GameView(object): """ @@ -20,8 +21,8 @@ def map_origin(depth): return tuple(mapped) #Orientation vectors from the perspective of the player - up_vector = self.model.plane.up - right_vector = self.model.plane.right + up_vector = np.array(self.model.plane.up) + right_vector = np.array(self.model.plane.right) direction_vector = np.add(up_vector, right_vector) slice_depth = self.model.plane.depth @@ -30,6 +31,7 @@ def map_origin(depth): background_slices = [depth for depth in range(len(cube)) if depth != slice_depth] #All slice indices except the foreground for depth in background_slices: + print 'slice' + str(depth) origin = map_origin(depth) #Starting point (lower-right corner) for a given slice for i in range(len(cube)): for j in range(len(cube)):