pygame squirrel,pygame,import pygam


import pygame,sys,time,math,randomfrom pygame.locals import*FPS = 30winx = 640winy = 480halfx = winx/2halfy = winy/2grasscolor = (24,255,0)white = (255,255,255)red = (255,0,0)startsize = 25left = 'left'right = 'right'squirrelnum = 30minspeed = 3maxspeed = 7directfreq = 2maxhealth = 3intime = 2numgrass = 80cameraslack = 90bouncerate = 6bounceheight = 30moverate = 9winsize = 300gameovertime = 4def main():    global fpsclock,disp,basicfont,limg,rimg,grassimg    pygame.init()    fpsclock = pygame.time.Clock()    pygame.display.set_icon(pygame.image.load('gameicon.png'))    disp = pygame.display.set_mode((winx,winy))    pygame.display.set_caption('squirrel')    basicfont = pygame.font.Font('freesansbold.ttf',32)    limg = pygame.image.load('squirrel.png')    rimg = pygame.transform.flip(limg,True,False)    grassimg = []    for i in range(1,5):        grassimg.append(pygame.image.load('grass%s.png'%i))    while True:        rungame()def rungame():    invulnerablemode = False    invulnerablestarttime = 0    gameovermode = False    gameoverstarttime = 0    winmode = False    gameoversurf = basicfont.render('Game Over',True,white)    gameoverrect = gameoversurf.get_rect()    gameoverrect.center = (halfx,halfy)    winsurf = basicfont.render('you have achieved omega squirrel.',True,white)    winrect = winsurf.get_rect()    winrect.center = (halfx,halfy)    winsurf2 = basicfont.render('Press r to restart.',True,white)    winrect2 = winsurf2.get_rect()    winrect2.center = (halfx,halfy + 30)    camerax = 0    cameray = 0    grassobj = []    squirrelobj = []    playerobj = {'surface': pygame.transform.scale(limg,(startsize,startsize)),                 'facing':left,                 'size':startsize,                 'x': halfx,                 'y': halfy,                 'bounce':0,                 'health':maxhealth}    moveleft = False    moveright = False    moveup = False    movedown = False    for i in range(10):        grassobj.append(makenewgrass(camerax,cameray))        grassobj[i]['x'] = random.randint(0,winx)        grassobj[i]['y'] = random.randint(0,winy)    while True:        if invulnerablemode and time.time()-invulnerablestarttime>intime:            invulnerablemode = False        for sobj in squirrelobj:            sobj['x'] += sobj['movex']            sobj['y'] +=sobj['movey']            sobj['bounce'] +=1            if sobj['bounce'] >sobj['bouncerate']:                sobj['bounce'] = 0            if random.randint(0,99)<directfreq:                sobj['movex'] = getrandomvelocity()                sobj['movey'] = getrandomvelocity()                if sobj['movex'] > 0:                    sobj['surface'] = pygame.transform.scale(rimg,(sobj['width'],sobj['height']))                else:                    sobj['surface'] = pygame.transform.scale(limg,(sobj['width'],sobj['height']))        for i in range(len(grassobj)-1,-1,-1):            if outsidearea(camerax,cameray,grassobj[i]):                del grassobj[i]        for i in range(len(squirrelobj)-1,-1,-1):            if outsidearea(camerax,cameray,squirrelobj[i]):                del squirrelobj[i]        while len(grassobj)<numgrass:            grassobj.append(makenewgrass(camerax,cameray))        while len(squirrelobj)<squirrelnum:            squirrelobj.append(makenewsquirrel(camerax,cameray))        playercenterx = playerobj['x']+int(playerobj['size']/2)        playercentery = playerobj['y']+int(playerobj['size']/2)        if (camerax+halfx) - playercenterx >cameraslack:            camerax = playercenterx + cameraslack - halfx        elif playercenterx - (camerax + halfx)>cameraslack:            camerax = playercenterx - cameraslack - halfx        if (cameray+halfy)-playercentery > cameraslack:            cameray = playercentery + cameraslack-halfy        elif playercentery-(cameray+halfy)>cameraslack:            cameray = playercentery-cameraslack-halfy        disp.fill(grasscolor)        for gobj in grassobj:            grect = pygame.Rect((gobj['x']-camerax,                                 gobj['y']-cameray,                                 gobj['width'],                                 gobj['height']))            disp.blit(grassimg[gobj['grassimage']],grect)        for sobj in squirrelobj:            sobj['rect'] = pygame.Rect((sobj['x']-camerax,                                 sobj['y']-cameray-getbounceamount(sobj['bounce'], sobj['bouncerate'], sobj['bounceheight']),                                 sobj['width'],                                 sobj['height']))            disp.blit(sobj['surface'],sobj['rect'])        flashison = round(time.time(),1)*10%2 == 1        if not gameovermode and not (invulnerablemode and flashison):            playerobj['rect'] = pygame.Rect((playerobj['x']-camerax,                                 playerobj['y']-cameray-getbounceamount(playerobj['bounce'], bouncerate, bounceheight),                                 playerobj['size'],                                 playerobj['size']))            disp.blit(playerobj['surface'],playerobj['rect'])        drawhealth(playerobj['health'])        for event in pygame.event.get():            if event.type == QUIT:                terminal()            elif event.type ==KEYDOWN:                if event.key in (K_UP,K_w):                    movedown = False                    moveup = True                elif event.key in (K_DOWN,K_s):                    moveup = False                    movedown = True                elif event.key in (K_LEFT,K_a):                    moveright = False                    moveleft = True                    if playerobj['facing'] !=right:                        playerobj['surface'] = pygame.transform.scale(limg,(playerobj['size'],playerobj['size']))                    playerobj['facing'] = left                                    elif event.key in (K_RIGHT,K_d):                    moveleft = False                    moveright = True                    if playerobj['facing'] !=right:                        playerobj['surface'] = pygame.transform.scale(rimg,(playerobj['size'],playerobj['size']))                    playerobj['facing'] = left                elif winmode and event.key ==K_r:                    return            elif event.type ==KEYUP:                if event.key in (K_LEFT,K_a):                    moveleft = False                elif event.key in (K_DOWN,K_s):                    movedown = False                       elif event.key in (K_UP,K_w):                    moveup = False                elif event.key in (K_RIGHT,K_d):                    moveright = False                elif event.key == K_ESCAPE:                    terminal()        if not gameovermode:            if moveleft:                playerobj['x'] -=moverate            if moveright:                playerobj['x'] +=moverate            if moveup:                playerobj['y'] -=moverate            if movedown:                playerobj['y'] +=moverate            if (moveleft or moveright or moveup or movedown) or playerobj['bounce']!=0:                playerobj['bounce'] +=1            if playerobj['bounce'] >bouncerate:                playerobj['bounce'] = 0            for i in range(len(squirrelobj)-1,-1,-1):                sqobj = squirrelobj[i]                if 'rect' in sqobj and playerobj['rect'].colliderect(sqobj['rect']):                    if sqobj['width']*sqobj['height']<=playerobj['size']**2:                        playerobj['size'] +=int((sqobj['width']*sqobj['height'])**0.2)+1                        del squirrelobj[i]                        if playerobj['facing']==left:                            playerobj['surface'] = pygame.transform.scale(limg,(playerobj['size'],playerobj['size']))                        if playerobj['facing']==right:                            playerobj['surface'] = pygame.transform.scale(rimg,(playerobj['size'],playerobj['size']))                              if playerobj['size']>winsize:                            winmode = True                    elif not invulnerablemode:                        invulnerablemode = True                        invulnerablestarttime = time.time()                        playerobj['health'] -= 1                        if playerobj['health'] == 0:                            gameovermode = True                            gameoverstarttime = time.time()        else:            disp.blit(gameoversurf,gameoverrect)            if time.time()-gameoverstarttime>gameovertime:                return        if winmode:            disp.blit(winsurf,winrect)            disp.blit(winsurf2,winrect2)        pygame.display.update()        fpsclock.tick(FPS)def drawhealth(currenthealth):    for i in range(currenthealth):        pygame.draw.rect(disp,red,(15,5+(10*maxhealth)-i*10,20,10))    for i in range(maxhealth):        pygame.draw.rect(disp,white,(15,5+(10*maxhealth)-i*10,20,10),1)def terminal():    pygame.quit()    sys.exit()def getbounceamount(currentbounce,bouncerate,bounceheight):    return int(math.sin((math.pi/float(bouncerate))*currentbounce)*bounceheight)def getrandompos(camerax,cameray,objwidth,objheight):    camerarect = pygame.Rect(camerax,cameray,winx,winy)    while True:        x = random.randint(camerax - winx,camerax + 2*winx)        y = random.randint(cameray - winy,cameray + 2*winy)        objrect = pygame.Rect(x,y,objwidth,objheight)        if not objrect.colliderect(camerarect):            return x,ydef makenewgrass(camerax,cameray):    gr = {}    gr['grassimage'] = random.randint(0,len(grassimg)-1)    gr['width'] = grassimg[0].get_width()    gr['height'] = grassimg[0].get_height()    gr['x'],gr['y'] = getrandompos(camerax,cameray,gr['width'],gr['height'])    gr['rect'] = pygame.Rect((gr['x'],gr['y'],gr['width'],gr['height']))    return grdef getrandomvelocity():    speed = random.randint(minspeed,maxspeed)    if random.randint(0,1)== 0:        return speed    else:        return -speeddef makenewsquirrel(camerax,cameray):    sq = {}    generalsize = random.randint(5,25)    multiplier = random.randint(1,3)    sq['width'] = (generalsize +random.randint(0,10))*multiplier    sq['height'] = (generalsize +random.randint(0,10))*multiplier    sq['x'],sq['y'] = getrandompos(camerax,cameray,sq['width'],sq['height'])    sq['movex'] = getrandomvelocity()    sq['movey'] = getrandomvelocity()    if sq['movex']<0:        sq['surface'] = pygame.transform.scale(limg,(sq['width'],sq['height']))    else:        sq['surface'] = pygame.transform.scale(rimg,(sq['width'],sq['height']))    sq['bounce'] = 0    sq['bouncerate'] = random.randint(10,18)    sq['bounceheight'] = random.randint(10,50)    return sqdef outsidearea(camerax,cameray,obj):    leftedge = camerax - winx    rightedge = cameray - winy    boundrect = pygame.Rect(leftedge,rightedge,winx*3,winy*3)    objrect = pygame.Rect(obj['x'],obj['y'],obj['width'],obj['height'])    return not boundrect.colliderect(objrect)if __name__ =='__main__':    main()

评论关闭