pygame squirrel
发布时间:2020-12-17 17:23:58 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import pygame,sys,time,math,randomfrom pygame.locals import*FPS = 30winx = 640winy = 480halfx = winx/2halfy = winy/2grasscolor = (24,255,0)w
|
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 import pygame,sys,time,math,random
from pygame.locals import*
FPS = 30
winx = 640
winy = 480
halfx = winx/2
halfy = winy/2
grasscolor = (24,255,0)
white = (255,255)
red = (255,0)
startsize = 25
left = 'left'
right = 'right'
squirrelnum = 30
minspeed = 3
maxspeed = 7
directfreq = 2
maxhealth = 3
intime = 2
numgrass = 80
cameraslack = 90
bouncerate = 6
bounceheight = 30
moverate = 9
winsize = 300
gameovertime = 4
def 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',white)
gameoverrect = gameoversurf.get_rect()
gameoverrect.center = (halfx,halfy)
winsurf = basicfont.render('you have achieved omega squirrel.',white)
winrect = winsurf.get_rect()
winrect.center = (halfx,halfy)
winsurf2 = basicfont.render('Press r to restart.',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['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,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['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):
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']))
if playerobj['facing']==right:
playerobj['surface'] = pygame.transform.scale(rimg,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,10),1)
def terminal():
pygame.quit()
sys.exit()
def getbounceamount(currentbounce,bounceheight):
return int(math.sin((math.pi/float(bouncerate))*currentbounce)*bounceheight)
def getrandompos(camerax,objwidth,objheight):
camerarect = pygame.Rect(camerax,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,objheight)
if not objrect.colliderect(camerarect):
return x,y
def 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,gr['width'],gr['height'])
gr['rect'] = pygame.Rect((gr['x'],gr['y'],gr['height']))
return gr
def getrandomvelocity():
speed = random.randint(minspeed,maxspeed)
if random.randint(0,1)== 0:
return speed
else:
return -speed
def 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,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['height']))
sq['bounce'] = 0
sq['bouncerate'] = random.randint(10,18)
sq['bounceheight'] = random.randint(10,50)
return sq
def outsidearea(camerax,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()
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
