Pygame游戏实战一:接球游戏

本游戏要使用的是由Pycharm中的pygame模块来实现的,也可以在python中运行。

目录

  • 介绍模块
  • 最小开发框架
    • Pygame和sys模块
    • random模块
  • 相关功能
    • 窗口尺寸改变
    • 键盘控制挡板
    • 鼠标控制
    • 挡板接住小球并得分
    • 小球未接住小球
    • 小球移动
    • 显示分数
  • 源码获取

介绍模块

最小开发框架

Pygame游戏模块介绍二:最小开发框架代码

Pygame和sys模块

import pygame #制作游戏时要使用的模块
import sys #python的标准库,对内部各功能模块进行初始化创建,系统模块

random模块

需要在屏幕上随机生成小球

from random import randint

详情请看此文章:Pygame游戏模块介绍一:random模块简介

相关功能

窗口尺寸改变

可以调节游戏屏幕的大小

# 改变窗口尺寸
        elif event.type == pygame.VIDEORESIZE:
            size = w,h = event.w,event.h
            screen = pygame.display.set_mode(size,pygame.RESIZABLE)

pygame.VIDEORESIZE 这是窗口大小改变事件,事件发生后,返回event.size元组,包含新窗口的宽度和高度。
.size[0] 高度,也可以用event.w表示
.size[1] 宽度,也可以用event.h表示
返回参数仅在事件发生时有用

键盘控制挡板

# 键盘控制挡板
        elif event.type == pygame.KEYDOWN: #键盘按下事件检测
            if event.key == pygame.K_LEFT:  # 判断挡板是否左移
                if board_rect.left > 0 and board_rect.left <= w - 186:
                    board_rect.left -= board_x
                elif board_rect.left <= 0:  # 判断挡板左边的坐标是否小于0
                    board_rect.left = 0
                    board_rect.top -= board_y
            elif event.key == pygame.K_RIGHT:  # 判断挡板是否右移
                if board_rect.right >= 186 and board_rect.right < w:
                    board_rect.right += board_x
                elif board_rect.right >= w:  # 判断挡板右边的坐标是否大于屏幕的宽度                        board_rect.right = w
                    board_rect.bottom += board_y

鼠标控制

#鼠标控制挡板
        elif event.type == pygame.MOUSEMOTION:
            # 鼠标左键按下并跟随鼠标移动
            if event.buttons[0] == 1:
                if event.pos[0] >= 0 and event.pos[0] < w - 186:#判断鼠标的位置
                    board_rect.left = event.pos[0] #将鼠标的x坐标给Rect对象的左边
                elif event.pos[0] >= w - 186 and event.pos[0] <= w:
                    board_rect.left = w - 186
                # board_rect.top = h - 17 #档板位置在底部
        elif event.type == pygame.MOUSEBUTTONDOWN:  #鼠标按键按下
            # 将鼠标当前位置给挡板
            if event.button == 1:
                if event.pos[0] >= 0 and event.pos[0] < w - 186:#判断鼠标的位置
                    board_rect.left = event.pos[0] #将鼠标的x坐标给Rect对象的左边
                if event.pos[0] >= w - 186 and event.pos[0] <= w:
                    board_rect.left = w - 186
                # board_rect.top = h - 17

挡板接住小球并得分

# 下方挡板接到小球
    if ball_y >= h - 37 and (ball_x >= board_rect.left - 20 and ball_x <= board_rect.left + 206):
        move_y = - move_y  # y方向速度反向
        score += points  #得分
        count += 1   #次数增加1次
        if count == 5:  # 每满五次,难度和单次接球得分增加
            count = 0  # 接球得分的次数清零
            points += points
            # x方向速度增加
            if move_x > 0:
                move_x += 1
            else:
                move_x -= 1
            move_y -= 1

小球未接住小球

# 下方挡板未接到小球
    if ball_y > h - 27 and (ball_x < board_rect.left - 20 or ball_x > board_rect.left + 206):
        # 游戏结束
        ball_y = 200  #小球所在的位置
        break

小球移动

# 移动小球
    ball_x += move_x
    ball_y += move_y
    if ball_x <= 20 or ball_x >= w - 20:  # 碰到左右两侧墙壁
        move_x = - move_x  # x方向速度反向
    if ball_y <= 20:  # 碰到上方墙壁
        move_y = - move_y  # y方向速度反向

显示分数

my_score = font.render(str(score), False, (255, 255, 0))  # 创建文字对象(文字,是否平滑,文字颜色)
    screen.blit(my_score, (w - 100, 30))  # 将文字添加到窗口上

源码获取

点击下面链接即可获取源码

我正在「AI高效率【工作、学习】」和朋友们讨论有趣的话题,你⼀起来吧?
https://t.zsxq.com/11KVfN0RC
公众号 @AI宅玩貳号玩家 作者,一个靠AI助力学习与工作的痴迷实践者。全网粉丝2万+,连续不间断更新小白也能玩的AI,让你提前2小时下班。
星球上面有什么:
电子竞赛专栏、深度学习专栏、AI辅助学习专栏、AI工具变现专栏等
适合人群
在校学生:希望我的经验可以帮助你解决你遇到问题,
开发人员:分享自己的经验,并且可以扩宽自己的道路,学习到更多的内容
希望用副业赚钱:我们有用AI变现的方式,可以帮助你实现用副业赚钱

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

你可能感兴趣的:(Pygame游戏制作,python,pygame)