Apps Home
|
Create an App
Free Hangman
Author:
fixr1
Description
Source Code
Launch App
Current Users
Created by:
Fixr1
/* jshint strict:false */ /* global cb */ var word = [], init = true, answerUsers = [], wrong = 0, finished = false, userKing = '', setWord = '', currentWord = '', crown = ':crown2', letters = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ], cmds = ['word', 'setking', 'guess', 'answer', 'solve', 'random'], lastWinner = '', choices = [], winner = '', lastWords = [], wordbank = [], initWord,runCommand, tryLetter, rmKing, getWord = null; cb.settings_choices = [ {name:'goal', label:'What the winner gets (Goal)', type:'str', minLength: 2, maxLength: 25, required: true}, {name:'guessTokens', label:'Letter guess tokens', type:'int', minValue:1, maxValue:99999, default:25}, {name:'answerTokens', label:'Answer guess tokens', type:'int', minValue:1, maxValue:99999, default:50}, {name:'word', type:'str', minLength: 0, maxLength: 25, required: false}, {name:'randWord', label: 'Choose words for you?', type:'choice', choice1:'Yes', choice2:'No', default:'Yes'}, {name:'endWhen', label: 'Auto reset the game when the hangman dies?', type:'choice', choice1:'Yes', choice2:'No', default:'Yes'}, {name:'noticeTime', label:'Time between notices', type:'int', minValue: 30, maxValue: 300, required: true, default:30}, {name:'waitTime', label:'How long before choosing a new word after a round has finished in seconds?', type:'int', minValue:1, maxValue:60, default:5}, {name:'winnerIsKing', label: 'Allow the user who wins to choose the next word?', type:'choice', choice1:'Yes', choice2:'No', default:'No'}, {name:'modAsKing', label: 'Allow mods to choose the word?', type:'choice', choice1:'Yes', choice2:'No', default:'No'}, {name:'rmUsed', label: 'Remove used letters from selection?', type:'choice', choice1:'Yes', choice2:'No', default:'Yes'} ]; cb.tipOptions( function() { var options = [{label: 'Normal Tip'}]; if (!finished) { options.push({label: 'Solve Hangman (tip at least '+cb.settings.answerTokens+')'}); for (var i=0; i < choices.length; i++) { options.push({label:choices[i]}); } return {options:options, label:'Hangman Options (To guess a letter tip at least '+cb.settings.guessTokens+'):'}; } return {options:[{label: 'Normal Tip'}], label:'Game finished. New word will be choosen soon.'}; } ); cb.onMessage( function (msg) { if (msg.m.trim().indexOf('!') === 0){ runCommand(msg.m, msg.user); } return msg; } ); cb.onDrawPanel( function (user) { var wordDisplay = ''; wordDisplay = word.join().replace(/,+/g, ' '); if (!finished) { if (user === cb.room_slug) { return { 'template':'3_rows_11_21_31', 'row1_value':'Welcome to Hangman!', 'row2_value':'Word: '+wordDisplay+' ('+currentWord.replace(/\s+/g, ' ')+')', 'row3_value':'Last Winner: '+lastWinner }; } return { 'template':'3_rows_11_21_31', 'row1_value':'Welcome to Hangman!', 'row2_value':'Word: '+wordDisplay, 'row3_value':'Last Winner: '+lastWinner }; } return { 'template':'3_rows_11_21_31', 'row1_value':'Welcome to Hangman!', 'row2_value':'Word: '+wordDisplay, 'row3_value':'The winner is '+winner+'!' }; } ); getWord = function() { var rnumber = Math.floor(Math.random()*1000); if (lastWords[0] === null || lastWords.indexOf(rnumber) === -1){ lastWords.push(rnumber); word = []; choices = letters; currentWord = wordbank[rnumber]; cb.log('New word:: '+currentWord); } else { return getWord(); } initWord(); }; var hangmanTag = function(stage) { switch (stage) { case 0: return ':hmapp0'; case 1: return ':hmapp1'; case 2: return ':hmapp2'; case 3: return ':hmapp3'; case 4: return ':hmapp4'; case 5: return ':hmapp5'; case 6: var endWhen = cb.settings.endWhen || 'Yes'; var waitTime = cb.settings.waitTime || 5; var randWord = cb.settings.randWord || 'Yes'; if (endWhen === 'Yes'){ finished = true; cb.chatNotice('Round Over'); if (randWord === 'Yes') { cb.setTimeout(getWord, waitTime*1000); } else { cb.chatNotice('The game was lost set a new word with !word and then the word.', cb.room_slug); } } return 'He\'s dead! :hmapp6'; default: return 'He\'s more dead! :hmapp6'; } }; initWord = function() { if (init) { var goal = cb.settings.goal || ''; var startWord = cb.settings.word || ''; cb.changeRoomSubject('Hangman App! Tip to guess letters or the word! Winner gets: ['+goal+']'); cb.chatNotice('Hangman App is active! Guess letters or the word!'); currentWord = startWord.trim().toLowerCase(); var time = cb.settings.noticeTime || 30; init = false; } var randWord = cb.settings.randWord || 'Yes'; if (currentWord !== null && currentWord !== '') { for (var i=0; i < currentWord.length; i++) { if (currentWord[i] === ',' || currentWord[i] === ' ') { word[i] = ' | '; } else if (letters.indexOf(currentWord[i]) > -1) { word[i] = '_'; } else { word[i] = currentWord[i]; } } wrong = 0; finished = false; choices = JSON.parse(JSON.stringify(letters)); cb.drawPanel(); cb.chatNotice('A new word has been chosen! '+hangmanTag(wrong++)); } else if (randWord === 'Yes'){ getWord(); } else { cb.chatNotice('No word choosen word choosen for you.', cb.room_slug); getWord(); } }; var isCmd = function(cmd) { return (cmds.indexOf(cmd.replace('!','')) >-1); }; var getCmd = function(str) { var end = str.trim().indexOf(' '); cb.log('Found space at: ' + end); if (end > -1){ var cmd = str.substring(1, end).toLowerCase(); if (!isCmd(cmd)) { return 'noleadspaces'; } cb.log('cmd::' + cmd); return cmd; } return 'noleadspaces'; }; var getParam = function(str, cmd) { var params = str.trim().replace('!'+cmd+' ', ''); params = params.replace(/\s+/g, ',').replace(/,+/g, ','); cb.log('param::' + params); return params; }; var updateWord = function(letter) { for (var i=0; i < currentWord.length; i++){ if (currentWord.charAt(i) === letter) { word[i] = letter; } } if (word.indexOf('_') === -1) { finished = true; } cb.drawPanel(); }; tryLetter = function(user, letter) { var adj = 'incorrectly'; var rmUsed = cb.settings.rmUsed || 'Yes'; var m = ''; if (currentWord.indexOf(letter) > -1 && word.indexOf(letter) === -1){ updateWord(letter); adj = 'correctly'; } else { m = hangmanTag(wrong++); } if (rmUsed === 'Yes') { choices.splice(choices.indexOf(letter), 1); } cb.chatNotice(user+' has guessed the letter '+letter.toLowerCase().charAt(0)+' '+adj+'! ' + m); }; var setKing = function(user) { userKing = user; cb.chatNotice(user+' is now the Hangman king.'); var message = 'Hey, '+userKing+' '+cb.room_slug; message += ' has chosen you as the next hangman king.\n'; message += 'Type !word a space and then the word to choose the next word.'; cb.chatNotice(message, userKing); }; var checkAnswer = function(user, aword) { var adj = 'incorrectly'; var winnerIsKing = cb.settings.winnerIsKing || 'No'; var waitTime = cb.settings.waitTime || 5; var randWord = cb.settings.randWord || 'Yes'; var m = ''; if (!finished){ aword = aword.trim().toLowerCase().replace(/\s+/g, ',').replace(/,+/g, ' '); if (currentWord === aword) { word = currentWord.split(''); winner = user; finished = true; cb.drawPanel(); adj = 'correctly'; if (winnerIsKing === 'Yes') { setKing(user); } lastWinner = user; if (randWord === 'Yes') { cb.setTimeout(getWord, waitTime*1000); } else { var message = 'Hey '+user+' has guessed the word '+adj+'!\n'; message += 'You can change the word by typeing !word a space then the word.'; cb.chatNotice(message, cb.room_slug); } } else { m = hangmanTag(wrong++); } if (user !== cb.room_slug) { answerUsers.splice(answerUsers.indexOf(user), 1); } cb.chatNotice(user+' has guessed the word '+aword+' '+adj+'! '+m); } else { cb.chatNotice('The game is finished wait for a new word.', user); } }; var newWord = function(nword) { word = []; currentWord = nword; initWord(); }; runCommand = function(msg, user) { var cmd = getCmd(msg); if (cmd !== 'noleadspaces'){ var param = getParam(msg, cmd); if (cmd === 'word') { setWord = user; newWord(param); } else if (cmd === 'setking') { setKing(param); } else if (cmd === 'guess') { tryLetter(user, param); } else if (cmd === 'answer' || cmd === 'solve') { checkAnswer(user, param); } else if (cmd === 'random') { getWord(); } } else if (cmd === 'help') { cb.chatNotice('You have to guess letters to find the word. The commands: "!guess " + a letter, "!solve " + the solution or "!word " + a new word to set a new word.', user); } else { cb.chatNotice('Place a space between the command and the word.', user); } }; rmKing = function() { cb.chatNotice('Hey, '+userKing+' you are no longer the hangman king.', userKing); userKing = null; }; wordbank = ['italy','tear','pottery','swing','trade','stamp','ego','guilt', 'fight','waterfall','tortoise','vinegar','herald','tshirt','mosquito','knife', 'cabbage','concert','flamenco','knitting','salt','draw','cancer','chips', 'reading','bar','coat','van','wagon','rumour','thief','hammer','manners', 'bacteria','graduate','rhinoceros','button','parent','well','juice','judo', 'pirate','bellows','university','laxative','rose','saint','lodger','croissant', 'trapeze','conductor','spring','parity','ball','sunburn','tourist','orange', 'creation','test','tragedy','toy','cashier','taxi','turf','entrance','forest', 'insult','night','seasick','reindeer','aquarium','chandelier','ears','anchor', 'college','wood','scarf','wheelbarrow','father','xray','waiter','pencil', 'spanner','lead','fare','general','lighthouse','calculator','wisdom','tower', 'aerial','bath','asylum','spoon','loom','jug','remedy','letterbox','puppy', 'bible','whale','news','bullet','whiteboard','cheat','ashes','soldier','neck', 'rash','amplifier','piano','training','comet','empire','prank','ant','needle', 'dove','pyjamas','kid','album','storm','snake','escape','aid','address','soccer', 'sponge','cellar','hygiene','novel','spire','typewriter','creeper','scar', 'bench','badge','fireman','limit','planning','cousin','giraffe','pudding', 'screen','scales','concierge','force','brakes','sausage','donkey','task', 'radar','artillery','switch','sugar','sex','lord','service','signature', 'creature','bin','coronet','mushroom','jump','buoy','carnival','shrimps', 'noise','note','tiger','vice','shoehorn','passion','flea','book','belt','formula','planet','genius','egg','bikini','ipad','shout','fleet','song','evil','loan','joke','minute','prison','estate','kite','toothpick','wallet','thermometer','poster','breath','lap','parrot','garden','artist','grade','spaghetti','zoo','emerald','fuck','accountant','bingle','boxing','travel','necklace','salmon','kangaroo','coffin','sparrow','shorts','ink','butterfly','bargain','queen','radiator','handbag','pyramid','crutch','stain','opera','parasite','end','surgeon','mermaid','crumbs','arrow','dice','ring','definition','family','wine','library','pocket','danger','catastrophe','plate','snow','invention','barber','flywheel','chimney','divorce','ransom','rebel','prize','pussy','ladder','sail','blonde','lunch','cord','horsepower','heretic','cupboard','slide','sofa','fridge','hope','commander','wolf','quarry','cereal','sandals','aluminium','beer','duty','flowerpot','hosepipe','stream','principal','bus','muscle','tissue','bed','offer','leaf','staple','snail','texas','nursery','courage','ladybird','bishop','bush','corporation','war','captain','choir','scream','nappy','kennel','chapel','fad','stool','comedy','toffee','crab','printer','voting','antique','map','pub','pharmacy','drug','inn','playground','brass','hand','concrete','funeral','fin','weather','leather','chair','grease','carriage','lodge','chisel','bandage','tape','bulb','dragon','carpet','school','factory','contract','hour','day','crown','egypt','flight','generator','binder','ice','tongue','robot','skin','waltz','leech','custard','warship','farm','pillow','help','hinge','chimp','hair','angel','torrent','locust','prince','monster','research','statue','morals','ballroom','beach','practice','loaf','pincer','market','spaceship','china','messenger','dance','velcro','picture','calm','aroma','thermostat','brooch','string','rollercoaster','software','ridge','singer','panther','denim','lane','shark','icon','cherry','wig','pimple','spider','indian','pain','bib','stardom','pear','fuse','razor','election','bacon','fork','orchestra','photograph','ambiguous','toast','verb','comic','napkin','seagull','milkshake','lipstick','tornado','sunrise','cave','navel','vase','lighter','blame','fire','octopus','ferry','paradise','bowl','staff','salon','computer','satellite','decorator','gloves','silo','bill','bubble','fax','music','swimming','perch','sunset','iceberg','fairy','marble','headache','barrier','fatigue','promotion','mind','shop','climbing','injury','chart','wave','galaxy','mirror','plastic','snore','dish','bridge','dusk','guitar','vowel','brick','tapestry','loop','mite','scallop','toes','dynamo','friar','riot','volcano','baby','dodgem','pastry','microbe','sermon','sole','telescope','pie','morning','nile','ravioli','parade','essay','party','gears','cap','summer','pin','migraine','mouse','grasshopper','epidemic','eyebrow','peace','lift','spinach','referee','hardware','elastic','space','store','pasta','gondola','wind','report','tablet','station','fungus','law','lunatic','press','compass','balcony','fact','noun','scandal','oyster','sentry','ham','cowboy','parachute','section','cucumber','hostpital','florist','figure','toothbrush','shoes','horseshoe','alphabet','observation','mattress','mole','race','mill','gossip','carpenter','jet','mound','ginger','tap','blister','flag','frown','lobster','decoy','India','basket','trap','cider','lemon','ketchup','doctrine','mask','turtle','pension','curtain','envelope','politician','tax','tomb','skyscraper','skirt','star','straw','grass','pride','architect','colony','fish','ceiling','clay','board','ostrich','pumpkin','moustache','religion','cuff','berry','parliament','attack','summit','spade','vote','hooligan','fair','prairie','gown','arm','video','basin','satan','park','sneeze','dentist','oar','jacket','laser','magician','nanny','dolphin','flood','cape','chameleon','frock','rain','curlers','pankake','joy','mint','cloak','tray','scarecrow','stampede','skateboard','herb','crowd','cube','hymn','key','chess','graffiti','square','radio','scorpion','saxophone','mat','barrel','hook','cry','union','miser','corn','stars','bullfight','silence','word','crisis','birthday','shooting','butter','rib','motorcycle','duck','paranoia','schedule','Russia','chain','log','island','moth','target','comb','flirt','bully','pigeon','president','powder','poker','nail','crisps','winner','glasses','revenge','cloud','synthetic','plaster','faint','gamble','lentil','hamburger','tank','screwdriver','bow','kidney','novice','pepper','cheese','stew','galvanise','crust','reason','sunglasses','search','plane','composer','title','profit','spy','paw','vitamins','socks','licence','scissors','finger','colour','chime','jealousy','newspaper','policeman','pilot','altar','cult','advertising','hospital','shoelace','legs','saddle','file','refugee','conference','rank','pail','letter','arithmetic','ski','junk','interlude','dictionary','midwife','trailer','frog','reciept','finance','flashbulb','drum','tusk','consonant','justice','package','price','zip','luggage','carrot','cafe','nun','film','cook','encyclopedia','soap','second','bead','tour','gym','fever','snack','rhythm','massage','earth','value','certificate','whisky','aplause','pebble','souvenir','pen','model','gnome','stone','poverty','cactus','harp','feast','hobby','gutter','diary','diver','magazine','beggar','beans','spacestation','muslim','bridle','salad','wardrobe','honey','mellon','power','garlic','potato','satire','saucer','crystal','roulette','work','bingo','tie','fan','cup','cripple','hanger','porridge','gang','coal','mime','ticket','flesh','bee','sow','slut','seat','smile','lollipop','spine','runway','nose','digging','judge','blood','sheet','peacock','bandit','drinking','manure','rudder','cot','bundle','exam','manhole','slipper','alarm','motel','caterpillar','prejudice','prophet','gallery','cocktail','suicide','parlour','binge','game','eagle','widow','desert','pliers','crane','internet','seal','saviour','referendum','kiosk','beard','teacher','bank','threat','mustard','cow','goal','stage','baton','shampoo','tv','surface','foam','cabin','survey','olympics','holiday','telephone','shopping','code','dinner','puppet','bomb','lamp','result','skylight','increments','roses','consumer','tonic','cat','church','kidnap','trellis','reject','cream','net','kitchen','elephant','lemonade','granny','cough','shirt','corner','engineer','sea','error','shelf','legend','termite','reward','stiletto','pillar','sword','tears','seed','jury','caper','leg','rubbish','padlock','sardine','foundation','pants','tennis','holly','tail','escalator','miner','iron','golf','tart','fertiliser','seesaw','dock','bell','mile','capital','sack','turkey','algae','haystack','violin','perfume','graph','boots','sailor','microphone','chocolate','label','cartridge','chimpanzee','menu','shape','tartan','myth','tattoo','worm','applause','nuts','memory','plug','psychiatrist','door','tram','cliff','loft','spar','headline','witch','bait','energy','guide','sale','parish','doughnut','daisy','moon','sky','cannon','sanity','cork','crash','fall','stomach','hazard','king','fountain','oil','monkey','band','nib','arch','lump','angle','mutton','leisure','copier','guillotine','sedative','safe','republic','hostage','cemetery','accident','exile','arthritis','paddock','cottage','giant','blanket','rescue','verse','coffee','midget','river','passport','stadium','tractor','chicken']; initWord();
© Copyright Chaturbate 2011- 2024. All Rights Reserved.