Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -------------------------EARTHWAR-------------------------#
- # A game by DiliupG 2013 #
- # Concept, design and coding by Diliupg #
- # Maths/Physics consultant : Shanika Amarasoma #
- # first game written in python.
- # --------------------------------------------------------- #
- import pygame,sys,math,time,random
- from pygame.locals import *
- clock=pygame.time.Clock(); seconds=0
- pygame.mixer.pre_init(44100, 16, 2, 3072) # setup mixer to avoid sound lag
- pygame.init()
- w = 1200 #screen width
- h = 600 #screen height
- screen = pygame.display.set_mode((w, h),FULLSCREEN,32) #display screen
- pygame.display.set_caption('EARTHWARS by DiliupG 2013')
- hero = pygame.image.load("earthwars_resources\heroshipl.png").convert_alpha()
- blt= pygame.image.load("earthwars_resources\dong.png").convert_alpha()
- background=pygame.image.load("earthwars_resources\deep_space2.jpg").convert()
- alien001=pygame.image.load("earthwars_resources\zaragon.png").convert_alpha()
- explosiongreen=pygame.image.load("earthwars_resources\explosiondg003.png").convert_alpha()
- heroexplode=pygame.image.load("earthwars_resources\explosiondg001.png").convert_alpha()
- alien002=pygame.image.load("earthwars_resources\kabaraya.png").convert_alpha()
- albomb=pygame.image.load("earthwars_resources\karakena.png").convert_alpha()
- albexp=pygame.image.load("earthwars_resources\podibombex.png").convert_alpha()
- fbombe=pygame.image.load("earthwars_resources\eshbomb.png").convert_alpha()
- fbombe2=pygame.image.load("earthwars_resources\dabomb.png").convert_alpha()
- fbexp=pygame.image.load("earthwars_resources\FR_explosion_10.png").convert_alpha()
- bosa1=pygame.image.load("earthwars_resources\elaz3.png").convert_alpha()
- bsbomb=pygame.image.load("earthwars_resources\lokubom.png").convert_alpha()
- thanks=pygame.image.load("earthwars_resources\mythanks.jpg").convert()
- mainhero = pygame.transform.scale(hero, (35,35))
- bullet=pygame.transform.scale(blt,(5,5))
- albombe=pygame.transform.scale(albomb,(15,15))
- alien1=pygame.transform.scale(alien001,(45,45))
- fighter=pygame.transform.scale(alien002,(25,25))
- fbomb1=pygame.transform.scale(fbombe,(8,8))
- fbomb2=pygame.transform.scale(fbombe2,(10,10))
- fbexplode=pygame.transform.scale(fbexp,(270,270))
- bossbomb=pygame.transform.scale(bsbomb,(12,12))
- imageturned=hero; myscreen=screen
- laserfire=pygame.mixer.Sound("earthwars_resources\LASER1.WAV")
- heroexplodesound=pygame.mixer.Sound("earthwars_resources\explosion2.WAV")
- alien1explode=pygame.mixer.Sound("earthwars_resources\saucerexplode.WAV")
- healthloss=pygame.mixer.Sound("earthwars_resources\sparks.WAV")
- fighterexplode=pygame.mixer.Sound("earthwars_resources\smallexp.wav")
- fbexs=pygame.mixer.Sound("earthwars_resources\podipipireema.wav")
- laserfire.set_volume(0.08); alien1explode.set_volume(0.5)
- healthloss.set_volume(0.02); heroexplodesound.set_volume(0.1)
- fighterexplode.set_volume(0.4); fbexs.set_volume(0.3)
- rotate=90; angle_rad=math.radians(rotate);
- score=[0,0,0,0,0,0]#hunthous, tenthous,thous,huns,tens,ones
- scorestr=str(score[0])+str(score[1])+str(score[2])+\
- str(score[3])+str(score[4])+str(score[5])
- realscore=int(scorestr)
- gamespeed=100; gamecounter=0; game_paused=False
- kalaya=0
- red=[255,0,0]
- bossrotate=bosa1
- # All Hero info in Hinfo list
- # 0-heroexpldsound, 1-x, 2-y, 3-expldx, 4-expldy, 5-resethero, 6-hvel, 7-maxhvel
- # 8-hero size, 9-if moving forward True flag, 10-rotatevalue befor w was pressed
- #11-newvelocity
- Hinfo=[False,(w/2),(h-mainhero.get_width()),0,0,False,0,3,35,False,0,0,4]
- vitals=[150,6,225] #health, lives, fade
- bullets=[]
- aliens1=[]; aliens1limit=25; aliens1delay=0; aliens1delaylimit=35
- albombs=[]; albmx=albmy=0
- bsbombs=[]
- #engineex=[0,0]
- fablts=[];fbblts=[]; bombalaunch=bombblaunch=0
- smallboss1=[False,0,0,0,0,0,100,0]
- smallboss2=[False,0,0,0,0,0,100,0]
- bossinfo=[False,0,0,0,0,0,1000]
- # event list flags for all event activation
- # 0-alien1 1-albom 2-smallboss1 3- smallboss2 4-boss1
- eventlist=[False, False, False, False, False]
- text="It was in 3145 that Earth was taken fromus by the Kroggs from a distant \
- unheard of Galaxy. Now we live in exile on one of the moons of Jupiter. Over \
- the past few centuries we started rebuilding our lost civilisation and now the \
- final battle is about to begin. The Kroggs arecoming with a new plan to \
- annihilate oursun so all life forms on all planets in the solar system will \
- be wiped out. It is your task to defend the Solar System.YOU ARE OUR LAST \
- AND ONLY HOPE.........."
- smallfiles=[]
- sentl=40 # length of a sentence in characters
- color=(200,25,200)
- intro=True
- def makefiles(bigfile,smallfiles):
- a=0;y=h+25
- for i in xrange (len(text)//sentl):
- appendfile=bigfile[a:a+sentl]
- smallfiles.append([appendfile,y+a])
- a+=40
- if len(text)%sentl>0:
- x=smallfiles[-1][1]
- x+=40
- smallfiles.append([bigfile[-(len(text)%sentl):-1],x])
- return smallfiles
- def story_to_screen(textfile):
- font = pygame.font.Font(None,28)
- textpic = font.render(textfile[0], 0, color)
- a=textpic.get_rect()
- screen.blit(textpic,((w-a[2])/2,textfile[1]))# bottom center
- textfile[1]-=2
- def game_over():
- for x in xrange(4000):
- screen.blit(thanks,(w/2-(324),50))
- pygame.display.update()
- pygame.quit()
- sys.exit()
- pygame.mouse.set_visible(True)
- def update_all(Hinfo):
- update_score(score,scorestr,realscore)
- update_game_text()
- if vitals[0]>0:
- screen.blit(imageturned, (Hinfo[1], Hinfo[2]))
- fighter_bombs(fablts,fbomb1,8,2,5)
- fighter_bombs(fbblts,fbomb2,10,5,0)
- bombs(albombs, albombe,albexp,1.8,15,15,25)
- bombs(bsbombs, bossbomb,albexp,1.1,40,40,50)
- pygame.display.update()
- screen.blit(background,(0,0)) # copy background to screen
- def update_score(score,scorestr,realscore):
- if score[5]>=10: score[5]=0; score[4]+=1
- if score[4]>=10: score[4]=0; score[3]+=1
- if score[3]>=10: score[3]=0; score[2]+=1
- if score[2]>=10: score[2]=0; score[1]+=1
- if score[1]>=10: score[1]=0; score[0]+=1
- scorestr=str(score[0])+str(score[1])+\
- str(score[2])+str(score[3])+str(score[4])+str(score[5])
- realscore=int(scorestr)
- def update_game_text():
- font = pygame.font.Font(None, 36)
- text = font.render("Score:", 2, red)
- screen.blit(text, [2,0])# print text->score, vitals[1]
- text = font.render(scorestr, 2, red)
- screen.blit(text, [80,1])# print score
- life=pygame.transform.scale(hero,(25,25))
- for i in xrange (vitals[1]):
- screen.blit(life,(w-(25*(i+1)),2))
- pygame.draw.rect(screen, (128,0,0), [2, h-(300), 25,300],4)# vitals[0] bar border
- if vitals[2]<0: vitals[2]=1
- pygame.draw.rect(screen, (255,vitals[2],0), [6, h-vitals[0]*2+4, 19,295],0)# vitals[0] bar
- def getAngle(x1,y1,x2,y2):
- # Return value is 0 for right, 90 for up, 180 for left\
- #, and 270 for down (and all values between 0 and 360)
- ydiff = y1 - y2
- xdiff = x1 - x2
- angleinrad = math.atan2(xdiff,ydiff) # get the angle in radians
- angleindeg = math.degrees(angleinrad) # convert to degrees
- return angleindeg, angleinrad
- def rot_center(image, angle): # use a square image
- """rotate an image while keeping its center and size"""
- orig_rect = image.get_rect()
- rot_image = pygame.transform.rotate(image, angle)
- rot_rect = orig_rect.copy()
- rot_rect.center = rot_image.get_rect().center
- rot_image = rot_image.subsurface(rot_rect).copy()
- return rot_image
- def hero_explode():
- if vitals[0]<=0:
- screen.blit(heroexplode,(Hinfo[1]-32,Hinfo[2]-32)\
- ,Rect((Hinfo[3], Hinfo[4]),(100,100)))
- Hinfo[3]+=100
- if Hinfo[3]>=600:
- Hinfo[3]=0
- Hinfo[4]+=100
- if Hinfo[4]>=600:
- Hinfo[3], Hinfo[4]=0,0; Hinfo[5]=True; vitals[0]=1; vitals[2]=1
- vitals[1]-=1; Hinfo[6]=0; rotate=90; Hinfo[1],Hinfo[2]=w/2, h-50
- angle_rad=math.radians(rotate)
- imageturned=rot_center(mainhero,rotate)
- Hinfo[0]=True
- def explode(i,whoexplds):# i=saucers_list pos, x y=saucer Hinfo[1] poy
- screen.blit(explosiongreen,(whoexplds[i][3]-27,whoexplds[i][4]-27),\
- Rect((whoexplds[i][6],whoexplds[i][7] ),(100,100)))
- whoexplds[i][6]+=100
- if whoexplds[i][6]>=600:
- whoexplds[i][6]=0
- whoexplds[i][7]+=100
- if whoexplds[i][7]>=600:
- whoexplds[i][4]=h+100
- whoexplds[i][0]=True
- whoexplds[i][5]=0
- whoexplds[i][2]=h+100
- # USE THE FUNCTION BELOW FOR ALL BOMBS
- #hl-vitals[0] loss
- def bombs(amolist,image1,image2,firerate,w,h,hl):
- if len(amolist)>0:
- for i in xrange (len(amolist)):
- if amolist[i][0]>0 and amolist[i][6]==False:
- screen.blit(image1,(amolist[i][1],amolist[i][2]))
- amolist[i][1]+=math.cos(amolist[i][3])*constant*firerate
- amolist[i][2]-=math.sin(amolist[i][3])*constant*firerate
- bomb_rect=pygame.Rect(amolist[i][1],amolist[i][2],w,h)
- hero_rect=pygame.Rect(Hinfo[1],Hinfo[2],Hinfo[8], Hinfo[8])
- amolist[i][0]-=1
- if bomb_rect.colliderect(hero_rect):
- fbexs.play()
- vitals[0]-=hl
- vitals[2]-=hl*1.5
- amolist[i][0]=0
- if amolist[i][0]<=0 and amolist[i][6]==False:
- # bomb life over so call explosion routine
- screen.blit(image2,(amolist[i][1]-10,amolist[i][2]-10),\
- Rect((amolist[i][3],amolist[i][4]),(40,40)))
- amolist[i][4]+=40
- if amolist[i][4]>=280:
- amolist[i][4]=0
- amolist[i][5]+=40
- if amolist[i][5]>=80:
- amolist[i][6]=True
- amolist[i][1]=w=100 # away from screen area
- if amolist[-1][0]<=0 and amolist[-1][6]==True:
- amolist.pop()
- def shoot(amolist,image,firerate):
- # bullets[i]=[life, x, y, rotation angle] rotation angle inserted at time of
- # 0 1 2 3 bullet creation and adding to list
- if len(amolist)>0:
- for i in xrange (len(amolist)):
- if amolist[i][0]>0:
- amolist[i][1]+=math.cos(amolist[i][3])*constant*firerate
- amolist[i][2]-=math.sin(amolist[i][3])*constant*firerate
- screen.blit(image,(amolist[i][1],amolist[i][2]))
- amolist[i][0]-=1
- def fighters(whichship,fbulletlist,score):
- screen.blit(fighter, (whichship[1], whichship[2]))
- whichship[1]+=math.cos(math.radians(whichship[2])/math.pi)*(constant)
- whichship[2]-=math.sin(math.radians(-whichship[1])/math.pi*5)*(constant)
- if whichship[1]>=w-fighter.get_width():
- whichship[1]=0
- if whichship<0:
- whichship[1]=w
- hero_rect=pygame.Rect(Hinfo[1],Hinfo[2],Hinfo[8],Hinfo[8])
- fighter_rect=pygame.Rect(whichship[1],whichship[2],25,25)
- if fighter_rect.colliderect(hero_rect):
- vitals[0]-=10
- vitals[2]-=8*1.5
- healthloss.play()
- #check if we shot the fighter and reduce vitals[0]
- if len(bullets)>0:
- for i in xrange (len(bullets)):
- bullet_rect=pygame.Rect(bullets[i][1], bullets[i][2],6,6)
- if bullet_rect.colliderect(fighter_rect):
- bullets[i][0]=0
- whichship[6]-=1
- score[4]+=1 #tens
- #make the fighter bombs ready for launch
- if whichship[6]>=0:
- if len(fbulletlist)<=100:
- if whichship[5]>=random.randrange(8,15):
- fbulletlist.insert(0,[500,whichship[1],whichship[2],0,0,0,0,False])
- whichship[5]=0
- if whichship[6]<=0:
- whichship[0]=False
- whichship[6]=100
- whichship[7]=0
- whichship[5]+=1
- def fighter_bombs(fblist,spritelist, size,score1,score2):
- global w
- #launch the small bombs which home in on the hero
- if len(fblist)>0:
- for i in xrange(len(fblist)):
- if fblist[i][0]>0:
- x=Hinfo[1]-fblist[i][1]; y=Hinfo[2]-fblist[i][2]
- fblist[i][1]+=math.cos(math.atan2 (y,x))*(constant/1.6)*2
- fblist[i][2]+=math.sin(math.atan2 (y,x))*(constant/1.6)*2
- screen.blit(spritelist,(fblist[i][1], fblist[i][2]))
- bomb_rect=pygame.Rect(fblist[i][1], fblist[i][2],size, size)
- hero_rect=pygame.Rect(Hinfo[1],Hinfo[2],Hinfo[8],Hinfo[8])
- fblist[i][0]-=1
- if bomb_rect.colliderect(hero_rect):
- vitals[0]-=25
- vitals[2]-=25*1.5
- fblist[i][0]=0
- fbexs.play()
- fblist[i][3]=fblist[i][1]# put current x here for explosion
- fblist[i][4]=fblist[i][2]# put current y here for explosion
- fblist[i][1]=w+100 # move bomb away from screen
- fb_rect=pygame.Rect(fblist[i][1], fblist[i][2], 10,10)
- for j in xrange (len(bullets)):
- bullet_rect=pygame.Rect(bullets[j][1], bullets[j][2],6,6)
- if bullet_rect.colliderect(fb_rect):
- fbexs.play()
- fblist[i][3]=fblist[i][1]# put current x here for explosion
- fblist[i][4]=fblist[i][2]# put current y here for explosion
- fblist[i][1]=w+100 # move bomb away from screen
- score[4]+=1
- fblist[i][0]=0
- bullets[j][0]=0
- fblist[i][7]=True
- if fblist[i][0]<=0:
- screen.blit(fbexplode,(fblist[i][3]-5,fblist[i][4]-5),\
- Rect((fblist[i][5],fblist[i][6]),(45,45)))
- fblist[i][5]+=45
- if fblist[i][5]>=270:
- fblist[i][5]=0
- fblist[i][6]+=45
- if fblist[i][6]>=270:
- fblist[i][7]=True
- #remove the used bomb from the list
- if fblist[-1][7]==True:
- fblist.pop()
- imageturned=rot_center(mainhero,rotate)
- m=makefiles(text,smallfiles)# this is the text file broken into segments
- num=len(smallfiles) # this is the number of lines we to print to the screen
- pygame.mouse.set_visible(False)
- while True:#------------------------ Main Game Loop----------------------#
- while intro==True:
- pygame.event.pump()
- keys=pygame.key.get_pressed() #get key pressed
- if keys[pygame.K_q]: #PAUSE GAME
- intro=False
- for i in xrange(len(smallfiles)):
- story_to_screen(smallfiles[i])
- if smallfiles[len(smallfiles)-1][1]<-50:
- intro=False
- pygame.display.update()
- screen.blit(background,(0,0))
- timegone=clock.tick(40)
- timegone_sec=timegone/1000.0
- constant=gamespeed*timegone_sec
- scorestr=str(score[0])+str(score[1])+str(score[2])\
- +str(score[3])+str(score[4])+str(score[5])
- realscore=int(scorestr)
- smallboss1[7]+=.5
- smallboss2[7]+=.5
- kalaya+=timegone_sec
- seconds=int(kalaya)
- gamecounter+=1
- if realscore>2000 and score <4000:
- aliens1delaylimit=40
- vitals[0]+=0.05 # hero auto healing function
- vitals[2]+=0.05*1.5
- if vitals[0]==150:
- vitals[0]=150
- vitals[2]=225
- # set the eventlist flags to trigger events happening
- if gamecounter==50:
- eventlist[0]=True # bring on the aliens## if realscore> 2000:
- if realscore>= 2000:
- eventlist[1]=True # bring on the albombs
- aliens1limit=60
- aliens1delaylimit=25
- if realscore>= 4000 and realscore <=10000:
- eventlist[2]=True # bring on the smallboss1
- eventlist[1]=False# stop the albombs
- eventlist[0]=False# stop the aliens
- eventlist[3]=False
- eventlist[4]=False
- bossinfo[0]=False
- if realscore>= 6000 and realscore <=10000:
- eventlist[3]=True # bring on the smallboss2
- eventlist[0]=False# stop the aliens1
- eventlist[1]=False# stop the albombs
- eventlist[4]=False
- bossinfo[0]=False
- if realscore>= 8000 and realscore <=10000: # bring the alien ships and albombs
- eventlist[0]=True# bring the aliens1
- eventlist[1]=True# bring the albombs
- eventlist[4]=False
- bossinfo[0]=False
- if realscore>= 10000:
- eventlist[4]=True# bring on the BAD BOSS1
- eventlist[3]=False# stop the smallboss2
- eventlist[2]=False# stop the smallboss1
- eventlist[1]=False# stop the aliens1
- eventlist[0]=False# stop the albombs
- smallboss1[0]=False
- smallboss2[0]=False
- if eventlist[2]==True and smallboss1[0]==False:
- smallboss1[0]=True
- smallboss1[1]=random.randint(w/2, w-w/3)
- smallboss1[2]=random.randint(h/3, h-h/3)
- if smallboss1[0] is True and smallboss1[7]>50:
- fighters(smallboss1,fablts,score)
- if eventlist[3]==True and smallboss2[0]==False:
- smallboss2[0]=True
- smallboss2[1]=random.randint(w/3, w/2)
- smallboss2[2]=random.randint(h/3, h-h/3)
- if smallboss2[0] is True and smallboss2[7]>90:
- fighters(smallboss2,fbblts,score)
- pygame.event.pump()
- keys=pygame.key.get_pressed() #get key pressed
- if (keys[pygame.K_ESCAPE]): # exit game
- game_over()
- for event in pygame.event.get():
- if event.type==QUIT:
- game_over()
- # move hero
- if vitals[0]<=0:
- if Hinfo[0]==True:
- heroexplodesound.play()
- Hinfo[0]=False
- hero_explode()
- if Hinfo[5]==True:
- vitals[0]+=5
- vitals[2]+=5*1.5
- if vitals[0]>=150: # max health
- vitals[0]=150
- vitals[2]=225 # colour fade amount
- Hinfo[5]=False
- if vitals[0]>0:
- if (keys[pygame.K_a])or (keys[pygame.K_LEFT]):#rotate left
- rotate+=4
- if (keys[pygame.K_d])or (keys[pygame.K_RIGHT]):#rotate right
- rotate-=4
- if (keys[pygame.K_w])or (keys[pygame.K_UP]):#accellerate (to max velocity) and move forward
- Hinfo[9]=True
- Hinfo[6]+=.01
- if Hinfo[6]>=Hinfo[7]:
- Hinfo[6]=Hinfo[7]
- Hinfo[11]+=Hinfo[6]
- if Hinfo[11]>=Hinfo[12]:
- Hinfo[11]=Hinfo[12]
- else:
- Hinfo[9]=False
- Hinfo[6]-=.01
- Hinfo[6]<=0
- Hinfo[6]=0
- Hinfo[11]-=.04
- if Hinfo[11]<0:
- Hinfo[11]=0
- if (keys[pygame.K_s])or (keys[pygame.K_DOWN]):#reverse
- Hinfo[11]-=.01
- if Hinfo[11]<=0:
- Hinfo[11]=0
- imageturned=rot_center(mainhero,rotate)
- if Hinfo[9]==True:
- Hinfo[10]=rotate
- angle_rad=math.radians(Hinfo[10])
- Hinfo[1]+=Hinfo[11]*math.cos(angle_rad)*(constant)
- Hinfo[2]-=Hinfo[11]*math.sin(angle_rad)*(constant)
- angle=math.radians(rotate)
- if Hinfo[2]>h:
- Hinfo[2]=0-hero.get_height()
- if Hinfo[2]<0-hero.get_height():
- Hinfo[2]=h
- if Hinfo[1]<0-hero.get_width():
- Hinfo[1]=w
- if Hinfo[1]>w:
- Hinfo[1]=0-hero.get_width()
- # put a bullet in the list if spacebar pressed
- if gamecounter%3==0:# slows down adding bullets so slows down firing
- if (keys[pygame.K_SPACE]) and vitals[0]>0:
- bltx=(Hinfo[1]-3)+mainhero.get_width()/2
- blty=(Hinfo[2]-3)+mainhero.get_height()/2
- bltangle=math.radians(rotate)
- bltlife=25
- bullets.insert(0,[bltlife,bltx, blty,bltangle, False])
- laserfire.play()
- # if bullet list not empty then shoot!
- if len(bullets)>0:
- shoot(bullets, bullet,4)
- for i in xrange (len(bullets)):
- if bullets[i][0]>0:
- bullet_rect=pygame.Rect(bullets[i][1],bullets[i][2],6,6)
- # check for collision with boss1
- if bossinfo[0]==True:
- boss1_rect=pygame.Rect(bossinfo[1], bossinfo[2],90,90)
- if bullet_rect.colliderect(boss1_rect):
- score[5]+=1 # ones
- score[4]+=1 # tens
- bossinfo[6]-=.5
- # check if any bullet hits any alien
- if len (aliens1)>0:
- for j in xrange (len(aliens1)):
- if aliens1[j][5]>0:
- alien1_rect=pygame.Rect(aliens1[j][1]\
- , aliens1[j][2],45,45)
- if bullet_rect.colliderect(alien1_rect):
- bullets[i][0]=0
- aliens1[j][5]-=8
- score[5]+=1
- # if alien life 0 take out of screen and prepare for explosion
- if aliens1[j][5]<=0 and aliens1[j][0]==True:
- alien1explode.play()
- score[3]+=1
- aliens1[j][0]=False
- aliens1[j][3]=aliens1[j][1] # get the last Hinfo[1] and
- aliens1[j][4]=aliens1[j][2] # Hinfo[2] of expld alien and
- aliens1[j][1]=w+100 # move alien out of screen x
- aliens1[j][5]=0
- if len(bullets)>0 and bullets[-1][0]<=0:#bullet life over so remove from list
- bullets.pop()
- # if conditions correct add alien to list
- if eventlist[0]==True:
- aliens1delay+=1
- if gamecounter>75 and len(aliens1)<=aliens1limit \
- and aliens1delay==aliens1delaylimit:
- aliens1.insert(0,[True,random.randint(0,(w-60)),-60,0, 0,100,0,0,0])
- # 0 1 2 3 4 5 6 7 8
- if len(aliens1)>0:
- for i in xrange(len(aliens1)):
- if eventlist[1]==True: # shoot bombs if score if higher than this
- bombcorridor=pygame.Rect(aliens1[i][1],aliens1[i][2]+ 60,60,300)
- hero_rect=pygame.Rect(Hinfo[1],Hinfo[2]\
- ,Hinfo[8],Hinfo[8])
- if bombcorridor.colliderect(hero_rect) and aliens1[i][6]<30:
- aliens1[i][6]+=1
- if aliens1[i][6]==3:# albomb shoot delay flag
- aliens1[i][6]=-30
- rotinfo=getAngle(aliens1[i][1],aliens1[i][2]\
- ,aliens1[i][1],Hinfo[2])
- abx=aliens1[i][1]+18
- aby=aliens1[i][2]+60
- angle=math.radians(rotinfo[0]-90); life=40
- albombs.insert(0,[life,abx,aby,-angle,0,0,False])
- if aliens1[i][2]<h and aliens1[i][5]>=0:
- screen.blit(alien1,(aliens1[i][1], aliens1[i][2]))
- aliens1[i][2]+=(constant*.5)
- # if hero collides with alien1 reduce vitals[0]
- alien1_rect=pygame.Rect(aliens1[i][1], aliens1[i][2],60,60)
- hero_rect=pygame.Rect(Hinfo[1],Hinfo[2]\
- ,Hinfo[8],Hinfo[8])
- if alien1_rect.colliderect(hero_rect):
- vitals[0]-=2
- vitals[2]-=2*1.5
- healthloss.play()
- if aliens1[i][2]<h and aliens1[i][5]<=0 and aliens1[i][0]==False:
- explode(i, aliens1)
- if aliens1[i][2]>=h and aliens1[i][0]==True:
- aliens1[i][0]=False
- aliens1[i][5]=0
- if len (aliens1)>0 and aliens1[-1][2]>=h and aliens1[-1][5]==0:
- aliens1.pop()
- if aliens1delay>aliens1delaylimit:
- aliens1delay=0
- #-------------------------------------------------------#
- # THE FIRST ALIEN BAD BOSS #
- #-------------------------------------------------------#
- if eventlist[4]==True and bossinfo[0]==False:
- bossinfo[0]=True; bossinfo[1]=0-50-bosa1.get_width()/2; bossinfo[2]=h/2
- if bossinfo[0]==True:
- rotinfo=getAngle(bossinfo[1], bossinfo[2],Hinfo[1],Hinfo[2])
- bossangle=rotinfo[0]
- bossrad=rotinfo[1]
- bossrotate=rot_center(bosa1,bossangle)
- bossinfo[1]+=math.cos(bossangle)*constant*.5
- bossinfo[2]-=math.sin(bossangle)*constant*.5
- bossinfo[5]+=1
- if bossinfo[5]==25:# bossbomb shoot delay flag
- bossinfo[5]=-60
- abx=bossinfo[1]
- aby=bossinfo[2]
- bsbangle=math.radians(bossangle+90)
- bsblife=80
- bsbombs.insert(0,[bsblife,abx,aby,bsbangle,0,0,False])
- screen.blit(bossrotate,(bossinfo[1]-35,bossinfo[2]-35))
- # draw the boss energy level bar above boss and reduce if hit
- pygame.draw.rect(screen,(255,255,255),[bossinfo[1]-38\
- ,bossinfo[2]-38,103,10],2)
- pygame.draw.rect(screen,(255,0,0),[bossinfo[1]-35\
- ,bossinfo[2]-35,bossinfo[6]/10,6],0)
- update_all(Hinfo)
- ################################################################################
- if keys[pygame.K_p]: #PAUSE GAME
- pygame.image.save(screen,"earthwars_resources\myscreen.jpeg")
- myscreen=pygame.image.load("earthwars_resources\myscreen.jpeg").convert()
- game_paused=True
- if keys[pygame.K_h]: # cheat to increase vitals[0] to max anytime
- vitals[0]=150
- vitals[2]=225
- #################### G A M E P A U S E ####################
- while game_paused==True:
- font = pygame.font.Font(None, 100)
- a=random.randrange(0, 255)
- b=random.randrange(0,1)
- c=random.randrange(0,1)
- text = font.render("Paused.", 1, [a,b,c])
- textpos = text.get_rect()
- screen.blit(text,(w/2-(textpos[2]/2),h/2-textpos[3]/2))
- font = pygame.font.Font(None, 40)
- text = font.render("Hit SPACE to continue", 1, red)
- textpos = text.get_rect()
- screen.blit(text,(w/2-(textpos[2]/2),h/2+textpos[3]))
- update_all(Hinfo)
- screen.blit(myscreen,(0,0))
- pygame.event.pump()
- key=pygame.key.get_pressed()
- if key[pygame.K_SPACE]:
- game_paused=False
- #################### G A M E O V E R ####################
- # replay or quit
- while vitals[1]<=0 or bossinfo[6]<=0:
- font = pygame.font.Font(None, 50)
- if bossinfo[6]<=0:
- akuru="YOU WON THE WAR! YOU ARE A HERO!'"
- else:
- akuru="THE WAR WAS LOST!"
- text = font.render(akuru, 1, red)
- textpos = text.get_rect()
- screen.blit(text,(w/2-(textpos[2]/2),h/2-textpos[3]/2))
- font = pygame.font.Font(None, 30)
- text = font.render("Hit ESC to Quit!", 1, red)
- textpos = text.get_rect()
- screen.blit(text,(w/2-(textpos[2]/2),h/2+textpos[3]))
- text = font.render("Hit r to try again", 1, red)
- textpos = text.get_rect()
- screen.blit(text,(w/2-(textpos[2]/2),360))
- update_all(Hinfo)
- screen.blit(myscreen,(0,0))
- pygame.event.pump()
- key=pygame.key.get_pressed()
- if key[pygame.K_r]:
- rotate=90; angle_rad=math.radians(rotate);
- score=[0,0,0,0,0,0]
- scorestr=str(score[0])+str(score[1])+str(score[2])+\
- str(score[3])+str(score[4])+str(score[5])
- realscore=int(scorestr)
- gamespeed=150; gamecounter=0; game_paused=False
- red=[255,0,0]; kalaya=0
- bossrotate=bosa1
- Hinfo=[False,(w/2),(h-mainhero.get_width()),0,0,False,0,3,35,False,0,0,4,False]
- vitals=[150,5,225]
- bullets=[]
- aliens1=[]; aliens1limit=25; aliens1delay=0; aliens1delaylimit=35
- albombs=[]; albmx=albmy=0
- bsbombs=[]
- fablts=[];fbblts=[]; bombalaunch=bombblaunch=0
- smallboss1=[False,0,0,0,0,0,100,0]
- smallboss2=[False,0,0,0,0,0,100,0]
- bossinfo=[False,0,0,0,0,0,1000]
- eventlist=[False, False, False, False, False]
- angle_rad=math.radians(rotate)
- imageturned=rot_center(mainhero,rotate)
- if key[pygame.K_ESCAPE]:
- game_over()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement