1 __author__ = 'Administrator'
2
3 importpygame4 from pygame.locals import *
5 from sys importexit6
7
8 classBullet(pygame.sprite.Sprite): #子弹类9 def __init__(self, init_pos):10 pygame.sprite.Sprite.__init__(self)11 self.image = pygame.image.load('Bullet.gif') #设定子弹图片(记得放在根目录下)12 self.rect =self.image.get_rect() #rect的意思是对象的区块大小,他把大小设定为图片的大小13 self.rect.midtop =init_pos #子弹位置14 self.speed = 10 #射速10
15
16 defmove(self):17 self.rect.centerx +=self.speed #x轴+速度=长度18 #screen.blit(self.image,self.rect)
19 #pygame.display.update()
20
21
22 classPlayer(pygame.sprite.Sprite): #玩家类23 def __init__(self):24 pygame.sprite.Sprite.__init__(self)25 self.image = pygame.image.load('right.png') #设定初始图片为右向26 self.rect =self.image.get_rect()27 self.rect.center =first_location #center,设定初始位置28 #print self.rect.center
29
30 defturn(self, distance): #转向函数31 center =self.rect.center32 self.image =pygame.image.load(Player_image[distance])#设定为数组里第一个33 self.rect =self.image.get_rect()34 self.rect.center =center35
36 defmove(self, temper): #移动函数37 temper =int(temper)38 if temper ==0: #左39 for temp in range(1, 10):40 self.rect.centerx -= 3
41 printself.rect.centerx42 if temper == 1:43 self.rect.centerx += 30 #右
44 printself.rect.centery45 if temper == 2:46 self.rect.centery -= 30 #上
47 printself.rect.centery48 if temper == 3:49 self.rect.centery += 30 #下
50 if 0 > self.rect.centerx or self.rect.centerx >screen.get_width(): #这个是防止出去框架51 self.rect.centerx = -self.rect.centerx52 if 0 > self.rect.centery or self.rect.centery >screen.get_height():53 self.rect.centery = -self.rect.centery54
55 defshoot(self): #射击函数56 bullet =Bullet(self.rect.midtop)57 Bullets.append(bullet) #添加到Bullets的数组统一播放58
59
60 background_image_filename = 'gamestart.png' #设定背景
61 start_image = 'bg2.png' #开始背景
62 Player_image = ['left.png', 'right.png'] #图片状态数组63 x =0 #background的x,y轴64 y =065 pygame.init() #初始化66 screen = pygame.display.set_mode([1365, 768]) #设定分辨率67 first_location = [screen.get_width() / 2, screen.get_height() / 2] #初始位置为中央68 background =pygame.image.load(background_image_filename).convert() #设定图片69 pygame.key.set_repeat(100, 100) #设定key的可重复按键,第一个参数是重复一次等待多长,第二个参数是多快的速度重复70 clock =pygame.time.Clock() #设定时钟时间71 flag =0 #flag标记72 Bullets =[] #Bullets数组73 running =True #循环标记74 whilerunning:75 clock.tick(60) #不要超过60帧每秒76 for event inpygame.event.get():77 if event.type ==QUIT: #监听退出78 exit()79 if event.type ==KEYDOWN: #按下监听80 if flag ==0:81 if event.key ==pygame.K_1: #按1键进行转场生成人物设置flag标记为182 background =pygame.image.load(start_image).convert()83 player =Player()84 printscreen.get_width()85 printscreen.get_height()86 flag = 1
87 elif event.key ==pygame.K_4: #4退出88 exit()89 elif event.key ==pygame.K_RIGHT: #下面就是上下左右:90 if flag == 1:91 player.turn(1)92 player.move(1)93 #flag == 1
94 elif event.key ==pygame.K_LEFT:95 if flag == 1:96 player.turn(0)97 player.move(0)98 elif event.key ==pygame.K_UP:99 if flag == 1:100 player.move(2)101 #flag == 1
102 elif event.key ==pygame.K_DOWN:103 if flag == 1:104 player.move(3)105 elif event.key ==pygame.K_x: #设定射击按键:106 if flag == 1:107 player.shoot()108 print("shoot")109 screen.blit(background, (x, y)) #把背景填充到上层110 if flag == 1: #如果转场了就进行下去:111 screen.blit(player.image, player.rect) 放置人物;112 for bullet inBullets: #循环把Bullets的东西移动,并放置到上层113 bullet.move()114 screen.blit(bullet.image, bullet.rect)115 pygame.display.update() #更新背景116 if flag ==0:117 pygame.display.update()