
Droodles was a monthly challenge to guess what each Droodle represented . Droodles were created by Roger Price and are a cross between a doodle and a riddle . It is n't necessarily something real and everyone sees something different in each Droodle , so there are were wrong answers . Droodle #15 The Eiffel Tower seen through a security vehicle 's rear window . Five 5 penguins seen in a rear view mirror . A basketball hoop seen through a letterbox . A box with sharp teeth . Christmas tree in a box . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #14 Diaper/nappy for a baby porcupine . Bored scientist has fun with a laser and a Dorito . On his first day at the hourglass factory , Kevin completely missed the point ! Chickenpox on a bird 's beak . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #13 Tennis ball ( factory reject ) . Are you calling me square ? Shopping for psychics . A well used dice . A cubist painting . Kevin 's first sphere carving went horribly wrong . Balancing worm 's circus act . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #12 Mummy cannonball taking her little ones for a walk . A ball who 's lost its bearings . The last great cosmic alignment . An ex-snowman . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #11 The early bird caught a very strong worm ! A gopher with two TV sets . Two palm trees on a desert island . Oops ! Poor old Rudolph . A golf ball stealing alien . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #10 A pig coming out of a fog bank . Two worms sunbathing on a desert island . Bird 's eye view of an almost bald man 's head . An elephant coming out of a fog bank . A pig 's passport snout print . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #9 Someone playing a trombone in a telephone box . A paper clip playing hide and seek . A box for Pinocchio . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #8 A doorknob in a hair tonic factory . A noiseless ping-pong ball . An outspoken wheel . A circular centipede under a beach umbrella . A snowball with a fur coat . A hairy doughnut . A surprised cyclops . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #7 A mended doughnut . A bowling ball with a bandaid . A clown 's nose after a fight . A retired tiddlywink . An Earth sized game of tic-tac-toe . Synchronised swimming for worms . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #6 An egg , sunny side down . A hat that thinks it 's a bowl . A confused sunset . A pregnant worm . An alien who did n't quite get it right . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #5 4 elephants sniffing an orange . Close-up of a windmill . Confusion ensues at the world pool championship . 4 straws and a pea . A quadclamation mark . Unsportsmanlike gopher hunting . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #4 A worm on roller skates . Pots of gold at the ends of a rainbow . A two headed worm . Four fishermen pulling in their net . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #3 A ship arriving too late to rescue a witch . The titanic about to hit an iceberg . A shark eagerly awaiting its dinner . The Leaning Pyramid of Egypt . Playtime with the triangle family . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #2 A spider doing a handstand . Total eclipse of the sun on a stick . A family of worms stuck on a toffee apple . A frightened mop . A dandelion seed making a perfect landing . A supermodel on a bad hair day . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California Website : www . t allfellow . c om Droodle #1 A smartly dressed elevator . A man who 's caught his bow tie in an elevator . A butterfly abseiling . A smartly dressed worm . A forgotten Christmas present . A triangle admiring themselves in a mirror . A supermodel wearing a bow tie . A kite string with a bow . A double-door with triangular handles . A child 's wooden diabalo from above . An hourglass balancing on a tennis net . Droodles - The Classic Collection © Tallfellow Press , Los Angeles , California 