diff --git a/README.md b/README.md index 5f822327..a5e7a2fd 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,10 @@ -# InteractiveProgramming -This is the base repo for the interactive programming project for Software Design, Spring 2018 at Olin College. +In order to run this game, the first thing you need to install is pygame for Python3. +You can do this by running: + + sudo apt-get install python3-setuptools + sudo easy_install3 pip + sudo pip3.5 install pygame + +The project write-up is called reflection. + +The final documents final_game.py. You play by using your mouse to navigate back to the anemone while trying to avoid the trash. diff --git a/Softdes_proposal.pdf b/Softdes_proposal.pdf new file mode 100644 index 00000000..e796a599 Binary files /dev/null and b/Softdes_proposal.pdf differ diff --git a/bubble.mp3 b/bubble.mp3 new file mode 100644 index 00000000..84d2bdcb Binary files /dev/null and b/bubble.mp3 differ diff --git a/final_game.py b/final_game.py new file mode 100644 index 00000000..048c8fac --- /dev/null +++ b/final_game.py @@ -0,0 +1,192 @@ +import pygame, sys +from pygame.locals import * +import time +import os +from random import * +import random as random +from pygame import mixer +youwin0 = pygame.image.load('win.png') +gameover0 = pygame.image.load('lose.png') +background = pygame.image.load('underwater.jpg') +mainfish0 = pygame.image.load('mainfish.png') +mainfish0.set_colorkey((255,255,255)) +trash0 = pygame.image.load('trash2.png') +food0 = pygame.image.load('target.png') + +class PyGameWindowView(object): + """This class initializes the background, sets the screen, and converts image formats for spped""" + + def __init__(self, target, size): + + + self.screen = pygame.display.set_mode(size) + youwin =youwin0.convert_alpha() + mainfish = mainfish0.convert_alpha() + trash = trash0.convert_alpha() + food = food0.convert_alpha() + gameover = gameover0.convert_alpha() + + self.target = target + + self.background1 = pygame.Surface(self.screen.get_size()) + self.background1.fill((255, 255, 255)) + +class Target(object): + """Initializing the "goal" for the player to drag the fish to + """ + def __init__(self, size): + self.image = pygame.Surface((100,100)) + self.pos = (1230,480) + self.height = 70 + self.width = 70 + self.x = 1140 + self.y = 800 + + def __str__(self): + return "Target height=%f, width=%f, x=%f, y=%f" % (self.height, + self.width, + self.x, + self.y) + +class Obstacle(object): + """Initializing an obstacle for collison. + """ + def __init__(self): + self.image = pygame.Surface((90, 90)) + self.image.fill((150, 60, 10)) + self.image.set_colorkey((150,60,10)) + self.pos = pygame.math.Vector2(random.randrange(1230), + random.randrange(910)) + self.vel = pygame.math.Vector2(random.uniform(-10, 10), + random.uniform(-10, 10)) + + def __str__(self): + return "Obstacle height=%f, width=%f, x=%f, y=%f" % (self.height, + self.width, + self.x, + self.y) + + def update(self, stop): + #prevents obstacle from leaving pygame window + self.pos += self.vel + if self.pos[0] < 50: + self.vel = (random.randint(1, 5), random.randint(1,5)) + if self.pos[0] > 1230: + self.vel = (random.randint(-5, -1), random.randint(-5,-1)) + if self.pos[1] < 50: + self.vel = (random.randint(1, 5), random.randint(1,5)) + if self.pos[1] > 960: + self.vel = (random.randint(-5, -1), random.randint(-5,-1)) + + if stop == True: + self.vel = (0,0) + + +def create_newLevel(PyGameWindowView, Target, background, size): + """This function creates a whole new background with different + obstacles for the next level.""" + obstacles = [] + for i in range(random.randint(1,7)): + obstacle = Obstacle() + obstacles.append(obstacle) + nextLevel = PyGameWindowView(target,size) + nextLevel.screen.blit(background, (0,0)) + for obstacle in obstacles: + obstacle.update(stop = False) + nextLevel.screen.blit(obstacle.image, obstacle.pos) + + pygame.display.update() + return nextLevel, obstacles + +if __name__ == '__main__': + + pygame.init() + pygame.mixer.init() + pygame.font.init() + + size = (1280,960) + target = Target(size) + + obstacles = [] + obstacle = Obstacle() + obstacles.append(obstacle) + + view = PyGameWindowView(target,size) + view.background = background + + + score = 0 + running = True + view.screen.blit(view.background,(0,0)) + + + while running: + for event in pygame.event.get(): + if event.type == QUIT: + running = False + if event.type == pygame.MOUSEMOTION: + + mousex, mousey = pygame.mouse.get_pos() + pygame.mouse.set_visible(False) + + view.screen.blit(view.background,(0,0)) + + view.screen.blit(mainfish0, (mousex-100, mousey-100)) + view.screen.blit(food0, (1280-257,960-269) ) + + + for obstacle in obstacles: + obstacle.update(stop = False) + view.screen.blit(obstacle.image, obstacle.pos) + view.screen.blit(trash0,obstacle.pos) + + ### Collisions ### + for obstacle in obstacles: + if abs(obstacle.pos[0]-mousex) <= 40: + if abs(obstacle.pos[1]-mousey) <= 65: + obstacle.update(stop=True) + view.screen.blit(gameover0, (0,0)) + pygame.event.set_blocked(pygame.MOUSEMOTION) + pygame.event.set_allowed(pygame.KEYDOWN) + pygame.mixer.music.load('smack.mp3') + pygame.mixer.music.play() + + + + + ###Leveling Up ### + if mousex in range(target.x, target.x+target.width) and mousey in range(target.y, target.y+target.height): + pygame.mixer.music.load('bubble.mp3') + pygame.mixer.music.play() + levelTwo, obstacles = create_newLevel(PyGameWindowView, target, background, size) + score += 1 + pygame.display.update() + pygame.mouse.set_pos((0,200)) #resetting mouse position to the left most part of the screen + if score == 5: + view.screen.blit(youwin0, (0,0)) + pygame.event.set_blocked(pygame.MOUSEMOTION) + time.sleep(3) + #running = False + + ## You Lost Screen Options### + if event.type == KEYDOWN: + if event.key == K_TAB: + print('pressed') + running = False + if event.key == K_SPACE: + print('pressed') + pygame.event.set_allowed(MOUSEMOTION) + event.type == MOUSEMOTION + levelTwo, obstacles = create_newLevel(PyGameWindowView, target, background, size) + + pygame.mouse.set_pos((0,200)) #resetting mouse position to the left most part of the screen + mousex, mousey = pygame.mouse.get_pos() + pygame.mouse.set_visible(False) + view.screen.blit(view.background,(0,0)) + + view.screen.blit(mainfish0, (mousex-100, mousey-100)) + view.screen.blit(food0, (1280-257,960-269) ) + pygame.display.update() + pygame.display.update() + time.sleep(.001) + pygame.quit() diff --git a/gameover.jpg b/gameover.jpg new file mode 100644 index 00000000..95388235 Binary files /dev/null and b/gameover.jpg differ diff --git a/images/carrot.jpg b/images/carrot.jpg new file mode 100755 index 00000000..ac0e6b0d Binary files /dev/null and b/images/carrot.jpg differ diff --git a/images/carrot2.png b/images/carrot2.png new file mode 100644 index 00000000..4e315d68 Binary files /dev/null and b/images/carrot2.png differ diff --git a/images/dog2.jpg b/images/dog2.jpg new file mode 100755 index 00000000..f91a9fe1 Binary files /dev/null and b/images/dog2.jpg differ diff --git a/images/gameover.jpg b/images/gameover.jpg new file mode 100644 index 00000000..95388235 Binary files /dev/null and b/images/gameover.jpg differ diff --git a/images/horsey.jpg b/images/horsey.jpg new file mode 100644 index 00000000..ee4b07f3 Binary files /dev/null and b/images/horsey.jpg differ diff --git a/images/horsey2.jpg b/images/horsey2.jpg new file mode 100644 index 00000000..96584a80 Binary files /dev/null and b/images/horsey2.jpg differ diff --git a/images/mountain.jpg b/images/mountain.jpg new file mode 100755 index 00000000..2fcac361 Binary files /dev/null and b/images/mountain.jpg differ diff --git a/images/sky.jpg b/images/sky.jpg new file mode 100644 index 00000000..f77f9cb3 Binary files /dev/null and b/images/sky.jpg differ diff --git a/images/space.png b/images/space.png new file mode 100644 index 00000000..1686216f Binary files /dev/null and b/images/space.png differ diff --git a/images/wave.jpg b/images/wave.jpg new file mode 100644 index 00000000..b903d0c6 Binary files /dev/null and b/images/wave.jpg differ diff --git a/images/win.jpg b/images/win.jpg new file mode 100644 index 00000000..5e0d857f Binary files /dev/null and b/images/win.jpg differ diff --git a/line_draw.py b/line_draw.py new file mode 100644 index 00000000..7415238a --- /dev/null +++ b/line_draw.py @@ -0,0 +1,47 @@ +# import turtle +# from turtle import * +# from time import sleep +# turtle = Turtle() +# turtle.home() +# turtle.pensize(3) +# turtle.pencolor('white') +# turtle.ht() +# turtle.setposition(-450,0) +# screen = Screen() +# turtle.pencolor('black') +# turtle.st() +# screen.onscreenclick(turtle.goto) +# turtle.getscreen()._root.mainloop() + + +import pygame + +def main(): + pygame.init() + screen = pygame.display.set_mode((640, 480)) + + + background = pygame.Surface(screen.get_size()) + background.fill((255, 255, 255)) + + + keepGoing = True + lineStart = (0, 0) + drawColor = (0, 0, 0) + lineWidth = 3 + + while keepGoing: + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + keepGoing = False + elif event.type == pygame.MOUSEMOTION: + lineEnd = pygame.mouse.get_pos() + if pygame.mouse.get_pressed() == (1, 0, 0): + pygame.draw.line(background, drawColor, lineStart, lineEnd, lineWidth) + lineStart = lineEnd + screen.blit(background, (0, 0)) + pygame.display.flip() + +if __name__ == "__main__": + main() diff --git a/lose.png b/lose.png new file mode 100644 index 00000000..4b69885a Binary files /dev/null and b/lose.png differ diff --git a/mainfish.png b/mainfish.png new file mode 100644 index 00000000..0d8518fd Binary files /dev/null and b/mainfish.png differ diff --git a/multiple_level.py b/multiple_level.py new file mode 100644 index 00000000..4d90238d --- /dev/null +++ b/multiple_level.py @@ -0,0 +1,155 @@ +import pygame, sys +from pygame.locals import * +import time +import os +from random import * +import random as random +youwin0 = pygame.image.load('win.jpg') +youwin = pygame.transform.scale(youwin0, (1280, 960)) +gameover0 = pygame.image.load('gameover.jpg') +gameover = pygame.transform.scale(gameover0, (1280, 960)) +background = pygame.image.load('underwater.jpg') +mainfish0 = pygame.image.load('mainfish.png') +mainfish0.set_colorkey((255,255,255)) +trash0 = pygame.image.load('trash2.png') +food0 = pygame.image.load('target.png') + +class PyGameWindowView(object): + """This class initializes the background, sets the screen, and converts image formats for spped""" + + def __init__(self, target, size): + + + self.screen = pygame.display.set_mode(size) + youwin =youwin0.convert_alpha() + mainfish = mainfish0.convert_alpha() + trash = trash0.convert_alpha() + food = food0.convert_alpha() + + self.target = target + + self.background = pygame.Surface(self.screen.get_size()) + self.background.fill((255, 255, 255)) + +class Target(object): + """Initializing the "goal" for the player to drag the fish to + """ + def __init__(self, size): + self.image = pygame.Surface((100,100)) + self.pos = (1230,480) + self.height = 70 + self.width = 70 + self.x = 1140 + self.y = 800 + + def __str__(self): + return "Target height=%f, width=%f, x=%f, y=%f" % (self.height, + self.width, + self.x, + self.y) + +class Obstacle(object): + """Initializing an obstacle for collison. + """ + def __init__(self): + self.image = pygame.Surface((90, 90)) + self.image.fill((150, 60, 10)) + self.image.set_colorkey((150,60,10)) + self.pos = pygame.math.Vector2(random.randrange(1230), + random.randrange(910)) + self.vel = pygame.math.Vector2(random.uniform(-10, 10), + random.uniform(-10, 10)) + + def __str__(self): + return "Obstacle height=%f, width=%f, x=%f, y=%f" % (self.height, + self.width, + self.x, + self.y) + + def update(self): + #prevents obstacle from leaving pygame window + self.pos += self.vel + if self.pos[0] < 50: + self.vel = (random.randint(1, 5), random.randint(1,5)) + if self.pos[0] > 1230: + self.vel = (random.randint(-5, -1), random.randint(-5,-1)) + if self.pos[1] < 50: + self.vel = (random.randint(1, 5), random.randint(1,5)) + if self.pos[1] > 960: + self.vel = (random.randint(-5, -1), random.randint(-5,-1)) + +def create_newLevel(PyGameWindowView, Target, background, size): + """This function creates a whole new background with different + obstacles for the next level.""" + obstacles = [] + for i in range(random.randint(1,7)): + obstacle = Obstacle() + obstacles.append(obstacle) + nextLevel = PyGameWindowView(target,size) + nextLevel.screen.blit(background, (0,0)) + for obstacle in obstacles: + obstacle.update() + nextLevel.screen.blit(obstacle.image, obstacle.pos) + + pygame.display.update() + return nextLevel, obstacles + +if __name__ == '__main__': + + pygame.init() + + size = (1280,960) + target = Target(size) + + obstacles = [] + obstacle = Obstacle() + obstacles.append(obstacle) + view = PyGameWindowView(target,size) + view.background = background + score = 0 + running = True + view.screen.blit(view.background,(0,0)) + while running: + for event in pygame.event.get(): + if event.type == QUIT: + running = False + + + mousex, mousey = pygame.mouse.get_pos() + pygame.mouse.set_visible(False) + fishposx = range(int(mousex-5), int(mousex+5)) + fishposy = range(int(mousey-5), int(mousey+5)) + view.screen.blit(view.background,(0,0)) + + view.screen.blit(mainfish0, (mousex-100, mousey-100)) + view.screen.blit(food0, (1280-257,960-269) ) + + + for obstacle in obstacles: + obstacle.update() + view.screen.blit(obstacle.image, obstacle.pos) + view.screen.blit(trash0,obstacle.pos) + + ### Collisions ### + for obstacle in obstacles: + if abs(obstacle.pos[0]-mousex) <= 40: + if abs(obstacle.pos[1]-mousey) <= 65: + view.screen.blit(gameover, (0,0)) + time.sleep(1) + running = False + + + ###Leveling Up ### + if mousex in range(target.x, target.x+target.width) and mousey in range(target.y, target.y+target.height): + levelTwo, obstacles = create_newLevel(PyGameWindowView, target, background, size) + score += 1 + pygame.display.update() + pygame.mouse.set_pos((0,200)) #resetting mouse position to the left most part of the screen + if score == 5: + view.screen.blit(youwin, (0,0)) + time.sleep(1) + running = False + + pygame.display.update() + time.sleep(.001) + pygame.quit() diff --git a/prototype_constantclick.py b/prototype_constantclick.py new file mode 100644 index 00000000..8be6aa65 --- /dev/null +++ b/prototype_constantclick.py @@ -0,0 +1,79 @@ +import pygame +from pygame.locals import * +import time +from turtle import * +import os + +class PyGameWindowView(object): + + def __init__(self, model, size): + + self.screen = pygame.display.set_mode(size) + self.model = model + + self.background = pygame.Surface(self.screen.get_size()) + self.background.fill((255, 255, 255)) + + self.lineStart = (0, 240) + self.drawColor = (0, 0, 0) + self.lineWidth = 10 + + def draw(self): + + pygame.draw.rect(self.screen, + pygame.Color(0, 0, 0), + pygame.Rect(self.model.x, + self.model.y, + self.model.width, + self.model.height)) + + +class Paddle(object): + """ Encodes the state of the paddle in the game """ + def __init__(self, size): + """ Initialize a paddle with the specified height, width, + and position (x,y) """ + self.height = 20 + self.width = 100 + self.x = 200 + self.y = 30 + + def update(self, positionx, positiony): + """ update the state of the paddle """ + self.x = positionx + self.y = positiony + + def __str__(self): + return "Paddle height=%f, width=%f, x=%f, y=%f" % (self.height, + self.width, + self.x, + self.y) + +if __name__ == '__main__': + pygame.init() + + size = (640,480) + + model = Paddle(size) + view = PyGameWindowView(model, size) + running = True + while running: + for event in pygame.event.get(): + if event.type == QUIT: + running = False + #view.lineStart = pygame.mouse.get_pos() + lineEnd = pygame.mouse.get_pos() + if pygame.mouse.get_pressed() == (1, 0, 0): + pygame.draw.line(view.background, view.drawColor, view.lineStart, lineEnd, view.lineWidth) + view.lineStart = lineEnd + view.screen.blit(view.background, (0, 0)) + pygame.display.flip() + #position = pygame.mouse.get_pos() + + view.draw() + #print(lineEnd[0]-5, view.lineEnd[1]-5) + model.update(lineEnd[0]-150, lineEnd[1]-20) + print(model.x, model.y) + pygame.display.update() #this is the line of code I added to update the screen + time.sleep(.001) + pygame.quit() diff --git a/reflection.pdf b/reflection.pdf new file mode 100644 index 00000000..09dab31f Binary files /dev/null and b/reflection.pdf differ diff --git a/smack.mp3 b/smack.mp3 new file mode 100644 index 00000000..8e6cda81 Binary files /dev/null and b/smack.mp3 differ diff --git a/target.png b/target.png new file mode 100644 index 00000000..899052e6 Binary files /dev/null and b/target.png differ diff --git a/trash2.png b/trash2.png new file mode 100644 index 00000000..22f3fb3b Binary files /dev/null and b/trash2.png differ diff --git a/underwater.jpg b/underwater.jpg new file mode 100644 index 00000000..2ca6d618 Binary files /dev/null and b/underwater.jpg differ diff --git a/win.jpg b/win.jpg new file mode 100644 index 00000000..5e0d857f Binary files /dev/null and b/win.jpg differ diff --git a/win.png b/win.png new file mode 100644 index 00000000..b765c0ee Binary files /dev/null and b/win.png differ