|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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有你更精彩^_^ |
查看全部评分
|