CSC111 Car With Top and Without Hard Top

From dftwiki3
Revision as of 13:58, 18 April 2014 by Thiebaut (talk | contribs) (Example 3: Two Classes, One Inherited from the Other)
Jump to: navigation, search

--D. Thiebaut (talk) 21:05, 17 April 2014 (EDT)



CarTopAndNoTop.png


Example 1: Two Classes


# graphicsCar1.py
# D. Thiebaut
# implements two classes, one for a car with a top,
# one for a car without one.

from graphics import GraphicsWindow
from random import seed
from random import randrange

MAXWIDTH = 800
MAXHEIGHT = 600

# ----------------------------------------------------------------------------------------
class Circle2:
    def __init__( self, x, y, diameter, color ):
        self._x       = x 
        self._y       = y 
        self._diameter= diameter
        self._color  = color   # list of 3 ints between 0 and 255

    def draw( self, canvas ):
        canvas.setFill( self._color[0], self._color[1], self._color[2] )            
        canvas.drawOval( self._x-self._diameter//2,
                         self._y-self._diameter//2,
                         self._diameter,
                         self._diameter )

# ----------------------------------------------------------------------------------------
class Wheel:
    def __init__( self, x, y, diameter ):
        self._c1 = Circle2( x, y, diameter, ( 0,0,0 ) )
        self._c2 = Circle2( x, y, diameter/2, ( 200, 200, 200 ) )

    def draw( self, canvas ):
        self._c1.draw( canvas )
        self._c2.draw( canvas )

# ----------------------------------------------------------------------------------------
class Rectangle:
    def __init__( self, x, y, width, height, color ):
        self._x      = x
        self._y      = y
        self._width  = width
        self._height = height
        self._color  = color   # list of 3 ints between 0 and 255

    def draw( self, canvas ):
        canvas.setFill( self._color[0], self._color[1], self._color[2] )            
        canvas.drawRect( self._x, self._y, self._width, self._height )

    def getWidth( self ):
        return self._width

    def getHeight( self ):
        return self._height
        

#----------------------------------------------------------------------
# CarNoTop: A class implementing a car with only a body, 2 wheels, and
# no top.
class CarNoTop:
    def __init__( self, x, y, width, height, color ):
        # build the body
        self._body = Rectangle( x, y, width, height, color )
        
        # build the wheels
        self._w1 = Wheel( x + width//4, y + height, width//5 )
        self._w2 = Wheel( x + 3*width//4, y + height, width//5 )
        
    def draw( self, canvas ):
        self._body.draw( canvas )
        self._w1.draw( canvas )
        self._w2.draw( canvas )
        
    
#----------------------------------------------------------------------
# CarTop: A class implementing a car with only a body, 2 wheels, and
# a top above the body.
class CarTop:
    def __init__( self, x, y, width, height, color ):
        # build the body
        self._body = Rectangle( x, y, width, height, color )
        self._top  = Rectangle( x+width//4, y-height//2,
                                   width//2, height//2, color )
        # build the wheels
        self._w1 = Wheel( x + width//4, y + height, width//5 )
        self._w2 = Wheel( x + 3*width//4, y + height, width//5 )
        
    def draw( self, canvas ):
        self._body.draw( canvas )
        self._top.draw( canvas )
        self._w1.draw( canvas )
        self._w2.draw( canvas )


def main():
    seed()
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()

    c1 = CarTop( 100,200, 400, 150, ( 255, 255, 0 ))
    c1.draw( canvas )

    c2 = CarNoTop( 300, 400, 400, 150, ( 200, 100, 50) )
    c2.draw( canvas )

    win.wait()
    win.close()

main()


Example 2: One Class with A Boolean Switch


# graphicsCar2.py
# D. Thiebaut
# implements a car that can have a hard top or not
# depending on a boolean member variable.

from graphics import GraphicsWindow
from random import seed
from random import randrange

MAXWIDTH = 800
MAXHEIGHT = 600


class Circle2:
    def __init__( self, x, y, diameter, color ):
        self._x       = x 
        self._y       = y 
        self._diameter= diameter
        self._color  = color   # list of 3 ints between 0 and 255

    def draw( self, canvas ):
        canvas.setFill( self._color[0], self._color[1], self._color[2] )            
        canvas.drawOval( self._x-self._diameter//2,
                         self._y-self._diameter//2,
                         self._diameter,
                         self._diameter )

class Wheel:
    def __init__( self, x, y, diameter ):
        self._c1 = Circle2( x, y, diameter, ( 0,0,0 ) )
        self._c2 = Circle2( x, y, diameter/2, ( 200, 200, 200 ) )

    def draw( self, canvas ):
        self._c1.draw( canvas )
        self._c2.draw( canvas )

class Rectangle:
    def __init__( self, x, y, width, height, color ):
        self._x      = x
        self._y      = y
        self._width  = width
        self._height = height
        self._color  = color   # list of 3 ints between 0 and 255

    def draw( self, canvas ):
        canvas.setFill( self._color[0], self._color[1], self._color[2] )            
        canvas.drawRect( self._x, self._y, self._width, self._height )

#----------------------------------------------------------------------
# Car: A class implementing a car with only a body, 2 wheels, and
# a top or no top, depending on the boolean _hasTop.�
class Car:
    def __init__( self, x, y, width, height, color, hasTop ):
        self._hasTop  = hasTop

        # build the body
        self._body = Rectangle( x, y, width, height, color )
        if self._hasTop:
            self._top = Rectangle( x+width//4, y-height//2,
                                   width//2, height//2, color )
        
        # build the wheels
        self._w1 = Wheel( x + width//4, y + height, width//5 )
        self._w2 = Wheel( x + 3*width//4, y + height, width//5 )
        
    def draw( self, canvas ):
        self._body.draw( canvas )
        self._w1.draw( canvas )
        self._w2.draw( canvas )
        if self._hasTop:
            self._top.draw( canvas )

def main():
    seed()
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()

    c1 = Car( 100,200, 400, 150, ( 255, 255, 0 ), True )
    c1.draw( canvas )

    c2 = Car( 300, 400, 400, 150, ( 200, 100, 50), False )
    c2.draw( canvas )

    win.wait()
    win.close()

main()


Example 3: Two Classes, One Inherited from the Other


# graphicsCar3.py
# D. Thiebaut
# implements two classes, one inherited from
# the other, the base class

from graphics import GraphicsWindow
from random import seed
from random import randrange

MAXWIDTH = 800
MAXHEIGHT = 600


class Circle2:
    def __init__( self, x, y, diameter, color ):
        self._x       = x 
        self._y       = y 
        self._diameter= diameter
        self._color  = color   # list of 3 ints between 0 and 255

    def draw( self, canvas ):
        canvas.setFill( self._color[0], self._color[1], self._color[2] )            
        canvas.drawOval( self._x-self._diameter//2,
                         self._y-self._diameter//2,
                         self._diameter,
                         self._diameter )

class Wheel:
    def __init__( self, x, y, diameter ):
        self._c1 = Circle2( x, y, diameter, ( 0,0,0 ) )
        self._c2 = Circle2( x, y, diameter/2, ( 200, 200, 200 ) )

    def draw( self, canvas ):
        self._c1.draw( canvas )
        self._c2.draw( canvas )

class Rectangle:
    def __init__( self, x, y, width, height, color ):
        self._x      = x
        self._y      = y
        self._width  = width
        self._height = height
        self._color  = color   # list of 3 ints between 0 and 255

    def draw( self, canvas ):
        canvas.setFill( self._color[0], self._color[1], self._color[2] )            
        canvas.drawRect( self._x, self._y, self._width, self._height )

#----------------------------------------------------------------------
# Car: A class implementing a car with only a body, 2 wheels, and
# no top.
class Car:
    def __init__( self, x, y, width, height, color ):
        # build the body
        self._body = Rectangle( x, y, width, height, color )
        
        # build the wheels
        self._w1 = Wheel( x + width//4, y + height, width//5 )
        self._w2 = Wheel( x + 3*width//4, y + height, width//5 )
        
    def draw( self, canvas ):
        self._body.draw( canvas )
        self._w1.draw( canvas )
        self._w2.draw( canvas )

    def getWidth( self ):
        return self._width

    def getHeight( self ):
        return self._height
        
class CarTop( Car ):
    def __init__( self, x, y, width, height, color ):
        super().__init__( x, y, width, height, color )
        self._top = Rectangle( x+width//4, y-height//2,
                               width//2, height//2, color )

    def draw( self, canvas ):
        super().draw( canvas )
        self._top.draw( canvas )
        

def main():
    seed()
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()

    c1 = CarTop( 100,200, 400, 150, ( 255, 255, 0 ) )
    c1.draw( canvas )

    c2 = Car( 300, 400, 450, 150, ( 200, 100, 50) )
    c2.draw( canvas )

    print( "width of Car c1 = ", c1.getWidth() )
    print( "width of Car c2 = ", c2.getWidth() )
    
    win.wait()
    win.close()

main()