屏幕绘制内容时大多使用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()