squirrel aren' too different from each other otherwiseusing completely random numbers for width and height could give us very tall and skinny squirrels or very short and wide squirrels the width and height of the squirrel are this general size with random number from to added to it (for slight variation)and then multiplied by the multiplier variable the original xy coordinate position of the squirrel will be random location that the camera cannot seeto prevent the squirrels from just --popping|into existence on the screen the speed and direction are also randomly selected by the getrandomvelocity(function flipping the squirrel image if sq['movex' squirrel is facing left sq['surface'pygame transform scale(l_squir_img(sq['width']sq['height']) elsesquirrel is facing right sq['surface'pygame transform scale(r_squir_img(sq['width']sq['height']) sq['bounce' sq['bouncerate'random randint( sq['bounceheight'random randint( return sq the l_squir_img and r_squir_img constants contain surface objects with left-facing and right-facing squirrel images on them new surface objects will be made using the pygame transform scale(function to match the squirrel' width and height (stored in sq['width'and sq['height'respectivelyafter thatthe three bounce-related values are randomly generated (except for sq['bounce'which is because the squirrel always starts at the beginning of the bounceand the dictionary is returned on line creating grass data structures def makenewgrass(cameraxcameray) gr { gr['grassimage'random randint( len(grassimages gr['width'grassimages[ get_width( gr['height'grassimages[ get_height( gr[' ']gr[' 'getrandomoffcamerapos(cameraxcameraygr['width']gr['height'] gr['rect'pygame rect(gr[' ']gr[' ']gr['width']gr['height'] return gr