一、引入(之前学习过的面向过程编程)
#引入
#1.面向过程编程
#==>(1)之前的代码(像流水线,重复利用性差)
# 脸部
import turtle
turtle.pencolor('pink')
turtle.fillcolor('pink')
turtle.begin_fill()
turtle.circle(150)
turtle.end_fiil()
#眼睛
turtle.penup()
turtle.goto(-20, 20)
turtle.pendown()
turtle.fillcolor('white')
turtle.begin_fill()
turtle.circle(50)
turtle.end_fill()
#==>(2)学习了函数(封装特定功能,调用)==函数式编程,增强重用性,可读性
def eyeball():
turtle.penup()
turtle.goto(-30, 220)
turtle.pendown()
turtle.dot(15,'black')
turtle.penup()
turtle.goto(30, 220)
turtle.pendown()
turtle.dot(15, 'black')
turtle.hideturtle()
def face():
turtle.pencolor('pink')
turtle.fillcolor('pink')
turtle.begin_fill()
turtle.circle(150)
turtle.end_fill()
二、
import turtle
# 定义游戏角色的属性(字典)
role_a = {
'nickname': "小呆",
'gender': "男",
'x': -200,
'y': 10
}
role_b = {
'nickname': "小萌",
'gender': "女",
'x': 150, # 小萌在小呆的右边,x坐标调整为150
'y': 10
}
def draw_character(dic):
# 获取角色属性
nickname = dic.get('nickname')
gender = dic.get('gender')
x = dic.get('x')
y = dic.get('y')
# 初始化turtle
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
# 绘制角色头部
turtle.circle(50) # 头部是一个半径为50的圆
# 绘制角色眼睛
turtle.penup()
turtle.goto(x-20, y+40)
turtle.pendown()
turtle.dot(10) # 左眼
turtle.penup()
turtle.goto(x+20, y+40)
turtle.pendown()
turtle.dot(10) # 右眼
# 绘制角色嘴巴
turtle.penup()
turtle.goto(x-15, y+20)
turtle.right(90)
turtle.pendown()
turtle.circle(15, 180) # 半圆形嘴巴 半径r,度数18
# 显示角色昵称
turtle.penup()
turtle.goto(x-40, y+100)
turtle.pendown()
turtle.write(nickname, font=("宋体", 16, "normal"))
# 隐藏turtle箭头
turtle.hideturtle()
# 调用函数绘制角色
draw_character(role_a) # 绘制小呆
turtle.penup()
turtle.right(90)
draw_character(role_b) # 绘制小萌
# 点击窗口关闭
turtle.done()
#角色类:
#1.把(属性,方法 抽象出来),封装到同一个类里面。
# 属性:昵称、性别、坐标
# 方法:让自己draw绘制出来
#2.小呆,小萌属于类的实例
#思路===>面向对象编程
# 面向过程:一个人,按照步骤做蛋糕
# 面向对象:一堆助手各司其职,你来指挥他们,不用动手
#一切皆为对象:
##1.什么是对象?
# (1)桌椅板凳都是;
# (2)6个数据类型也是对象。
# Number(数字)
# String(字符串)
# List (列表)
# Tuple(元组)
# Set (集合)
# Dictionary(字典)
#==>(3)自定义数据类型(是类)
##2.什么是类?
#类:是对一群具有相同 特征 或 行为 的事物的一个统称。(是抽象的)
#类和对象的关系(类大),实例对象拥有类中的方法,但属性数据各不相同
#书本==>语文书、数学书
三、类的构建
#创建一个 类 类名英文首字母大写
class 类名:
def __init__(self):
pass
def 方法名(self):
pass
class Person:
#初始化对象,self调用时不用传递该参数
def __init__(self,new_name):
self.name=new_name #接收传入的参数
# ##1.init()
# print("I am running")#在实例化小明的时候已经调用了init方法‘
# ##init方法很特殊,在实例化小明对象的时候就调用了。
##walk方法
def walk(self):
print("I am walking")
#实例化
#对象:小明
xiaoming=Person("小明")#无反应
##2.walk()
# #开始调用walk方法:使用【对象名.方法名】
xiaoming.walk()
print(xiaoming.name)
#
# #对象:小红
# xiaohong=Person("小红")
# print(xiaohong.name)
四、
#类和对象==>创建角色
import turtle
class Role:
def __init__(self,nickname,gender,x,y):
self.nickname=nickname
self.gender=gender
self.x=x
self.y=y #存储实例属性
# # 定义游戏角色的属性
# role_a = {
# 'nickname': "小呆",
# 'gender': "男",
# 'x': -200,
# 'y': 10
# }
#
# role_b = {
# 'nickname': "小萌",
# 'gender': "女",
# 'x': 150, # 小萌在小呆的右边,x坐标调整为150
# 'y': 10
# }
def draw_character(self):
# # 获取角色属性
# nickname = dic.get('nickname')
# gender = dic.get('gender')
# x = dic.get('x')
# y = dic.get('y')
# 初始化turtle
turtle.penup()
turtle.goto(self.x, self.y)
turtle.pendown()
# 绘制角色头部
turtle.circle(50) # 头部是一个半径为50的圆
# 绘制角色眼睛
turtle.penup()
turtle.goto(self.x - 20, self.y + 40)
turtle.pendown()
turtle.dot(10) # 左眼
turtle.penup()
turtle.goto(self.x + 20, self.y + 40)
turtle.pendown()
turtle.dot(10) # 右眼
# 绘制角色嘴巴
turtle.penup()
turtle.goto(self.x - 15, self.y + 20)
turtle.right(90)
turtle.pendown()
turtle.circle(15, 180) # 半圆形嘴巴
# 显示角色昵称
turtle.penup()
turtle.goto(self.x - 40, self.y + 100)
turtle.pendown()
turtle.write(self.nickname, font=("Arial", 16, "normal"))
# 隐藏turtle箭头
turtle.hideturtle()
# # 调用函数绘制角色
# draw_character(role_a) # 绘制小呆
# turtle.penup()
# turtle.right(90)
# draw_character(role_b) # 绘制小萌
#####小呆,男,(-200,10)
role_a=Role('小呆',"男",-200,10)
role_a.draw_character()#画出来
#####小萌,女,(200,10)
turtle.penup()
turtle.right(90)
turtle.pendown()
role_a=Role('小萌',"女",200,10)
role_a.draw_character()#画出来
# 点击窗口关闭
turtle.done()
五、