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

首頁 > 編程 > Python > 正文

pygame實現(xiàn)雷電游戲雛形開發(fā)

2020-02-15 23:44:37
字體:
供稿:網(wǎng)友

本文實例為大家分享了pygame實現(xiàn)雷電游戲開發(fā)代碼,供大家參考,具體內(nèi)容如下

源代碼:

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)):    '''創(chuàng)建一個或多個星星,顏色可選'''    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參數(shù)為子彈射出的方向角度,以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):  '''常規(guī)子彈'''  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)            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
一区二区激情| 亚洲视频在线观看日本a| 久久av资源网| 国产成人在线视频| 欧美私人情侣网站| 蜜桃视频一区二区在线观看| 狠狠做六月爱婷婷综合aⅴ| 欧美精品一区二区三区久久久竹菊| 91蝌蚪视频在线观看| 国产精品成人免费在线| 国产三区二区一区久久| 1769视频在线播放免费观看| 在线观看免费播放网址成人| 欧美视频一区在线| 久久久久久久久久久久久久久久久久久| 久久精品久久国产| 亚洲国产日韩在线人成电影| 97国产精东麻豆人妻电影| 久久99影视| 成人做爰69片免费| 久久精品国产精品亚洲红杏| 国产高清无密码一区二区三区| 午夜不卡视频| 狠狠干夜夜草| 中文字幕4区| 国产欧美韩国高清| 精品产国自在拍| 狠狠色噜噜狠狠狠狠黑人| 成人在线黄色电影| 欧美激情欧美| 亚洲va男人天堂| 色婷婷av一区二区三区丝袜美腿| 今天的高清视频免费播放成人| 亚洲福利视频在线| 视频一区二区三区在线观看| 国产福利资源| 亚洲综合久久网| 麻豆传传媒久久久爱| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 尤物九九久久国产精品的特点| 一级香蕉视频在线观看| 女人天堂在线| 黄色污污视频在线观看| 色婷婷国产精品久久包臀| 99re6热在线精品视频播放速度| 欧美成人性生活| 婷婷亚洲婷婷综合色香五月| 久久久精品国产一区二区| 亚洲第一黄色片| 国产精品一区久久久久| av日韩中文字幕| 嫩呦国产一区二区三区av| 国产精品久久久久永久免费看| 91精品国产色综合久久不卡粉嫩| 久久影视中文粉嫩av| 精品999在线播放| 亚洲字幕成人中文在线观看| 国产成人精品亚洲| 秋霞欧美在线观看| 欧美在线一级视频| 男女av一区三区二区色多| 国产成人自拍偷拍| 老**午夜毛片一区二区三区| 欧美性20hd另类| 成人丁香基地| 99在线影院| 欧美色图亚洲天堂| 久久99精品久久久久久动态图| 欧美一级专区免费大片| 日本一本a高清免费不卡| 日韩欧美激情在线| 国产视频观看一区| 日韩视频一区在线观看| 波多野结衣之无限发射| 日本三级午夜理伦三级三| 成人嫩草影院| 国产精品白丝jk白祙| 国产ts在线观看| 国产精品区免费视频| 国产无遮挡一区二区三区毛片日本| 看全色黄大色黄女片18| 国产精品午夜一区二区| 久久九九有精品国产23| 日韩一区二区电影在线| 老汉av免费一区二区三区| 国产精品一品视频| 成人性生交大片免费看视频r| 欧美大片日本大片免费观看| 国产精品福利在线观看播放| 蜜桃传媒视频第一区入口在线看| 香蕉久久a毛片| 51精品久久久久久久蜜臀| 夜夜骑日日射| 久久精品一本| 欧美黑人xx片| 久久网福利资源网站| 国产日韩欧美在线一区| 91精品99| 蜜桃av久久久亚洲精品| 亚洲精品二区| 国产精品1234| 西西裸体人体做爰大胆久久久| 精品中文视频| 在线精品播放av| 久久激情五月激情| 真实原创一区二区影院| 精品国产99久久久久久宅男i| 日韩视频免费看| 欧美日韩国产美女| 99re在线视频精品| 星空无限传媒在线| 国产精品三上| 午夜精品久久久久久久星辰影院| 污污网站免费看| 青青草原av| 久久亚区不卡日本| 破处女黄色一级片| 久久先锋影音| 成年网站免费视频黄| 国产午夜激情视频| 欧美韩日国产| 91亚洲精华国产精华精华液| 在线观看免费观看在线91| 亚洲欧美日韩精品一区| 五月天亚洲婷婷| 中文字幕日韩三级| 激情综合在线| 在线观看中文字幕av| 国产精品久久久久久久久久精爆| 毛片免费在线| 国产超级va在线视频| 日产中文字幕在线精品一区| 人人狠狠综合久久亚洲婷婷| 亚洲大片av| 久久精品视频亚洲| 免费看的www视频网站视频| 四虎影视av| gogogo高清在线观看一区二区| 中文字幕在线观看免费| 亚洲精品一区二区三区蜜桃| 成人影院入口| 久久新电视剧免费观看| 97精品国产福利一区二区三区| 色悠悠国产精品| 国模娜娜一区二区三区| 视频在线观看入口黄最新永久免费国产| 国产精品777777| av免费观看久久| 中文字幕久久综合| 国产综合av一区二区三区| 免费在线小视频| 欧美野外猛男的大粗鳮| 欧美一区二区免费在线观看| 国产激情视频一区二区| 欧美日韩一级大片网址| 国产在线一区二区三区播放| 亚洲va天堂va欧美ⅴa在线| aa在线免费观看| 亚洲精品在线免费看| www国产精品av| 米奇777在线欧美播放| 亚洲日韩欧美视频| 国产浪潮av性色av小说| 五月婷婷欧美视频| 色综合久久久久久久久久久| 久久久久久99久久久精品网站| 中文字幕超清在线免费观看| 日本视频一区二区在线观看| 久久精品伊人| 国产精品久久久久久久久久小说| 欧产日产国产69| 蜜桃臀av在线| 欧美精品二区| 欧美日韩一区二区三区在线| 日本人妻熟妇久久久久久| 国产成人无码精品久在线观看| 成人免费看片视频在线观看| 成人三级视频在线观看一区二区| 99精品国产一区二区青青牛奶| 日韩欧美精品在线| 日韩中文字幕免费在线观看| 亚洲第一av色| 欧美国产日韩a欧美在线观看| 国产91精品不卡视频| 欧美视频在线一区二区三区| 国产aⅴ精品一区二区四区| 一本一道久久综合狠狠老精东影业| 大伊香蕉精品视频在线| 99精品国产99久久久久久97| 亚洲国产经典视频| av在线日韩| 日本视频在线免费观看| xfplay资源站色先锋在线观看| 中文字幕高清在线播放| 在线观看国产一区二区三区| 夜夜嗨av一区二区三区网站四季av| 极品美女销魂一区二区三区| 老司机精品视频一区二区三区| 欧美激情一二三区| 99久久夜色精品国产亚洲1000部| av中文字幕观看| 中文字幕在线欧美| 欧美成人精品激情在线观看| 成人动漫中文字幕| 日韩综合在线| 91系列在线播放| 午夜视频在线观看一区| 一道精品一区二区三区| 免费观看一区二区三区毛片| 好男人免费精品视频| 欧美色图自拍| 久久99国产成人小视频| 欧美凹凸一区二区三区视频| 国产一二区在线观看| 久久这里只有精品免费| 亚洲福利电影| 久久久久久亚洲精品美女| 欧美国产日韩一区二区在线观看| 久久先锋影音av| 久久99在线观看| 国产精品亚洲一区二区三区妖精| 欧美日在线观看| 国产欧美视频在线观看| 91沈先生播放一区二区| 久久精品午夜福利| 日韩美女一区二区三区| 老汉色影院首页| 国产无套丰满白嫩对白| 日本一二三区视频| 欧美极品一区| 免费看一级一片| 国产精品青草久久久久福利99| 亚洲作爱视频| 国产日韩欧美不卡在线| av网址在线观看免费| 一卡二卡三卡日韩欧美| 日韩成人午夜| 日本三级在线观看网站| 91九色国产社区在线观看| 一区二区三区久久| 人人插人人射| 国精产品一区一区三区有限在线| 一区二区三区|亚洲午夜| 91成人精品视频| 国产精品资源网站| 成人精品国产| 操欧美老女人| 国产精品久久777777毛茸茸| 亚洲精品第1页| 少妇久久久久久被弄到高潮| 95视频在线观看| 欧美aaaxxxx做受视频| 国产高清av在线播放| 欧美日韩精品免费观看视一区二区| 91免费视频网站在线观看| 蜜臀av一区二区| 国产精选久久久| 欧美顶级xxxxbbbb| 人人澡人人爽人人揉| 9999热视频| 这里有精品可以观看| 欧美性受xxxx黒人xyx性爽| 在线观看精品国产| 亚洲aaa在线观看| 免看一级a毛片一片成人不卡| 色欲欲www成人网站| 在线观看免费高清完整| 日本一区二区三区播放| 亚洲天堂伊人网| 久久99导航| 亚洲精品一区二区妖精| 国产在线播放一区二区| 成人免费视频网站在线看| 国产精品区在线观看| bdsm精品捆绑chinese女| a级黄色片网站| 欧美午夜国产| 成人h动漫精品| 国产精品三区在线观看| 欧美精品乱人伦久久久久久| 亚洲视频在线二区| 成人黄色免费片| 鲁一鲁一鲁一鲁一澡| 亚洲日本在线看| 日本三级免费看| 韩日视频一区| 日韩精品一区二区三区色偷偷| 搜成人激情视频| 日干夜干天天干| 欧美少妇性xxxx| 激情综合色丁香一区二区| 国产一区二区精品调教| 国产成人精品无码免费看夜聊软件| 福利视频第一区| 青青精品视频播放| 亚洲精品国产setv| 激情五月亚洲色图| 超级碰在线观看| 中文字幕一区二区三区免费看| 男女男精品视频站| 国产精品二线| 91精品产国品一二三产区| 国产视频精品一区二区三区| 116极品美女视频在线观看| 九色视频九色自拍| 久久精品视频在线观看免费| 精品欧美日韩| 免费看污污网站| 一区二区三区欧美日| 日本免费一区二区三区视频观看| 欧美丰满艳妇bbwbbw| 成人涩涩视频| 国产精品www网站| 欧美韩日一区二区三区| av电影成人| 天天看片天天操| 国产精品久久久网站| 91精品午夜视频| 波多野吉衣中文字幕| 日韩av在线免费观看| 九九视频在线观看| 精品小视频在线| 55夜色66夜色国产精品视频| 精品999在线观看| 欧美电影三区| 成人精品高清在线| 青青草av网站| 咪咪色在线视频|