【功能】
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笔记之游戏球(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)
网友评论