Skip to content

Instantly share code, notes, and snippets.

@codler
Created February 5, 2013 16:51
Show Gist options
  • Select an option

  • Save codler/4715753 to your computer and use it in GitHub Desktop.

Select an option

Save codler/4715753 to your computer and use it in GitHub Desktop.
Miniräknare, actionscript 2, 2007-03-30
//********************************
// Made by Han Lin Yap
// Copyright Codler
//********************************
stop();
var knapp = new Array();// Kommer att innehålla knapparna.
var m_mall = new Array();// Knappens bakgrund
var knappens_text = new Array(); // Knappens text
/* Start av konfiguering */
var xstart = 50; // start position för knappar i x-led
var ystart = 100; // start position för knappar i y-led
var xvakum = 50;// Mellan rum i x-led
var yvakum = 50;// Mellan rum i y-led
var xnum = 5; // antal knappar i x-led
var ynum = 4; // antal knappar i y-led
var txt_farg = 0x555555; // Hex-decimaler - Text färgen tex: 0xCCCCCC
var max_tkn = 8; // Max antal tecken på displayen
/* Slut av konfiguering */
var xstart_tmp = xstart; // Behåller ursprungliga xstart
var ystart_tmp = ystart; // Behåller ursprungliga ystart
var x_tmp // Högsta värdet av bredden
var y_tmp // Högsta värdet av höjden
var k:Number = 0;
/* Ange knapparnas funtioner */
// Tillgängliga matematiska symboler-> (0-9), (+-*/), (PI), (.), (=), (C), (del)
knappens_text[0] = "7"
knappens_text[1] = "8"
knappens_text[2] = "9"
knappens_text[3] = "*"
knappens_text[4] = "/"
knappens_text[5] = "4"
knappens_text[6] = "5"
knappens_text[7] = "6"
knappens_text[8] = "+"
knappens_text[9] = "-"
knappens_text[10] = "1"
knappens_text[11] = "2"
knappens_text[12] = "3"
knappens_text[13] = "C"
knappens_text[14] = "del"
knappens_text[15] = "0"
knappens_text[16] = "."
knappens_text[17] = "PI"
knappens_text[18] = "e"
knappens_text[19] = "="
// Tar bort undefined i tomma knappens_text
function fyll(kn) {
if (kn == undefined) {
kn = "";
};
return kn;
}
// y-led
for (j=0;j<ynum;j++) {
// x-led
for (i=0;i<xnum;i++) {
// Knappens bakgrund
attachMovie("mall","mall"+k, 100+k)
m_mall[k] = eval("mall"+k)
m_mall[k]._x = xstart
m_mall[k]._y = ystart
// Siffror, Text
createTextField("knapp"+k, 1000+k, xstart-5, ystart-8, 40, 40);
knapp[k] = eval("knapp"+k)
knapp[k].selectable = false;
myformat = new TextFormat();
myformat.color = txt_farg;// Text färg
myformat.bold = true;
myformat.size = 20
myformat.knapp[k].font = "_sans";
knapp[k].text = fyll(knappens_text[k]); // Knappens text
knapp[k].setTextFormat(myformat);
xstart += xvakum;
k++;
}
x_tmp = xstart;
xstart = xstart_tmp;
ystart += yvakum;
}
y_tmp = ystart;
ystart = ystart_tmp;
// bakgrunden
attachMovie("bg","bg"+1, 1)
bg1._width = x_tmp
bg1._height = y_tmp
bg1._x = 100
bg1._y = 50
bg1._x = bg1._x+xstart
bg1._y = bg1._y+ystart
// Miniräknarens display bg
attachMovie("displaybg","displaybg"+1, 2)
displaybg1._alpha = 50
displaybg1._x = bg1._x
displaybg1._y = 40
// Miniräknarens display
createTextField("displayen", 3, xstart, 10, 205, 50);
displayen.selectable = true;
myformat2 = new TextFormat();
myformat2.color = txt_farg;// Text färg
myformat2.bold = true;
myformat2.displayen.font = "_sans";
myformat2.size = 50
myformat2.align = "right"
displayen.text = "0";
displayen.setTextFormat(myformat2);
displayen.maxChars = 8
// Loppar igenom alla knappar och tilldelar onPress funktionen för varje knapp.
for (k; k>=0; k--) {
// Ger varsin m_mall en unik värde i "kvar".
m_mall[k].kvar = k;
m_mall[k].onPress = function() {
// anropar kalkulera funktionen och "this.kvar" anger vilken knapp.
displayen.text = kalkulera(knapp[this.kvar].text);
/*Här ska du kommentera bättre!
^fixade till avrundningen
^lade dit en exponent knapp
^fixade till trace-beräkning,
dvs i trace visar den
förkortningen och avrundningens beräkningar.
^Fixade en bug som jag hittade.
som var att efter man tröck en symbol för andra gången
och sedan tröck på en siffra lade den dit en siffra
istället för en ny enskild siffra som ska hända efter man tröck på en symbol.
^Fixade så att om man räknar över max_tkn så övergår den till exponent. På så sätt kan man räkna oändligt! =D
annars var det till exempel om max_tkn är 8 så kunde man bara max räkna till 99 999 999.
*/
trace("Talet innan:"+displayen.text)
// Kollar om exponenten finns i displayen och om det behöves förkortas
if (displayen.text.split("e").length == 2 && displayen.text.length > max_tkn) {
/* delar upp i array, i två delar.
e[0] är före talen före exponenten
e[1] är exponenten
*/
e = displayen.text.split("e");
trace("Display.length:"+displayen.text.length)
trace("Max_tkn:"+max_tkn)
trace("e1:"+e[0])
trace("e2:"+e[1])
trace("e1.length:"+ e[0].length + " e2.length:" + e[1].length)
/* Kollar hur många fler tecken det är än max_tkn,
dvs antal tecken som ska bort.
*/
bort = Number(displayen.text.length)-max_tkn;
trace("Antal tkn bort:"+bort+"="+displayen.text.length+" - "+max_tkn)
/* Förkortar e[0] så att e[1] får plats.
||| e[0] plus e[1] ska få plats i max_tkm
*/
e[0] = e[0].substring(0,e[0].length-bort+1);
// avrundningen
// Kollar ifall det finns decimaler
komma = e[0].split(".");
if (komma.length == 2) {
trace("Antal decimaler:"+Math.pow(10,-komma[1].length+1))
// avrundar till så många decimaler som kan få plats i ||| se kommentaren ovan.
e[0] = Math.round(e[0] / Math.pow(10,-komma[1].length+1)) * Math.pow(10,-komma[1].length+1);
}
// Lägger ihop e[0] och e[1]
e[0] = e[0] + "e" + e[1];
displayen.text = e[0];
}
// Max antal tecken
trace("Talet efter:"+displayen.text)
// Gör möjlig att räkna oändligt stora siffror. Genom att göra om till exponent.
// Kollar om det är större är max_tkn och om inte det redan finns exponent.
if (displayen.text.length > max_tkn && displayen.text.indexOf("e") == -1) {
// bort.length = exponenten // +2 tkn ("e+")
bort = displayen.text.length - max_tkn;
trace(bort)
bort_langd = String(bort).length;
trace(bort_langd)
// Tar bort så att exponenten får plats plus håller inom max_tkn
displayen.text = displayen.text.substring(0, displayen.text.length-bort-Number(bort_langd)-2);
// räknar hur mycket exponenten blev
Total_expo = Number(bort)+Number(bort_langd)+2;
displayen.text = displayen.text + "e+" + Total_expo;
}
displayen.text = displayen.text.substring(0,max_tkn);
displayen.setTextFormat(myformat2);
};
}
function kalkulera(num) {
// Tillgängliga matematiska symboler-> (0-9), (+-*/), (PI), (.), (=), (C), (del)
// matte funktion (C)
if (num == "C") {
minne = null; // En temporär variabel som används vid symbol
symbol = null; // Nollställer symbol
symbol2 = null;
symbol3 = null;
minne2 = null;
tryckt = false;
return "0"
}
// matte funktion (del)
if (num == "del") {
if (displayen.text.length != 1) {
return displayen.text.substring(0,displayen.text.length-1);
} else if (displayen.text != "0") {
return "0";
} else {
return displayen.text;
}
}
// matte funktion (.)
if (num == ".") {
punkt = displayen.text.split(".")
if (punkt.length > 1) {
return displayen.text
}
}
// matte funktion (PI)
if (num == "PI") {
return String(Math.PI).substr(0,max_tkn);
}
// matte function (+-*/)
if (num == "+" || num == "-" || num == "*" || num == "/") {
if (minne == null) {
minne = displayen.text;
symbol = num;
return "0";
} else {
if (symbol3 != null) {
minne = displayen.text;
symbol = num;
symbol3 = null;
return "0"
}
// symbol2 kommer bara innehålla (+-*/) "andra minnet"
symbol2 = symbol;
if (tryckt2 == true) {
tryckt2 = false;
tryckt = true;
symbol = num;
minne = summa(symbol2);
return minne;
}
symbol = num;
tryckt = true;
return summa(symbol2);
}
}
function summa(sym) {
switch (sym) {
case "+": return Number(minne) + Number(displayen.text);
case "-": return Number(minne) - Number(displayen.text);
case "*": return Number(minne) * Number(displayen.text);
case "/": return Number(minne) / Number(displayen.text);
}
}
function summa2(sym) {
switch (sym) {
case "+": return Number(displayen.text) + Number(minne);
case "-": return Number(displayen.text) - Number(minne);
case "*": return Number(displayen.text) * Number(minne);
case "/": return Number(displayen.text) / Number(minne);
}
}
if (num == "=" && symbol3 != null) {
return summa2(symbol3);
}
if (num == "=") {
if (symbol == undefined) {
return displayen.text;
} else {
symbol3 = symbol;
tillbaka = summa(symbol3);
minne = displayen.text;
if (tillbaka == undefined) {
tillbaka = displayen.text;
}
return tillbaka;
}
}
if (tryckt == true) {
tryckt = false;
tryckt2 = true;
return num;
}
// matte funktion (0-9)
if ((displayen.text == "0" && num ne ".") || symbol3 != null) {
if (symbol3 != null) {
minne = null; // En temporär variabel som används vid symbol
symbol3 = null;
}
return num;
} else {
return displayen.text + num;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment