ScatterGrams
ScatterGrams is a fun game of jumbled words and letters. Each player will see letters floating around the screen. Figure out the scrambled word and type it in. () The object is to type the word more quickly and accurately than your opponent to score more points. You can control the word size and your typing speed so keep in mind that longer words and faster typing usually mean a higher score. But, typos are penalties! So, fill in your names, make your selections, and click PLAY to begin the fun.
ScatterGrams.lgo
TO SETUP
SETUP.SCREEN
SETUP.GLOBALS
DEMO.SCREEN
PPROP "SCORES "VISIBLE TRUE
END
TO SETUP.SCREEN
FULLSCREEN
BOUNCE
; setup player 1 controls
DECLARE "EDITBOX "NAME.1
PPROP "NAME.1 "SIZE [150 20]
PPROP "NAME.1 "POSITION [400 213]
PPROP "NAME.1 "PLACEHOLDER "|Player 1 put name here|
DECLARE "LISTBOX "WORD.LIST.1
PPROP "WORD.LIST.1 "SIZE [150 85]
PPROP "WORD.LIST.1 "POSITION [400 155]
REPEAT 3 [ASK "WORD.LIST.1 [REMOVE 0]]
DECLARE "STATICTEXT "SCORE.1
PPROP "SCORE.1 "SIZE [150 16]
PPROP "SCORE.1 "POSITION [400 100]
PPROP "SCORE.1 "TEXT "|Score: 0|
DECLARE "POPUP "WORD.SIZE.1
PPROP "WORD.SIZE.1 "SIZE [150 30]
PPROP "WORD.SIZE.1 "POSITION [400 72]
REPEAT 3 [ASK "WORD.SIZE.1 [REMOVE 0]]
IGNORE ASK "WORD.SIZE.1 [APPEND "|Random word size|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|3-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|4-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|5-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|6-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|7-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|8-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|9-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|10-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|11-letter words|]
IGNORE ASK "WORD.SIZE.1 [APPEND "|12-letter words|]
PPROP "WORD.SIZE.1 "INDEX 0
; setup player 2 controls
DECLARE "EDITBOX "NAME.2
PPROP "NAME.2 "SIZE [150 20]
PPROP "NAME.2 "POSITION [400 -70]
PPROP "NAME.2 "PLACEHOLDER "|Player 2 put name here|
DECLARE "LISTBOX "WORD.LIST.2
PPROP "WORD.LIST.2 "SIZE [150 85]
PPROP "WORD.LIST.2 "POSITION [400 -128]
REPEAT 3 [ASK "WORD.LIST.2 [REMOVE 0]]
DECLARE "STATICTEXT "SCORE.2
PPROP "SCORE.2 "SIZE [150 16]
PPROP "SCORE.2 "POSITION [400 -183]
PPROP "SCORE.2 "TEXT "|Score: 0|
DECLARE "POPUP "WORD.SIZE.2
PPROP "WORD.SIZE.2 "SIZE [150 30]
PPROP "WORD.SIZE.2 "POSITION [400 -211]
REPEAT 3 [ASK "WORD.SIZE.2 [REMOVE 0]]
IGNORE ASK "WORD.SIZE.2 [APPEND "|Random word size|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|3-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|4-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|5-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|6-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|7-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|8-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|9-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|10-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|11-letter words|]
IGNORE ASK "WORD.SIZE.2 [APPEND "|12-letter words|]
PPROP "WORD.SIZE.2 "INDEX 0
; place buttons initially disabled
DECLARE "BUTTON "PLAY.BUTTON
PPROP "PLAY.BUTTON "POSITION [400 30]
PPROP "PLAY.BUTTON "TEXT "|Play|
PPROP "PLAY.BUTTON "RUN [MAKE "PROCESS.ID LAUNCH [PLAY.GAME]]
PPROP "PLAY.BUTTON "ENABLED FALSE
DECLARE "BUTTON "INSTRUCTION.BUTTON
PPROP "INSTRUCTION.BUTTON "POSITION [400 0]
PPROP "INSTRUCTION.BUTTON "TEXT "|Instructions|
PPROP "INSTRUCTION.BUTTON "RUN [ABOUT]
PPROP "INSTRUCTION.BUTTON "ENABLED FALSE
DECLARE "BUTTON "QUIT.BUTTON
PPROP "QUIT.BUTTON "POSITION [400 -30]
PPROP "QUIT.BUTTON "TEXT "|Quit|
PPROP "QUIT.BUTTON "RUN [QUIT.ROUTINE]
PPROP "QUIT.BUTTON "ENABLED FALSE
; now make the controls visible
PPROP "SCORES "VISIBLE TRUE
END
TO DEMO.SCREEN
MAKE "SECRET "SCATTERGRAMS
MAKE "SCATTERED JUMBLE :SECRET
MAKE "SOLVED.X :SOLVED.X.ANCHOR - 32 * (COUNT :SECRET) / 2
ASSIGN.TURTLES :SCATTERED
WAIT 3000
AUTO.SOLVE :SECRET
PPROP "PLAY.BUTTON "ENABLED TRUE
PPROP "INSTRUCTION.BUTTON "ENABLED TRUE
PPROP "QUIT.BUTTON "ENABLED TRUE
END
TO ASSIGN.TURTLES :WORD
SETTURTLES 1 + COUNT :WORD
ASK 0 [HT]
TELLALL 1 COUNT :WORD
EACH [SETSHAPE (WORD "~ (ITEM WHO :WORD) ".PNG)]
SETTS 1.5
EACH [SHOWTURTLE PENUP SETPC PICK :MY.COLORS]
EACH [PPROP WHO "SHAPELOCK TRUE]
EACH [SETHEADING WHO * (360 / COUNT :WORD)]
EACH [WANDER WHO]
END
TO AUTO.SOLVE :WORD
IF EMPTY? :WORD [STOP]
DISABLE FIRST :WORD
AUTO.SOLVE BUTFIRST :WORD
END
TO DISABLE :LETTER
(LOCAL "TURTLE "CURRENT.WHO)
MAKE "CURRENT.WHO .WHO
MAKE "TURTLE FIND :LETTER :SCATTERED
MAKE "SCATTERED MARK :LETTER :SCATTERED
STOP.WANDERING :TURTLE
ASK :TURTLE [SETTS 1]
PPROP :TURTLE "POSITION SOLVED.POSITION
PLAY LIST PICK [O3 O4 O5] WORD 16 PICK [A B C D E F G]
MAKE "CURRENT.WHO BUTMEMBER :TURTLE :CURRENT.WHO
TELL :CURRENT.WHO
END
TO FIND :LETTER :WORD
IF :LETTER = FIRST :WORD [OUTPUT 1]
OUTPUT 1 + FIND :LETTER BUTFIRST :WORD
END
TO MARK :LETTER :WORD
IF :LETTER = FIRST :WORD [OUTPUT WORD "- BUTFIRST :WORD]
OUTPUT WORD FIRST :WORD MARK :LETTER BUTFIRST :WORD
END
TO SOLVED.POSITION
LOCAL "TEMP
MAKE "TEMP LIST :SOLVED.X :SOLVED.Y
MAKE "SOLVED.X :SOLVED.X + :SOLVED.X.INC
OUTPUT :TEMP
END
TO SETUP.GLOBALS
MAKE "WORD.LIST.3 [CAT HAT BAT SAT DOG LOG HOG THE HIM HER HIS OUR TOT ROT GOT TOO \
SIT MOP MAN SEE SON SUN SET HOP ONE PUN PIN TIN LOT FUN FAN SAP ZIP HIP RAY DIG BIG \
FIG RIG PIG RED BED RUN NUN WIN SIP TIE TWO CRY SIN FIN CAN JAM RAN BIT FIT BEE COW \
SET PET WET BUG RUG HUG PUT NUT BAG GAG RAG TAG LIP CAR JAR FAR PEN HEN ASK TOE ARM \
EGG FLY DRY WHY TRY LOW SEW MIX SIX FIX]
MAKE "WORD.LIST.4 [COLT THAT WHAT LOGO POGO GOOD LOOK MINT BOOK THEM RUIN FAIL SAFE \
TREE SAID BOLT YELL BLUE PINK SHOW FROM PROM FAST PAST BUZZ NEST DOOR BEST VEIN PART \
REST COOK LOOK MOST BAKE RAKE LAKE FISH DISH WISH HAND SAND BAND LAND CRAB BEAR DEAF \
DRIP FALL TALL BALL CALL WALL BASE CASE VASE DIME TELL BELL VEST TEST NAIL RAIL SAIL \
CART BEAM SEAM PAIL TAIL TASK DOLL PILL HILL WILL BILL FILL PAIR HAIR NOSE KNEE GATE \
FOOT TEAR PEAR SHOW FEAR SKIN SKIP CLIP BIRD WORD MOON LAMP FAME RING SING]
MAKE "WORD.LIST.5 [PRINT DIARY SPACE PLACE PIZZA SALAD GREEN CRIME FIGHT MIGHT LIGHT \
SIGHT TODAY MOUSE HOUSE CREAM DREAM FLASK EARTH STILL PHOTO CHAIR THUMB ELBOW ANKLE \
WRIST WAIST MOUTH GRAPE MELON APPLE PEACH LEMON BRUSH HEARD JEWEL EQUAL ANGEL FRUIT \
PLANT PAINT SHEET SHIRT PANTS SOCKS RADIO WORLD GREAT GUEST FLING THING HEART BLOOD \
UNCLE HORSE NURSE FLOOR CLOCK THROW THREE EIGHT COVER]
MAKE "WORD.LIST.6 [MARINE PEOPLE REWIND LEGEND CAREER HOCKEY MUSEUM ARTIST SISTER \
STEREO FINGER ORANGE YELLOW CHERRY BANANA BREEZE MIRROR BRANCH CHEESE PLANET FLOWER \
REMOTE PILLOW BUREAU SERMON CHURCH SCREAM DRAWER HANGAR PEOPLE MOTHER FATHER NEPHEW \
DOCTOR CANDLE BASKET TISSUE SAUCER TEMPER HEALTH]
MAKE "WORD.LIST.7 [RECEIVE VACUUMS BEATLES PICTURE PITCHER PRINTER SPINACH SURVIVE \
BUNDLES PLAYERS BETWEEN BUTTONS PHYSICS]
MAKE "WORD.LIST.8 [RECEIVER HEADACHE COMEDIAN KEYBOARD BASEBALL FOOTBALL FUNCTION \
MACARONI TERRAPIN REACHING ADDITION WHENEVER]
MAKE "WORD.LIST.9 [COMEDIANS MACINTOSH TELEPHONE PROCEDURE SPAGHETTI ASTRONAUT \
CARTESIAN AGREEMENT FUNCTIONS GEOGRAPHY CHEMISTRY IMPLEMENT WORKSPACE SAXOPHONE]
MAKE "WORD.LIST.10 [ASTRONAUTS PROCEDURES MICROSCOPE BACKGROUND WINCHESTER \
CHARACTERS TELEVISION EARTHQUAKE BEEKEEPERS]
MAKE "WORD.LIST.11 [INTERACTIVE APPROXIMATE EVAPORATION RADIOACTIVE VACCINATION \
INFORMATION PROGRAMMING MATHEMATICS INSTRUCTION ILLUSTRATOR ENTERTAINER HUMMINGBIRD]
MAKE "WORD.LIST.12 [HUMMINGBIRDS NEIGHBORHOOD ENTERTAINERS CONDENSATION SUBPROCEDURE \
APPROXIMATES INSTRUCTIONS EXPERIMENTAL ENCYCLOPEDIA]
MAKE "MIN.WORD.SIZE 3
MAKE "MAX.WORD.SIZE 12
MAKE "ALREADY.USED []
MAKE "SOLVED.X.ANCHOR 0
MAKE "SOLVED.Y -200
MAKE "SOLVED.X.INC 32
MAKE "SCATTERED "||
MAKE "CURRENT.PLAYER 1
MAKE "MY.COLORS [ [0 0 0] [139 0 0] [255 0 0] [255 165 0] [0 255 0] [0 255 255] [0 128 0] [0 0 255] [0 0 128] [255 0 255] [128 0 128] [165 42 42] [255 192 203] [255 215 0]]
MAKE "TOTAL.SCORE.1 0
MAKE "TOTAL.SCORE.2 0
MAKE "WORDS.PER.GAME 5
END
TO SETUP.REPLAY
HALT :PROCESS.ID
REPEAT 5 [ASK "WORD.LIST.1 [REMOVE 0]]
REPEAT 5 [ASK "WORD.LIST.2 [REMOVE 0]]
PPROP "SCORE.1 "TEXT 0
PPROP "SCORE.2 "TEXT 0
MAKE "TOTAL.SCORE.1 0
MAKE "TOTAL.SCORE.2 0
MAKE "ALREADY.USED []
TELL EVERY "TURTLE
HIDETURTLE
WAIT 1000
MAKE "PROCESS.ID LAUNCH [PLAY.GAME]
END
TO UNIQUE.RANDOM :WORD.LIST
LOCAL "SELECTION
MAKE "SELECTION ITEM (RANDOM COUNT :WORD.LIST) :WORD.LIST
IF MEMBER? :SELECTION :ALREADY.USED [OUTPUT UNIQUE.RANDOM :WORD.LIST]
MAKE "ALREADY.USED FPUT :SELECTION :ALREADY.USED
OUTPUT :SELECTION
END
TO JUMBLE :WORD
IF (COUNT :WORD) < 2 [OUTPUT :WORD]
OUTPUT JUMBLE1 :WORD RANDOM COUNT :WORD
END
TO JUMBLE1 :WORD :N
IF (COUNT :WORD) < 2 [OUTPUT :WORD]
OUTPUT WORD (ITEM :N :WORD) (JUMBLE1 (REMOVE.ITEM :N :WORD) (RANDOM ( (COUNT :WORD) - 1)))
END
TO REMOVE.ITEM :N :WORD
IF :N < 2 [OUTPUT BUTFIRST :WORD]
OUTPUT WORD (FIRST :WORD) (REMOVE.ITEM (:N - 1) (BUTFIRST :WORD))
END
TO CURRENT.WORD.LIST
OUTPUT THING WORD "WORD.LIST. CURRENT.WORD.SIZE
END
TO CURRENT.WORD.SIZE
LOCAL "INDEX
MAKE "INDEX GPROP (WORD "WORD.SIZE. :CURRENT.PLAYER) "INDEX
IF :INDEX = 0 \
[OUTPUT RANDOM.BETWEEN :MIN.WORD.SIZE :MAX.WORD.SIZE] \
[OUTPUT 2 + :INDEX]
END
TO CURRENT.SPEED
OUTPUT ROUND GPROP (WORD "SPEED. :CURRENT.PLAYER) "VALUE
END
TO RANDOM.BETWEEN :A :B
OUTPUT (:A - 1) + RANDOM (:B - :A + 1)
END
TO ABOUT
IGNORE ALERT "|Welcome to ScatterGrams! \n It's a fun game of jumbled words and letters. \n The object is to type the word more quickly and accurately than your opponent to score more points. \n You can control the word size and your typing speed so keep in mind that longer words and faster typing usually mean a higher score. But, typos are penalties! \n So, fill in your names, make your selections, and press PLAY to begin the fun.|
END
TO PLAY.GAME
PPROP "PLAY.BUTTON "RUN [SETUP.REPLAY]
PPROP "PLAY.BUTTON "TEXT "|Restart game|
PLAY.ROUNDS :WORDS.PER.GAME
WAIT 1000
GAME.DONE
END
TO PLAY.ROUNDS :ROUNDS
IF :ROUNDS = 0 [STOP]
MAKE "CURRENT.PLAYER 1
PLAY.ROUND
IF AND (:ROUNDS = 1) (:TOTAL.SCORE.2 > :TOTAL.SCORE.1) [STOP]
MAKE "CURRENT.PLAYER 2
PLAY.ROUND
PLAY.ROUNDS :ROUNDS - 1
END
TO PLAY.ROUND
GET.READY
MAKE "SECRET UNIQUE.RANDOM CURRENT.WORD.LIST
MAKE "SCATTERED JUMBLE :SECRET
MAKE "SOLVED.X :SOLVED.X.ANCHOR - 32 * (COUNT :SECRET) / 2
ASSIGN.TURTLES :SCATTERED
PPROP WORD "SPEED. :CURRENT.PLAYER "RUN [SETVELOCITY CURRENT.SPEED]
MAKE "TYPOS 0
MAKE "TIME.0 MILLISECONDS
PLAY.WORD :SECRET
END
TO PLAY.WORD :WORD
IF EMPTY? :WORD [WORD.FINISH STOP]
PLAY.LETTER FIRST :WORD
PLAY.WORD BUTFIRST :WORD
END
TO PLAY.LETTER :LETTER
WHILE [NOT EQUAL? :LETTER (UPPERCASE RC)] [
MAKE "TYPOS :TYPOS + 1
PLAY [M10 N56 R]
]
DISABLE :LETTER
END
TO WORD.FINISH
LOCAL "PUT.WORD
MAKE "TIME.1 MILLISECONDS
IGNORE ASK WORD "WORD.LIST. :CURRENT.PLAYER [APPEND (WORD LOWERCASE :SECRET CHAR 32 CHAR 40 WORD.SCORE CHAR 41)]
UPDATE (WORD "TOTAL.SCORE. :CURRENT.PLAYER) WORD.SCORE
PPROP (WORD "SCORE. :CURRENT.PLAYER) "TEXT (WORD "|Score: | (THING WORD "TOTAL.SCORE. :CURRENT.PLAYER))
END
TO WORD.SCORE
(LOCAL "TIME.ALLOTTED "TIME.TAKEN "TIME.FACTOR "POINTS.PER.LETTER "TEMP.SCORE)
MAKE "TIME.ALLOTTED 1500 * (COUNT :SECRET) ; 1.5 seconds per letter
MAKE "TIME.TAKEN :TIME.1 - :TIME.0
MAKE "TIME.FACTOR :TIME.ALLOTTED / :TIME.TAKEN
MAKE "TEMP.SCORE ROUND (:TIME.FACTOR * (120 + COUNT :SECRET)) - (:TYPOS * 10)
IF :TEMP.SCORE < 0 [OUTPUT 0]
OUTPUT :TEMP.SCORE
END
TO GAME.DONE
MAKE "SECRET GET.WINNER
MAKE "SCATTERED JUMBLE :SECRET
MAKE "SOLVED.X :SOLVED.X.ANCHOR - 32 * (COUNT :SECRET) / 2
ASSIGN.TURTLES :SCATTERED
WAIT 3000
AUTO.SOLVE :SECRET
TELLALL 1 COUNT :SECRET
SETHEADING 0
EACH [WANDER WHO]
PPROP "PLAY.BUTTON "TEXT "|Play again|
END
TO GET.WINNER
IF :TOTAL.SCORE.1 = :TOTAL.SCORE.2 [OUTPUT "|tie game|]
IF :TOTAL.SCORE.1 > :TOTAL.SCORE.2 [OUTPUT GET.NAME 1]
OUTPUT GET.NAME 2
END
TO GET.NAME :PLAYER
LOCAL "WINNER
MAKE "WINNER UPPERCASE GPROP WORD "NAME. :PLAYER "TEXT
IF EMPTY? :WINNER [OUTPUT (WORD "|Player | :PLAYER "| won with Logo fun|)]
MAKE "WINNER FORMAT.NAME :WINNER COUNT :WINNER ; was limited to :max.word.size
IF EMPTY? :WINNER [OTUPUT (WORD "|Player | :PLAYER "| won with Logo fun|)]
OUTPUT :WINNER
END
TO FORMAT.NAME :NAME :MAX
IF EMPTY? :NAME [OUTPUT "||]
IF :MAX = 0 [OUTPUT "||]
IF DISPLAYABLE? FIRST :NAME [OUTPUT WORD (FIRST :NAME) (FORMAT.NAME BUTFIRST :NAME :MAX - 1)]
OUTPUT FORMAT.NAME BUTFIRST :NAME :MAX
END
TO DISPLAYABLE? :LETTER
IF :LETTER = CHAR 32 [OUTPUT TRUE]
OUTPUT MEMBER? :LETTER "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
END
TO UPDATE :ITEM :VALUE
MAKE :ITEM (THING :ITEM) + :VALUE
END
TO GET.READY
IGNORE ALERT (WORD "|Player | :CURRENT.PLAYER "| -- Just press Enter when ready|)
END
TO QUIT.ROUTINE
IF EQUAL? "PC GPROP "LOGO.ENV "ENVIRONMENT [QUIT]
IF EQUAL? "DESKTOP GPROP "LOGO.ENV "ENVIRONMENT [COMMAND FINDMENUID "|restart logo|]
END
TO WANDER :BITMAP
PPROP "WANDERERS "WANDERING FPUT :BITMAP GPROP "WANDERERS "WANDERING
PPROP :BITMAP "WANDER.ID LAUNCH LIST "WANDERING QUOTE :BITMAP
END
TO WANDERING :BITMAP
ASK :BITMAP [FOREVER [FD 1 WAIT 1]]
END
TO WANDERING? :BITMAP
OUTPUT NOT EMPTY? GPROP :BITMAP "WANDER.ID
END
TO STOP.WANDERING :BITMAP
IF NOT WANDERING? :BITMAP THEN STOP
LOCAL "ID
MAKE "ID GPROP :BITMAP "WANDER.ID
REMPROP :BITMAP "WANDER.ID
PPROP "WANDERERS "WANDERING BUTMEMBER :BITMAP GPROP "WANDERERS "WANDERING
HALT :ID
END
TO WANDERERS
OUTPUT GPROP "WANDERERS "WANDERING
END
TO STOP.WANDERERS
FOREACH WANDERERS [STOP.WANDERING "?]
END
TO MAIN
SETUP
END
MAIN
Procedure | MAIN |
Description | Two player game of scrambled words. |
Level | Advanced |
Tags | Game, Controls |