import pygame import random import math #import time pygame.init() display_width=800 display_height=600 black=(0,0,0) white=(255,255,255) red=(255,0,0) green=(0,255,0) purple=(238,130,238) gameDisplay=pygame.display.set_mode((display_width,display_height)) pygame.display.set_caption('A bit Racey') clock=pygame.time.Clock() gameDisplay.fill(white) carImg_orig=pygame.image.load('car0.jpg') carImg_new1=pygame.image.load('car1.jpg') carImg_new2=pygame.image.load('car2.jpg') carImg_new3=pygame.image.load('car3.jpg') carImg_orig2=pygame.image.load('car20.jpg') carImg_new21=pygame.image.load('car21.jpg') carImg_new22=pygame.image.load('car22.jpg') carImg_new23=pygame.image.load('car23.jpg') carImg_orig3=pygame.image.load('car30.jpg') carImg_new31=pygame.image.load('car31.jpg') carImg_orig4=pygame.image.load('car40.jpg') carImg_orig.set_colorkey(white) carImg_new1.set_colorkey(white) carImg_new2.set_colorkey(white) carImg_new3.set_colorkey(white) carImg_orig2.set_colorkey(white) carImg_new21.set_colorkey(white) carImg_new22.set_colorkey(white) carImg_new23.set_colorkey(white) carImg_orig3.set_colorkey(white) carImg_new31.set_colorkey(white) carImg_orig4.set_colorkey(white) carlist=[] carlist.append(carImg_orig) carlist.append(carImg_new1) carlist.append(carImg_new2) carlist.append(carImg_new3) carlist.append(carImg_orig2) carlist.append(carImg_new21) carlist.append(carImg_new22) carlist.append(carImg_new23) carlist.append(carImg_orig3) carlist.append(carImg_new31) carlist.append(carImg_orig4) all_sprites=pygame.sprite.Group() class car(pygame.sprite.Sprite): List=pygame.sprite.Group() def __init__(self,x,y,plusnum): pygame.sprite.Sprite.__init__(self) car.List.add(self) self.imageorig=random.choice(carlist) self.image=self.imageorig.copy() self.rect=self.image.get_rect() self.rect.centerx=x+100 self.rect.centery=y+100 self.x=x+100 self.y=y+100 self.mask = pygame.mask.from_surface(self.image) all_sprites.add(self) self.rot=0 self.passcount=0 #self.last_update=pygame.time.get_ticks() self.plusnum=plusnum #print(self.plusnum) self.atnum=0 #print(self.atnum) def rotate(self): #n=random.randrange(1,4) #now=pygame.time.get_ticks() #if now-self.last_update>50: #self.last_update=now self.rot=(self.rot+90)%360 new_image=pygame.transform.rotate(self.imageorig,self.rot) #old_center=self.rect.center self.image=new_image self.mask = pygame.mask.from_surface(self.image) #self.image.set_colorkey(white) #self.rect=self.image.get_rect() #self.rect.center=old_center print("rotate") def nearbyrotate(self): nearbylist=[] for carname in car.List: if carname.x==self.x: if carname.y-self.y==199 or carname.y-self.y==-199: nearbylist.append(carname) if carname.y==self.y: if carname.x-self.x==199 or carname.x-self.x==-199: nearbylist.append(carname) print(str(nearbylist)) for carnearby in nearbylist: carnearby.rotate() print("nearby rotate") enemy5Img='5.jpg' enemy1Img='1.jpg' enemy3Img='3.jpg' enemy7Img='7.jpg' #enemy5Img.set_colorkey(white) #enemy1Img.set_colorkey(white) #enemy3Img.set_colorkey(white) #enemy7Img.set_colorkey(white) enemylistred=[] #enemylistred.append(enemy5Img) enemylistred.append(enemy1Img) enemylistblack=[] enemylistblack.append(enemy3Img) #enemylistblack.append(enemy7Img) import os import string class enemy(pygame.sprite.Sprite): List=pygame.sprite.Group() enemycount=1 def __init__(self,x,y,listname): pygame.sprite.Sprite.__init__(self) enemy.List.add(self) file=random.choice(listname) #print(file) filename=os.path.splitext(file)[0] #print(filename) self.intfilename=int(filename) #resultname=int(filename)+10 #print(resultname) self.imageorig=pygame.image.load(file) self.imageorig.set_colorkey(white) self.image=self.imageorig.copy() self.image.set_colorkey(white) self.rect=self.image.get_rect() self.rect.centerx=x+100 self.rect.centery=y+100 #self.x=x+100 #self.y=y+100 #all_sprites.add(self) self.mask = pygame.mask.from_surface(self.image) self.last=pygame.time.get_ticks() enemy.enemycount+=1 self.listname=listname self.hittx=0 self.hitty=0 #if listname==enemylistred: #self.listnamered=enemylistred #self.listnameblack=[] #else: #self.listnameblack=enemylistblack #self.listnamered=[] def move(self): at=pygame.sprite.spritecollide\ (self,car.List,False) for att in at: att.passcount+=1 #rotateall寮€濮� def rotateall(): att.rotate() att.nearbyrotate() car.List.remove(att) hits=pygame.sprite.spritecollide\ (att,car.List,False,pygame.sprite.collide_mask) car.List.add(att) if hits==[]: att.rotate() car.List.remove(att) hits=pygame.sprite.spritecollide\ (att,car.List,False,pygame.sprite.collide_mask) car.List.add(att) if hits==[]: rotateall() else: car.List.remove(att) hits=pygame.sprite.spritecollide\ (att,car.List,False,pygame.sprite.collide_mask) car.List.add(att) List=[] for hit in hits: #print(hit.x,hit.y) List.append(hit) hitt=random.choice(List) #att.atnum=att.atnum-1 #hitt.atnum=hitt.atnum+1 #print(hitt.atnum) #if self.listname==enemylistred: #self.rect.centerx=hitt.x-40 #self.rect.centery=hitt.y #if self.listname==enemylistblack: #self.rect.centerx=hitt.x+40 #self.rect.centery=hitt.y #else: #self.rect.centerx=hitt.x #self.rect.centery=hitt.y self.rect.centerx=hitt.x self.rect.centery=hitt.y self.hittx=hitt.x self.hitty=hitt.y enemy.List.remove(self) enemyhits=pygame.sprite.spritecollide\ (self,enemy.List,False,pygame.sprite.collide_mask) enemy.List.add(self) if enemyhits==[]: att.atnum=1 else: att.atnum=2 if self.listname==enemylistred: print(50) self.rect.centerx=hitt.x-40 self.rect.centery=hitt.y else: print(200) self.rect.centerx=hitt.x+40 self.rect.centery=hitt.y print(100) #print(hitt.plusnum) #print(self.intfilename) resultintfilename=self.intfilename+hitt.plusnum #print(resultintfilename) resultstrfilename=str(resultintfilename) self.imageorig=pygame.image.load(resultstrfilename+'.jpg') self.imageorig.set_colorkey(white) self.image=self.imageorig.copy() self.image.set_colorkey(white) print("moved") #print(self.rect.centerx,self.rect.centery) #time.sleep(1) else: car.List.remove(att) hits=pygame.sprite.spritecollide\ (att,car.List,False,pygame.sprite.collide_mask) car.List.add(att) List=[] for hit in hits: #print(hit.x,hit.y) List.append(hit) hitt=random.choice(List) #att.atnum=att.atnum-1 #hitt.atnum=hitt.atnum+1 #print(hitt.atnum) #if self.listname==enemylistred: #self.rect.centerx=hitt.x-40 #self.rect.centery=hitt.y #if self.listname==enemylistblack: #self.rect.centerx=hitt.x+40 #self.rect.centery=hitt.y #else: #self.rect.centerx=hitt.x #self.rect.centery=hitt.y self.rect.centerx=hitt.x self.rect.centery=hitt.y self.hittx=hitt.x self.hitty=hitt.y enemy.List.remove(self) enemyhits=pygame.sprite.spritecollide\ (self,enemy.List,False,pygame.sprite.collide_mask) enemy.List.add(self) if enemyhits==[]: att.atnum=1 else: att.atnum=2 if self.listname==enemylistred: print(50) self.rect.centerx=hitt.x-40 self.rect.centery=hitt.y else: print(200) self.rect.centerx=hitt.x+40 self.rect.centery=hitt.y print(100) #print(hitt.plusnum) #print(self.intfilename) resultintfilename=self.intfilename+hitt.plusnum #print(resultintfilename) resultstrfilename=str(resultintfilename) self.imageorig=pygame.image.load(resultstrfilename+'.jpg') self.imageorig.set_colorkey(white) self.image=self.imageorig.copy() self.image.set_colorkey(white) print("moved") #print(self.rect.centerx,self.rect.centery) #time.sleep(1) #rotateall缁撴潫 if att.passcount==3: rotateall() for cars in car.List: cars.passcount=0 car.List.remove(att) hits=pygame.sprite.spritecollide\ (att,car.List,False,pygame.sprite.collide_mask) car.List.add(att) if hits==[]: rotateall() else: car.List.remove(att) hits=pygame.sprite.spritecollide\ (att,car.List,False,pygame.sprite.collide_mask) car.List.add(att) List=[] for hit in hits: #print(hit.x,hit.y) List.append(hit) hitt=random.choice(List) #att.atnum=att.atnum-1 #hitt.atnum=hitt.atnum+1 #print(hitt.atnum) #if self.listname==enemylistred: #self.rect.centerx=hitt.x-40 #self.rect.centery=hitt.y #if self.listname==enemylistblack: #self.rect.centerx=hitt.x+40 #self.rect.centery=hitt.y #else: #self.rect.centerx=hitt.x #self.rect.centery=hitt.y self.rect.centerx=hitt.x self.rect.centery=hitt.y self.hittx=hitt.x self.hitty=hitt.y enemy.List.remove(self) enemyhits=pygame.sprite.spritecollide\ (self,enemy.List,False,pygame.sprite.collide_mask) enemy.List.add(self) if enemyhits==[]: att.atnum=1 else: att.atnum=2 if self.listname==enemylistred: print(50) self.rect.centerx=hitt.x-40 self.rect.centery=hitt.y else : print(200) self.rect.centerx=hitt.x+40 self.rect.centery=hitt.y print(100) #print(hitt.plusnum) #print(self.intfilename) resultintfilename=self.intfilename+hitt.plusnum #print(resultintfilename) resultstrfilename=str(resultintfilename) self.imageorig=pygame.image.load(resultstrfilename+'.jpg') self.imageorig.set_colorkey(white) self.image=self.imageorig.copy() self.image.set_colorkey(white) print("moved") #print(self.rect.centerx,self.rect.centery) #time.sleep(1) def rotatetest(self): at=pygame.sprite.spritecollide\ (self,car.List,False,pygame.sprite.collide_mask) for att in at: att.rotate() att.rotate() att.nearbyrotate() car.List.remove(att) hits=pygame.sprite.spritecollide\ (att,car.List,False,pygame.sprite.collide_mask) car.List.add(att) for hit in hits: print(hit.x,hit.y) def rotatetest1(self): car2.rotate() car2.rotate() car2.nearbyrotate() car.List.remove(car2) hits=pygame.sprite.spritecollide\ (car2,car.List,False,pygame.sprite.collide_mask) car.List.add(car2) for hit in hits: print(hit.x,hit.y) def shoot(self,a,b,color,shape): abullet=bullet(self.rect.centerx,self.rect.centery,color,shape) if a.rect.centerx==b.rect.centerx: if a.rect.centery>b.rect.centery: abullet.vely=-75 if a.rect.centery<b.rect.centery: abullet.vely=75 elif a.rect.centery==b.rect.centery: if a.rect.centerx>b.rect.centerx: abullet.velx=-75 abullet.image=pygame.transform.rotate(abullet.imageorig,90) if a.rect.centerx<b.rect.centerx: abullet.velx=75 abullet.image=pygame.transform.rotate(abullet.imageorig,90) elif a.rect.centerx<b.rect.centerx and \ a.rect.centery>b.rect.centery: dy=a.rect.centery-b.rect.centery dx=b.rect.centerx-a.rect.centerx angle=math.atan2(dy, dx) abullet.velx=75*math.cos(angle) abullet.vely=-75*math.sin(angle) abullet.image=pygame.transform.rotate(abullet.imageorig,\ (360-(90-math.degrees(angle)))) elif a.rect.centerx>b.rect.centerx and \ a.rect.centery>b.rect.centery: dy=a.rect.centery-b.rect.centery dx=a.rect.centerx-b.rect.centerx angle=math.atan2(dy, dx) abullet.velx=-75*math.cos(angle) abullet.vely=-75*math.sin(angle) abullet.image=pygame.transform.rotate(abullet.imageorig,\ (90-math.degrees(angle))) elif a.rect.centerx>b.rect.centerx and \ a.rect.centery<b.rect.centery: dy=b.rect.centery-a.rect.centery dx=a.rect.centerx-b.rect.centerx angle=math.atan2(dy, dx) abullet.velx=-75*math.cos(angle) abullet.vely=75*math.sin(angle) abullet.image=pygame.transform.rotate(abullet.imageorig,\ (90+math.degrees(angle))) elif a.rect.centerx<b.rect.centerx and \ a.rect.centery<b.rect.centery: dy=b.rect.centery-a.rect.centery dx=b.rect.centerx-a.rect.centerx angle=math.atan2(dy, dx) abullet.velx=75*math.cos(angle) abullet.vely=75*math.sin(angle) abullet.image=pygame.transform.rotate(abullet.imageorig,\ (360-90-math.degrees(angle))) class bullet(pygame.sprite.Sprite): List=pygame.sprite.Group() def __init__(self,x,y,color,shape): pygame.sprite.Sprite.__init__(self) bullet.List.add(self) self.velx=0 self.vely=0 if shape=='rect': self.imageorig=pygame.Surface((6,8)) self.imageorig.fill(color) self.imageorig.set_colorkey(white) self.image=self.imageorig.copy() self.rect=self.image.get_rect() self.rect.centery=y self.rect.centerx=x if shape=='circle': bulletImg=pygame.image.load('bullet.jpg') self.imageorig=bulletImg self.imageorig.set_colorkey(white) self.image=self.imageorig.copy() self.rect=self.image.get_rect() self.rect.centery=y self.rect.centerx=x def update(self): self.rect.x+=self.velx self.rect.y+=self.vely if self.rect.bottom<0 or self.rect.top>600 or\ self.rect.right<0 or self.rect.left>800: self.kill() x=0 y=200 car(x,y-199,0) car(x+199,y-199,0) car(x+398,y-199,0) #car(x+597,y-199) car1=car(x,y,0) car2=car(x+199,y,4) car(x+398,y,0) #car(x+597,y) car5=car(x,y+199,0) car(x+199,y+199,0) car(x+398,y+199,0) #car(x+597,y+199) print(enemy.enemycount) enemyname=enemy(x,y+199,enemylistred) print(enemy.enemycount) #enemyname2=enemy(x+597,y-199) enemyname2=enemy(x+398,y-199,enemylistblack) #print(car.List.remove(car2)) #print(car.List) #hits=pygame.sprite.spritecollide\ # (car2,car.List,False,pygame.sprite.collide_mask) #count=0 #for hit in hits: # count+=1 # print(count) # print(str(hit)) # print(hit.x,hit.y) #enemyname.rotatetest1() #enemyname.rotatetest1() #enemyname.rotatetest1() #enemyname.rotatetest1() crashed=False while not crashed: for event in pygame.event.get(): if event.type==pygame.QUIT: crashed=True gameDisplay.fill(white) now=pygame.time.get_ticks() if now-enemyname.last>1000: enemyname.move() enemyname2.move() enemyname.last=now if enemyname.rect.centerx==enemyname2.rect.centerx and \ enemyname.rect.centery==enemyname2.rect.centery: pass else: enemyname.shoot(enemyname,enemyname2,red,'rect') enemyname2.shoot(enemyname2,enemyname,purple,'circle') bullet.List.update() #enemyname.rotatetest() all_sprites.draw(gameDisplay) enemy.List.draw(gameDisplay) bullet.List.draw(gameDisplay) pygame.display.update() clock.tick(60) #import os #os.system("pause") pygame.quit() quit() input()
bullet.py
最新推荐文章于 2024-05-20 21:17:42 发布