| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 塔利班 于 2018-9-6 14:24 编辑  
 
这个游戏实在是太好编了, 
让我想起小时候的FC, 
没有对速度进行越来越快的 
设置,不然感觉是TAS的范畴, 
小方块用了精灵,其实也可以画矩形, 
但是精灵好检测碰撞 
附件大小有限制,发不了整个文件了 
 
#element.py 
- import pygame
 
 - from random import *
 
  
- #定义挡板类
 
 - class Me(pygame.sprite.Sprite):
 
 -     def __init__(self,bg_size):
 
 -         pygame.sprite.Sprite.__init__(self)
 
  
-         self.image=pygame.image.load('images/me.png').convert_alpha()
 
 -         self.rect=self.image.get_rect()
 
  
-         self.width,self.height=bg_size
 
 -         self.speed=0
 
 -         self.mask=pygame.mask.from_surface(self.image)
 
 -         self.life=3
 
 -         self.score=0
 
 -         self.lmove=False
 
 -         self.rmove=False
 
 -         self.alive=True
 
 -         self.catch=True
 
  
-     def reset(self):
 
 -         self.speed=[0,0]
 
 -         self.lmove=self.rmove=False
 
 -         self.alive=True
 
 -         self.rect.left,self.rect.top=130,400
 
 -         self.catch=True
 
  
- #定义球类        
 
 - class Ball(pygame.sprite.Sprite):
 
 -     def __init__(self,bg_size):
 
 -         pygame.sprite.Sprite.__init__(self)
 
 -         
 
 -         self.image=pygame.image.load('images/ball.png').convert_alpha()
 
 -         self.rect=self.image.get_rect()
 
  
-         self.width,self.height=bg_size
 
 -         self.speed=[0,0]
 
 -         self.mask=pygame.mask.from_surface(self.image)
 
  
-     def reset(self):
 
 -         self.speed=[0,0]
 
 -         self.rect.left,self.rect.bottom=155,400
 
  
- #定义砖块类
 
 - class Brick(pygame.sprite.Sprite):
 
 -     def __init__(self,bg_size):
 
 -         pygame.sprite.Sprite.__init__(self)
 
 -         self.i=randint(1,6)
 
 -         self.image=pygame.image.load('images/'+str(self.i)+'.png').convert_alpha()
 
 -         self.rect=self.image.get_rect()
 
 -         self.width,self.height=bg_size
 
 -         self.mask=pygame.mask.from_surface(self.image)
 
  
-     def set(self,i,j):
 
 -         self.rect.left,self.rect.top=i*40,j*10+40
 
 
  复制代码 
 
#main.py 
- import pygame
 
 - import sys
 
 - from pygame.locals import *
 
 - from random import *
 
 - import traceback
 
 - from element import *
 
  
- pygame.init()
 
 - pygame.mixer.init()
 
  
- bg_size=width,height=320,440
 
 - screen=pygame.display.set_mode(bg_size)
 
 - pygame.display.set_caption('弹球')
 
  
- bgm=pygame.mixer.Sound('sound/aa.wav')
 
 - bgm.set_volume(0.2)
 
 - bgm.play(-1)
 
  
- b_sound=pygame.mixer.Sound('sound/bomb.wav')
 
 - b_sound.set_volume(0.2)
 
  
- w_sound=pygame.mixer.Sound('sound/winner.wav')
 
 - w_sound.set_volume(0.2)
 
  
 
- WHITE=(255,255,0)
 
  
- #生成挡板
 
 - me=Me(bg_size)
 
 - me.reset()
 
  
- #生成球
 
 - ball=Ball(bg_size)
 
 - ball.reset()
 
  
- #生成砖块
 
 - bricks=[]
 
 - for i in range(8):
 
 -     for j in range(10):
 
 -         brick=Brick(bg_size)
 
 -         brick.set(i,j)
 
 -         bricks.append(brick)
 
 - clock=pygame.time.Clock()
 
  
 
- #定义球撞挡板组
 
 - b_g=pygame.sprite.Group()
 
 - b_g.add(ball)
 
  
- #定义字体
 
 - zt=pygame.font.Font('font/font.ttf',24)
 
  
- running=True
 
  
- end=False
 
  
- def main():
 
 -     end=False
 
 -     while running:
 
 -         for event in pygame.event.get():
 
 -             if event.type==QUIT:
 
 -                 pygame.quit()
 
 -                 sys.exit()
 
 -             if event.type==KEYDOWN:
 
 -                 if event.key==K_a:
 
 -                     me.lmove=True
 
 -                 if event.key==K_d:
 
 -                     me.rmove=True
 
 -                 if event.key==K_j and me.catch:
 
 -                     ball.speed=[3,-3]
 
 -                     me.catch=False
 
 -             if event.type==KEYUP:
 
 -                 if event.key==K_a:
 
 -                     me.lmove=False
 
 -                 if event.key==K_d:
 
 -                     me.rmove=False
 
  
-         if me.rmove==False and me.lmove==False:
 
 -             me.speed=[0,0]
 
 -         elif me.lmove==True:
 
 -             me.speed=[-5,0]
 
 -         elif me.rmove==True:
 
 -             me.speed=[5,0]
 
  
-         me.rect=me.rect.move(me.speed)
 
 -         if me.rect.left<=0:
 
 -             me.rect.left=0
 
 -         if me.rect.right>=me.width:
 
 -             me.rect.right=me.width
 
  
-         ball.rect=ball.rect.move(ball.speed)
 
 -         if ball.rect.left<=0:
 
 -             ball.speed[0]=abs(ball.speed[0])
 
 -         if ball.rect.right>=ball.width:
 
 -             ball.speed[0]=-abs(ball.speed[0])
 
 -         if ball.rect.top<=0:
 
 -             ball.speed[1]=-ball.speed[1]
 
 -         if ball.rect.top>440:
 
 -             me.life -=1
 
 -             me.reset()
 
 -             ball.reset()
 
 -         #检测球撞板
 
 -         b_m_crash=pygame.sprite.spritecollide(me,b_g,False,pygame.sprite.collide_mask)
 
 -         if b_m_crash:
 
 -             ball.speed[1]=-abs(ball.speed[1])
 
 -             distance=(me.rect.right-ball.rect.left)//10
 
 -             if distance==0:
 
 -                 ball.speed[0]=6
 
 -             if distance==1:
 
 -                 ball.speed[0]=4
 
 -             if distance==2:
 
 -                 ball.speed[0]=2
 
 -             if distance==3:
 
 -                 ball.speed[0]=-2
 
 -             if distance==2:
 
 -                 ball.speed[0]=-4
 
 -             if distance==3:
 
 -                 ball.speed[0]=-6
 
  
-         #检测球撞砖
 
 -         for each in bricks:
 
 -             b_b_crash=pygame.sprite.spritecollide(each,b_g,\
 
 -                             False,pygame.sprite.collide_mask)
 
 -             if b_b_crash:
 
 -                 bricks.remove(each)
 
 -                 b_sound.play()
 
 -                 me.score+=1000
 
 -                 if ball.rect.left<=each.rect.left or \
 
 -                    ball.rect.right>=each.rect.right:
 
 -                     ball.speed[0]=-ball.speed[0]
 
 -                 if ball.rect.top<=each.rect.top or\
 
 -                    ball.rect.bottom>=each.rect.bottom:
 
 -                    ball.speed[1]=-ball.speed[1]
 
 -         screen.fill((127,127,127))
 
 -         for b in bricks:
 
 -             screen.blit(b.image,b.rect)
 
 -         if not bricks and not end:
 
 -             end=True
 
 -             me.reset()
 
 -             ball.reset()
 
 -             bgm.stop()
 
 -             w_sound.play()
 
 -         screen.blit(me.image,me.rect)
 
  
-         screen.blit(ball.image,ball.rect)
 
 -         score_text=zt.render('Score : %s     Life : %s'%(me.score,me.life),True,WHITE)
 
 -         screen.blit(score_text,(10,410))
 
 -         pygame.display.flip()
 
 -         clock.tick(60)
 
  
 
- if __name__=='__main__':
 
 -     try:
 
 -         main()
 
 -     except SystemExit:
 
 -         pass
 
 -     except:
 
 -         traceback.print_exc()
 
 -         pygame.quit()
 
 -         input()
 
 
  复制代码 
打到弹板反弹x速度由碰撞位置决定 
没有设置gameover, 
可以拿去改进,因为觉得不难 
 |   
 
评分
- 
|  参与人数 1 | 荣誉 +3 | 
鱼币 +3 | 
贡献 +3 | 
收起
理由
 | 
 
  破灬王
 |  + 3 | 
 + 3 | 
 + 3 | 
鱼C有你更精彩^_^ | 
 
 
查看全部评分
 
 
 
 
 
 |