Python笔记-Pygame小球游戏

2020-03-04  本文已影响0人  我开心0536

【功能】
Pygame制作的小球游戏(python 3.7版本下调试成功)
【操作方式】
1、小球在窗口内自由运动
2、玩家1和2分别用WS 和 上下箭头控制两边小板的上下移动
3、当小板接住球时,+1分
4、按空格可暂停
【本篇心得】
1、学习了对象坐标(.x .y .top .bottom .left .right)
2、学习了碰撞检测 .colliderect()
3、学习了通过变量控制对象移动的编程思路
4、键盘按下去、抬起来的判断
5、暂停模板的原理

pygame小球游戏.jpg

【以下为代码,右上角有复制按钮,可一键复制】

#我的Pygame笔记之游戏球(W、S、上、下键控制移动)   WoKaiXin Ver20200304.01
import pygame
from pygame.locals import *
import sys
import time

# 游戏的初始化
pygame.init()

fpsClock = pygame.time.Clock()  #控制屏幕刷新频率,或者说游戏运行速度
FPS = 30   # 窗口刷新频率,也就是游戏运行速度,代表每秒刷新多少次, 数字越大,运行越快

windows_w = 1024  #设定窗口宽度,像素数,默认1024
windows_h = 600    #设定窗口高度,像素数,默认600
win = pygame.display.set_mode((windows_w,windows_h),0,32)   #创建游戏设置窗口大小
pygame.display.set_caption('我的Pygame笔记  Ver20200304.01')  #窗口标题

myfont20 = pygame.font.SysFont("simhei", 20)  #显示中文的设置和字体及大小  'fangsong', 'simhei', 'kaiti','simsunnsimsun' 仿宋、黑体、楷体、宋体

# 定义几个字体颜色
black = (0,0,0)  #黑色
black100 = (100,100,100)  #灰色
white = (255,255,255) #白色
red = (255,0,0)  #大红色
green = (0,255,0)  #绿色
blue = (0,0,255) #蓝色
yellow = (255,255,0) #黄色
red2 = (255,0,255) #粉红色

#设定球的位置和大小、左边方框的位置和大小
ball = pygame.Rect(windows_w/2-20,windows_h/2-15,40,40)
play_1 = pygame.Rect(0,windows_h/2-100,20,200)
play_2 = pygame.Rect(windows_w-20,windows_h/2-100,20,200)

player_speed = 50                 # 玩家控制上下移动的速度
ball_speed_x = ball_speed_y =10   # 球上下移动的的速度
p1_w = p1_s = p2_w = p2_s = 0     # 玩家上下移动的变量
fenshu_1 = fenshu_2 = 0           # 玩家1和2的初始分数


#暂停功能。按空格键暂停或继续
def pause():
    is_pause=True
    while is_pause:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type==pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    is_pause = False
        text_image_pause = myfont20.render("暂停中,按空格键继续( Press SPACE to countinue )",  True,  white )
        win.blit(text_image_pause, (windows_w/2-200,windows_h/2-10) )   #文字显示位置
        pygame.display.update()
        fpsClock.tick(5)

# ================================================
# Pygame主程序开始
# ================================================
while True:
    # 检测是否要关闭窗口
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        # 如果检测到 w、s、上、下  按下去,就改变运动的值
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:  # Esc键 退出游戏
                pygame.quit()
                exit()
            if event.key == pygame.K_SPACE:   # 空格键 暂停
                pause()
            if event.key == pygame.K_w:       # w键,控制1号玩家向上移动
                p1_w = -player_speed
            if event.key == pygame.K_s:       # s键,控制1号玩家向下移动
                p1_s = player_speed
            if event.key == pygame.K_UP:      # 上键头,控制2号玩家向上移动
                p2_w = -player_speed
            if event.key == pygame.K_DOWN:    # 下键头,控制2号玩家向下移动
                p2_s = player_speed

        # 如果检测到 w、s、上、下 按键抬起来,就将运动的值变为0
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_w:
                p1_w = 0
            if event.key == pygame.K_s:
                p1_s = 0
            if event.key == pygame.K_UP:
                p2_w = 0
            if event.key==pygame.K_DOWN:
                p2_s = 0

    # 对玩家的处理:防止上下移动出边界的处理
    if play_1.top > 0:
        play_1.y = play_1.y + p1_w
    if play_1.bottom < windows_h:
        play_1.y = play_1.y + p1_s
    if play_2.top > 0:
        play_2.y = play_2.y + p2_w
    if play_2.bottom < windows_h:
        play_2.y = play_2.y + p2_s

    # 对球的运动处理
    ball.x = ball.x  + ball_speed_x
    ball.y = ball.y  + ball_speed_y

    # 对球遇到边界后反弹的处理
    if ball.bottom >= windows_h or ball.top <= 0:
        ball_speed_y = -ball_speed_y
    if ball.right >= windows_w or ball.left <= 0:
        ball_speed_x = -ball_speed_x

    # 碰撞检测,球碰到玩家控制的板,就加1分,  如果是遇到边框,,则不加分
    if ball.colliderect(play_1) :
        ball_speed_x = -ball_speed_x
        fenshu_1 = fenshu_1 + 1
    if ball.colliderect(play_2) :
        ball_speed_x = -ball_speed_x
        fenshu_2 = fenshu_2 + 1

    # 窗口背景(用指定颜色填充 或 用图片背景)
    win.fill(black)  #用颜色填充当背景

    # 显示球及左右玩家
    pygame.draw.ellipse(win,white,ball)
    pygame.draw.rect(win,red,play_1)
    pygame.draw.rect(win,red,play_2)

    # 显示得分
    text_image_1 = myfont20.render( "玩家1(WS键)得分:"+str(fenshu_1),  True,  white )  # render函数第一个参数是文本,第二个参数是抗锯齿字体,第三个参数是一个颜色值(RGB值)
    win.blit(text_image_1, (50,20) )   #文字显示位置

    text_image_2 = myfont20.render( "玩家2(上下键)得分:"+str(fenshu_2),  True,  white )  # render函数第一个参数是文本,第二个参数是抗锯齿字体,第三个参数是一个颜色值(RGB值)
    win.blit(text_image_2, (windows_w-300,20) )   #文字显示位置

    # 开始更新屏幕画面
    pygame.display.update()
    # 控制游戏速度, 一般放在结尾pygame.display.update()后
    fpsClock.tick(FPS)
上一篇下一篇

猜你喜欢

热点阅读