Python+pygame制作小游戏--俄罗斯方块(双打)

前面讲解了Python+pygame制作小游戏--俄罗斯方块的完整过程和源码。

Python+pygame制作小游戏--俄罗斯方块

Python+pygame制作小游戏--俄罗斯方块 源码
python+pygame制作小游戏--俄罗斯方块(双打)源码

那如果要实现在一台电脑上双打怎么实现呢?其实很容易。只要注意以下几方面即可:

1、右边的得分信息及下一个方块不能显示在右边了。(也不是不能,有兴趣的同学可以自行修改)得分信息就显示在游戏区域下面;下一个方块显示在游戏区域最上面,为了和下落的方块区别,统一将下一个方块颜色设置为灰色。

2、既然是双打,所以控制的键盘不一样,左边的玩家用asdw控制,右边的不变

代码需要修改的地方在:

...
win_width = cols * 2 * cell_size + 6 * cell_size   #修改
win_hight = (rows + 1) * cell_size                 #修改
...

 颜色最后加了一个灰色,显示下一个方块

app_colors = [(138,200,198),(200,50,50),(50,200,200),(50,50,200),(200,200,50),(200,50,200),(50,200,50),(125,50,125),(180,180,180)]

class Tetris中修改的内容:

class Tetris():
    ...
    def display_next_blocks(self):
        #显示下一个方块
        for (x,y) in  blocks[self.next_key][0]:
            self.rect.topleft = x * cell_size , (y - 1) * cell_size
            self.draw_block(8, 1)     #颜色固定为灰色,以示区分

     def display_score(self):
        #显示得分,在游戏区域下面显示
        text = "得分:%d  行数:%d  等级:%d" %(self.score,self.lines,self.level)
        self.img = pygame.font.SysFont("kaiti",25).render(text, True, (0,0,255))
        self.img_rect = self.img.get_rect()
        self.img_rect.topleft = (self.x0, rows* cell_size)
        screen.blit(self.img, self.img_rect)
     ...

主程序修改后的源码:

time = pygame.time.Clock()    
player1 = Tetris(0, 0)
player2 = Tetris((cols + 6) * cell_size, 0)   #初始化游戏和两个玩家
 
while True:
    time.tick(fps)
    screen.fill((166,138,88))
    player1.display()
    player2.display()
    pygame.display.update()
        
    #移动旋转控制            
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_d:          #player1 :d键右移动一格
                player1.move(1,0)
            elif event.key == pygame.K_a:        #player1 :a键左移动一格
                player1.move(-1,0)
            elif event.key == pygame.K_w:        #player1 :w键旋转一次
                player1.rotate()
            elif event.key == pygame.K_s:        #player1 :s键加速下移
                player1.fall_speed_up = True

            if event.key == pygame.K_RIGHT:        #player2 :→键右移动一格
                player2.move(1,0)
            elif event.key == pygame.K_LEFT:       #player2 :←键左移动一格
                player2.move(-1,0)
            elif event.key == pygame.K_UP:         #player2 :↑键旋转一次
                player2.rotate()
            elif event.key == pygame.K_DOWN:       #player2 :↓键加速下移
                player2.fall_speed_up = True           
            elif event.key == pygame.K_q:
                sys.exit()
                
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_s:           #player1 :s键加速下移
                player1.fall_speed_up = False
            if event.key == pygame.K_DOWN:          #player2 :↓键加速下移
                player2.fall_speed_up = False    
        elif event.type == pygame.QUIT:
            sys.exit()

这样就可以了,代码修改量很小。

运行的效果就是这样的:

20240618_191847

至于双人对打比赛,例如消除行后,给对方加一行没有满载的行,超级砖块,炸弹等玩法,同学们自己完成,大致都差不多。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值