《Pygame游戏编程入门》学习——第1章 使用类的Python


前言

这是第2次学习《Pygame游戏编程入门》1这本书了,学习过程中的心得体会在这里记录一下。

第1章 挑战

问题1. 打开GeometryDemo.py程序,并且创建一个继承自Point的新类,名为Ellipse。它有一个水平半径和垂直半径,而不是像Circle那样只有一个半径。

  • 要点:
  • python中如何使用圆周率常量?答:import mathmath.pi
  • python中如何使浮点数字保留2位小数?答:round( number, num_of_digits )

思路:首先创建Point类,表示一个点,包含两个参数xy,表示该点的坐标。然后创建Ellipse类,表示一个椭圆,包含椭圆中心坐标xy,长半轴a和短半轴b。最后,在实例化两个类之后,利用to_string()方法打印点对象和椭圆对象的信息。

1.py代码如下:

import math

class Point():
    def __init__( self, x, y ):
        self.x = x
        self.y = y

    def to_string( self ):
        return '坐标:({}, {})'.format( self.x, self.y )

class Ellipse( Point ):
    def __init__( self, x, y, a, b ):
        super().__init__( x, y )
        self.a = a    # 长半轴a
        self.b = b    # 短半轴b

    def to_string( self ):
        return '{} [ a = {}, b = {}, 周长 = {},面积 = {} ]'.format( super().to_string(), self.a, self.b, self.get_circumference(), self.get_area() )

    def get_circumference( self ):
        return round( 2 * math.pi * self.b + 4 * ( self.a - self.b ), 4 )

    def get_area( self ):
        return round( math.pi * self.a * self.b, 4 )
        
p = Point( 10, 10 )
e = Ellipse( 100, 100, 20, 5 )
print( p.to_string() )
print( e.to_string() )

运行结果:

python 1.py 
坐标:(10, 10)
坐标:(100, 100) [ a = 20, b = 5, 周长 = 91.4159,面积 = 314.1593 ]

问题2. 给Rectangle类添加一个名为CalcArea()的方法,它返回Rectangle的面积。计算公式是:Area = Width * Height。测试该方法以确保它能工作。

思路:沿用上一题Point类,表示一个点,包含两个参数xy,表示该点的坐标。然后创建Size类,表示尺寸,包含宽w和高h。然后创建Rectangle类,表示一个矩形,包含矩形中心点的坐标(继承自Point),和矩形的尺寸(继承自Size)。最后,实例化3个类,利用to_string()方法打印各个对象的信息。

2.py代码如下:

class Point():
    def __init__( self, x, y ):
        self.x = x
        self.y = y

    def to_string( self ):
        return '坐标:( {}, {} )'.format( self.x, self.y )
 
class Size():
    def __init__( self, w, h ):
        self.w = w # 宽
        self.h = h # 高
    
    def to_string( self ):
        return '[ 宽 = {}, 高 = {} ]'.format( self.w, self.h )

class Rectangle( Point, Size ):
    def __init__( self, x, y, w, h ):
        Point.__init__( self, x, y )
        Size.__init__( self, w, h )
    
    def to_string(self):
        return Point.to_string( self ) + ', ' + Size.to_string( self )

    def get_circumference(self):
        return ( self.w + self.h ) * 2

    def get_area(self): # CalcArea()
        return self.w * self.h
        
p = Point( 1, 1 )
s = Size( 5, 2 )
r = Rectangle( 2, 2, 10, 3 )

print( p.to_string() )
print( s.to_string() )
print( r.to_string() )

运行结果:

python 2.py 
坐标:( 1, 1 )
[= 5, 高 = 2 ]
坐标:( 2, 2 ), [= 10, 高 = 3 ]

问题3. 给Circle类添加一个名为CalcCircum()的方法,它返回圆的周长。计算公式是:Circumference = 2 * Pi * Radius (Pi = 3.14159)。测试该方法以确保它能工作。

思路:沿用上一题的Point类。然后创建Circle类,表示一个圆,参数包含圆心坐标(继承自Point)和半径r。然后,在该类中添加两个方法,分别计算圆周长和面积,并在打印时调用。最后,实例化2个类,利用to_string()方法打印各个对象的信息。

3.py代码如下:

import math

class Point():
    def __init__( self, x, y ):
        self.x = x
        self.y = y

    def to_string( self ):
        return '坐标:( {}, {} )'.format( self.x, self.y )

class Circle( Point ):
    def __init__( self, x, y, r ):
        super().__init__( x, y )
        self.r = r

    def to_string( self ):
        return '{} [ 半径 = {},周长 = {},面积 = {} ]'.format( super().to_string(), self.r, self.get_circumference(), self.get_area() )

    def get_circumference( self ): # CalcCircum()
        return round( 2 * math.pi * self.r, 4 )

    def get_area( self ):
        return round( math.pi * self.r * self.r, 4 )
        
p = Point( 10, 10 )
c = Circle( 100, 100, 20 )
print( p.to_string() )
print( c.to_string() )

运行结果:

python 3.py 
坐标:( 10, 10 )
坐标:( 100, 100 ) [ 半径 = 20,周长 = 125.6637,面积 = 1256.6371 ]

  1. [美] Jonathan S. Harbour 著,李强 译,Python游戏编程入门,人民邮电出版社,2015.1 ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

下唐人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值