Difference between revisions of "CSC111 Lab 13 2011"

From dftwiki3
Jump to: navigation, search
(Created page with "--~~~~ ---- right * Point your browser to this page... * See all the fish? Pick one that you like. If you are working in Mac or...")
 
Line 3: Line 3:
  
  
 +
=Fish=
 +
(this section was originally in [[CSC111 Lab 12 2011| Lab 12]]).
 +
<br />
  
 
[[Image:fish0.gif|right]]
 
[[Image:fish0.gif|right]]

Revision as of 19:28, 1 December 2011

--D. Thiebaut 18:28, 1 December 2011 (EST)



Fish

(this section was originally in Lab 12).

Fish0.gif
  • See all the fish? Pick one that you like. If you are working in Mac or Windows mode, just right-click on the fish and save a copy of it on your computer, in the directory where you have your python programs. If you are on beowulf, just type the command
  getcopy  fishxx.gif

where xx is the number of the fish you selected.

  • Verify that the fish file is in your directory, in the local terminal.


  • Write a new graphics program and copy/paste the following code in it:



.

from graphics import *
H = 600
W = 400

def waitForClick( win, message ):
    """ waitForClick: stops the GUI and displays a message.  
    Returns when the user clicks the window. The message is erased."""

    # wait for user to click mouse to start
    startMsg = Text( Point( win.getWidth()/2, win.getHeight()/2 ), message )
    startMsg.draw( win )    # display message
    win.getMouse()          # wait
    startMsg.undraw()       # erase


def main():
    global H, W
    win = GraphWin( "Fish Tank", W, H )
    waitForClick( win, "click to start" )

    fish = Image( Point( W/2, H/2 ), "fish15.gif" )  # replace 15 by the number of your fish
    fish.draw( win )

    waitForClick( win, "click to end" )
    win.close()

main()

 
.





  • Add a for loop and make the object fish move by dx, dy some fixed number of steps...
  • Instead of using the image of the fish by itself and having the program remember by what amount to move it every time through the loop, let's create a class for the fish, and make the fish remember what
  • Create a an new class which is a fish, with its own file name, and its own dx (and maybe dy).



class Fish:
    def __init__( self, fileName, dirX, dirY ):
         self.image = Image( ...  )
         self.dx   = dirX
         self.dy   = dirY
 
    def draw( ... ):
         self.image.draw( win, dirX, dirY )
             ...


  • Create an object issued from the class. Verify that you can make the object move on the screen.


Challenge 6

QuestionMark11.jpg


  • Create a school of several fish (the same fish replicated several times is fine for this exercise) that move around the screen. The fish may move in opposite directions, but we'll assume that all fish move in the direction of where their head points to!!!


  • In case your fish move too fast, you can use the sleep() function in the time module.


Challenge 7

QuestionMark8.jpg


  • Make the fish go up or down, slightly, randomly, as it moves forward...
  • Hint: random.choice( [ 1, -1, 0, -2, 2, 0, 0, 0, ] ) will return random numbers that are either -2, -1, 0, 1, or 2, and will return 0 half of the time (because there are as many 0s as other numbers in the list).


Aquarium

In this section you will apply a background image to the window. It will be the image of a fish tank, and you will make your fish move about in the tank.



Tank2.gif




  • Get a copy of this image to the local terminal. You know how to capture the image! :-)
  • Modify your python program and make the graphics window as wide and as high as the image, which is 700 × 517 pixels.
  • Paint the image on your graphic window as a background image as follows:
   H = 700   # use the same number as above
   W = 517  # use the same number as above
  
   win = GraphWin( "111a-xx Aquarium", W, H  )
   background = Image( Point( W/2, H/2 ), "tank2.gif" )
   background.draw( win )


  • Verify that you get a nice aquarium and that your fish swim in it!