خانه » ادوبی فلش » ایجاد کد تقلب در فلش

ایجاد کد تقلب در فلش

ایجاد کد تقلب در فلش

اگر یک دنبال کننده بازی های کنسول ها از قدیم تا به حال باشید ، حتما رمز ها و کدهای تقلبی که در بازی ها بود را به خاطر دارید. رمز هایی که با فشردن پشت سر هم چند کلید جهت و دکمه های کنترل کنسول مربوطه ،امکانی را در بازی برای شما فراهم می کرد و یا بخشی از بازی را فعال می کرد و یا کلاً در بعضی موارد بازی جدیدی را در اختیار شما قرار می داد. در بین شرکت های معتبر بازی سازی، قرار دادن رمزها و کدها تقلب درون بازی ها امر مورد توجه و مهمی می باشد، با این که شاید هر کسی از آن استفاده نکند و یا اصلا متوجه وجود آن نشود! ولی اگر یک بار هم این مورد را تجربه کرده باشید می دانید چه هجانی برای کاربر ایجاد می کند… حال در این مطلب می خواهیم نحوه ساختن این کدها را برای فلش در روشی ساده برسی کنیم تا بتوانیم در بازی و یا حتی سایت خود یک کد تقلب تعریف کنیم ، و مثلا به مناسبتی رمز را در اختیار کاربران خود قرار داده و آنها را هیجان زده کنیم!!

برای مشاهده نیاز به فلش پلیر دارید
قبل از وارد کردن رمز روی فلش یک بار کلیک کنید (به دلیل فعال شدن فلش جاری). برای شروع ما یک شی آرایه keyBuffer برای ثبت کلید های تایپ شده قرار می دهیم و توسط رویداد keyboardEvent و در زمان فشردن و رها کردن دکمه که رویداد KeyboardEvent.KEY_UP می باشد به ثبت و تحلیل داده ها می پردازیم. می بایست یک آرایه برای رمز مورد نظر تعیین کنیم در اینجا آرایه را با نام cheatCode ایجاد کرده ایم، برای برسی بهتر ما کدهای عددی کاراکتر ها و کلید های مورد نظر را ذخیره می کنیم برای ثبت رمز هم کدهای آن را ثبت می کنیم. برای کاراکتر ها از charCodeAt استفاده می کنیم .

trace("a".charCodeAt());

برای کلیدهای دیگر هم از ثابت هایی که در فلش از پیش در شی Keyboard تعریف شده استفاده می کنیم ، مثلا (Keyboard.UP,Keyboard.DOWN,Keyboard.LEFT,Keyboard.RIGHT). رمز اول که کلید های جهت بالا ، پایین ، چپ ، راست رمز ما را تشکیل می دهد.

private var cheatCode:Array = [Keyboard.UP,Keyboard.DOWN,Keyboard.LEFT,Keyboard.RIGHT];

رمز دوم که کلیدهای ۱ تا ۶ را شامل می شود.

private var cheatCode:Array = ["1".charCodeAt() , "2".charCodeAt() , "3".charCodeAt(),"4".charCodeAt() , "5".charCodeAt() , "6".charCodeAt()];

در ضمن رمز شما می تواند با هر طول و ترکیبی از کاراکتر ها و کلید های باشد ، فقط می بایست به ترتیب کاراکتر ها را در آرایه به عنوان اندیس هایش قرار دهید.

private var cheatCode:Array = [Keyboard.UP,Keyboard.DOWN,"1".charCodeAt() , "2".charCodeAt()];

حال برای برسی کلیدها وارد شده تابع on_cheat_key_up را تعریف می کنیم. ابتدا به ثبت اطلاعات وارد شده در شی آرایه بافر در این تابع می پردازیم ، برای یک کار باید این موضوع را در نظر داشته باشیم که کلید تایپ شده آیا کاراکتر هست و یا دیگر کلیدها مثل جهت ها ، این موضوع برای روش گرفتن کد آنها لازم هست. برای این کار ما مقدار charCode را چک می کنیم از برابر با ۰ بود نشان می دهد که این کلید کیبورد از کاراکتر ها نمی باشد و توسط کد keyCode مقدار آن را در آرایه بافر keyBuffer ثبت می کنیم در مثال این کار توسط متد push انجام شده است. در صورتی که این شی مقداری غیر از ۰ داشت نشان دهنده این هست که کلید تایپ شده یک کاراکتر هست که توسط charCode مقدار را در آریه بافر keyBuffer ثبت می کنیم.

if (evt.charCode == 0)
{
	keyBuffer.push(evt.keyCode);
}
else
{
	keyBuffer.push(evt.charCode);
}

برای برسی طول آرایه بافر مربوطه به کلید های وارد شده می بایست با هر بار فشردن کلیدهای کیبورد طول آن را چک کرده و در صورتی که با طول رمز برابر شد یک شی از ابتدای آن آرایه حذف می کنیم ،این کار را توسط متد Shift مربوطه به آریه ها انجام می دهیم. اگر این کار را انجام ندهیم آریه بافر با کاراکتر های مختلف پر می شود و برسی آن با شی رمز کار دشواری می شود.

if (keyBuffer.length == cheatCode.length)
{
	keyBuffer.shift();
}

برای برسی رمز هم در همین تابع با هر بار فشرده شدن کلیدهای کیبورد آرایه های مربوط به بافر ورودی و آرایه رمز را به صورت یک رشته تغییر می دهیم و با هم برسی می کنیم که آیا رمز ما هست یا خیر، برای تبدیل کردن سریع و راحت این آرایه به صورت یک رشته می توانیم از متد join در آریه ها استفاده کنیم و عناصر یک آرایه را به ترتیب پشت سر هم به صورت یک رشته خروجی بگیریم به عنوان آرگمان این متد ما “” وارد می کنیم که با این کار بین عناصر هیچ فاصله ای قرار نمی گیرد.

if (keyBuffer.join("") == cheatCode.join(""))
{
	trace(The Correct code!");
}

در بین تایپ کردن اگر فاصله زیادی قرار گیرد آرایه باید خالی شود تا حالت رمز بودن آن حفظ شود و حتما زمانی رمز اجرا شود که خاصیت سریع و پشت سر هم بودن آن وجود داشته باشد ، برای ریست کردن آرایه بافر در بازه زمانی خاص از setTimeout استفاده می کنیم و در این نمونه ۱۰۰۰ میلی ثانیه را به عنوان مقدار زمانی قرار می دهیم و آرایه بافر را با یک آرایه خالی مقدار دهی می کنیم و با این روش آن را خالی می کنیم. Timeout را بار فشردن دکمه clear می کنیم و Timeout را دوباره در انتهای همین تابع دوباره فعال می کنیم.

keyBuffer = [];

برسی Timeout و clear کردن آن :

if (type_timeout)
{
	clearTimeout(type_timeout);
}

کد کامل را که به عنوان کلاس Main تعریف شده است :


package 
{

	import flash.display.MovieClip;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import flash.utils.*;//need for setTimeout

	public class Main extends MovieClip
	{

		public function Main()
		{
			// init
			init_cheats_listener();

		}

		public var correct:MovieClip = new correctMc();

		private var keyBuffer:Array = [];

		//private var cheatCode:Array = [Keyboard.UP,Keyboard.DOWN,Keyboard.LEFT,Keyboard.RIGHT];
		private var cheatCode:Array = ["1".charCodeAt(),"2".charCodeAt(),"3".charCodeAt(),"4".charCodeAt(),"5".charCodeAt(),"6".charCodeAt()];

		private var type_timeout:uint;

		private function init_cheats_listener():void
		{
			stage.addEventListener(KeyboardEvent.KEY_UP, on_cheat_key_up , false , 0 , true);
		}

		private function on_cheat_key_up(evt:KeyboardEvent):void
		{

			if (type_timeout)
			{
				clearTimeout(type_timeout);
			}

			//if length in Equal remove one index from first
			if (keyBuffer.length == cheatCode.length)
			{
				keyBuffer.shift();
			}

			//get keyCode & charCode;
			if (evt.charCode == 0)
			{
				keyBuffer.push(evt.keyCode);
			}
			else
			{
				keyBuffer.push(evt.charCode);
			}

			//checking by join and compire;
			if (keyBuffer.join("") == cheatCode.join(""))
			{
				trace(keyBuffer.join("")+"=="+cheatCode.join("")+" - The Correct code!");

				addChild(correct);
				correct.gotoAndPlay(1);
				correct.x = 277;
				correct.y = 135;

			}
			else
			{

				trace(keyBuffer.join("")+"=="+cheatCode.join(""));
			}

			//rest Buffer array in timeout
			type_timeout = setTimeout(reset_cheats,1000);
		}

		private function reset_cheats():void
		{
			//clear keyBuffer
			keyBuffer = [];
		}

	}

}

برای برسی و تست بهتر می توانید سورس نمونه آموزش داده شده را دریافت نمایید دانلود سورس نمونه
موفق و پیروز باشید

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

24 نظر

  1. سلام . من وقتی دارم کد مینویسم code hint رو نشون نمیده . اون دکمه ی بالا (code hint)را میزنم هم نمیاد.

    • سلام
      می بایست تنظیمات پروژه با کدی که می نویسید همگام باشد و برای اکشن ۳ پروژه را بر روی اکشن ۳ قرار دهید و برای کلاس ها حتما قبل از کد نوشتن ذخیره کنید تا راهنما فعال شود
      در ضمن اگر به راهنمایی بیشتری در زمان نوشتن کد ها نیاز دارید در زمان ساخت کلاس فلش بیلدر را به عنوان محیط کدنویسی انتخاب کنید
      موفق و پیروز باشید

  2. سلام.فایل های آماده فلش رو تو سایتتون میزارید؟
    کاری که flashgraphic داره انجام میده و کاربران زیادی به دست آورده.اگه فایل های آماده رو نمیزارید اطلاع بدید با تشکر

  3. برای موتر بازی سازی Citrus کتاب انگلیسی مناسبی پیدا نمیکنم شما کتابی نمیشناسی؟

  4. سلام آقای پولادرگ من فایل فلشی که کار کردم چند تا فیلد تعیین کردم که کاربر بتونه داخل آن بنویسه اما چندتا مشکل دارم و به کمکتون نیاز دارم (اکشن اسکریپت ۳):

    ۱- من میخوام تو این کادرها فقط اعداد تایپ بشه و نشه حروفات و دیگر علائم رو تایپ کرد.
    ۲- چگونه میتونیم تعیین کنیم که حداکثر در هر فیلد چند رقم میتوان نوشت. مثلاً تو برخی فیلد نیازه که فقط یه رقم تایپ بشه و به کاربر اجازه داده نشه رقم دومی رو تایپ کنه.
    ۳- وقتی پروژه رو اجرا میکنیم آیا امکان این هستش که علامت گر موس اتوماتیک تو فیلد اولی بشینه یعنی ما دیگه داخل فیلد کلیک نکنیم و همچنین با نوستن رقم تو فیلد اولی، اشاره گر موس اتوماتیک بره به فیلد بعدی و به همین ترتیب ..
    ۴- میخوام وقتی میرم صفحه قبل خانه ها خالی باشن
    ۵- این ارور رو هم میده
    Scene 1, Layer ‘Actions’, Frame 2, Line 4 1021: Duplicate function definition.
    ممنون میشم اگه کمکم کنین
    در ضمن فایلو آپلود کردم آدرسشو براتون میزارم تا یه نگاهی بهش بندازین
    http://uplod.ir/b1lr6njq5cse/test.fla.htm

    • سلام دوست گرامی

      برای مورد اول راه های مختلفی وجود دارد که ساده ترین آنها embed کردن فونت آن و نیز تنها کاراکتر های عددی مورد نظر را در بخش Embed قرار دهید و دیگر کاراکتر های را اضافه نکنید
      ویا این که از خصوصیت restrict استفاده کنید

      inputField.restrict = "0-9";
      

      برای مورد دوم با استفاده از

      inputField.maxChars = 10;
      

      می توانید از خصوصیت maxChars استفاده کنید

      برای مورد سوم focus هم می توانید این کد را استفاده کنید

      stage.focus = inputField;
      

      برای مورد چهار هم در فریم تایم لاین مربوطه همه فیلد ها را با مقدار خالی مقدار دهی نمایید

      inputField.text = "";
      

      مورد پنج مربوطه به این هست که شما تابعی را با یک نام دوبار تعریف کرده اید

      موفق و پیروز باشید

  5. سلام خدمت دوست عزیز
    من دو صفحه طراحی کردم در صفحه ۱ چند کلید و در صفحه ی ۲ فیلمی برای پخش شدن گذاشتم حالا اینجا دوتا مشکل دارم
    ۱-اول اینکه نمیدونم چه دستوری رو توی ac3 بنویسم که با زدن دکمه در صفحه ی اول فیلم در صفحه ی دوم پخش بشه
    ۲-دوم اینکه نمیدونم بعد از اینکه فیلم توی liberery گذاشتم چطور توی time line بزارم یا چه دستوری توی ac3 بنویسم که بعد از فشار دادن کلید در صفحه ی اول فیلم بدون مشکل پخش بشه

    با تشکر از سایت خوبتون ممنون میشم توضیح بدید

    • سلام

      مورد اول کافیست دستور gotoAndStop را استفاده کنید، برای رویداد ها و نحوه استفاده به بخش مقالات مراجعه نمایید

      در فریم مربوطه در بخش تایم لاین کدهایی که می خواهید زمان رفتن به این فریم نمایش داده شود را بنویسید ، برای ویدئو کامپوننت ویدئوپلیر را از پنل کامپوننت وارد صفحه کنید و نامی به آن اختصاص دهید حال با استفاده از دستورات ساده ای مثل .play و .stop و… امکان کنترل ویدئو را خواهید داشت و می تواند توسط مد آن ویدئو را از بیرون فلش و یا از پنل library در پلیر وارد نمایید
      برای یادگیری اطلاعات بیشتر در مورد کامپوننت پلیر ویدئویی ادوبی این عبارت را در وب جستجو کنید Flash video player component adobe تا مطالبی در این زمینه در اختیار شما قرار گیرد.

      موفق و پیروز باشید

  6. من یک سوال داشتم آقای پولادرگ
    آیا امکان هست که پشت فایل swf شیشه ای باشه.یعنی هیچ چیزی وجود نداشته باشد؟؟؟؟؟

    • سلام دوست گرامی
      می بایست در بخش کد Ebmed یا Object که برای قرار داد فلش در صفحه وب هست از خصوصیت wmode استفاده کرده و آن را روی Transparent قرار دهید
      برای اپلیکیشن ادوبی ایر این امکان را برای شما فراهم می آورد
      موفق و پیروز باشید

      • میشه یه مطلب در این باره بذارید؟؟؟خوب من مرجع بهتری جز سایت شما سراغ ندارم.
        اگه میشه بیشتر راهنمایی کنید.

        • سلام

          کد اول برای نمایش فلش بدون پس زمینه توسط تگ object

          <object id="FlashContent" data="iflashlord.swf" type="application/x-shockwave-flash" height="800" width="640" >
          <param name="wmode" value="transparent" />
          

          کد دوم برای استفاده از swfobject و فلش بدون پس زمینه

          <script type="text/javascript" src="swfobject.js"></script>
          <script type="text/javascript">swfobject.embedSWF("iflashlord.swf", "FlashContent", "640", "800", "9.0.0", "expressInstall.swf");</scr
          

          موفق و پیروز باشید

  7. یه سوال داشتم
    چطور میشه یک عکس jpg یا png رو به شیپ تبدیل کرد.چونکه تا به شیپ تبدیل نکنیم نمیتونیم از ابزار bone در عکس jpg یا png استفاده کرد.

    • سلام
      یا توسط Ctrl+B بریک کرده و به شیپ با پس زمینه تصویری تبدیل کنید،
      یا توسط بخش Convert Bitmap to Shape تصویر را به وکتور تبدیل کنید،
      و راه بعدی این که توسط ابزار های فلش شکل مورد نظر خود را بر طبق تصویر طراحی و آماده کنید.
      موفق و پیروز باشید

  8. سلام آقا بهروز
    میدونم اینی که الان میگم اضلا ربطی به این پست نداره ولی به هر حال سواله دیگه
    ببخشید چطور میتونم رنگ کلی جعبه ابزار تایم لاین هر چی که تو صفحه هست رو که به صورت پیش فرض سفید هست به رنگ سیاه دربیارم؟

    • سلام و عرض ادب

      در بخش preferences در فلش شما همه تنظیماتی که روی ظاهر فلش در اختیار شما هست را مشاهده می کنید. از روش های عادی و معمول جز این موارد ممکن نمی باشد. مگر با استفاده از ابزارهای ویرایش در برنامه ها و… که طبیعتا روی همه برنامه ها اعمال نمی شود.

      موفق و پیروز باشید

  9. سلام آقای پولادرگ
    من به صورت خیلی اتفاقی توی پارک نشسته بودم و برای ایجاد کد تقلب یه متد جدید به ذهنم رسید ولی یه ایرادی داره
    من با استفاده از متد search یا indexOf مشخص میکنم که اگه توی رشته من چنین چیزی پیدا شد(یعنی همون کد مورد نظر که در اینجا “۱۲۳۴۵۶” هستش) یه مقداری رو برگردونه
    ولی چند تا ایراد داره
    اولیش اینه که حتما باید رشته مورد نظرم از همون اول با مقادیری که خواستم پر بشه
    دوم اینه که نمیتونم به طور مستقیم رشته رو وارد متغیر کنم فقط keycode رو میتونم وارد کنم
    اینم از کد من فک کنم اگه یه نگاه بهش بندازیم و اون رو تست کنید کاملا متوجه حرف من میشوید

    import flash.events.KeyboardEvent;
    
    var myText:String = "";
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyD);
    function keyD(e:KeyboardEvent){
    	myText += e.keyCode;
    	trace(myText);
    }
    addEventListener(Event.ENTER_FRAME, entered);
    function entered(Event){
    	if(!myText.search("495051525354")){
    		trace("true");
    	}
    }
    
    • سلام و عرض ادب

      این هم خوب هست ولی خوب این رشته همین طور طولانی میشه و سرعت کاهش پیدا می کند
      ولی الگویی که بنده قرار دادم در استفاده طولانی این مشکل را نخواهد داشت

      موفق و پیروز باشید

  10. خیلی کارتون زیباست امیدوارم بتونم ازتون یاد بگیرم

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه