Перейти к содержимому



Калькулятор во flash

#1 Renovatio
Renovatio
  • Неактивные
  • 209 сообщений
  • Репутация: 5
0

Отправлено 10 Июнь 2009 - 09:50

Cтараюсь создать калькурятор на flash. Начал с простого, простой код:
tablo = 0;//переменная динамического поля
but_1.onPress = function():Void  {
	var num:Number = 1;
	numBer = numBer*10+num;
/*Прописываем чтобы, например, нажатие трижды на кнопку but_1 дало 111
Первоначальное значение переменной, хранящей введенное число, равно 0.
• Нажатие кнопки 1: переменная умножается на 10 и к ней прибавляется 1. Результат — 1.
• Второе нажатие кнопки 1: 1 • 10 + 1 = 11.*/
	tablo = numBer;
	trace(num);
	trace(isNaN(tablo));//выводит true
};
trace(Number(null)); // Выводит: Nan (приведение null к числовому типу)
Если у кого-то еще есть, может выложите исходники к книге Гурсого про ActionScript 2.0???

Что я делаю не так????
Исходник по адресу http://www.divshare....oad/7626094-83c

 

 

  • 0

#2 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Июнь 2009 - 00:39

Renovatio, а что такое null? Ты думаешь это ноль? Ты глубоко ошибаешься. null - пустота.
  • 0

#3 Renovatio
Renovatio
    Topic Starter
  • Неактивные
  • 209 сообщений
  • Репутация: 5

Отправлено 11 Июнь 2009 - 07:16

"Тип null практически аналогичен типу undefined. Единственная относящаяся к нему величина, задаваемая литералом null, подобно undefined, показывает, что некоторая переменная или свойство не имеет конкретного значения. Однако null, в отличие от undefined, никогда не присваивается автоматически. Эта величина введена в язык для того, чтобы было возможно различить две принципиально разные ситуации: переменная не существует или же она просто не содержит пока конкретного элемента данных."

Дело не в null. Я сам не пойму в чем дело. Этот код также вызывает ошибку:
tablo = 0;//переменная динамического поля
but_1.onPress = function():Void  {
	var num:Number = 1;
	var numBer:Number = null;
	numBer = numBer*10+num;
	tablo = numBer;
	trace(num);
	trace(isNaN(tablo));//выводит true
};
Вопрос именно почему когда переменные уже типизированы, возвращается NaN??? Потому что в строке numBer = numBer*10+num; одни числа. Но для компилятора это не число trace(isNaN(tablo));//выводит true.
Может, на этапе присвоения tablo = numBer; происходит динамическое изменение типов?? Но не должно ведь.
  • 0

#4 Renovatio
Renovatio
    Topic Starter
  • Неактивные
  • 209 сообщений
  • Репутация: 5

Отправлено 11 Июнь 2009 - 08:55

Вот работающий код:
tablo = 0;//переменная динамического поля
numBer = 0;
but_1.onPress = function():Void  {
	var num:Number = 1;
	numBer = numBer*10+num;
	/*Прописываем чтобы, например, нажатие трижды на кнопку but_1 дало 111
	Первоначальное значение переменной, хранящей введенное число, равно 0.
	• Нажатие кнопки 1: переменная умножается на 10 и к ней прибавляется 1. Результат — 1.
	• Второе нажатие кнопки 1: 1 • 10 + 1 = 11.*/
	tablo = numBer;
	trace(num);
};

Как мне сказали, нужно было инициализировать numBer.
trace(isNaN(tablo));//выводит false
  • 0

#5 Renovatio
Renovatio
    Topic Starter
  • Неактивные
  • 209 сообщений
  • Репутация: 5

Отправлено 06 Июль 2009 - 12:17

Доработал калькулятор по книгу Гурского. Вот что вышло:
//Объявляем переменные
tablo = 0;
numBer = 0;
num = null;
tochka = true;
n = 1;
str = "";
memory = null;
operat = null;
but_ravno.enabled = false;
//Обработчики нажатий кнопок
but_1.onPress = function() {
	num = 1;
	MyAdd();
};
but_2.onPress = function() {
	num = 2;
	MyAdd();
};
but_3.onPress = function() {
	num = 3;
	MyAdd();
};
but_4.onPress = function() {
	num = 4;
	MyAdd();
};
but_5.onPress = function() {
	num = 5;
	MyAdd();
};
but_6.onPress = function() {
	num = 6;
	MyAdd();
};
but_7.onPress = function() {
	num = 7;
	MyAdd();
};
but_8.onPress = function() {
	num = 8;
	MyAdd();
};
but_9.onPress = function() {
	num = 9;
	MyAdd();
};
but_0.onPress = function() {
	num = 0;
	MyAdd();
};
//Обработка нажатий точки
but_tochka.onPress = function() {
	if (tochka) {
		tochka = false;
		str += ".";
	}
};
//Инверсия знака
but_znak.onPress = function() {
	if (stf != 0 && str != "") {
		numBer *= -1;
	}
	if (str.substring(0, 1) != "-") {
		str = "-"+str;
	} else {
		str = str.substring(1);
	}
	if (str.length<17) {
		tablo = str;
	} else {
		tablo = numBer;
	}
};
//Обнуление
but_clear.onPress = function() {
	tablo=0, num=0, tochka=true, numBer=0, n=1, str="";
	but_ravno.enabled=false, block(true), block2(true), block3(true);
};
//Тригонометрические функции
but_plus.onPress = function() {
	calc("plus");
};
but_minus.onPress = function() {
	calc("minus");
};
but_umnojit.onPress = function() {
	calc("umnojit");
};
but_delit.onPress = function() {
	calc("delit");
};
but_stepen.onPress = function() {
	calc("stepen");
};
//Наша функция, которая все обрабатывает
function MyAdd() {
	if (tochka) {
		numBer = numBer*10+num;
	} else {
		numBer += num/Math.pow(10, n);
		n++;
	}
	if (str != 0) {
		str = str+num;
	} else {
		str = String(num);
	}
	if (str.length<17) {
		tablo = str;
	} else {
		tablo = numBer;
	}
}
//Обработка нажатий операндов
function calc(opera) {
	memory = numBer;
	numBer = 0;
	str = "";
	operat = opera;
	but_ravno.enabled = true;
	block(false);
	block2(true);
	block3(false);
}
//Обработка при нажатии на знак равно
but_ravno.onPress = function() {
	var result = null;
	if (operat == "plus") {
		result = memory+numBer;
	}
	if (operat == "minus") {
		result = memory-numBer;
	}
	if (operat == "umnojit") {
		result = memory*numBer;
	}
	if (operat == "delit") {
		result = memmory/numBer;
	}
	if (operat == "stepen") {
		result = Math.pow(memory, numBer);
	}
	numBer = result;
	str = String(result);
	tablo = result;
	but_ravno.enabled = false;
	block(true);
	block2(false);
	block3(true);
};
//Функция блокировки арифметических операций
function block(par) {
	but_plus.enabled=par, but_umnojit.enabled=par, but_minus.enabled=par, but_delit.enabled=par, but_stepen.enabled=par;
}
//Функция блокировки кнопок с цифрами
function block2(par) {
	for (i=0; i<=9; i++) {
		eval("but_"+i).enabled = par;
	}
	but_tochka.enabled = par;
	but_E.enabled = par;
	but_PI.enabled = par;
}
//Функции обработки тригонометрических кнопок
but_sin.onPress = function() {
	func("sin");
};
but_cos.onPress = function() {
	func("cos");
};
but_tan.onPress = function() {
	func("tan");
};
but_ln.onPress = function() {
	func("ln");
};
but_sqrt.onPress = function() {
	func("sqrt");
};
but_round.onPress = function() {
	func("round");
};
function func(par) {//функция обрабатывает нажатие на тригонометрические кнопки
	result = null;
	if (par == "sin") {
		result = Math.sin(numBer/180*Math.PI);
	}
	if (par == "cos") {
		result = Math.cos(numBer/180*Math.PI);
	}
	if (par == "tan") {
		result = Math.tan(numBer/180*Math.PI);
	}
	if (par == "ln") {
		result = Math.log(numBer);
	}
	if (par == "sqrt") {
		result = Math.sqrt(numBer);
	}
	if (par == "round") {
		result = Math.round(numBer);
	}
	numBer = result;
	str = String(result);
	tablo = result;
}
function block3(par) {
	but_sin.enabled=par, but_cos.enabled=par, but_tan.enabled=par, but_ln.enabled=par, but_sqrt.enabled=par, but_round.enabled=par;
}
//Математические константы
but_PI.onPress = function() {
	numBer = Math.PI;
	str = String(Math.PI);
	block2(false);
	tablo = Math.PI;
};
but_E.onPress = function() {
	numBer = Math.E;
	str = String(Math.E);
	block2(false);
	tablo = Math.E;
};

Только есть проблема с умножением и делением, так что если кому надо, то исправьте.
Инженерный калькулятор можно посмотреть здесь!
Исходник здесь: http://www.divshare....oad/7839853-38c
  • 0

#6 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Июль 2009 - 18:53

Renovatio, эх совсем это не инденерный каликулятор. Он не точно вычисляет значения sin и cos. Так как во Flash они не проработаны. Сам проверь простейшими углами: 0 90 180 270.

Ты в чём пишешь? Macromedia Flash 2004? Если да, то там ActionScript 2.0 удобнее. Ещё бы имело аспект объявлять переменные со строгой типизацией. Это бы улучшило понимание кода. + половине кода можно было назначить один и тот же обработчик, например для кнопок 1,2,3,4...
Просто параметр бы нужный передавался.
Да уж, калькулятор конечно у тебя простейший. :) Ну ничего, я наверное на Flash и такого бы не сделал.
  • 0

#7 Renovatio
Renovatio
    Topic Starter
  • Неактивные
  • 209 сообщений
  • Репутация: 5

Отправлено 07 Июль 2009 - 00:02

Дааааа, что-то я не туда ссылку дал, но точно на том форуме был отличный инженерный калькулятор.

Я пишу во flash CS3. На ActionScript 2.0 пока что, решил что он легче и начинать надо с малого.
Когда объявлял со строгой типизацией, то постоянно были проблемы типи Not a Number!! И это очень огорчало, поэтому от этого отказался.

Да уж, калькулятор конечно у тебя простейший. Ну ничего, я наверное на Flash и такого бы не сделал.

Так это и не я как бы. Это урок у Гурского. Кто по нем не учился??? :)
  • 0

#8 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 07 Июль 2009 - 01:20

Renovatio, про строгую типизацию... Там нет преобразования типа и локальных переменных?
  • 0

#9 Renovatio
Renovatio
    Topic Starter
  • Неактивные
  • 209 сообщений
  • Репутация: 5

Отправлено 07 Июль 2009 - 07:53

Да вроде переменная result является локальной. А преобразования типов я что-то не заметил. А к чему вы это спросили??? Думаете это как-то было связано с ошибкой???
  • 0

#10 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Июль 2009 - 22:57

Вот работающий код:

tablo = 0;//переменная динамического поля
numBer = 0;
but_1.onPress = function():Void  {
	var num:Number = 1;
	numBer = numBer*10+num;
	/*Прописываем чтобы, например, нажатие трижды на кнопку but_1 дало 111
	Первоначальное значение переменной, хранящей введенное число, равно 0.
	• Нажатие кнопки 1: переменная умножается на 10 и к ней прибавляется 1. Результат — 1.
	• Второе нажатие кнопки 1: 1 • 10 + 1 = 11.*/
	tablo = numBer;
	trace(num);
};

Как мне сказали, нужно было инициализировать numBer.
trace(isNaN(tablo));//выводит false


Это само собой вытекает.
Если ты не иницыализируешь Переменную numBer - то даже если она имеет чисовой тип, она не имеет начального значения. То есть undifened.
Так вот, ты несуществующую сущность использовал в функции так:
numBer = numBer*10+num;
Несуществующей сущности присвоить несуществующую сущность, умноженную на 10 и прибавить единицу.

Да вроде переменная result является локальной. А преобразования типов я что-то не заметил. А к чему вы это спросили??? Думаете это как-то было связано с ошибкой???

Я спросил это к тому, что использовать глобальные переменные это ужасный тон. Потому что не всегда увидишь, где меняются значения переменных. Что же нам нельзя возвращать значение во временную память?

Про преобразования типов я заговорил, потому что в большинстве языков программирования присуствуют специальные функции или операторы для преобразования типов.
Если бы я писал калликулятор, то естественно бы сделал возможность записи выражения с подстановками, а затем его проверки. Это более правильно, чем возвращать пользователю сразу результат. Тут нужна математическая логика.
  • 0

#11 Renovatio
Renovatio
    Topic Starter
  • Неактивные
  • 209 сообщений
  • Репутация: 5

Отправлено 11 Июль 2009 - 23:22

Это само собой вытекает.
Если ты не иницыализируешь Переменную numBer - то даже если она имеет чисовой тип, она не имеет начального значения. То есть undifened.

A разве я не присвоил ей значение 0???
tablo = 0;//переменная динамического поля
numBer = 0;

Я спросил это к тому, что использовать глобальные переменные это ужасный тон. Потому что не всегда увидишь, где меняются значения переменных. Что же нам нельзя возвращать значение во временную память?


Вы относите к глобальным те переменные, которые объявлены вне тела функци??? Потому что в ActionScript есть объект _global, который обладает глобальной видимостью и его видно на всех временных шкалах. В него можно запихнуть все что угодно.

А вообще, спасибо за комментирование, хоть у меня и возникает еще больше вопросов по ходу. :)
  • 0

#12 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Июль 2009 - 11:21

Renovatio, вот кстати что ещё интересного нашёл
Flash: isNaN( undifined ) в разных версиях плеера

A разве я не присвоил ей значение 0???

Присвоили, но это уже позже. Я отталкиваюсь от первоначального вопроса.

Вы относите к глобальным те переменные, которые объявлены вне тела функци???

Это частное выражение глобальных переменных. Естественно если они объявлены вне функций, то они глобальны во всей видимости программы. А то что в AS есть объект _global, так нам он не нужен по сути.

И теперь мой вопрос: Сообщение #5 ваше, код приведённый в нём рабочий? Просто я поглядел на действия кнопок 1 2 3 4 и т.д.
Там в теле функции(т.е. в локальной видимости) определяется переменнакя num, а затем вызывается функция MyAdd(). Получается, что переменная num видна во внутренней функции и её не надо передавать по параметру? Если да, то Flash это ужас...

Кстати вот что ещё нашёл по поводу приведения к числу(и всё таки оно есть)
Number(undefined)=NaN
Number(null)=0
Number(true)=1
Number(false)=0
Number(NaN)=NaN
Number("")= 0
Number("5")=5
Number("5a")=NaN

А вот что по функции isNaN()
isNaN()
isNaN(0/0)=true
isNaN(5/0)=false
isNaN(Math.sqrt(-1))=true
isNaN(Math.asin(2))=true
isNaN("5")=false
isNaN("5a")=true

Кстати у меня кроюстся смутные сомнения, что выдаст
trace(isNaN(0));
Возможно, что true, тогда все вопросы разом должны отпасть.
  • 0

#13 Renovatio
Renovatio
    Topic Starter
  • Неактивные
  • 209 сообщений
  • Репутация: 5

Отправлено 12 Июль 2009 - 11:44

Как я и говорил, код не совсем рабочий. В нем не обрабатывается умножение и деление, но это к моменту окончания написания кода было не столь существенно, потому что я нашел полностью рабочий калькулятор на flasher.ru. Вот его код:
// Объявляем переменные
var tablo = 0;
var num = 0;
var tochka = true;
var Numbers = 0;
var n = 1;
var Str = "";
var memory = null;
var operation = null;
// Отключаем кнопку "равно"
But_RAVNO.enabled = false;
// Код для кнопки очистки экрана
But_CLEAR.onPress = function() {
	tablo = 0;
	num = 0;
	tochka = true;
	Numbers = 0;
	n = 1;
	Str = "";
	But_RAVNO.enabled = false;
	block2(true);
	block(true);
	block3(true);
};
// Обработчики нажатия кнопок с цифрами
But_0.onPress = function() {
	num = 0;
	MyAdd();
};
But_1.onPress = function() {
	num = 1;
	MyAdd();
};
But_2.onPress = function() {
	num = 2;
	MyAdd();
};
But_3.onPress = function() {
	num = 3;
	MyAdd();
};
But_4.onPress = function() {
	num = 4;
	MyAdd();
};
But_5.onPress = function() {
	num = 5;
	MyAdd();
};
But_6.onPress = function() {
	num = 6;
	MyAdd();
};
But_7.onPress = function() {
	num = 7;
	MyAdd();
};
But_8.onPress = function() {
	num = 8;
	MyAdd();
};
But_9.onPress = function() {
	num = 9;
	MyAdd();
};
// Функция, отвечающая за добавление десятичной точки
But_TOCHKA.onPress = function() {
	if (tochka) {
		tochka = false;
		Str += ".";
	}
};
// Код для кнопки изменения знака
But_ZNAK.onPress = function() {
	if (Str != 0 && Str != "") {
		Numbers *= -1;
		if (Str.substring(0, 1) != "-") {
			Str = "-"+Str;
		} else {
			Str = Str.substring(1);
		}
		if (Str.length<17) {
			tablo = Str;
		} else {
			tablo = Numbers;
		}
	}
};
// Функция, формирующая по нажатиям кнопок операнды 
function MyAdd() {
	if (tochka) {
		Numbers = Numbers*10+num;
	} else {
		Numbers += num/Math.pow(10, n);
		n++;
	}
	if (Str != 0) {
		Str = Str+num;
	} else {
		Str = String(num);
	}
	if (Str.length<17) {
		tablo = Str;
	} else {
		tablo = Numbers;
	}
}
// Обработчики события нажатия кнопок арифметических операций
But_PLUS.onPress = function() {
	calc("plus");
};
But_MINUS.onPress = function() {
	calc("minus");
};
But_UMN.onPress = function() {
	calc("umn");
};
But_DEL.onPress = function() {
	calc("del");
};
But_STEPEN.onPress = function() {
	calc("stepen");
};
// Функция, вызываемая при нажатии кнопки арифметической операции
function calc(operat) {
	memory = Numbers;
	Numbers = 0;
	Str = "";
	operation = operat;
	block(false);
	But_RAVNO.enabled = true;
	block2(true);
	block3(false);
}
// Код, производящий вычисления при нажатии кнопки "равно"
But_RAVNO.onPress = function() {
	var result = null;
	if (operation == "plus") {
		result = memory+Numbers;
	}
	if (operation == "minus") {
		result = memory-Numbers;
	}
	if (operation == "umn") {
		result = memory*Numbers;
	}
	if (operation == "del") {
		result = memory/Numbers;
	}
	if (operation == "stepen") {
		result = Math.pow(memory, Numbers);
	}
	Numbers = result;
	Str = result;
	tablo = result;
	block(true);
	block2(false);
	block3(true);
	But_ravno.enabled = false;
};
// Функция, включающая или выключающая кнопки операций
function block(par) {
	But_PLUS.enabled = par;
	But_UMN.enabled = par;
	But_MINUS.enabled = par;
	But_DEL.enabled = par;
	But_STEPEN.enabled = par;
}
// Функция, отвечающая за активность кнопок с цифрами
function block2(par) {
	for (var i = 0; i<=9; i++) {
		eval("But_"+i).enabled = par;
	}
	But_TOCHKA.enabled = par;
	But_E.enabled = par;
	But_PI.enabled = par;
}
// Обработчики нажатия кнопок математических функций
But_SIN.onPress = function() {
	func("sin");
};
But_COS.onRelease = function() {
	func("cos");
};
But_TAN.onPress = function() {
	func("tan");
};
But_LN.onPress = function() {
	func("ln");
};
But_ASIN.onPress = function() {
	func("asin");
};
But_ACOS.onPress = function() {
	func("acos");
};
But_SQRT.onPress = function() {
	func("sqrt");
};
But_ROUN.onPress = function() {
	func("roun");
};
// Функция, отвечающая за вычисления при нажатии кнопки математической функции
function func(par) {
	var result = null;
	if (par == "sin") {
		result = Math.sin(Numbers/180*Math.PI);
	}
	if (par == "cos") {
		result = Math.cos(Numbers/180*Math.PI);
	}
	if (par == "tan") {
		result = Math.tan(Numbers/180*Math.PI);
	}
	if (par == "ln") {
		result = Math.log(Numbers);
	}
	if (par == "asin") {
		result = Math.asin(Numbers)/Math.PI*180;
	}
	if (par == "acos") {
		result = Math.acos(Numbers)/Math.PI*180;
	}
	if (par == "sqrt") {
		result = Math.sqrt(Numbers);
	}
	if (par == "roun") {
		result = Math.round(Numbers);
	}
	tablo = result;
	Numbers = result;
	Str = String(result);
}
// Функция, отвечающая за активность кнопок математических функций
function block3(par) {
	But_SIN.enabled = par;
	But_COS.enabled = par;
	But_TAN.enabled = par;
	But_LN.enabled = par;
	But_ASIN.enabled = par;
	But_ACOS.enabled = par;
	But_SQRT.enabled = par;
	But_ROUN.enabled = par;
}
// Обработчики нажатия кнопок математических констант
But_PI.onPress = function() {
	Numbers = Math.PI;
	Str = String(Math.PI);
	block2(false);
	tablo = Math.PI;
};
But_E.onPress = function() {
	Numbers = Math.E;
	Str = String(Math.E);
	block2(false);
	tablo = Math.E;
};

По вашему последнему вопросу:

Код
trace(isNaN(0));

Возможно, что true, тогда все вопросы разом должны отпасть.

В Output выводит false.
  • 0

#14 Sharap
Sharap
  • Неактивные
  • 1 сообщений
  • Репутация: 0

Отправлено 22 Апрель 2012 - 19:24

Помогите пожалуйста с кодом.....не могу догнать как сделать так, чтобы вместо цифры 10 выводилась А, вместо 11 - B, вместо 12 - C, 13 - D, 14 - E, 15 - F. За ранее благодарен.

var R;
var N = 4;
var Summ = 0;
//=======
for (R=1; R<=N; R++) {
if (R>1) {
TB1.duplicateMovieClip("TB"+R, 100+R, {_x:TB1._x-70*(R-1)});
NM1.duplicateMovieClip("NM"+R, 200+R, {_x:NM1._x-70*(R-1)});
}
this["TB"+R].Up._visible = false;
this["TB"+R].Down._visible = true;
this["TB"+R].Num = this["NM"+R].Num=Math.pow(2, R-1);
this["TB"+R].onPress = function() {
trace(this.Up._visible+" "+not (this.Up._visible));
this.Up._visible = not (this.Up._visible);
this.Down._visible = not (this.Down._visible);
SetSumm();
};
}
SetSumm();
//=============================
function SetSumm() {
Summ = 0;
for (R=1; R<=N; R++) {
if (this["TB"+R].Up._visible == true) {
Summ += this["TB"+R].Num;
}
}
}

  • 0

robot
robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Похожие темы
  Название темы Автор Статистика Последнее сообщение

Пользователь месяца
FIvYUr FIvYUr 1-й за Декабрь
Очков активности: 2 062 0 тем, 125 сообщений, 11 баллов репутации
Сайт: moy-evroopt.ru
ТОП самых активных за этот месяц
  • Фотография albedo
    #1

    albedo (online24news.ru)
    Очков активности: 1890 10 тем, 110 сообщений, 9 баллов репутации

  • Фотография Totti
    #2

    Totti
    Очков активности: 1785 3 темы, 61 сообщение, 17 баллов репутации

  • Фотография ShowPrint
    #3

    ShowPrint (ShowPrint.ru)
    Очков активности: 256.5 0 тем, 19 сообщений, 9 баллов репутации

  • Фотография BLIK
    #4

    BLIK
    Очков активности: 156 Вне конкурса за определение пользователя месяца

  • Фотография Santey
    #5

    Santey
    Очков активности: 150 20 тем, 40 сообщений, 1 балл репутации

  • Фотография Bilish
    #6

    Bilish
    Очков активности: 147 20 тем, 38 сообщений, 1 балл репутации

  • Фотография NataliaAntalia
    #7

    NataliaAntalia (zdorovemedicina.ru)
    Очков активности: 129 Вне конкурса за определение пользователя месяца

  • Фотография MattCutts
    #8

    MattCutts (dmitrylee.ru)
    Очков активности: 63 Вне конкурса за определение пользователя месяца

  • Фотография r0mZet
    #9

    r0mZet (rz-style.ru)
    Очков активности: 63 2 темы, 8 сообщений, 3 балла репутации

  • Фотография Vmir
    #10

    Vmir
    Очков активности: 54 0 тем, 18 сообщений, 2 балла репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 27.12.2019
  • Яндекс выдача: 27.01.2020
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru