For the game I would like to do for this midterm, I am developing a game I created a year ago called Sounds Like NYUAD.
Concept:
The layout is the Nyuad campus, which I illustrated myself last year. The player’s goal is to find the hidden ‘sounds’ located in various NYUAD locations, and each sound is an addition to the final ‘song’ made up of NYUAD sounds. The sounds were also recorded, edited, and produced by me last year. In the song, there are sounds like the NYUAD birds, the Card Swipe, someone sneezing, and coughing (pre-covid times).
Implementation:
The main thing I have to make sure of is that all sounds begin at the same time, but remain muted until they are triggered. This is because it is crucial that all the sounds play like one song, and stay on beat to the song I am playing. When the player comes close to the marker, the sound will be triggered, and that part is added.
Process:
The game is currently coded on Python, and so translating it to Java is my first step. This is really exercising everything I learnt on Java, and also trying to keep track of which language I am using. Next I have some developments I would like to add, and bugs I would like to fix.
- Adding a instruction page
- More clear indicator when you trigger a sound (and fixing the bug when it is repeated twice).
- Inidcating how many sounds are left
- Hints/clues where to find them
- Score calculated based on how many sounds + how fast
- Leadership list
- Fix bugs: such as cats and borders + A clear Indicator when you have hit a border
Sample:
Game game; Creature creature; Borders borders; void setup(){ size(1024, 768); background(255, 255, 255); game = new Game (); creature = new Creature (); borders = new Borders (); } void draw (){ game.drawGame(); }
class Borders{ float x, y, x2, y2; Borders (){ displayBorders(); } void displayBorders(){ stroke(200); line(x,y,x2,y2); } }
class Creature{ float x, y, r; float vy = 0; float vx = 0; //direction = RIGHT; Creature (){ updateCreature(); noFill(); noStroke(); image( img, x-r, y-r, 50, 50); circle(x,y, r*2); } void updateCreature(){ y += vy; x += vx; } //void distanceCreature(self, target){ // return ((self.x - target.x)**2 + (self.y - target.y)**2) **0.5; //} }
import processing.sound.*; PImage img, dead, won; SoundFile backgroundSound; class Game { float w, h, g; float count = 120; float scorecount = 0; boolean totalwin = false; Game(){ img = loadImage("map.jpg"); dead = loadImage("sorry.png"); won = loadImage("finalpage.png"); //backgroundSound = new SoundFile("OriginalBacktrack.mp3"); //backgroundSound.play(); } void drawGame (){ image (img, 0,0); fill (0,0,0); textSize(25); text("Time Remaining: ", 365, 50); fill(255,255,255); //textSize(25); text("Time Remaining: ", 363, 48 ); } }
Here is the python code of the original: (its really long and messy, so I have a lot of reorganzing to do)
#Ayham and Suzan final project add_library('minim') import os, random path = os.getcwd() player = Minim(this) class Creature: #creates both the cats and thomas def __init__(self, x, y, r): self.x = x self.y = y self.r = r self.vy = 0 self.vx = 0 self.direction = RIGHT def display(self): self.update() noFill() noStroke() image(self.img, self.x -self.r, self.y-self.r, 50, 50) # fill(255, 255, 255) circle(self.x, self.y, self.r * 2) def update(self): self.y += self.vy self.x += self.vx def distance(self, target): return ((self.x - target.x)**2 + (self.y - target.y)**2) **0.5 class Cats(Creature): #the cats class def __init__(self, x, y, r, img, w, h,x1, x2): Creature.__init__(self, x, y, r) self.vx = random.randint(1,3) self.x1 = x1 self.x2 = x2 self.img = loadImage(path + "/images/" + img) print(x,y) def update(self): if self.x < self.x1: #movement of the cats self.direction = RIGHT self.vx *= -1 elif self.x > self.x2: self.direction = LEFT self.vx *= -1 self.y += self.vy self.x += self.vx class Thomas(Creature): def __init__(self, x, y, r): Creature.__init__(self, x, y, r) print(x,y) self.key_handler = {LEFT:False, RIGHT:False, UP:False,DOWN:False} self.alive = True self.img= loadImage(path + "/images/thomas.png" ) self.ding_sound = player.loadFile(path + "/sounds/Ding.mp3") #plays when one song part is captured self.meow_sound = player.loadFile(path + "/sounds/meow.mp3") #plays when it gets killed by a cat def update(self): #movement of thomas if self.key_handler[LEFT] == True and not self.x < 0 : self.vx = -1 self.direction = LEFT elif self.key_handler[RIGHT] == True and not self.x + self.r > game.w : self.vx = 1 self.direction = RIGHT elif self.key_handler[UP] == True and not self.y < 0: self.vy = -1 self.direction = UP elif self.key_handler[DOWN] == True and not self.y +self.r > game.h: self.vy = 1 self.direction = DOWN else: self.vx = 0 self.vy = 0 #boundaries created for thomas #horizental boundaries if (self.vy+(self.r*1)+self.y >= game.borders1.y and self.vy+(self.r*1)+self.y <= game.borders1.y2 and self.vx+self.r+self.x >= game.borders1.x and self.vx+self.r+self.x <= game.borders1.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders2.y and self.vy+(self.r*1)+self.y <= game.borders2.y2 and self.vx+self.r+self.x >= game.borders2.x and self.vx+self.r+self.x <= game.borders2.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders5.y and self.vy+(self.r*1)+self.y <= game.borders5.y2 and self.vx+self.r+self.x >= game.borders5.x and self.vx+self.r+self.x <= game.borders5.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders6.y and self.vy+(self.r*1)+self.y <= game.borders6.y2 and self.vx+self.r+self.x >= game.borders6.x and self.vx+self.r+self.x <= game.borders6.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders7.y and self.vy+(self.r*1)+self.y <= game.borders7.y2 and self.vx+self.r+self.x >= game.borders7.x and self.vx+self.r+self.x <= game.borders7.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders9.y and self.vy+(self.r*1)+self.y <= game.borders9.y2 and self.vx+self.r+self.x >= game.borders9.x and self.vx+self.r+self.x <= game.borders9.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders12.y and self.vy+(self.r*1)+self.y <= game.borders12.y2 and self.vx+self.r+self.x >= game.borders12.x and self.vx+self.r+self.x <= game.borders12.x2): self.vy=0 if (self.vy+(self.r*2)+self.y >= game.borders15.y and self.vy+(self.r*2)+self.y <= game.borders15.y2 and self.vx+self.r+self.x >= game.borders15.x and self.vx+self.r+self.x <= game.borders15.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders25.y and self.vy+(self.r*1)+self.y <= game.borders25.y2 and self.vx+self.r+self.x >= game.borders25.x and self.vx+self.r+self.x <= game.borders25.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders27.y and self.vy+(self.r*1)+self.y <= game.borders27.y2 and self.vx+self.r+self.x >= game.borders27.x and self.vx+self.r+self.x <= game.borders27.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders30.y and self.vy+(self.r*1)+self.y <= game.borders30.y2 and self.vx+self.r+self.x >= game.borders30.x and self.vx+self.r+self.x <= game.borders30.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders31.y and self.vy+(self.r*1)+self.y <= game.borders31.y2 and self.vx+self.r+self.x >= game.borders31.x and self.vx+self.r+self.x <= game.borders31.x2): self.vy=0 if (self.vy+(self.r*1)+self.y >= game.borders33.y and self.vy+(self.r*1)+self.y <= game.borders33.y2 and self.vx+self.r+self.x >= game.borders33.x and self.vx+self.r+self.x <= game.borders33.x2): self.vy=0 #vertical if (self.vx+(self.r*2)+self.x <= game.borders3.x and self.vx+(self.r*2)+self.x >= game.borders3.x2 and self.vy+self.r+self.y <= game.borders3.y and self.vy+self.r+self.y >= game.borders3.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders4.x and self.vx+(self.r*2)+self.x >= game.borders4.x2 and self.vy+self.r+self.y <= game.borders4.y and self.vy+self.r+self.y >= game.borders4.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders8.x and self.vx+(self.r*2)+self.x >= game.borders8.x2 and self.vy+self.r+self.y <= game.borders8.y and self.vy+self.r+self.y >= game.borders8.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders11.x and self.vx+(self.r*2)+self.x >= game.borders11.x2 and self.vy+self.r+self.y <= game.borders11.y and self.vy+self.r+self.y >= game.borders11.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders16.x and self.vx+(self.r*2)+self.x >= game.borders16.x2 and self.vy+self.r+self.y <= game.borders16.y and self.vy+self.r+self.y >= game.borders16.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders19.x and self.vx+(self.r*2)+self.x >= game.borders19.x2 and self.vy+self.r+self.y <= game.borders19.y and self.vy+self.r+self.y >= game.borders19.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders21.x and self.vx+(self.r*2)+self.x >= game.borders21.x2 and self.vy+self.r+self.y <= game.borders21.y and self.vy+self.r+self.y >= game.borders21.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders22.x and self.vx+(self.r*2)+self.x >= game.borders22.x2 and self.vy+self.r+self.y <= game.borders22.y and self.vy+self.r+self.y >= game.borders22.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders23.x and self.vx+(self.r*2)+self.x >= game.borders23.x2 and self.vy+self.r+self.y <= game.borders23.y and self.vy+self.r+self.y >= game.borders23.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders24.x and self.vx+(self.r*2)+self.x >= game.borders24.x2 and self.vy+self.r+self.y <= game.borders24.y and self.vy+self.r+self.y >= game.borders24.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders26.x and self.vx+(self.r*2)+self.x >= game.borders26.x2 and self.vy+self.r+self.y <= game.borders26.y and self.vy+self.r+self.y >= game.borders26.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders28.x and self.vx+(self.r*2)+self.x >= game.borders28.x2 and self.vy+self.r+self.y <= game.borders28.y and self.vy+self.r+self.y >= game.borders28.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders29.x and self.vx+(self.r*2)+self.x >= game.borders29.x2 and self.vy+self.r+self.y <= game.borders29.y and self.vy+self.r+self.y >= game.borders29.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders32.x and self.vx+(self.r*2)+self.x >= game.borders32.x2 and self.vy+self.r+self.y <= game.borders32.y and self.vy+self.r+self.y >= game.borders32.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders34.x and self.vx+(self.r*2)+self.x >= game.borders34.x2 and self.vy+self.r+self.y <= game.borders34.y and self.vy+self.r+self.y >= game.borders34.y2): self.vx = 0 if (self.vx+(self.r*2)+self.x <= game.borders35.x and self.vx+(self.r*2)+self.x >= game.borders35.x2 and self.vy+self.r+self.y <= game.borders35.y and self.vy+self.r+self.y >= game.borders35.y2): self.vx = 0 self.y += self.vy self.x += self.vx #sounds of the song and functions to when the song is detected if library.distance(self) < 20: self.ding_sound.rewind() self.ding_sound.play() game.library.setGain(1) library.win = True # showimage() if knocknock.distance(self) <20: self.ding_sound.rewind() self.ding_sound.play() game.knocknock.setGain(1) knocknock.win = True if alarm.distance(self) <20: self.ding_sound.rewind() self.ding_sound.play() game.alarm.setGain(1) alarm.win = True if baraha.distance(self) <20: self.ding_sound.rewind() self.ding_sound.play() game.baraha.setGain(1) baraha.win = True if dining.distance(self) <20: self.ding_sound.rewind() self.ding_sound.play() game.dining.setGain(1) dining.win = True if palms.distance(self) <20: self.ding_sound.rewind() self.ding_sound.play() game.palms.setGain(1) palms.win = True if theatre.distance(self) <20: self.ding_sound.rewind() self.ding_sound.play() game.theatre.setGain(1) theatre.win = True for g in game.cats: #cats distribution if g.distance(self) <= self.r+ g.r: self.meow_sound.rewind() self.meow_sound.play() self.alive = False class Locations(): #locaitions for the song parts def __init__(self, x, y,r ): self.x = x self.y= y self.r= r self.win= False def display(self): noFill() noStroke() circle(self.x, self.y, self.r) def distance(self, target): return ((self.x - target.x)**2 + (self.y - target.y)**2) **0.5 class Borders(): def __init__(self,x,y,x2,y2): self.x = x self.y= y self.x2 = x2 self.y2 = y2 def display(self): stroke(200) line(self.x,self.y,self.x2,self.y2) class Game: def __init__(self, w, h, g): self.w = w self.h = h self.g = g self.img = loadImage(path + "/images/map.jpg") self.dead = loadImage(path + "/images/sorry.png") self.won = loadImage(path + "/images/finalpage.png") self.background_sound = player.loadFile(path + "/sounds/OriginalBacktrack.mp3") self.background_sound.play() self.baraha = player.loadFile(path + "/sounds/CardSwipe.mp3") self.baraha.setGain(-1000) self.baraha.play() self.knocknock = player.loadFile(path + "/sounds/Knock_RA.mp3") self.knocknock.setGain(-1000) self.knocknock.play() self.theatre = player.loadFile(path + "/sounds/SneezeCough.mp3") self.theatre.setGain(-1000) self.theatre.play() self.library = player.loadFile(path + "/sounds/Typing_clicking.mp3") self.library.setGain(-1000) self.library.play() self.palms = player.loadFile(path + "/sounds/Birds.mp3") self.palms.setGain(-1000) self.palms.play() self.dining = player.loadFile(path + "/sounds/Didyoudothereading.mp3") self.dining.setGain(-1000) self.dining.play() self.alarm = player.loadFile(path + "/sounds/iPhoneAlarm.mp3") self.alarm.setGain(-1000) self.alarm.play() self.thomas = Thomas(75,450,15) self.count = 120 self.scorecount=0 self.totalwin= False #border coordinates self.borders1 = Borders(444 , 286, 575, 286) #horizental self.borders2 = Borders(442 , 346, 520, 346)#horizental self.borders3 = Borders(540 , 455, 540, 346) #V self.borders4 = Borders(582 , 456, 582 , 286) #V self.borders5 = Borders(402,470,502,470) #H self.borders6 = Borders(590,472,712,472)#H self.borders7 = Borders(754,493,812,493)#H self.borders8 = Borders(874,541,874,509)#V self.borders21 = Borders(948,620,948,533)#V self.borders22 = Borders(158,370,158,182)#V self.borders23 = Borders(775,720,775,675)#V self.borders24 = Borders(800,720,800,675)#V self.borders25 = Borders(530,527,586,527)#h self.borders26= Borders(586,595,586,527)#V self.borders27 = Borders(536,595,586,595)#h self.borders28 = Borders(536,595,536,529)#V self.borders29 = Borders(396,664,396,614)#v self.borders30 = Borders(350,614,396,614)#h self.borders31= Borders(754,602,808,602)#h self.borders32 = Borders(808,640,808,602)#V self.borders33 = Borders(756,640,808,640)#h self.borders34 = Borders(756,640,756,602)#V self.borders35 = Borders(418,281,418,189) self.borders9 = Borders(50,195,470,195)#H self.borders11 = Borders(65,300,65,360)#V self.borders12 = Borders(65,375,422,375)#H self.borders15 = Borders(356,725,950,725)#H self.borders16 = Borders(340,750,340,572)#V self.borders19 = Borders(955,750,955,640)#V #appending the cats in the game self.cats = [] for i in range(3): self.cats.append(Cats(random.randint(200, 900), random.randint(200, 600), 15, "cat" + str(random.randint(1,3))+".png", 70, 70, 200, 800)) def display(self): image(self.img,0,0) fill(0,0,0) textSize(25) text("Time remaining: "+ str(self.count), 365, 50 ) fill(255,255,255) textSize(25) text("Time remaining: "+ str(self.count), 364, 49 ) if self.count == 0: #stop the game when the game is over self.thomas.alive = False self.background_sound.close() self.baraha.close() self.palms.close() self.library.close() self.dining.close() self.theatre.close() self.knocknock.close() self.alarm.close() if self.thomas.alive == False: image(self.dead, 187, 59) self.background_sound.close() self.baraha.close() self.palms.close() self.library.close() self.dining.close() self.theatre.close() self.knocknock.close() self.alarm.close() return if library.win == True and alarm.win == True and palms.win == True and baraha.win == True and theatre.win == True and knocknock.win == True and dining.win == True: #winning of the game self.totalwin= True image(self.won, 187, 59) self.background_sound.close() self.baraha.close() self.palms.close() self.library.close() self.dining.close() self.theatre.close() self.knocknock.close() self.alarm.close() return self.thomas.update() self.thomas.display() for g in self.cats: g.display() #coordinates of the different sounds game = Game(1024, 768, 585) library = Locations (250,270,100) palms = Locations(250,470,100) baraha = Locations (400, 310, 50) theatre = Locations (790, 250, 100) dining= Locations (950, 400, 100) knocknock= Locations (800, 620, 200) alarm= Locations (570, 570, 200) def setup(): size(game.w, game.h) background(255, 255, 255) def draw(): print(game.thomas.x,game.thomas.y) if game.thomas.alive == True and game.totalwin== False : if frameCount % 60 ==0: game.count -= 1 print(game.scorecount) game.display() library.display() palms.display() baraha.display() theatre.display() dining.display() knocknock.display() alarm.display() def keyPressed(): #aids in movement using the keys if keyCode == LEFT: game.thomas.key_handler[LEFT] = True elif keyCode == RIGHT: game.thomas.key_handler[RIGHT] = True elif keyCode == UP: game.thomas.key_handler[UP] = True elif keyCode == DOWN: game.thomas.key_handler[DOWN] = True def keyReleased(): if keyCode == LEFT: game.thomas.key_handler[LEFT] = False elif keyCode == RIGHT: game.thomas.key_handler[RIGHT] = False elif keyCode == UP: game.thomas.key_handler[UP] = False elif keyCode == DOWN: game.thomas.key_handler[DOWN] = False def mouseClicked(): global game if game.thomas.alive == False or game.totalwin== True: #clicks when game is over game = Game(1024, 768, 585)