2017-04-24 1 views
0

私は現在、プロジェクト用のゲームを作成する必要があるAレベルのコンピュータサイエンスコースを受講しています。私はこのコードがおそらく効率的ではないと知っていますが、私はそれを自分の仕事にとどめようとしています。私はちょっと立ち往生している2ビットの手を欲しがりますスクロール制限

このコードは現在イントロ画面から始まり、ゲームは、左右にスクロールし、プレイヤーがスクリーンから落ちたときに命を奪う。すべての人生が失われたら、表示されている画面上のゲームがあります

スクロールする画面に制限を設定する方法があるかどうか疑問に思っていたので、プレイヤーが左に移動すると特定の点でスクロールして停止します画面の端にあるプレーヤーが落ちるのを止める。私はエッジであることをはるかに下のプラットフォームの左側を設定したい、これは右に行くためにプレーヤーを強制

もうあなたが必要とする情報がある場合には、ラグに

を減らすためにどのような方法がある場合は、別の小さなものです を気軽に支援するために任意の提案は、任意のヘルプ

import pygame as pg 
import time 
import random 


pg.init()#initiates pygame 

display_height = 690#Creates width and height of screen 
display_width = 1024 

#Colours 
white = (255,255,255) 
black = (0,0,0) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 
grass = (24,85,36) 
yellow = (255,255,0) 
lightGrey = (184,184,184) 
grey = (73,71,65) 

Robot_height = 99#Height of robot 
Robot_width = 112#Width of robot 
Bullet_Fired = False 
PowerUp_Active = False 
Robot_acc = 0.3 #Robot Acceleration 
vec = pg.math.Vector2 

gameDisplay = pg.display.set_mode((display_width,display_height)) #Sets display properties of window 
pg.display.set_caption ("Game") #Title on window 
clock = pg.time.Clock() 
robotImg = pg.image.load("robot1.png") #Loads robots image 
lifeImg = pg.image.load("Life.png")#Loads image from folder 
lifeImg = pg.transform.scale(lifeImg, (80, 80))#Sets dimensions of image 
backgroundImg = pg.image.load("Background.png")#Loads background image 
backgroundImg = pg.transform.scale(backgroundImg, (display_width, display_height))#Sets dimensions of background to fit the screen 
inBackgroundImg = pg.image.load("IntroBackground1.png")#Loads intro background 
controlsImg = pg.image.load("controls.png")#Loads controls screen background 
controlsImg = pg.transform.scale(controlsImg, (display_width, display_height))#Sets dimensions to fit screen 
largeText = pg.font.Font("Font.ttf",77)#Large text set 
smallText = pg.font.Font("Font.ttf",32)#Small text set 

#Class for platforms 
class Platform(pg.sprite.Sprite): 
    def __init__(self, x,y,w,h): 
     pg.sprite.Sprite.__init__(self) 
     self.image = pg.Surface((w,h))#sets width and height of platform 
     self.image.fill(grass)#Fills rectangle with blue 
     self.rect = self.image.get_rect()#Rectangle set 
     self.rect.x = x#x position 
     self.rect.y = y#y position 

#List of platforms 
PLATFORM_LIST = [[0,display_height - 40,display_width,40], 
       [display_width + 300,display_height - 40,display_width,40], 
       [display_width /2 - 50,display_height * 3/4,100,20], 
       [display_width -10,display_height * 3/4,100,20]] 
#Platform group 
platforms = pg.sprite.Group() 

#Checks through "PLATFORM_LIST" and adds all the platforms the the grounp "platforms" 
for plat in PLATFORM_LIST: 
    p = Platform(*plat) 
    platforms.add(p) 

#Draws platforms to the screen 
def draw(): 
    for plat in platforms: 
     pg.draw.rect(gameDisplay, grass, plat) 

#Class for robot 
class RobotClass(pg.sprite.Sprite): 
    def __init__(self): 
     pg.sprite.Sprite.__init__(self) 
     self.image = pg.Surface((Robot_width,Robot_height))#Height and width of the robot 
     self.rect = self.image.get_rect()#Gets rectangle of robot 
     self.rect.center = (display_width/2, display_height/2)#Location of center of robot 
     self.RobotPos = vec(display_width/2, display_height/2)#Position of robot as vector 
     self.bottom = (0,0)#Bottom of robot 
     self.vel = vec(0, 0)#Robots velocity 
     self.acc = vec(0, 0.3)#Robots Acceleration 

startX = display_width/2 
startY = display_height/2 

#Creates Robot 
Robot = RobotClass() 

#Jump function 
def jump(): 
    #Checks pixel below robot to see if there is a collision 
    Robot.rect.x = Robot.rect.x +1 
    hits = pg.sprite.spritecollide(Robot , platforms, False) 
    Robot.rect.x = Robot.rect.x -1 
    if hits: 
     #Gives robot velocity of 5 upwards 
     Robot.vel.y = -10 

#Settings for text 
def text_objects(text, font): 
    textSurface = font.render(text, True, white) 
    return textSurface, textSurface.get_rect() 

#Displays lives of Robot 
def display_lives(lives): 
    global lifeImg 
    TextSurf, TextRect = text_objects("Lives:", smallText)#Sets text and font 
    TextRect.topleft = (1,16)#Places text in top left of screen 
    gameDisplay.blit(TextSurf, TextRect) #displays text 
    if lives == 3:#Displays 3 spanners 
     gameDisplay.blit(lifeImg,(110,0)) 
     gameDisplay.blit(lifeImg,(160,0)) 
     gameDisplay.blit(lifeImg,(210,0)) 
    if lives == 2:#Displays 2 spanners 
     gameDisplay.blit(lifeImg,(110,0)) 
     gameDisplay.blit(lifeImg,(160,0)) 
    if lives == 1:#Displays 1 spanners 
     gameDisplay.blit(lifeImg,(110,0)) 
    if lives == 0:#Should end game when all lives are lost 
     game_over() 

#Function for button that takes parameters (message,x,y,height,width,active colour,inactive colour,text size,action)  
def button(msg,x,y,w,h,i,a,t,action=None): 
    mouse = pg.mouse.get_pos() #Gets (x,y) position of mouse 
    Text = pg.font.Font("Font.ttf",t) #Lets text size be input 
    click = pg.mouse.get_pressed() #Gets whenther mouse has been clicked (mouse1,middle mouse,mouse2) 

    if x+w > mouse[0] > x and y+50 > mouse[1] > y:#Checks to see if mouse is within boundaries of button 
     pg.draw.rect(gameDisplay, a,(x,y,w,h),5)#Changes color of box when being hovered over 
     if click[0] == 1 and action != None:#If mouse1 is clicked and there is an action to be performed it will be run 
      action()#action is parameter and the() is used to initiate function 
    else: 
     pg.draw.rect(gameDisplay, i,(x,y,w,h),5)#Sets default button 

    TextSurf, TextRect = text_objects(msg, Text)#Runs text_objects with inputted parameter of the message 
    TextRect.center = ((x+(w/2)),(y+(h/2)))#Places text inside the button 
    gameDisplay.blit(TextSurf, TextRect)#Displays text 


def Exit():#Used for button on intro screen to exit 
    pg.quit() 
    quit() 

#What happens when player runs out of lives 
def game_over(): 
    while True: 
     for event in pg.event.get():#lets window be closed 
      if event.type == pg.QUIT: 
       pg.quit() 
       quit() 
     gameDisplay.blit(inBackgroundImg, (0, 0)) 
     TextSurf, TextRect = text_objects(("Game"), largeText)#Places large text on screen 
     TextRect.center = ((display_width/2+10),(180))#location of text 
     gameDisplay.blit(TextSurf, TextRect) 
     TextSurf, TextRect = text_objects(("Over"), largeText) 
     TextRect.center = ((display_width/2+10),(280)) 
     gameDisplay.blit(TextSurf, TextRect) 
     pg.draw.rect(gameDisplay, yellow,(290,125,445,220),5)#Puts yellow box over game over 

     button("Retry",410,600,207,70,yellow,lightGrey,45,game_loop) 
     button("Quit",display_width-105,display_height-55,100,50,yellow,lightGrey,33,Exit) 

     pg.display.update()#updates screen 
     clock.tick(15) 

#Function for control screen 
def controls(): 
    while True: 
     for event in pg.event.get():#lets window be closed 
      if event.type == pg.QUIT: 
       pg.quit() 
       quit() 
     gameDisplay.blit(controlsImg, (0, 0))#Places controlsImg on screen 
     button("Back",5,display_height-55,100,50,black,grey,30,game_intro)#places back button in bottom left corner 

     pg.display.update()#updates screen 
     clock.tick(15)#sets clock rate 


#Function to gun the intro screen 
def game_intro(): 
    while True: 
     for event in pg.event.get():#lets window be closed 
      if event.type == pg.QUIT: 
       pg.quit() 
       quit() 
     gameDisplay.blit(inBackgroundImg, (0, 0))#Places background image 
     TextSurf, TextRect = text_objects(("Lost on planet X"), largeText)#Places large text on screen 
     TextRect.center = ((display_width/2),(200))#location of text 
     gameDisplay.blit(TextSurf, TextRect)#displays text 
     pg.draw.rect(gameDisplay, yellow,(65,130,900,150),5)#Puts yellow box over title 

     button("Play",412,550,200,50,yellow,lightGrey,36,game_loop) #Play button at middle bottom 
     button("Controls",412,450,200,50,yellow,lightGrey,32,controls) #Controls button in middle of screen 
     button("Quit",display_width-105,display_height-55,100,50,yellow,lightGrey,33,Exit) #Quit button in bottom right 


     pg.display.update()#updates screen 
     clock.tick(15)#sets clock rate 

#game loop 
def game_loop(): 
    global PLATFORM_LIST 
    global startX 
    global startY 
    global backgroundImg 
    Robot.RobotPos = (startX,startY) 
    lives = 3 #Robot Lives 
    Robot_friction = -0.3 #Friction value 
    vec = pg.math.Vector2 #Setting vec as vector quantity 
    while True: 
     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       pg.quit 
       quit() 
      #Starts acceleration when key is pressed 
      if event.type == pg.KEYDOWN: 
       if event.key == pg.K_LEFT: 
        Robot.acc.x = -Robot_acc 
       elif event.key == pg.K_RIGHT: 
        Robot.acc.x = Robot_acc 
       elif event.key == pg.K_UP: 
        jump() 
      #Adds friction to accleration to slow robot down when key is not being pressed 
      if event.type == pg.KEYUP: 
       if event.key == pg.K_LEFT or event.key == pg.K_RIGHT: 
        Robot.acc.x = Robot.acc.x * Robot_friction 

     #Adjusts velocity of robot by adding the acceleration on each cycle 
     Robot.vel = Robot.vel+ Robot.acc 
     #gameDisplay.fill(sky) 
     gameDisplay.blit(backgroundImg,(0,0)) 
     #Draws the platforms to the screen and adds them to platform group 
     draw() 
     #Changes Robot position according to its velocity,acceleration and the friction 
     Robot.RobotPos = Robot.RobotPos + Robot.vel + 0.5 * Robot.acc 
     #Loads robot onto screen 
     gameDisplay.blit(robotImg,(Robot.rect)) 
     #pg.draw.rect(gameDisplay, red, Robot.rect, 2 
     display_lives(lives)#lives 
     pg.display.update()#Updates display 
     clock.tick(60) 

     #Sets bottom of robot to its position 
     Robot.rect.midbottom = Robot.RobotPos 

     #Collision detection 
     if Robot.vel.y > 0: 
      hits = pg.sprite.spritecollide(Robot , platforms, False) 
      if hits: 
       #Puts Robot on top of platform 
       Robot.RobotPos.y = hits[0].rect.top + 1 
       Robot.vel.y = 0   
     #Scrolling 
     if Robot.rect.left < display_width/4: 
      Robot.RobotPos.x = Robot.RobotPos.x + abs(Robot.vel.x) 
      startX = startX + abs(Robot.vel.x) 
      for plat in platforms: 
       plat.rect.x = plat.rect.x + int(abs(Robot.vel.x)) 
       draw() 
     if Robot.rect.right > (display_width-display_width/4): 
      Robot.RobotPos.x = Robot.RobotPos.x - abs(Robot.vel.x) 
      startX = startX - abs(Robot.vel.x) 
      for plat in platforms: 
       plat.rect.x = plat.rect.x - int(abs(Robot.vel.x)) 
       draw() 

     #Losing a life 
     if Robot.rect.top > display_height: 
      lives = lives - 1 
      Robot.RobotPos.y = Robot.RobotPos.y - (40+Robot_height) 
      Robot.RobotPos.x = Robot.RobotPos.x - 200 
      Robot.vel.x = 0 


     #Sets top velocity of robot  
     if Robot.vel.x > 6: 
      Robot.vel.x = 6 
     if Robot.vel.x < -6: 
      Robot.vel.x = -6 
     #Makes robot velocity = 0 when it is close to 0 
     if Robot.vel.x < 0.05 and Robot.vel.x > -0.05: 
      Robot.acc.x = 0 
      Robot.vel.x = 0 

game_intro() 
pg.quit() 
quit() 
+0

質問するときは、必ず1つの質問をしてください。これにより、回答が絞り込まれ、疑問が分かりやすくなり、他のユーザーの検索可能性が高まります。あなたの質問に(もし必要であれば)あなたのコードではなく[mcve]を含めてください。それはSOの質問を読むにはあまりにも多くのコードです。あなたの以前の質問に書いたように。それ以外の場合は、名前だけで変数、クラス、関数、または定数が不明であるため、コードを読んで理解するのがはるかに難しくなります。つまり、遭遇するたびに定義された場所を調べなければなりません。 –

+0

[これ](http://stackoverflow.com/a/14357169/6486738)あなたが探しているものを見つけるでしょう(あなたの最初のサブ質問のため)。 –

+0

遅延を減らすには、ループごとに一度だけ画面に描画するようにしてください。あなたのゲームループでは、あなたの 'draw()'関数を使って描画しています)、次にスクロールを確認した後に再び描画します( 'if Robot.rect.left

答えて

0

ため おかげでいただければ幸い私は、私は簡単に私が何をしたかを説明しますので、この問題を自分自身を完了するために管理しました。

オフセットと呼ばれる変数を追加し、スクロールした画面が元の位置からどのくらい離れているかを追跡しました。

offset = 0 

私はその後、私のスクロールコード

if Robot.rect.left < display_width/4: 
      Robot.RobotPos.x = Robot.RobotPos.x + abs(Robot.vel.x) 
      startX = startX + int(abs(Robot.vel.x)) 
      offset = offset + int(abs(Robot.vel.x)) 
      for plat in platforms: 
       plat.rect.x = plat.rect.x + int(abs(Robot.vel.x)) 
      for coin in coins: 
       coin.rect.x = coin.rect.x + int(abs(Robot.vel.x)) 

if Robot.rect.right > (display_width-display_width/4): 
      Robot.RobotPos.x = Robot.RobotPos.x - abs(Robot.vel.x) 
      startX = startX - int(abs(Robot.vel.x)) 
      offset = offset - int(abs(Robot.vel.x)) 
      for plat in platforms: 
       plat.rect.x = plat.rect.x - int(abs(Robot.vel.x)) 
      for coin in coins: 
       coin.rect.x = coin.rect.x - int(abs(Robot.vel.x)) 

にこの変数を追加した私は、この関数にあれば、余分なを追加しました。 これは、オフセットがゼロより小さくゼロのときにコードからスクロール部分のみを実行します。 0より大きい値は、画面が左にオフセットされていることを示します。このコードは、そのためだけあなたは、画面の脱落からスプライトを停止するには、画面

if offset > 0: 
      pass 
elif Robot.rect.left < display_width/4: 
      Robot.RobotPos.x = Robot.RobotPos.x + abs(Robot.vel.x) 
      startX = startX + int(abs(Robot.vel.x)) 
      offset = offset + int(abs(Robot.vel.x)) 
      for plat in platforms: 
       plat.rect.x = plat.rect.x + int(abs(Robot.vel.x)) 
      for coin in coins: 
       coin.rect.x = coin.rect.x + int(abs(Robot.vel.x)) 

の端にいないとき、私は私のプラットフォーム機能を使用してエッジで壁を追加しましスクロールし、それを追加することができます後でもっと壁を使う必要がある場合に備えて、グループになっています。

w1 = Platform(0,0,10,display_height) 
wall = pg.sprite.Group() 
wall.add(w1) 

はこの後、私は、これはそこに働いていた、それはスプライトから離れて移動するのが難しかった問題となったが、スプライトが壁

hit = pg.sprite.spritecollide(Robot , wall,False) 
     if hit: 
      Robot.vel.x = 0 
      Robot.acc.x = 0 

に触れているかどうかを確認するspritecollideを使用して条件を作成しました壁の速度は常に0に設定されていたので、左の矢印が押されているかどうかを確認する別の変数を追加しました。

hit = pg.sprite.spritecollide(Robot , wall,False) 
     if hit: 
      if left == True: 
       Robot.vel.x = 0 
       Robot.acc.x = 0 

これは、値あなたはここで

if event.type == pg.KEYDOWN: 
       if event.key == pg.K_LEFT: 
        Robot.acc.x = -Robot_acc 
        left = True 
       elif event.key == pg.K_RIGHT: 
        Robot.acc.x = Robot_acc     
       elif event.key == pg.K_UP: 
        jump() 
      elif Robot.acc.x < 0: 
       left = True 
      else: 
       left = False 

を左に移動しようとしている場合は、すべて私のコードは、私が何かを逃したか、あなたが見たい異なる部分がある場合には一緒です。

*編集このコードでは現在、壁をスクロールまたは表示していません。画面がスクロールしているときにロボットが画面の中央になければならないので、スクロールは問題ではありません。壁はまだそこにありますが、衝突する方法はなく、見えません。

私は部品を非常にうまく説明していないか、いくつかの情報をもっと必要としているかどうかは自由に感じることができます。

import pygame as pg 
import time 
import random 


pg.init()#initiates pygame 

display_height = 690#Creates width and height of screen 
display_width = 1024 

#Colours 
white = (255,255,255) 
black = (0,0,0) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 
grass = (24,85,36) 
yellow = (255,255,0) 
lightGrey = (184,184,184) 
grey = (73,71,65) 
brown = (66, 40, 13) 

Robot_height = 99#Height of robot 
Robot_width = 112#Width of robot 
Bullet_Fired = False 
PowerUp_Active = False 
Robot_acc = 0.3 #Robot Acceleration 
vec = pg.math.Vector2 

gameDisplay = pg.display.set_mode((display_width,display_height)) #Sets display properties of window 
pg.display.set_caption ("Game") #Title on window 
clock = pg.time.Clock() 
robotImg = pg.image.load("robot1.png") #Loads robots image 
lifeImg = pg.image.load("Life.png")#Loads image from folder 
lifeImg = pg.transform.scale(lifeImg, (80, 80))#Sets dimensions of image 
backgroundImg = pg.image.load("Background.png")#Loads background image 
backgroundImg = pg.transform.scale(backgroundImg, (display_width, display_height))#Sets dimensions of background to fit the screen 
inBackgroundImg = pg.image.load("IntroBackground1.png")#Loads intro background 
controlsImg = pg.image.load("controls.png")#Loads controls screen background 
controlsImg = pg.transform.scale(controlsImg, (display_width, display_height))#Sets dimensions to fit screen 
largeText = pg.font.Font("Font.ttf",77)#Large text set 
smallText = pg.font.Font("Font.ttf",32)#Small text set 

#Class for platforms 
class Platform(pg.sprite.Sprite): 
    def __init__(self, x,y,w,h): 
     pg.sprite.Sprite.__init__(self) 
     self.image = pg.Surface((w,h))#sets width and height of platform 
     self.image.fill(grass)#Fills rectangle with blue 
     self.rect = self.image.get_rect()#Rectangle set 
     self.rect.x = x#x position 
     self.rect.y = y#y position 

#List of platforms x , y , width , height 
PLATFORM_LIST = [[-5,display_height - 40,2005,40], 
       [2300,display_height - 40,1000,40], 
       [1100,display_height - 190,300,20], 
       ] 
#Platform group 
platforms = pg.sprite.Group() 

w1 = Platform(0,0,10,display_height) 
wall = pg.sprite.Group() 
wall.add(w1) 

#Checks through "PLATFORM_LIST" and adds all the platforms the the grounp "platforms" 
for plat in PLATFORM_LIST: 
    p = Platform(*plat) 
    platforms.add(p) 

#Draws platforms to the screen 
def draw(): 
    for plat in platforms: 
     pg.draw.rect(gameDisplay, grass, plat) 

#Class for robot 
class RobotClass(pg.sprite.Sprite): 
    def __init__(self): 
     pg.sprite.Sprite.__init__(self) 
     self.image = pg.Surface((Robot_width,Robot_height))#Height and width of the robot 
     self.rect = self.image.get_rect()#Gets rectangle of robot 
     self.rect.center = (display_width/2, display_height/2)#Location of center of robot 
     self.RobotPos = vec(display_width/2, display_height/2)#Position of robot as vector 
     self.bottom = (0,0)#Bottom of robot 
     self.vel = vec(0, 0)#Robots velocity 
     self.acc = vec(0, 0.3)#Robots Acceleration 

startX = display_width/2 
startY = display_height/2 

#Creates Robot 
Robot = RobotClass() 

#Jump function 
def jump(): 
    #Checks pixel below robot to see if there is a collision 
    Robot.rect.x = Robot.rect.x +1 
    hits = pg.sprite.spritecollide(Robot , platforms, False) 
    Robot.rect.x = Robot.rect.x -1 
    if hits: 
     #Gives robot velocity of 5 upwards 
     Robot.vel.y = -10 

#Settings for text 
def text_objects(text, font): 
    textSurface = font.render(text, True, white) 
    return textSurface, textSurface.get_rect() 

#Displays lives of Robot 
def display_lives(lives): 
    global lifeImg 
    TextSurf, TextRect = text_objects("Lives:", smallText)#Sets text and font 
    TextRect.topleft = (1,16)#Places text in top left of screen 
    gameDisplay.blit(TextSurf, TextRect) #displays text 
    if lives == 3:#Displays 3 spanners 
     gameDisplay.blit(lifeImg,(110,0)) 
     gameDisplay.blit(lifeImg,(160,0)) 
     gameDisplay.blit(lifeImg,(210,0)) 
    if lives == 2:#Displays 2 spanners 
     gameDisplay.blit(lifeImg,(110,0)) 
     gameDisplay.blit(lifeImg,(160,0)) 
    if lives == 1:#Displays 1 spanners 
     gameDisplay.blit(lifeImg,(110,0)) 
    if lives == 0:#Should end game when all lives are lost 
     game_over() 

#Displays score in top right of screen and takes in parameter score 
def display_score(score): 
    #Displays the score itself 
    TextSurf, TextRect = text_objects(str(score), smallText)#Sets text and font 
    TextRect.topleft = (display_width-120,16)#Places text in top left of screen 
    gameDisplay.blit(TextSurf, TextRect) 

    #Displays the text "score" infront of the score 
    TextSurf, TextRect = text_objects("Score:", smallText)#Sets text and font 
    TextRect.topleft = (display_width-255,16)#Places text in top left of screen 
    gameDisplay.blit(TextSurf, TextRect) 

#Function for button that takes parameters (message,x,y,height,width,active colour,inactive colour,text size,action)  
def button(msg,x,y,w,h,i,a,t,action=None): 
    mouse = pg.mouse.get_pos() #Gets (x,y) position of mouse 
    Text = pg.font.Font("Font.ttf",t) #Lets text size be input 
    click = pg.mouse.get_pressed() #Gets whenther mouse has been clicked (mouse1,middle mouse,mouse2) 

    if x+w > mouse[0] > x and y+50 > mouse[1] > y:#Checks to see if mouse is within boundaries of button 
     pg.draw.rect(gameDisplay, a,(x,y,w,h),5)#Changes color of box when being hovered over 
     if click[0] == 1 and action != None:#If mouse1 is clicked and there is an action to be performed it will be run 
      action()#action is parameter and the() is used to initiate function 
    else: 
     pg.draw.rect(gameDisplay, i,(x,y,w,h),5)#Sets default button 

    TextSurf, TextRect = text_objects(msg, Text)#Runs text_objects with inputted parameter of the message 
    TextRect.center = ((x+(w/2)),(y+(h/2)))#Places text inside the button 
    gameDisplay.blit(TextSurf, TextRect)#Displays text 


def Exit():#Used for button on intro screen to exit 
    pg.quit() 
    quit() 

#What happens when player runs out of lives 
def game_over(): 
    while True: 
     for event in pg.event.get():#lets window be closed 
      if event.type == pg.QUIT: 
       pg.quit() 
       quit() 
     gameDisplay.blit(inBackgroundImg, (0, 0)) 
     TextSurf, TextRect = text_objects(("Game"), largeText)#Places large text on screen 
     TextRect.center = ((display_width/2+10),(180))#location of text 
     gameDisplay.blit(TextSurf, TextRect) 
     TextSurf, TextRect = text_objects(("Over"), largeText) 
     TextRect.center = ((display_width/2+10),(280)) 
     gameDisplay.blit(TextSurf, TextRect) 
     pg.draw.rect(gameDisplay, yellow,(290,125,445,220),5)#Puts yellow box over game over 

     button("Retry",410,600,207,70,yellow,lightGrey,45,game_loop) 
     button("Quit",display_width-105,display_height-55,100,50,yellow,lightGrey,33,Exit) 

     pg.display.update()#updates screen 
     clock.tick(15) 

#Function for control screen 
def controls(): 
    while True: 
     for event in pg.event.get():#lets window be closed 
      if event.type == pg.QUIT: 
       pg.quit() 
       quit() 
     gameDisplay.blit(controlsImg, (0, 0))#Places controlsImg on screen 
     button("Back",5,display_height-55,100,50,black,grey,30,game_intro)#places back button in bottom left corner 

     pg.display.update()#updates screen 
     clock.tick(15)#sets clock rate 


#Function to gun the intro screen 
def game_intro(): 
    while True: 
     for event in pg.event.get():#lets window be closed 
      if event.type == pg.QUIT: 
       pg.quit() 
       quit() 
     gameDisplay.blit(inBackgroundImg, (0, 0))#Places background image 
     TextSurf, TextRect = text_objects(("Lost on planet X"), largeText)#Places large text on screen 
     TextRect.center = ((display_width/2),(200))#location of text 
     gameDisplay.blit(TextSurf, TextRect)#displays text 
     pg.draw.rect(gameDisplay, yellow,(65,130,900,150),5)#Puts yellow box over title 

     button("Play",412,550,200,50,yellow,lightGrey,36,game_loop) #Play button at middle bottom 
     button("Controls",412,450,200,50,yellow,lightGrey,32,controls) #Controls button in middle of screen 
     button("Quit",display_width-105,display_height-55,100,50,yellow,lightGrey,33,Exit) #Quit button in bottom right 


     pg.display.update()#updates screen 
     clock.tick(15)#sets clock rate 

#game loop 
def game_loop(): 
    left = False 
    offset = 0 
    global PLATFORM_LIST 
    global startX 
    global startY 
    global backgroundImg 
    Robot.RobotPos = (startX,startY) 
    score = 0 #Score 
    lives = 3 #Robot Lives 
    Robot_friction = -0.3 #Friction value 
    vec = pg.math.Vector2 #Setting vec as vector quantity 
    while True: 
     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       pg.quit 
       quit() 
      #Starts acceleration when key is pressed 
      if event.type == pg.KEYDOWN: 
       if event.key == pg.K_LEFT: 
        Robot.acc.x = -Robot_acc 
        left = True 
       elif event.key == pg.K_RIGHT: 
        Robot.acc.x = Robot_acc     
       elif event.key == pg.K_UP: 
        jump() 
      elif Robot.acc.x < 0: 
       left = True 
      else: 
       left = False 

      print(left) 
      #Adds friction to accleration to slow robot down when key is not being pressed 
      if event.type == pg.KEYUP: 
       if event.key == pg.K_LEFT or event.key == pg.K_RIGHT: 
        Robot.acc.x = Robot.acc.x * Robot_friction 

     #Adjusts velocity of robot by adding the acceleration on each cycle 
     Robot.vel = Robot.vel+ Robot.acc 
     #gameDisplay.fill(sky) 
     gameDisplay.blit(backgroundImg,(0,0)) 
     #Changes Robot position according to its velocity,acceleration and the friction 
     Robot.RobotPos = Robot.RobotPos + Robot.vel + 0.5 * Robot.acc 
     #Loads robot onto screen 
     gameDisplay.blit(robotImg,(Robot.rect)) 
     #pg.draw.rect(gameDisplay, red, Robot.rect, 2 
     display_lives(lives) 
     display_score(score)#lives 

     #Sets bottom of robot to its position 
     Robot.rect.midbottom = Robot.RobotPos 

     #Collision detection 
     if Robot.vel.y > 0: 
      hits = pg.sprite.spritecollide(Robot , platforms, False) 
      if hits: 
       if Robot.RobotPos.y < hits[0].rect.bottom: 
        #Puts Robot on top of platform 
        Robot.RobotPos.y = hits[0].rect.top + 1 
        Robot.vel.y = 0 

     hit = pg.sprite.spritecollide(Robot , wall,False) 
     if hit: 
      if left == True: 
       Robot.vel.x = 0 
       Robot.acc.x = 0 
      else: 
       pass 

     #Scrolling 
     if offset > 0: 
      pass 
     elif Robot.rect.left < display_width/4: 
      Robot.RobotPos.x = Robot.RobotPos.x + abs(Robot.vel.x) 
      startX = startX + int(abs(Robot.vel.x)) 
      offset = offset + int(abs(Robot.vel.x)) 
      for plat in platforms: 
       plat.rect.x = plat.rect.x + int(abs(Robot.vel.x)) 

     if Robot.rect.right > (display_width-display_width/4): 
      Robot.RobotPos.x = Robot.RobotPos.x - abs(Robot.vel.x) 
      startX = startX - int(abs(Robot.vel.x)) 
      offset = offset - int(abs(Robot.vel.x)) 
      for plat in platforms: 
       plat.rect.x = plat.rect.x - int(abs(Robot.vel.x)) 

     draw() 

     #Losing a life 
     if Robot.rect.top > display_height: 
      lives = lives - 1 
      Robot.RobotPos.y = Robot.RobotPos.y - (40+Robot_height) 
      Robot.RobotPos.x = Robot.RobotPos.x - 200 
      Robot.vel.x = 0 


     #Sets top velocity of robot  
     if Robot.vel.x > 6: 
      Robot.vel.x = 6 
     if Robot.vel.x < -6: 
      Robot.vel.x = -6 
     #Makes robot velocity = 0 when it is close to 0 
     if Robot.vel.x < 0.05 and Robot.vel.x > -0.05: 
      Robot.acc.x = 0 
      Robot.vel.x = 0 

     pg.display.update()#Updates display 
     clock.tick(60) 

game_intro() 
pg.quit() 
quit()