Copy link to clipboard
Copied
hi everybody, thanks for viewing my message.
i wanna make a morse code translator.
what is morse code?
(morse code is used by navy pilots to communicate through light and/or sound)
(each alphabet is referred as dot's and dashes. dots being shorter duration and dashes being longer duration)
so this is it.
i want a dynamic text box on the above of the screen in flash player(swf)(input field)
and below of this i need another text box for the output.(this text box must be unwritable if possible)
and i need a button to convert( the text on that button is translate )
how this works?
i must input alphabets in the above text field and when i press translate button it should show the dots and dashes referred to that character.
and vice versa.
oh and i need it for as 3.0(i need everything inside a movieclip so that the play, next frame previous frame options do not function in flash player)
i am familiar with some scripting.
so i need the scripting for one character so that i will copy that for every character.
please help me on this
Thanks for reading this loooooong message.
hoping for some scripting.
Here is a basic blueprint for doing that.
First code will work when you place it on Flash timeline. You just need to compile swf.
Second - class variation if you feel like you are comfortable with classes.
Read comments.
...import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.utils.Dictionary;
// map of letters and integers regualar expressions to Morse code conventions
var charMap:Dictionary;
//
Copy link to clipboard
Copied
create an object that relates each morse code symbol to the corresponding alphanumic symbol. ie,
var obj:Object={};
obj[".-"]="A";
etc
Copy link to clipboard
Copied
thanks for replying,
could you explain some more deep?
i couldn't understand
Copy link to clipboard
Copied
what don't you understand?
Copy link to clipboard
Copied
Here is a basic blueprint for doing that.
First code will work when you place it on Flash timeline. You just need to compile swf.
Second - class variation if you feel like you are comfortable with classes.
Read comments.
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.utils.Dictionary;
// map of letters and integers regualar expressions to Morse code conventions
var charMap:Dictionary;
// five spaces per convention
var wordSeparator:String = " ";
// three spaces per convention
var letterSeparator:String = " ";
var input:TextField;
var output:TextField;
var prompt:TextField;
init();
function init():void
{
createMap();
drawUI();
}
function drawUI():void
{
drawInput();
drawOutput();
drawPrompt();
placeUI();
}
/**
* Places UI elements and positions them relative to each other
*/
function placeUI():void
{
addChild(prompt);
addChild(input);
addChild(output);
prompt.x = input.x = output.x = prompt.y = 20;
input.y = prompt.y + prompt.height;
output.y = input.y + input.height + 10;
}
/**
* Creates prompt text field
*/
function drawPrompt():void
{
prompt = new TextField();
prompt.defaultTextFormat = new TextFormat("Arial", 11, 0x004040);
prompt.multiline = output.wordWrap = false;
prompt.autoSize = TextFieldAutoSize.LEFT;
prompt.text = "enter text:"
}
/**
* Creates output text field
*/
function drawOutput():void
{
output = new TextField();
output.defaultTextFormat = new TextFormat("Arial", 12, 0x000000, "bold");
output.multiline = output.wordWrap = false;
output.border = true;
output.borderColor = 0x008040;
output.background = true;
output.backgroundColor = 0xDFFFEF;
output.width = 500;
output.height = 22;
}
/**
* Creates input text field
*/
function drawInput():void
{
input = new TextField();
input.defaultTextFormat = new TextFormat("Arial", 12);
input.type = TextFieldType.INPUT;
input.restrict = "A-Z 0-9";
input.multiline = input.wordWrap = false;
input.border = true;
input.borderColor = 0x808080;
input.background = true;
input.backgroundColor = 0xF0F0F0;
input.width = 500;
input.height = 22;
input.addEventListener(Event.CHANGE, onInput);
}
/**
* Handles input text field change event
* @param e
*/
function onInput(e:Event):void
{
var outString:String = input.text;
// append word separator to words
outString = outString.replace(/\b\w+\b/g, addWordSeparator);
// append letter separator to letters
outString = outString.replace(/\w/g, addLetterSeparator);
// loop through the map and replace characers with corresponding Morse codes
for (var prop:Object in charMap)
outString = outString.replace(RegExp(prop), charMap[prop]);
output.text = outString;
}
/**
* Used in String.replace() to inject word separator
* @return
*/
function addWordSeparator():String
{
return [arguments[0], wordSeparator].join("");
}
/**
* Used in String.replace() to inject letter separator
* @return
*/
function addLetterSeparator():String
{
return [arguments[0], letterSeparator].join("");
}
/**
* Creates mapping of alphanumerical characters to Morse code conventions
*/
function createMap():void
{
// international convention
charMap = new Dictionary();
charMap[/A/g] = ".-";
charMap[/B/g] = "-...";
charMap[/C/g] = "-.-.";
charMap[/D/g] = "-..";
charMap[/E/g] = ".";
charMap[/F/g] = "..-.";
charMap[/G/g] = "--.";
charMap[/H/g] = "....";
charMap[/I/g] = "..";
charMap[/J/g] = ".---";
charMap[/K/g] = "-.-";
charMap[/L/g] = ".-..";
charMap[/M/g] = "--";
charMap[/N/g] = "-.";
charMap[/O/g] = "---";
charMap[/P/g] = ".--.";
charMap[/Q/g] = "--.-";
charMap[/R/g] = ".-.";
charMap[/S/g] = "...";
charMap[/T/g] = "-";
charMap[/U/g] = "..-";
charMap[/V/g] = "...-";
charMap[/W/g] = ".--";
charMap[/X/g] = "-..-";
charMap[/Y/g] = "-.--";
charMap[/Z/g] = "--..";
charMap[/0/g] = "-----";
charMap[/1/g] = ".----";
charMap[/2/g] = "..---";
charMap[/3/g] = "...--";
charMap[/4/g] = "....-";
charMap[/5/g] = ".....";
charMap[/6/g] = "-....";
charMap[/7/g] = "--...";
charMap[/8/g] = "---..";
charMap[/9/g] = "----.";
}
Class version:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.utils.Dictionary;
public class Morse extends Sprite
{
// map of letters and integers regualr expressions to Morse code conventions
private var charMap:Dictionary;
// five spaces per convention
private var wordSeparator:String = " ";
// three spaces per convention
private var letterSeparator:String = " ";
private var input:TextField;
private var output:TextField;
private var prompt:TextField;
public function Morse()
{
init();
}
private function init():void
{
createMap();
drawUI();
}
private function drawUI():void
{
drawInput();
drawOutput();
drawPrompt();
placeUI();
}
/**
* Places UI elements and positions them relative to each other
*/
private function placeUI():void
{
addChild(prompt);
addChild(input);
addChild(output);
prompt.x = input.x = output.x = prompt.y = 20;
input.y = prompt.y + prompt.height;
output.y = input.y + input.height + 10;
}
/**
* Creates prompt text field
*/
private function drawPrompt():void
{
prompt = new TextField();
prompt.defaultTextFormat = new TextFormat("Arial", 11, 0x004040);
prompt.multiline = output.wordWrap = false;
prompt.autoSize = TextFieldAutoSize.LEFT;
prompt.text = "enter text:"
}
/**
* Creates output text field
*/
private function drawOutput():void
{
output = new TextField();
output.defaultTextFormat = new TextFormat("Arial", 12, 0x000000, "bold");
output.multiline = output.wordWrap = false;
output.border = true;
output.borderColor = 0x008040;
output.background = true;
output.backgroundColor = 0xDFFFEF;
output.width = 500;
output.height = 22;
}
/**
* Creates input text field
*/
private function drawInput():void
{
input = new TextField();
input.defaultTextFormat = new TextFormat("Arial", 12);
input.type = TextFieldType.INPUT;
input.restrict = "A-Z 0-9";
input.multiline = input.wordWrap = false;
input.border = true;
input.borderColor = 0x808080;
input.background = true;
input.backgroundColor = 0xF0F0F0;
input.width = 500;
input.height = 22;
input.addEventListener(Event.CHANGE, onInput);
}
/**
* Handles input text field change event
* @param e
*/
private function onInput(e:Event):void
{
var outString:String = input.text;
// append word separator to words
outString = outString.replace(/\b\w+\b/g, addWordSeparator);
// append letter separator to letters
outString = outString.replace(/\w/g, addLetterSeparator);
// loop through the map and replace characers with corresponding Morse codes
for (var prop:Object in charMap)
outString = outString.replace(RegExp(prop), charMap[prop]);
output.text = outString;
}
/**
* Used in String.replace() to inject word separator
* @return
*/
private function addWordSeparator():String
{
return [arguments[0], wordSeparator].join("");
}
/**
* Used in String.replace() to inject letter separator
* @return
*/
private function addLetterSeparator():String
{
return [arguments[0], letterSeparator].join("");
}
/**
* Creates mapping of alphanumerical characters to Morse code conventions
*/
private function createMap():void
{
// international convention
charMap = new Dictionary();
charMap[/A/g] = ".-";
charMap[/B/g] = "-...";
charMap[/C/g] = "-.-.";
charMap[/D/g] = "-..";
charMap[/E/g] = ".";
charMap[/F/g] = "..-.";
charMap[/G/g] = "--.";
charMap[/H/g] = "....";
charMap[/I/g] = "..";
charMap[/J/g] = ".---";
charMap[/K/g] = "-.-";
charMap[/L/g] = ".-..";
charMap[/M/g] = "--";
charMap[/N/g] = "-.";
charMap[/O/g] = "---";
charMap[/P/g] = ".--.";
charMap[/Q/g] = "--.-";
charMap[/R/g] = ".-.";
charMap[/S/g] = "...";
charMap[/T/g] = "-";
charMap[/U/g] = "..-";
charMap[/V/g] = "...-";
charMap[/W/g] = ".--";
charMap[/X/g] = "-..-";
charMap[/Y/g] = "-.--";
charMap[/Z/g] = "--..";
charMap[/0/g] = "-----";
charMap[/1/g] = ".----";
charMap[/2/g] = "..---";
charMap[/3/g] = "...--";
charMap[/4/g] = "....-";
charMap[/5/g] = ".....";
charMap[/6/g] = "-....";
charMap[/7/g] = "--...";
charMap[/8/g] = "---..";
charMap[/9/g] = "----.";
}
}
}
Copy link to clipboard
Copied
And this solution translates both ways - from alphanumerical to Morse and from Morse to alphanumerical.
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.utils.Dictionary;
// general mapping of chars to morse code
var baseMap:Object;
// map of letters and integers regualr expressions to Morse code conventions
var charMap:Dictionary;
// map of morse to characters
var morseMap:Dictionary;
// five spaces per convention
var wordSeparator:String = " ";
// three spaces per convention
var letterSeparator:String = " ";
var alphaInput:TextField;
var morseOutput:TextField;
var morseInput:TextField;
var alphaOutput:TextField;
var alphaPrompt:TextField;
var morsePrompt:TextField;
init();
function init():void
{
createMaps();
drawUI();
}
function drawUI():void
{
drawInputs();
drawOutputs();
drawPrompts();
placeUI();
}
function drawPrompts():void
{
alphaPrompt = drawPrompt("enter alphanumerical text:");
morsePrompt = drawPrompt("enter morse sequences (letters must be separated by 3 spaces; words - by 5 spaces):");
}
/**
* Creates alphaPrompt test field
*/
function drawPrompt(text:String):TextField
{
var textField:TextField = new TextField();
textField.defaultTextFormat = new TextFormat("Arial", 11, 0x004040);
textField.multiline = morseOutput.wordWrap = false;
textField.autoSize = TextFieldAutoSize.LEFT;
textField.text = text;
return textField;
}
function drawOutputs():void
{
alphaOutput = drawOutput();
morseOutput = drawOutput();
}
/**
* Creates output text field
*/
function drawOutput():TextField
{
var textField:TextField = new TextField();
textField.defaultTextFormat = new TextFormat("Arial", 12, 0x000000, "bold");
textField.multiline = textField.wordWrap = false;
textField.border = true;
textField.borderColor = 0x005329;
textField.background = true;
textField.backgroundColor = 0xF4FFFA;
textField.width = 500;
textField.height = 22;
return textField;
}
function drawInputs():void
{
alphaInput = drawInput("A-Z 0-9", onAlphaInput);
morseInput = drawInput("-. ", onMorseInput);
}
/**
* Creates input text field
* @param restrict - charachters allowed for intput
* @param handler - function that hsndles Event.CHANGE
* @return
*/
function drawInput(restrict:String, handler:Function):TextField
{
var textField:TextField = new TextField();
textField.defaultTextFormat = new TextFormat("Arial", 12);
textField.type = TextFieldType.INPUT;
textField.restrict = restrict;
textField.multiline = textField.wordWrap = false;
textField.border = true;
textField.borderColor = 0x808080;
textField.background = true;
textField.backgroundColor = 0xF0F0F0;
textField.width = 500;
textField.height = 22;
textField.addEventListener(Event.CHANGE, handler);
return textField;
}
/**
* Places UI elements and positions them relative to each other
*/
function placeUI():void
{
var children:Array = [alphaPrompt, alphaInput, morseOutput, morsePrompt, morseInput, alphaOutput];
var nextY:Number = 20;
for each (var textField:TextField in children)
{
addChild(textField);
textField.x = 20;
textField.y = nextY;
nextY += textField.height + 10 * int(textField != alphaPrompt && textField != morsePrompt);
}
}
/**
* Handles alphaInput text field change event
* @param e
*/
function onAlphaInput(e:Event):void
{
var outString:String = alphaInput.text;
// append word separator to words
outString = outString.replace(/\b\w+\b/g, addWordSeparator);
// append letter separator to letters
outString = outString.replace(/\w/g, addLetterSeparator);
// loop through the map and replace characers with corresponding Morse codes
for (var prop:Object in charMap)
outString = outString.replace(RegExp(prop), charMap[prop]);
morseOutput.text = outString;
}
/**
* Handles morseInput text field change event.
* @param e
*/
function onMorseInput(e:Event):void
{
var outputString:String = morseInput.text;
for each (var result:String in morseInput.text.match(/[\.\-]+\s\s\s/g))
{
if (morseMap[result])
{
outputString = outputString.replace(result, morseMap[result]);
}
else
{
// if this is not a valid code - remove it from the text input
morseInput.text = morseInput.text.replace(result, "");
outputString = outputString.replace(result, "");
}
}
outputString = outputString.replace(/[\.\-]/g, "").replace(/\s+/g, " ");
alphaOutput.text = outputString;
}
/**
* Used in String.replace() to inject word separator
* @return
*/
function addWordSeparator():String
{
return [arguments[0], wordSeparator].join("");
}
/**
* Used in String.replace() to inject letter separator
* @return
*/
function addLetterSeparator():String
{
return [arguments[0], letterSeparator].join("");
}
function createMaps():void
{
createBaseMap();
createCharMap();
}
/**
* Creates chars to morse code relations
*/
function createBaseMap():void
{
// international convention
baseMap = {};
baseMap["A"] = ".-";
baseMap["B"] = "-...";
baseMap["C"] = "-.-.";
baseMap["D"] = "-..";
baseMap["E"] = ".";
baseMap["F"] = "..-.";
baseMap["G"] = "--.";
baseMap["H"] = "....";
baseMap["I"] = "..";
baseMap["J"] = ".---";
baseMap["K"] = "-.-";
baseMap["L"] = ".-..";
baseMap["M"] = "--";
baseMap["N"] = "-.";
baseMap["O"] = "---";
baseMap["P"] = ".--.";
baseMap["Q"] = "--.-";
baseMap["R"] = ".-.";
baseMap["S"] = "...";
baseMap["T"] = "-";
baseMap["U"] = "..-";
baseMap["V"] = "...-";
baseMap["W"] = ".--";
baseMap["X"] = "-..-";
baseMap["Y"] = "-.--";
baseMap["Z"] = "--..";
baseMap["0"] = "-----";
baseMap["1"] = ".----";
baseMap["2"] = "..---";
baseMap["3"] = "...--";
baseMap["4"] = "....-";
baseMap["5"] = ".....";
baseMap["6"] = "-....";
baseMap["7"] = "--...";
baseMap["8"] = "---..";
baseMap["9"] = "----.";
}
/**
* Creates mapping of alphanumerical characters to Morse code conventions
*/
function createCharMap():void
{
charMap = new Dictionary();
morseMap = new Dictionary();
for (var prop:String in baseMap)
{
// create chars to morse map
charMap[new RegExp(prop, "g")] = baseMap[prop];
// create morse to chars map
morseMap[baseMap[prop] + letterSeparator] = prop;
}
}
Copy link to clipboard
Copied
thanks Andrei1 for you reply for the code.
i am famliar only with classes however i will try both.
I never thought somebody would post the FULL code but you did.
thanks man...
Copy link to clipboard
Copied
You are welcome.
Here is a class version of the two-way translator:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.utils.Dictionary;
public class Morse extends Sprite
{
// general mapping of chars to morse code
private var baseMap:Object;
// map of letters and integers regualr expressions to Morse code conventions
private var charMap:Dictionary;
// map of morse to characters
private var morseMap:Dictionary;
// five spaces per convention
private var wordSeparator:String = " ";
// three spaces per convention
private var letterSeparator:String = " ";
private var alphaInput:TextField;
private var morseOutput:TextField;
private var morseInput:TextField;
private var alphaOutput:TextField;
private var alphaPrompt:TextField;
private var morsePrompt:TextField;
public function Morse()
{
init();
}
private function init():void
{
createMaps();
drawUI();
}
private function drawUI():void
{
drawInputs();
drawOutputs();
drawPrompts();
placeUI();
}
private function drawPrompts():void
{
alphaPrompt = drawPrompt("enter alphanumerical text:");
morsePrompt = drawPrompt("enter morse sequences (letters must be separated by 3 spaces; words - by 5 spaces):");
}
/**
* Creates alphaPrompt test field
*/
private function drawPrompt(text:String):TextField
{
var textField:TextField = new TextField();
textField.defaultTextFormat = new TextFormat("Arial", 11, 0x004040);
textField.multiline = morseOutput.wordWrap = false;
textField.autoSize = TextFieldAutoSize.LEFT;
textField.text = text;
return textField;
}
private function drawOutputs():void
{
alphaOutput = drawOutput();
morseOutput = drawOutput();
}
/**
* Creates output text field
*/
private function drawOutput():TextField
{
var textField:TextField = new TextField();
textField.defaultTextFormat = new TextFormat("Arial", 12, 0x000000, "bold");
textField.multiline = textField.wordWrap = false;
textField.border = true;
textField.borderColor = 0x005329;
textField.background = true;
textField.backgroundColor = 0xF4FFFA;
textField.width = 500;
textField.height = 22;
return textField;
}
private function drawInputs():void
{
alphaInput = drawInput("A-Z 0-9", onAlphaInput);
morseInput = drawInput("-. ", onMorseInput);
}
/**
* Creates input text field
* @param restrict - charachters allowed for intput
* @param handler - function that hsndles Event.CHANGE
* @return
*/
private function drawInput(restrict:String, handler:Function):TextField
{
var textField:TextField = new TextField();
textField.defaultTextFormat = new TextFormat("Arial", 12);
textField.type = TextFieldType.INPUT;
textField.restrict = restrict;
textField.multiline = textField.wordWrap = false;
textField.border = true;
textField.borderColor = 0x808080;
textField.background = true;
textField.backgroundColor = 0xF0F0F0;
textField.width = 500;
textField.height = 22;
textField.addEventListener(Event.CHANGE, handler);
return textField;
}
/**
* Places UI elements and positions them relative to each other
*/
private function placeUI():void
{
var children:Array = [alphaPrompt, alphaInput, morseOutput, morsePrompt, morseInput, alphaOutput];
var nextY:Number = 20;
for each (var textField:TextField in children)
{
addChild(textField);
textField.x = 20;
textField.y = nextY;
nextY += textField.height + 10 * int(textField != alphaPrompt && textField != morsePrompt);
}
}
/**
* Handles alphaInput text field change event
* @param e
*/
private function onAlphaInput(e:Event):void
{
var outString:String = alphaInput.text;
// append word separator to words
outString = outString.replace(/\b\w+\b/g, addWordSeparator);
// append letter separator to letters
outString = outString.replace(/\w/g, addLetterSeparator);
// loop through the map and replace characers with corresponding Morse codes
for (var prop:Object in charMap)
outString = outString.replace(RegExp(prop), charMap[prop]);
morseOutput.text = outString;
}
/**
* Handles morseInput text field change event.
* @param e
*/
private function onMorseInput(e:Event):void
{
var outputString:String = morseInput.text;
for each (var result:String in morseInput.text.match(/[\.\-]+\s\s\s/g))
{
if (morseMap[result])
{
outputString = outputString.replace(result, morseMap[result]);
}
else
{
// if this is not a valid code - remove it from the text input
morseInput.text = morseInput.text.replace(result, "");
outputString = outputString.replace(result, "");
}
}
alphaOutput.text = outputString.replace(/[\.\-]/g, "").replace(/\s+/g, " ");
}
/**
* Used in String.replace() to inject word separator
* @return
*/
private function addWordSeparator():String
{
return [arguments[0], wordSeparator].join("");
}
/**
* Used in String.replace() to inject letter separator
* @return
*/
private function addLetterSeparator():String
{
return [arguments[0], letterSeparator].join("");
}
private function createMaps():void
{
createBaseMap();
createCharMap();
}
/**
* Creates chars to morse code relations
*/
private function createBaseMap():void
{
// international convention
baseMap = {};
baseMap["A"] = ".-";
baseMap["B"] = "-...";
baseMap["C"] = "-.-.";
baseMap["D"] = "-..";
baseMap["E"] = ".";
baseMap["F"] = "..-.";
baseMap["G"] = "--.";
baseMap["H"] = "....";
baseMap["I"] = "..";
baseMap["J"] = ".---";
baseMap["K"] = "-.-";
baseMap["L"] = ".-..";
baseMap["M"] = "--";
baseMap["N"] = "-.";
baseMap["O"] = "---";
baseMap["P"] = ".--.";
baseMap["Q"] = "--.-";
baseMap["R"] = ".-.";
baseMap["S"] = "...";
baseMap["T"] = "-";
baseMap["U"] = "..-";
baseMap["V"] = "...-";
baseMap["W"] = ".--";
baseMap["X"] = "-..-";
baseMap["Y"] = "-.--";
baseMap["Z"] = "--..";
baseMap["0"] = "-----";
baseMap["1"] = ".----";
baseMap["2"] = "..---";
baseMap["3"] = "...--";
baseMap["4"] = "....-";
baseMap["5"] = ".....";
baseMap["6"] = "-....";
baseMap["7"] = "--...";
baseMap["8"] = "---..";
baseMap["9"] = "----.";
}
/**
* Creates mapping of alphanumerical characters to Morse code conventions
*/
private function createCharMap():void
{
charMap = new Dictionary();
morseMap = new Dictionary();
for (var prop:String in baseMap)
{
// create chars to morse map
charMap[new RegExp(prop, "g")] = baseMap[prop];
// create morse to chars map
morseMap[baseMap[prop] + letterSeparator] = prop;
}
}
}
}
Copy link to clipboard
Copied
Hi Black Blade 5, to create a simple morse code translator in AS 3.0, set up two text boxes (input_txt and output_txt) and a button (translate_btn). Use this code inside a movieclip:
This lets you type letters and see their Morse equivalents when clicking "Translate." For full functionality, just expand the morse object with more letters. It’s a simple way to build a basic morse code translator .
Find more inspiration, events, and resources on the new Adobe Community
Explore Now