用Pygame写一个简答的交互界面

程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂。

# The Pie Game
# Python 3.2

import math
import sys

import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((600,500))
pygame.display.set_caption("The Pie Game - Press 1,2,3,4")
myfont = pygame.font.Font(None, 60)

color = 200, 80, 60
width = 4
x = 300
y = 250
radius = 200
position = x-radius, y-radius, radius*2, radius*2

piece1 = False
piece2 = False
piece3 = False
piece4 = False

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        elif event.type == KEYUP:
            if event.key == pygame.K_ESCAPE:
                sys.exit()
            elif event.key == pygame.K_1:
                piece1 = True
            elif event.key == pygame.K_2:
                piece2 = True
            elif event.key == pygame.K_3:
                piece3 = True
            elif event.key == pygame.K_4:
                piece4 = True
                
    #clear the screen
    screen.fill((0,0,200))
    
    #draw the four numbers
    textImg1 = myfont.render("1", True, color)
    screen.blit(textImg1, (x+radius/2-20, y-radius/2))
    textImg2 = myfont.render("2", True, color)
    screen.blit(textImg2, (x-radius/2, y-radius/2))
    textImg3 = myfont.render("3", True, color)
    screen.blit(textImg3, (x-radius/2, y+radius/2-20))
    textImg4 = myfont.render("4", True, color)
    screen.blit(textImg4, (x+radius/2-20, y+radius/2-20))


    #should the pieces be drawn?
    if piece1:
        start_angle = math.radians(0)
        end_angle = math.radians(90)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
        pygame.draw.line(screen, color, (x,y), (x+radius,y), width)
    if piece2:
        start_angle = math.radians(90)
        end_angle = math.radians(180)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
        pygame.draw.line(screen, color, (x,y), (x-radius,y), width)
    if piece3:
        start_angle = math.radians(180)
        end_angle = math.radians(270)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x-radius,y), width)
        pygame.draw.line(screen, color, (x,y), (x,y+radius), width)
    if piece4:
        start_angle = math.radians(270)
        end_angle = math.radians(360)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x,y+radius), width)
        pygame.draw.line(screen, color, (x,y), (x+radius,y), width)
        
    #is the pie finished?
    if piece1 and piece2 and piece3 and piece4:
        color = 0,255,0

    pygame.display.update()

截图:

使用pygame实现的一个简单的界面,按键盘1,2,3,4会有对应的地方亮起,当四个都亮起来之后会改变颜色

使用myfont.render画字,再用screen.blit放到屏幕上

使用pygame.draw.arc画弧形,使用pygame.draw.line画线

包在while循环中,使用pygame.event.get()捕捉事件

最后加一个判断,当四个都是true时改变颜色

 

 

 

 

好的,你可以使用Pygame的text模块和input模块来创建一个交互界面,并且能够进行文本框互动。 下面是一个简单的例子: ```python import pygame from pygame.locals import * # 初始化pygame pygame.init() # 设置窗口尺寸 size = width, height = 640, 480 # 创建窗口 screen = pygame.display.set_mode(size) # 设置窗口标题 pygame.display.set_caption("交互界面") # 设置文本框 font = pygame.font.Font(None, 32) input_box = pygame.Rect(100, 100, 140, 32) color_inactive = pygame.Color('lightskyblue3') color_active = pygame.Color('dodgerblue2') color = color_inactive active = False text = '' # 事件循环 while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == MOUSEBUTTONDOWN: # 点击文本框时激活 if input_box.collidepoint(event.pos): active = not active else: active = False color = color_active if active else color_inactive if event.type == KEYDOWN: if active: if event.key == K_RETURN: print(text) text = '' elif event.key == K_BACKSPACE: text = text[:-1] else: text += event.unicode # 绘制屏幕 screen.fill((255, 255, 255)) txt_surface = font.render(text, True, color) width = max(200, txt_surface.get_width()+10) input_box.w = width screen.blit(txt_surface, (input_box.x+5, input_box.y+5)) pygame.draw.rect(screen, color, input_box, 2) pygame.display.flip() ``` 这个例子中创建了一个文本框,当用户点击文本框时,文本框变为活动状态,此时用户输入的字符将会被显示在文本框中。用户可以使用退格键删除文本框中的字符,按下回车键时,文本框中的文本将被打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽蓝丶流月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值