亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

pygame實現雷電游戲雛形開發

2020-02-15 23:44:37
字體:
來源:轉載
供稿:網友

本文實例為大家分享了pygame實現雷電游戲開發代碼,供大家參考,具體內容如下

源代碼:

stars.py

#-*- coding=utf-8 -*-#!/usr/bin/python import pygamefrom pygame.locals import *from random import randintimport math class Star(object):  def __init__(self, x, y, speed, color=(255,255,255)):     self.x = x    self.y = y    self.speed = speed    self.color = color class Stars(object):  '''    用于繪制星星背景  '''  def __init__(self, num = 0, SCREEN_SIZE=(800,600), color=(255,255,255)):    self.stars = []    self.MIN_SPEED = 10    self.MAX_SPEED = 300    self.SCREEN_SIZE = SCREEN_SIZE    if num > 0:      self.create_star(num, color)   def set_min_speed(self,speed):    self.MIN_SPEED = speed  def set_max_speed(self,speed):    self.MAX_SPEED = speed   def create_star(self,num = 1, color = (255,255,255)):    '''創建一個或多個星星,顏色可選'''    for i in xrange(0,num):      x = float(randint(0, self.SCREEN_SIZE[0]))      y = float(randint(0, self.SCREEN_SIZE[1]))      speed = float(randint(self.MIN_SPEED, self.MAX_SPEED))      self.stars.append( Star(x, y, speed, color) )   def move(self,time_passed_seconds):    '''移動星星并過濾'''    for star in self.stars:      star.y = star.y + time_passed_seconds * star.speed    #過濾跑出畫面的星星    self.stars = filter(lambda one: one.y<=self.SCREEN_SIZE[1], self.stars)   def draw(self, surface):    '''將星星畫到指定圖像對象'''    for star in self.stars:      #pygame.draw.aaline(surface, star.color,/      #    (star.x, star.y), (star.x+1., star.y))      surface.set_at((int(star.x),int(star.y)),star.color)  def test():   pygame.init()  screen = pygame.display.set_mode((800, 600)) #, FULLSCREEN)   stars = Stars()  #stars.set_max_speed(1000)  #stars.set_min_speed(300)   # 在第一幀,畫上一些星星  stars.create_star(200)     clock = pygame.time.Clock()   white = (255, 255, 255)     while True:     for event in pygame.event.get():      if event.type == QUIT:        return      if event.type == KEYDOWN:        return     time_passed = clock.tick(30)    time_passed_seconds = time_passed / 1000.     #update_background(stars, screen, time_passed_seconds)    # 增加一顆新的星星    stars.create_star(1)    stars.move(time_passed_seconds)     screen.fill((0, 0, 0))     # 繪制所有的星    stars.draw(screen)     pygame.display.update() if __name__ == "__main__":  test()

game.py

#-*- coding=utf-8 -*-#!/usr/bin/python import pygamefrom pygame.locals import *from random import randint#from gameobjects import vector2import mathimport time SCREEN_RECT = pygame.Rect(0,0,800,600) class Player(pygame.sprite.Sprite):  '''玩家類'''  speed = 10  images = []  def __init__(self):    pygame.sprite.Sprite.__init__(self, self.containers)    self.image = Player.images[0]    self.rect = self.image.get_rect(midbottom=SCREEN_RECT.midbottom)    self.health= 4    #self.time = 0    #self.reloading = False   #def update(self, time_passed_seconds=0.0): if not self.reloading: super(Player,self).update(time_passed_seconds) else: self.time += time_passed_seconds if self.time > 1.5: print self.time self.time = 0.0 self.reloading = False self.groups()[0].remove(self)   def move(self, directions):    '''移動,direction == 'up' or 'down' or 'left' or 'right' '''    for direction in directions:      if direction == 'up':        self.rect.move_ip(0, -1 * Player.speed)      elif direction == 'down':        self.rect.move_ip(0, 1 * Player.speed)      elif direction == 'left':        self.rect.move_ip(-1 * Player.speed, 0)      elif direction == 'right':        self.rect.move_ip(1 * Player.speed, 0)      else:        print 'argument error'        return None    self.rect.clamp_ip(SCREEN_RECT)   def shoted_and_live(self, harm):    '''被攻擊處理,依然存活返回True,否則返回False'''    self.health -= harm    if self.health <= 0:      return False    else:      return True   def attack_pos(self):    return self.rect.x + self.rect.width / 2, self.rect.y class Shot(pygame.sprite.Sprite):  '''通用子彈類'''  speed_tab = [ 13, 13, 26, 30 ]  #子彈攻擊力表  harm_tab = [ 1, 2 , 3, 12]  images  = []  #子彈大小表  shot_size = []  def __init__(self, pos, angle, id=1 ):    '''pos為射出位置      angle參數為子彈射出的方向角度,以12點鐘方向為0度,逆時針增大'''    pygame.sprite.Sprite.__init__(self, self.containers)    self.id  = id    self.angle = angle    self.speed = Shot.speed_tab[id-1]    self.harm = Shot.harm_tab[id-1]    self.image = pygame.transform.scale(Shot.images[id-1], Shot.shot_size[id-1])    self.image = pygame.transform.rotate(self.image, angle)    self.rect = self.image.get_rect(midbottom=pos)   def update(self,time_passed_seconds=0.0):    radian = self.angle / 180.0 * math.pi    self.rect.move_ip(math.sin(radian) * -self.speed,/        -self.speed * math.cos(radian) )    if self.rect.x+self.rect.width < 0 or/        self.rect.x > SCREEN_RECT.width or/        self.rect.y+self.rect.height < 0 or/        self.rect.y > SCREEN_RECT.height:      self.kill() class AlienShot(Shot):  '''    敵方子彈類    為了對象分組專為敵人的子彈使用一個新類,并定制子彈射速  '''  def __init__(self, pos, angle, id=1, speed=20 ):    Shot.__init__(self, pos, angle, id)    self.speed = speed def SectorShot(pos, shot_id):  '''扇形子彈的封裝'''  Shot(pos, 0, shot_id)  Shot(pos, 15, shot_id)  Shot(pos, 30, shot_id)  Shot(pos, 45, shot_id)  Shot(pos, 315,shot_id)  Shot(pos, 330,shot_id)  Shot(pos, 345,shot_id)  def CommonShot(pos, shot_id):  '''常規子彈'''  Shot(pos, 0, shot_id) class Alien(pygame.sprite.Sprite):  '''通用敵人類'''  #默認速度表,速度為像素/秒  speed_tab = [ 400, 200, 200 ]  images= []  #用于射擊間隔  times = [0.15, 0.3, 0.4]    def __init__(self, id=1, health=5):    pygame.sprite.Sprite.__init__(self, self.containers)    self.id   = id    self.speed = Alien.speed_tab[id-1]    self.health = health    self.image = Alien.images[id-1]    self.rect  = self.image.get_rect()    self.rect.topleft = (randint(0, SCREEN_RECT.width-self.rect.width),0)     self.move_tab = [ self.move_line, self.move_circle, self.move_curve ]    #用于射擊的時間計算    self.time  = 0.0   def update(self, time_passed_seconds=0.0):    self.move_tab[self.id-1](time_passed_seconds)    if self.rect.x < 0 or self.rect.x > SCREEN_RECT.width or self.rect.y < 0 or self.rect.y > SCREEN_RECT.height:      self.kill()    self.time += time_passed_seconds    if self.time > Alien.times[self.id-1]:      self.time = 0.0      if self.id == 1:        AlienShot(self.attack_pos(), 180, 1, 30)      elif self.id == 2:        AlienShot(self.attack_pos(), 120, 1, 10)        AlienShot(self.attack_pos(), 150, 1, 10)        AlienShot(self.attack_pos(), 180, 1, 10)        AlienShot(self.attack_pos(), 210, 1, 10)        AlienShot(self.attack_pos(), 240, 1, 10)      elif self.id == 3:        AlienShot(self.attack_pos(), 180, 2, 10)    def shoted_and_live(self, harm):    '''被攻擊處理,依然存活返回True,否則返回False'''    self.health -= harm    if self.health <= 0:      return False    else:      return True   def move_line(self, time_passed_seconds):    self.rect.move_ip(0, self.speed * time_passed_seconds)   def move_circle(self, time_passed_seconds):    if not hasattr(self, 'angle'):      self.angle = 180    else:      self.angle = self.angle+time_passed_seconds*360    if not hasattr(self, 'radius'):      self.radius = 60    if not hasattr(self, 'center'):      x = self.rect.x+self.radius if self.rect.x < self.radius else self.rect.x-self.radius      self.center = [ x, 0+self.radius]    self.center[1] += 2    new_pos = self.__circle_next( self.center, self.radius, self.angle)     #self.rect.move_ip(new_pos[0], new_pos[1])    self.rect.x, self.rect.y = new_pos[0], new_pos[1]   def __circle_next(self, center, radius, angle):    x = math.sin(angle/180.0*math.pi) * radius + center[0]    y = math.cos(angle/180.0*math.pi) * radius + center[1]    return x, y   def move_curve(self, time_passed_seconds):    if not hasattr(self, 'ray'):      self.ray = self.rect.x    if not hasattr(self, 'angle'):      self.angle = 0    else:      self.angle = self.angle + time_passed_seconds * 360    if not hasattr(self, 'curve_width'):      self.curve_width = 50    x = math.sin(self.angle/180*math.pi) * self.curve_width + self.ray    y = self.rect.y + self.speed * time_passed_seconds    self.rect.x, self.rect.y = x, y   def attack_pos(self):    return self.rect.x + self.rect.width / 2, self.rect.y + self.rect.height  class Explosion(pygame.sprite.Sprite):  '''爆炸類'''  #用于存儲爆炸圖像每幀的坐標  areas = [/(0,0,104,135), (104,0,104,135), (208,0,104,135),(312,0,104,135),(416,0,94,135),/(0,135,102,112),(102,135,102,112),(204,135,102,112),(306,135,102,112),(408,135,102,112),/(0,247,108,144),(108,247,100,144),(208,247,102,144),(310,247,100,144),(412,247,98,144),/(0,400,95,100) ]  images = []    def __init__(self, pos, id=1, areas=None):    pygame.sprite.Sprite.__init__(self, self.containers)    self.pos = pos    self.fps = 0    self.image_data = Explosion.images[id-1]    if areas is not None:      self.areas = areas     self.update()    def update(self, time_passed_seconds=0.0):    self.rect = pygame.Rect(self.areas[self.fps])    self.image = self.image_data.subsurface(Rect(self.areas[self.fps]))    self.rect.topleft = self.pos    self.fps += 1    if self.fps >= len(self.areas):      self.kill() class Score(pygame.sprite.Sprite):   score = 0  health= 0  life = 0  def __init__(self, font_type = "文泉驛點陣正黑"):    pygame.sprite.Sprite.__init__(self)    self.font = pygame.font.SysFont(font_type, 20)    self.color= (255,255,255)    self.msg = u"得分:%d/n生命:%d"    self.update()    self.rect = self.image.get_rect()    self.rect.topleft = (10,10)   def update(self, time_passed_seconds=0.0):    self.msg = u"生命:%d  得分:%d"% (Score.life, Score.score)    self.image = self.font.render(self.msg, True, self.color)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美一二三区| 欧美黑人性生活视频| 亚洲天堂男人天堂女人天堂| 欧美成人免费视频| 亚洲精品理论电影| 亚洲高清福利视频| 欧美精品亚州精品| 成人中文字幕+乱码+中文字幕| 久久久久99精品久久久久| 久久久国产精品视频| 中文字幕亚洲一区| 国产日韩在线一区| 日韩av片免费在线观看| 国产99久久精品一区二区| 亚洲一区二区三区777| 在线视频国产日韩| 欧美日韩亚洲一区二区三区| 爽爽爽爽爽爽爽成人免费观看| 久久精品夜夜夜夜夜久久| 亚洲国产天堂久久国产91| 亚洲免费一在线| 亚洲三级av在线| 欧美日韩国产二区| 2025国产精品视频| 欧美激情视频在线免费观看 欧美视频免费一| 国产xxx69麻豆国语对白| 日韩成人av在线| 奇米一区二区三区四区久久| 日韩电影大全免费观看2023年上| 欧美日韩视频在线| 日韩在线视频观看| 国产一区二区三区视频在线观看| 2019中文字幕免费视频| 中文字幕亚洲无线码a| 欧美最近摘花xxxx摘花| 一区二区欧美日韩视频| 亚洲成年人影院在线| 中文字幕久热精品视频在线| 成人疯狂猛交xxx| 成人激情视频在线| 国产日韩欧美日韩大片| 成人中文字幕+乱码+中文字幕| 综合网中文字幕| 69久久夜色精品国产69乱青草| 久热在线中文字幕色999舞| 2024亚洲男人天堂| 8x海外华人永久免费日韩内陆视频| 91色视频在线观看| 亚洲精品短视频| 欧美激情亚洲国产| 国产精品久久久亚洲| 日韩国产高清污视频在线观看| 亚洲xxxx妇黄裸体| 亚洲欧洲中文天堂| 精品成人久久av| 亚洲一区二区久久久久久久| 日韩大片在线观看视频| 欧美肥老太性生活视频| 国产精品日韩电影| 91久久精品视频| 欧美亚洲国产成人精品| 久久久久久久久久久91| 日韩视频免费观看| 91日本在线观看| 亚洲999一在线观看www| 国产午夜精品全部视频播放| 性欧美在线看片a免费观看| 成人免费在线网址| 精品国产一区二区在线| 欧美日韩国产999| 在线国产精品视频| 91久久久久久| 国产精品美女无圣光视频| 97精品伊人久久久大香线蕉| 国产精品中文字幕在线| 亚洲激情视频在线观看| 高清欧美一区二区三区| 欧美激情一区二区久久久| 中文字幕视频在线免费欧美日韩综合在线看| 日韩在线观看免费网站| 久久久成人的性感天堂| 亚洲精品视频网上网址在线观看| 亚洲偷熟乱区亚洲香蕉av| 国产精品国产自产拍高清av水多| 亚洲影院色无极综合| 欧美日韩性生活视频| 国产精品久久久久久中文字| 国产精品a久久久久久| 国产精品白丝jk喷水视频一区| 国产精品1区2区在线观看| 亚洲精品乱码久久久久久金桔影视| 日韩在线精品视频| 91精品在线一区| 91精品久久久久久久久中文字幕| 欧美超级乱淫片喷水| 中文欧美在线视频| 国产精品美女在线| 日韩免费av一区二区| 自拍偷拍亚洲精品| 久久久精品美女| 欧美日韩高清在线观看| 蜜臀久久99精品久久久无需会员| 热久久这里只有| 亚洲精品aⅴ中文字幕乱码| 亚洲最新av在线| 精品国产31久久久久久| 91最新国产视频| 国产极品精品在线观看| 日韩av中文字幕在线播放| 日本一区二区三区在线播放| 中文字幕av一区| 日韩福利视频在线观看| 91高清视频免费观看| 欧美高清不卡在线| 久久久久久噜噜噜久久久精品| 欧美性xxxx极品高清hd直播| 久久久久久久久久av| 欧美在线亚洲一区| 午夜精品一区二区三区在线视| 亚洲三级av在线| 欧美激情中文字幕在线| 91社影院在线观看| 亚洲欧美综合另类中字| 一二美女精品欧洲| 国产精品男人的天堂| 国产精品com| 亚洲精品国产综合久久| 九九久久精品一区| 欧美成人午夜激情在线| 精品成人乱色一区二区| 亚洲天堂网站在线观看视频| 久久久www成人免费精品张筱雨| 欧美精品18videosex性欧美| 日韩一级黄色av| 亚洲一区二区久久久久久| 91亚洲精品一区二区| 51视频国产精品一区二区| 黑人巨大精品欧美一区免费视频| 精品久久久国产| 欧美性受xxx| 亚洲三级 欧美三级| 欧美视频不卡中文| 国内精品久久久久久久久| 热久久免费视频精品| 91精品国产高清| 中文字幕日韩在线观看| 日韩电影免费观看在线| 久久久免费精品| 欧美激情视频网址| 91精品视频大全| 日韩大片在线观看视频| 国语自产偷拍精品视频偷| 国产亚洲人成网站在线观看| 精品调教chinesegay| 亚洲一区二区福利| 日本欧美在线视频| 亚洲欧美国产高清va在线播| 亚洲欧美精品一区| 亚洲国产精品女人久久久| 亚洲免费中文字幕| 成人精品一区二区三区电影免费| 国产日韩欧美黄色| 97国产一区二区精品久久呦| 国产日产欧美a一级在线|