Day3——图形绘制、类的概念

Pygame库提供了pygame.draw模块来绘制直线、折线、矩形、多边形等基本图形。例如,pygame.draw.line()用于画直线,pygame.draw.rect()用于绘制矩形,pygame.draw.polygon()用于绘制多边形。此外,文章还介绍了如何创建和使用类,如Dog类,展示了类的方法和属性的使用。
摘要由CSDN通过智能技术生成

屏幕绘制内容时大多使用pygame.Surface模块中的fill()函数和blit()函数,但是绘制线条和图形并非如此,其相关函数是在pygame.draw模块中定义的

  pygame.draw模块提供了一些用来绘制基本图形的函数

1.绘制直线

line(Surface,color,start_pos,end_pos,width=1)

#line(Surface,color,start_pos,end_pos,width=1)
import pygame
pygame.init()#初始化pygame
#设置直线的起始和终点
line_start_pos=(100,200)
line_end_pos=(300,500)
line_width=2
line_color=(255,255,255)
#创建窗口来显示绘制结果
screen=pygame.display.set_mode((700,700)) #((700,700))参数是一个元组所以有俩个括号
#绘制直线
pygame.draw.line(screen,line_color,line_start_pos,line_end_pos,width=2)
#更新窗口显示
pygame.display.flip()#在绘制完后刷新一次
#游戏循环
running=True
while running:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
pygame.quit()

在Surface上绘制一条直线段,颜色为color,起点坐标为start_pos,终点坐标为end_pos,粗细为width

line((RGB三元组或者RGBA四元组),(x与y坐标的二元组),(x与y二元组),默认为1越大越粗)

实例

2.绘制折线

lines(Surface,color,close,pointlist,width=1)

close代表折线是否封闭,如果为true则pointlist中的第一个点和最后一个点会被一条直线段连接

参数pointlist是构成折线的点的坐标的列表,最后一个参数width代表线条的粗细程度

3.绘制矩形

rect(Surface,color,Rect,width=0)
rect(surface,矩形颜色rgb,rect表示绘制的矩形区域可以是rect对象也可以是四元组,粗细)

4.绘制多边形

polygon(surface,color,pointlist,width=0)
poolygon(Surface,颜色,多边形各个顶点的坐标列表,线条粗细如果为0则被color填充)

5.绘制圆形

circle(surface,color,pos,radius,width=0)
circle(surface,颜色,圆心坐标,圆的半径,粗细)

6.绘制椭圆形

ellipse(surface,color,rect,width=0)
ellipse(surface,color,椭圆的外接矩形,粗细)

7.绘制弧线

arc(surface,color,rect,start_angle,stop_angle,width=1)
arc(surface,color,椭圆的外接矩形,弧线的初始弧度,弧线的终止弧度,粗细)

8.对类的理解

创建对象被称为实例化

#演示如何创建类的新实例:
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
#self.name表示类的实例的属性name.self是一个约定的参数名称,用于引用类的实例。通过使用self,
我们可以在类的方法(类里面的函数)中访问和操作人的属性。self.name表示在对象中创建一个名为name的属性
#=name:这是一个赋值操作符 将函数中的参数name的值

# 创建 Person 类的新实例
person1 = Person("John", 25)
person2 = Person("Alice", 30)
#例如person1.name将返回person1对象的name属性值

# 访问实例的属性
print(person1.name, person1.age)  # 输出: John 25
print(person2.name, person2.age)  # 输出: Alice 30

类、实例、属性可以比作为人类、具体的人、他的外貌品行行为等等

所以当name和age是属性 当你想要print(name,age)时会报错

创建dog类

我们让一只狗具有蹲下(sit())和打滚(roll_over()的能力

class Dog():
    #一次模拟小狗的尝试
    def __int__(self,name,age):
#self参数是一种约定俗成的命名习惯,但它本身并不是一个保留关键字,可以用其他名称替代。
# 使用self只是一种通用的、习惯上的做法,它提供了一个指向当前对象的引用
        self.name=name
        self.age=age
    def sit(self):
        '''模拟蹲下'''
        print(self.name.title()+"is now sitting")
    def roll_over(self):
        print(self.name.title()+"rolled over!")

1.方法_init_

类中的函数称为方法 def。。。都是方法

这个方法定义中必须包含形参self。是因为Python调用这个_init_()方法来创建Dog实例时,将自动传入实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。我们创建 Dog实例时,Python将调用Dog类的方法——init——()。我们将通过实参向Dog()传递名字和年龄;self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后俩个形参(name和age)提供值

 self.name=name

以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。self.name=name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。self.age=age的作用与此类似。像这样可以通过实例访问的变量称为属性

        Dog类还定义了另外俩个方法:sit()和roll_over()。这些方法不需要额外的信息,只有一个形参self。

2.根据类创建实例

小test

9-1 餐馆:创建一个名为Restaurant的类,其方法__init__()设置两个属性。restaurant_name和cuisine_type。创建一个名为describe_restaurant()的方法和一个名为open_restaurant()的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。
根据这个类创建一个名为restaurant的实例,分别打印其两个属性,再调用前述两个方法。
9-2 三家餐馆:根据你为完成练习9-1而编写的类创建三个实例,并对每个实例调用方法describe_restaurant()。
9-3 用户:创建一个名为User的类,其中包含属性first_name和last_name,还有用户简介通常会存储的其他几个属性。在类User中定义一个名为describe_user()的方法,它打印用户信息摘要;再定义一个名为greet_user()的方法,它向用户发出个性化的问候。
创建多个表示不同用户的实例,并对每个实例都调用上述两个方法。

class Restaurant:
    def describe_restaurant(self,restaurant_name,cuisine_type):
        self.restaurant_name=restaurant_name
        self.cuisine_type=cuisine_type
        print(f"restaurant name:{self.restaurant_name}")
        print(f"cuisine type:{self.cuisine_type}")
#f-string可以将变量插入到字符串中
#(f"字符串:{变量}")
my_restaurant=Restaurant()#创建Restaurant类的实例

my_restaurant.describe_restaurant("pizza","chinese")

自己敲代码的时候出现(×) 累了明天再改吧

还有一题

定义一个学生类 要求:属性包括学生姓名、学号、以及语数英三科的成绩,能够设置学生某科目的成绩,能够打印出该学生的所有科目成绩

    class Student:
        def __init__(self,name,number):
            self.name=name
            self.number=number
            self.grades={"语文":0,"数学":0,"英语":0}
        def set_grade(self,course,grade):
            if course in self.grades:
                self.grades[course]=grade
        def print_grades(self):
            print(f"学生{self.name}学号{self.number}的成绩为")
            for course in self.grades:
                print(f"{course}:{self.grades[course]}")
    chen=Student("小陈","110")
    zeng=Student("小曾","120")
    print(chen.name)
    chen.set_grade("数学",95)
    chen.set_grade("语文",95)
    print(chen.grades)
    chen.print_grades()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值