pygame/pgzrun小游戏

1. 弹跳的小球

pygame
#!/usr/bin/env Python
# coding=utf-8
#解决gbk编码问题
import pygame
import os


WINDOW_W, WINDOW_H = 640, 800          # 窗户大小
FPS = 50                               # 帧数,每秒多少次
g = 9.8*100                            # 现实中单位:平方米/二次方秒,游戏中像素/二次方秒

pygame.init()                        # 初始化
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (200, 100)
screen = pygame.display.set_mode((WINDOW_W, WINDOW_H), pygame.DOUBLEBUF, 32)    # 创建一个窗口
pygame.display.set_caption('米粒儿')
clock = pygame.time.Clock()


x, y = WINDOW_W/2, 10                # 小球的坐标
vx, vy = 0, 0                        # 小球在x,y上的速度
while True:                          # 游戏主循环
    for event in pygame.event.get():                    # 遍历事件
        if event.type == pygame.QUIT:
            exit()

    # 下一时刻的速度、位置计算
    vy += + g * 1/FPS              # v = v0 + at  只有y坐标的速度发生改变
    x += vx * 1/FPS
    y += vy * 1/FPS

    if y >= WINDOW_H - 10:           # 小球刚好触碰到地面的瞬间
        vy = -vy                     # 到达地面时速度反方向
    screen.fill((0, 0, 0))           # 该句非常重要,每一帧都需要屏幕填充,黑色屏幕更新用于遮盖上一次小球的画面
    # 画球
    pygame.draw.circle(screen, (255, 125, 0), (int(x), int(y)), 10)        # 绘制圆心和半径,半径是10

    # 刷新界面,每一帧变化
    pygame.display.update()
    # 设置FPS
    time_passed = clock.tick(FPS)



在这里插入图片描述

pgzrun
import pgzrun, random

WIDTH = 800
HEIGHT = 600
x = random.uniform(100, WIDTH)      # 小球最开始出现的x,y
y = random.uniform(100, HEIGHT)		# 注意,x和y随机数的起始值不建议设置为0,会出现小球震荡的效果,至少大于等于小球半径
speed_y = 3
speed_x = 3
r = 30


def draw():                         # 绘制模块,每帧重复执行
    screen.fill('white')            # 屏幕填充
    screen.draw.filled_circle((x, y), r, 'red')     # 画小球,参数:坐标,半径,颜色


def update():                       # 更新模块,每帧重复操作
    global x, y, speed_x, speed_y
    y += speed_y
    x += speed_x
    if y > HEIGHT - r or y < r:                     # 当小球碰壁时,分别讨论x和y坐标
        speed_y = -speed_y                          # 速度反方向即可,如果只设置其中一个坐标,那么小球只会沿着直线反弹
    if x > WIDTH - r or x < r:
        speed_x = -speed_x

pgzrun.go()

在这里插入图片描述

2.测色弱

pgzrun模块

import pgzrun, random
WIDTH = 1200
HEIGHT = 800
# 修改半径可以修改圆的个数
R = random.randint(20, 60)

def draw():
    # 至于是哪个圆颜色不同,通过随机的方式产生
    x_i = random.randint(1, WIDTH // 2 // R)
    y_i = random.randint(1, HEIGHT // 2 // R)
    print(x_i, y_i)
    for j in range(R, HEIGHT, 2*R):
        for i in range(R, WIDTH, 2*R):
            if j == (2*y_i - 1)*R and i == (2*x_i - 1)*R:
                screen.draw.filled_circle((i, j), R, (0, 255, 255))
            else:
                screen.draw.filled_circle((i, j), R, (0, 255, 220))
                
# 按下鼠标,调用函数                
def on_mouse_down():
    draw()
pgzrun.go()

在这里插入图片描述
pygame模块

import pygame
from pygame.locals import *
import random

WIDTH = 800
HEIGHT = 800
pygame.init()  # 初始化
screen = pygame.display.set_mode((WIDTH, HEIGHT))  # 主界面
R_list = [20,40,50,80<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值