From 46574fb25300a91fd8c70ac56037afc68df4cb1e Mon Sep 17 00:00:00 2001 From: Tyler B Date: Wed, 05 Aug 2009 18:24:51 +0000 Subject: Updated Tower to run more efficiently, also added statistics to see how well a player did. Initial development of starting screen (no graphics yet). --- diff --git a/data/TowerBackground2.bmp b/data/TowerBackground2.bmp deleted file mode 100644 index fdaf3e8..0000000 --- a/data/TowerBackground2.bmp +++ /dev/null Binary files differ diff --git a/data/TowerWindow.bmp b/data/TowerWindow.bmp deleted file mode 100644 index 8e015c5..0000000 --- a/data/TowerWindow.bmp +++ /dev/null Binary files differ diff --git a/data/WallTile.bmp b/data/WallTile.bmp deleted file mode 100644 index a93ba50..0000000 --- a/data/WallTile.bmp +++ /dev/null Binary files differ diff --git a/data/brick_wall_bg.bmp b/data/brick_wall_bg.bmp deleted file mode 100644 index 17c442a..0000000 --- a/data/brick_wall_bg.bmp +++ /dev/null Binary files differ diff --git a/data/bridge_bg_2.bmp b/data/bridge_bg_2.bmp deleted file mode 100644 index cbfd7bd..0000000 --- a/data/bridge_bg_2.bmp +++ /dev/null Binary files differ diff --git a/data/bridge_controls_3.bmp b/data/bridge_controls_3.bmp deleted file mode 100644 index 53ab1cc..0000000 --- a/data/bridge_controls_3.bmp +++ /dev/null Binary files differ diff --git a/data/bridge_piece3 - Copy.bmp b/data/bridge_piece3 - Copy.bmp deleted file mode 100644 index 68989fb..0000000 --- a/data/bridge_piece3 - Copy.bmp +++ /dev/null Binary files differ diff --git a/data/bridge_piece3.bmp b/data/bridge_piece3.bmp deleted file mode 100644 index 6ad7793..0000000 --- a/data/bridge_piece3.bmp +++ /dev/null Binary files differ diff --git a/data/fork.bmp b/data/fork.bmp deleted file mode 100644 index 91cc32a..0000000 --- a/data/fork.bmp +++ /dev/null Binary files differ diff --git a/data/grass.bmp b/data/grass.bmp deleted file mode 100644 index d07dff1..0000000 --- a/data/grass.bmp +++ /dev/null Binary files differ diff --git a/data/horrid_door.bmp b/data/horrid_door.bmp deleted file mode 100644 index 7b91b23..0000000 --- a/data/horrid_door.bmp +++ /dev/null Binary files differ diff --git a/data/house2_map.bmp b/data/house2_map.bmp deleted file mode 100644 index dca52b7..0000000 --- a/data/house2_map.bmp +++ /dev/null Binary files differ diff --git a/data/house_map.bmp b/data/house_map.bmp deleted file mode 100644 index 31797be..0000000 --- a/data/house_map.bmp +++ /dev/null Binary files differ diff --git a/data/lake_bg.bmp b/data/lake_bg.bmp deleted file mode 100644 index dfe037d..0000000 --- a/data/lake_bg.bmp +++ /dev/null Binary files differ diff --git a/data/map.bmp b/data/map.bmp deleted file mode 100644 index 1a65b39..0000000 --- a/data/map.bmp +++ /dev/null Binary files differ diff --git a/data/map_foreground2.bmp b/data/map_foreground2.bmp deleted file mode 100644 index 005adc5..0000000 --- a/data/map_foreground2.bmp +++ /dev/null Binary files differ diff --git a/data/numberPlate.bmp b/data/numberPlate.bmp deleted file mode 100644 index 7c91d4e..0000000 --- a/data/numberPlate.bmp +++ /dev/null Binary files differ diff --git a/data/parchment.bmp b/data/parchment.bmp deleted file mode 100644 index 2b72149..0000000 --- a/data/parchment.bmp +++ /dev/null Binary files differ diff --git a/data/sky.jpg b/data/sky.jpg deleted file mode 100644 index 37d7c6b..0000000 --- a/data/sky.jpg +++ /dev/null Binary files differ diff --git a/data/stonehedge_map.bmp b/data/stonehedge_map.bmp deleted file mode 100644 index 35d1dd5..0000000 --- a/data/stonehedge_map.bmp +++ /dev/null Binary files differ diff --git a/data/tower_map.bmp b/data/tower_map.bmp deleted file mode 100644 index 16da85e..0000000 --- a/data/tower_map.bmp +++ /dev/null Binary files differ diff --git a/data/tower_outside.bmp b/data/tower_outside.bmp deleted file mode 100644 index 2ab4b68..0000000 --- a/data/tower_outside.bmp +++ /dev/null Binary files differ diff --git a/data/tower_outside_controls.bmp b/data/tower_outside_controls.bmp deleted file mode 100644 index e743d14..0000000 --- a/data/tower_outside_controls.bmp +++ /dev/null Binary files differ diff --git a/data/wall.bmp b/data/wall.bmp deleted file mode 100644 index 8c46027..0000000 --- a/data/wall.bmp +++ /dev/null Binary files differ diff --git a/data/watch3.bmp b/data/watch3.bmp deleted file mode 100644 index e5cff2d..0000000 --- a/data/watch3.bmp +++ /dev/null Binary files differ diff --git a/data/watch_broken2.bmp b/data/watch_broken2.bmp deleted file mode 100644 index a1a038c..0000000 --- a/data/watch_broken2.bmp +++ /dev/null Binary files differ diff --git a/data/watch_drop_bg.bmp b/data/watch_drop_bg.bmp deleted file mode 100644 index 4d2e939..0000000 --- a/data/watch_drop_bg.bmp +++ /dev/null Binary files differ diff --git a/data/wave.bmp b/data/wave.bmp deleted file mode 100644 index 08f276d..0000000 --- a/data/wave.bmp +++ /dev/null Binary files differ diff --git a/data/wave2.bmp b/data/wave2.bmp deleted file mode 100644 index 320d67d..0000000 --- a/data/wave2.bmp +++ /dev/null Binary files differ diff --git a/levelfive.pyc b/levelfive.pyc new file mode 100644 index 0000000..0622746 --- /dev/null +++ b/levelfive.pyc Binary files differ diff --git a/levelfour.pyc b/levelfour.pyc new file mode 100644 index 0000000..2ec1fba --- /dev/null +++ b/levelfour.pyc Binary files differ diff --git a/levelone.pyc b/levelone.pyc new file mode 100644 index 0000000..e1930d4 --- /dev/null +++ b/levelone.pyc Binary files differ diff --git a/levelthree.pyc b/levelthree.pyc new file mode 100644 index 0000000..7adaf27 --- /dev/null +++ b/levelthree.pyc Binary files differ diff --git a/leveltwo.pyc b/leveltwo.pyc new file mode 100644 index 0000000..90cb57b --- /dev/null +++ b/leveltwo.pyc Binary files differ diff --git a/race.pyc b/race.pyc new file mode 100644 index 0000000..0db4203 --- /dev/null +++ b/race.pyc Binary files differ diff --git a/start.py b/start.py index 5a29645..674430f 100755 --- a/start.py +++ b/start.py @@ -1,6 +1,144 @@ -import tower +import tower, levelone, leveltwo, levelthree, levelfour, levelfive, race, util +import random, os.path +import util + +import pygame +import pygame.font + +from pygame.locals import * + +def run(): + #Must initialize pygame before doing anything else + pygame.init() + random.seed() + + display_flags = DOUBLEBUF + + #XO laptop is 1200x900 resolution + width, height = 1200, 900 + + if pygame.display.mode_ok((width, height), display_flags ): + screen = pygame.display.set_mode((width, height), display_flags) + + clock = pygame.time.Clock() + run = 1 + pygame.display.set_caption('Math Quest') + + clicked = 0 + menuLocation = 0 #The variable representing which screen of the main menu the player is on - 0 is the main menu + + mouseRect = pygame.Rect(pygame.mouse.get_pos(),(5,5)) + + #Code to set up the initial screen (Stores as surface) + mainButtons = [pygame.Rect(400,300,400,100),pygame.Rect(400,450,400,100),pygame.Rect(400,600,400,100)] + mainButtonText = ["Start Game","Level Select","Exit"] + + mainScreen = pygame.Surface((width,height)) + + for i in range(len(mainButtons)): + titleFont = pygame.font.Font(None, 150) + + mainScreen.blit(titleFont.render("Math Quest",1,(250,250,250)),(300,100)) + + pygame.draw.rect(mainScreen,[175,0,0],mainButtons[i]) + + font = pygame.font.Font(None, 80) + + displayBox = font.render(mainButtonText[i], 1, (255,255,255)) + textSize = font.size(mainButtonText[i]) + + mainScreen.blit(displayBox,(mainButtons[i].topleft[0]+(400-textSize[0])/2,mainButtons[i].topleft[1]+(100-textSize[1])/2)) + + #Set up the level select screen (Also stores as surface) + levelSelectButtons = [pygame.Rect(175,150,400,100),pygame.Rect(625,150,400,100),pygame.Rect(175,300,400,100),pygame.Rect(625,300,400,100),pygame.Rect(175,450,400,100),pygame.Rect(625,450,400,100),pygame.Rect(175,600,400,100),pygame.Rect(625,600,400,100),pygame.Rect(175,750,850,100)] + levelSelectButtonText = ["Bridge Builder","Map","Dungeon","Watch","Race","Tower Gates","Tower Climber","Boss","Back"] + + levelSelectScreen = pygame.Surface((width,height)) + + for i in range(len(levelSelectButtons)): + titleFont = pygame.font.Font(None, 120) + + levelSelectScreen.blit(titleFont.render("Level Select",1,(250,250,250)),(325,35)) + + pygame.draw.rect(levelSelectScreen,[175,0,0],levelSelectButtons[i]) + + font = pygame.font.Font(None, 80) + + displayBox = font.render(levelSelectButtonText[i], 1, (255,255,255)) + textSize = font.size(levelSelectButtonText[i]) + + levelSelectScreen.blit(displayBox,(levelSelectButtons[i].topleft[0]+(levelSelectButtons[i].width-textSize[0])/2,levelSelectButtons[i].topleft[1]+(100-textSize[1])/2)) + + screen.blit(mainScreen,(0,0)) + pygame.display.flip() + + while run: + + mouseRect = pygame.Rect(pygame.mouse.get_pos(),(5,5)) + + events = pygame.event.get() + for event in events: + #User decides to exit program + if event.type == QUIT: + run = 0 #stop running + + if event.type == pygame.MOUSEBUTTONDOWN: + clicked = 1 + + if clicked == 1: + clicked = 0 + print "Mouse clicked" + if menuLocation == 0: #On the main screen + clickedButton = mouseRect.collidelist(mainButtons) + if clickedButton != -1: + print "Button %d clicked"%(clickedButton) + if clickedButton == 0: + levelone.run() + levelfour.run() + leveltwo.run() + levelthree.run() + tower.run() + elif clickedButton == 1: + menuLocation = 1 + screen.blit(levelSelectScreen,(0,0)) + elif clickedButton == 2: + run = 0 + elif menuLocation == 1: #On the level select screen + clickedButton = mouseRect.collidelist(levelSelectButtons) + if clickedButton != -1: + print "Button %d clicked"%(clickedButton) + if clickedButton == 0: + levelone.run() + if clickedButton == 1: + leveltwo.run() + if clickedButton == 2: + levelfive.run() + if clickedButton == 3: + levelfour.run() + if clickedButton == 4: + race.run() + if clickedButton == 5: + levelthree.run() + if clickedButton == 6: + tower.run() + if clickedButton == 7: + pass + if clickedButton == 8: + menuLocation = 0 + screen.blit(mainScreen,(0,0)) + pygame.display.flip() + + clock.tick(40) #limits to 40 FPS + + pygame.quit() + def main(): - tower.run() + run() + # levelone.run() + # levelfour.run() + # leveltwo.run() + # levelthree.run() + # tower.run() -if __name__ == '__main__': main() \ No newline at end of file +if __name__ == '__main__': main() diff --git a/tower.py b/tower.py index c209367..e4f06cd 100755 --- a/tower.py +++ b/tower.py @@ -594,7 +594,8 @@ def run(): #print clock clock.tick(35) #limits to 40 FPS - + + pygame.quit() def main(): print "Running Tower" @@ -676,4 +677,4 @@ def generateDropNumber(heroNumber,level,currentValues): return (type,number,returnString) #runs main if called via other naming convention -if __name__ == '__main__': main() \ No newline at end of file +if __name__ == '__main__': main() diff --git a/tower.pyc b/tower.pyc index b6725de..0e0be67 100755 --- a/tower.pyc +++ b/tower.pyc Binary files differ diff --git a/tower.py~ b/tower.py~ index 33bf43c..8186c20 100644 --- a/tower.py~ +++ b/tower.py~ @@ -1,4 +1,4 @@ -import random, os.path +import random, os.path, time import util import pygame @@ -358,9 +358,13 @@ def run(): shownGap1, shownGap2 = None, None #Variables will represent gaps that will be displayed (if they get hit or stepped on) fallWait, topHoleWait = 0, 0 #Variables representing timers for if the hero is falling or a gap is being displayed because it was stepped on + gapFails = 0 + run = 1 #Variable representing if the game is running runCounter = 0 #The number of run loops the game has gone through + startTime = time.clock() + #The main game loop of the program while run: runCounter = runCounter+1 @@ -444,6 +448,8 @@ def run(): if hero.collidelist(impassableGaps) != -1: fallWait = 60 #Sets the variable representing the fact that the hero is falling, because they went the wrong way shownGap1 = impassableGaps[hero.collidelist(impassableGaps)] + gapFails = gapFails + 1 + print "Falling! (#%d)"%(gapFails) #checks if the hero is standing on top of a gap they cannot pass through tempHero = hero.inflate(-70,0) @@ -476,8 +482,8 @@ def run(): updateRects.append(shownGap2) #Code which spawns a drop which contains a number, only called every 100 loops - if runCounter%75 == 0: - newDrop = generateDropNumber(heroNumber,levelNum) + if runCounter%100 == 0: + newDrop = generateDropNumber(heroNumber,levelNum,dropValues) dropRects.append(pygame.Rect(random.randint(150,850),0,50,50)) dropValues.append(newDrop[0:2]) dropStrings.append(newDrop[2]) @@ -547,7 +553,12 @@ def run(): if hero.topleft[1] <= -80: levelNum = levelNum+1 if levelNum == 8: #Made it to the top of the tower! - victoryCinematic(screen) + #victoryCinematic(screen) + timeTaken = int(time.clock() - startTime) + minutesTaken = timeTaken/60 + secondsTaken = timeTaken%60 + topString = "You have reached the top!\nTime Taken: %dm %ds\nFails: %d"%(minutesTaken,secondsTaken,gapFails) + util.ok_box(topString, (450,400), 300, 50, screen) break #Copy copies the second floor displayed on the screen so it can be shown as the very bottom on the next level @@ -581,9 +592,10 @@ def run(): background.blit(copy, (100,850)) print "Now on level %d."%(levelNum) - print clock - clock.tick(40) #limits to 40 FPS - + #print clock + clock.tick(35) #limits to 40 FPS + + pygame.quit() def main(): print "Running Tower" @@ -626,9 +638,23 @@ def victoryCinematic(screen): util.ok_box("You have reached the top of the tower!", (450,400), 300, 50, screen) -def generateDropNumber(heroNumber,level): +def generateDropNumber(heroNumber,level,currentValues): #Randomly selects if the drop will have addition, subtraction, multiplication, or division, addition and subtraction being more likely - type = random.sample([0,0,0,0,0,0,1,1,1,1,1,1],1)[0] + + #Only need to check the last 2 that dropped + currentValues = currentValues[len(currentValues)-2:] + + type = random.sample([0,1],1)[0] + + #Checks the previous entries to make sure we don't have the same type of operation more then twice + #As it is randomly generated, having +, +, +, +... etc over and over would not work well + if len(currentValues) == 2: + if currentValues[0][0] == currentValues[1][0]: + if currentValues[0][0] == 1: + type = 0 + else: + type = 1 + levelAverage = (levelRanges[level][0]+levelRanges[level][1])/2 returnString = "" if type == 0: #Addition drop -- cgit v0.9.1