رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
سید محمد عباسی

آموزش کامل کتابخانهٔ SIGIL - معرفی و نحوه استفاده از کتابخانه


پست های پیشنهاد شده

ارسال شده در (ویرایش شده)

 

کتابخانهٔ SIGIL مخفف Sound, Input, and Graphics Integration Library  که یک کتابخانهٔ یکپارچه  برای  صدا ، ورودی ، و گرافیک است که یک کتابخانهٔ سبک و ساده  است برای کار‌هایی ماننده ساخت بازی 2 بعدی  و یا در مقابل پخش صدا که شاید  جایگزین خوبی در مقابل با کتاب‌خانه‌های پیچده باشد که روند کار در آن کتابخانه‌ها به مراتب سخت‌تر است ، SIGIL برای کار‌های گرافیکی و رسانه ( فقط پخش صدا ) کاربرد دارد و  یک کتابخانهٔ فرعی است ، توابعی ساده‌تر و قابل درک دارد که به راحتی می‌توانید کارهای گرافیکی و یا رسانه‌ای خود را با این توابع  انجام دهید ‌. این کتابخانه کراس پلتفرم است و مستقل از سیستم عامل است ، یعنی اینکه می‌‌توانید این کتابخانه را در هر سیستم عاملی با هر IDE و متناسب با کامپایلر‌ها و رایانه‌هایی  که به آنها رزی‌بری پای می‌گویند  که در ادامه به معرفی و پشتیبانی از این کتابخانه هستند می‌پردازم ، استفاده کنید .

نکته

نرم افزارها و یا سیستمی‌هایی که نیاز حتمی به بعضی از کتابخانه‌ها دارند و  در واقع وابسته به کتابخانه برای اجرا هستند ، کتابخانهٔ اصلی و در غیر اینصورت اگر بدون کتابخانه‌ای هم قابل اجرا باشند ، کتابخانهٔ فرعی گفته می‌شود .

لیست کامپایلر‌ها  که از این کتابخانه پشتیبانی می‌کنند به شرح زیر است :
 
  • MinGw32 مخفف
    Minimalist GNU for Windows که به صورت Native هستند ، یعنی وقتی کدی را ترجمه کردند و آن را به باینری تبدیل کردند ، برنامه فقط در همان سیستم عامل  قابل اجراست و در سیستم‌ عامل‌های دیگر باید از کامپایلر‌های دیگر استفاده کرد .
  • MSVC مخفف ++Microsoft Visual C یک IDE برای زبانهای برنامه نویسی C و++ C است ، این ابزار برای نوشتن و اشکال‌زدایی کدهای C , ++C و# C میباشد و تاکنون نسخه‌های مختلفی از آن انتشار داده شده است . فرقی هم نمی‌کند پردازنده در این مورد 32 بیت باشد یا 64 بیت . دقت کنید عزیزان که منظور از 64 بیتی و 32 بیتی بودن این است که در نسخه‌هایی از ویژال استودیو که خود مرجع این کتابخانه معرفی کرده است به این نکته هم اشاره کرده که کتابخانهٔ شما در این نسخه‌های ویژال استودیو فرقی نمی‌کند که 32 بیتی و یا 64 بیتی کامپایل شود اما در نسخه‌های جدید حتما باید 64 بیتی کامپایل شود در غیر اینصورت با خطا مواجه می‌شوید . 
  • Linux GCC که مخفف GNU Compiler Collection  است ، مجموعه‌ای از کامپایلر‌های هستند برای زبان‌های برنامه نویسی مختلف  که توسط پروژه گِنو به وجود آمدند .
رایانهٔ Raspberry Pi
 
Raspberry Pi که یک قطعهٔ کوچک از یک رایانهٔ تک برد است که توسط بنیاد رزی‌بری پای ساخته شده است تا آموزش علوم رایانه را در مدارس و در کشور‌های در حال توسعه گسترش دهد .باید توجه کنید که  این یک رایانه است ، کتابخانهٔ SIGIL می‌تواند در این رایانه هم استفاد شود و کامپایلر نیست .
 
پس متناسب با کامپایلر خود و یا حتی اگر رایانه مبتنی بر Raspberry Pi  دارید ، می‌توایند از این کتابخانه استفاده کنید .
 
برای دانلود این کتابخانه  ابتدا به این صحفه وارد شوید و در پایان قطعه کدی که مشاهده می‌کنید با توجه به سیستم‌عامل و کامپایلر IDE خودتان نسخهٔ موجود را دانلود کنید. همچنین اگر مشتاق توسعه این کتابخانه باشید ، سورس کد آن در سرویس گیت‌لب موجود می‌باشد و می‌تواند در توسعه آن همکاری کنید ‌.
 
در پایان پس از دانلود کتابخانه ، روش اضافه کرد کتابخانه به ویژال استودیو که اکثرا از این IDE استفاده می‌کنند شرح می‌دهیم که مرجع این کتابخانه  یک IDE دیگر را هم  ذکر کرده است و اگر شما عزیزان در IDE دیگری مشغول کد‌نویسی هستید می‌توانید بعد از پایان این جلسه از آموزش در قسمت نظرات IDE خود را معرفی کنید تا روش اضافه کردن این کتابخانه را معرفی کنیم .

 

اضافه کردن کتابخانه به ویژال استودیو 

 

بعد از اینکه کتابخانه را دانلود کردید ، به ترتیب تصاویر زیر کتابخانه را به ویژال استودیو اضافه کنید  :

 

level-1.jpg

 

در قسمت جستجو و با توجه به پارامترهایی که این  IDE در اختیار شما گذاشته است  می‌توانید سریعتر نوع پروژه‌ای که قصد ساختن آن را دارید مشخص کنید و از اتلاف وقت برای جستجو در بین نوع‌های مختلف پروژه برای پیدا کردن نوع پروژه خود جلوگیری کنید ،‌ در مرحله بعد به شکل زیر عمل کنید :

level-3.jpgبرا

برایی دسترسی داشتن به سولوشن از نوار منوی بالا روی view کلیک کنید و Solution Explorer را انتخاب کنید ، می‌بینید که پروژه‌ای که ساختید در سمت راست در قالب یک پنجره نمایان می‌شود در اینجا بر روی پوشهٔ Source کلیک راست کرده و گزینه Add را انتخاب کنید و درنهایت در زیر منویی که برای شما باز می‌شود گزینهٔ New Item را انتخاب کنید یک پنجره برای شما باز می‌شود که باید C++ File را انتخاب و در زیر پنجره یک کادر متن دیده می‌شود که باید در آن نام فایل سورس‌کد خود را انتخاب کنید ،‌ دقت داشته باشید که پسوند Cpp را در انتهای نام فایل فراموش نکنید ،‌ طبق تصویر بالا باید یک  فایل جدید به ‌پوشهٔ Source شما اضافه شده باشد ،‌ روی  فایل دابل کلیک کرده تا محتویات این فایل در پنجره‌ای که مشاهده می‌کنید ، نمایش داده شود که در حاضر فایل ما خالی است . در قدم بعدی باید کتابخانه را اضافه کنیم ‌ ،‌ پس مطابق تصویر پایین عمل کنید :‌

level-basic.jpg

در اینجا باید حال را روی اجرا بر روی 64 بیتی و همچنین روی حالت دیباگ برای اشکال زدایی در طی برنامهٔ نوشته شده قرار دهید ،‌ البته اگر به مرجع خود این کتابخانه بروید ، می‌بینید که از نسخه های قبل‌تر چه 32 بیت و چه 64 بیت می‌توانید استفاده کنید! اما در اینجا نسخهٔ ویژال استودیو بنده 2019  هستش و در این نسخه باید حالت بر روی 64 بیت باشد ،‌ در غیر اینصورت برای اجرای کتابخانه دچار خطا و مشکل می‌شوید ،‌ پس این مورد را هم فراموش نکنید ،‌ در قدم بعدی به شکل زیر عمل می‌کنیم

level-4.jpg

در اینجا از از نوار منوی بالا رو Project کلیک کرده و در زیر منویی که باز می‌شود ،‌ آخرین گزینه  یعنی Properties را انتخاب کنید و در پنجره‌ای که برای شما باز می‌شود طبق شکل روی یک مثلث کوچک که در کنار هر کدام ویژگی‌های مربوطه قرار گرفته کلیک کنید و قدم بعدی که تصویر زیر باشد را انجام دهید :‌ 

level-5.jpg

بخشی را در سمت راست مشاهده می‌کنید ، همانطور که در تصویر بالا هم آمده است ، بر روی Additional Include Directories کلیک کنید و یک متن با عنوان Edit برای شما نمایش داده می‌شود که روی آن کلیک کرده تا مطابق تصویر یک پنجره برای شما باز شود ، بر روی پوشه‌ای که در تصویر مشاهده می‌کنید کلیک کرده تا کادر به همراه یک دکمه در سمت راست کادر برای شما نمایش داده شود ،‌ روی دکمه کلیک کرده و مطابق شکل زیر پیش بروید :‌

level-6.jpg

در اینحا تنها کاری که لازم است انجام دهید به این صورت است که پوشهٔ  include را اانتخاب و روی Select Folder کلیک کنید تا به پروژه اضافه شود ، دقت کنید که اگر پروژه را که قصد ساختن آن را با این کتابخانه دارید می‌خواهید برای کسی بفرستید یا به اشتراک  بگذارید باید این دو پوشه و فایل‌های dll  که حاصل از استخراج کتابخانه است که دانلود کردید ، باید تمام فایل‌ها و پوشه‌ها را در پوشهٔ پروژه کپی کنید ،‌ پس به این نکته هم دقت داشته باشید . در قدم بعدی طبق تصویر زیر پیش بروید :‌

level-7.jpg

وقتی که پوشهٔ مورد نظر را انتخاب کردید ،‌ باید در قدم نهایی بر روی Ok طبق تصویر بالا کلیک کنید و به مرحلهٔ بعد که در تصویر زیر است بروید

level-8.jpg

در اینجا و در قدم نهایی برای اضافه کردن کتابخانه ما به سراغ سربرگ Linker  می‌رویم و گزینه Input را انتخاب می‌کنیم ،‌ همانطور که مشاهده می‌کنید در سمت راست باید  وابستگی‌ها را اضافه کنیم ، پس بر روی Additional Dependencies کلیک کنید و گزینه‌ای با عنوان  Edit برای شما نمایان می‌شود که روی آن کلیک کنید تا پنجره‌ای در تصویر زیر برای شما نمایش داده شود :‌

level-9.jpg

در کادری که مشخص شده است باید فایلی با پسوند lib را که پروژه برای استفاده از کتابخانه به آن وابسته است و حتما باید اضافه شود را وارد کنید که نام این فایل  sigil.lib در پوشهٔ lib است و  اگر تمام فایل‌ها و پوشه‌ها را داخل پوشهٔ پروژه کپی کنیم باید به این شکل این فایب را اضافه کنیم ،‌ در غیر اینصورت باید آدرس کامل به همراه نام فایل مشخص شده را وارد کنید . بعد از اضافه کردن فایل ذکر شده روی Ok کلیک کنید و در قدم بعدی مطابق تصویر زیر عمل کنید :‌

level-10.jpg

در تصویر بالا ابتدا بر روی  Apply کلیک کنید و سپس روی Ok کلیک کنید تا کتابخانه اضافه شود ،‌ دقت داشته باشید اگر فراموش کرده باشید که حالت را روی 64 بیت را دراین نسحه روی نگذارید ،‌ باید تمام مراحل را از اول انجام دهید . و در نهایت کد زیر را برای آزمایش صحیح اضافه کردن کتابخانه بنویسید و اجرا کنید :

#include "sl.h"
#include <Windows.h> 
int main()
{
 ShowWindow(GetConsoleWindow(), false);
 slWindow(600, 500, "Welcome to Sigil", false);
 while (!slShouldClose() && !slGetKey(SL_KEY_ESCAPE))
 {
   slRender();
 } 
 slClose(); 
 return 0; 
}

نتیجهٔ اجرای کد بالا ایجاد و نمایش یک پنجره با ابعاد مشخص است که می‌توانید در تصویر زیر مشاهده کنید :

level-11.jpg 

خب عزیزان به پایان این جلسه از آموزش رسیدیم ، در جلسات بعد به معرفی توابع و کاربرد هر کدام می‌پردازیم و در آخر و پایان آموزش‌ها یک پروژه عملی ساخت یک بازی دو بعدی را پیش می‌بریم .

موفق و سربلند باشید .

ویرایش شده در توسط سید محمد عباسی
نامفهوم بودن یک پارگراف از آموزش

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
ارسال شده در (ویرایش شده)

با سلام و عرض ادب خدمت دوستان آی او استریمی عزیز ، امیدوارم که هر کجای ایران زمین هستید پیروز و سربلند باشید . با جلسه دوم از آموزش کتابخانهٔ SIGIL در خدمت شما عزیزان هستم . در این جلسه و چند جلسهٔ آینده به معرفی توابع کاربردی این کتابخانه می‌پردازم و از هر کدام هم مثالی برای شما ‌‎هم ارائه خواهم داد  که کامل APIهای این کتابخانه را درک و یاد بگیرید .  دقت داشته باشید این کتابخانه مناسب برای کارهای کوچک گرافیکی و حتی پروژهای دانشجویی نیز می‌باشد و در نهایت سادگی می‌توانید از آن استفاده کنید در نهایت برای اطمینان از صحت مطالب در آخر فایلی را ضمیمه خواهم کرد که به شرح هر یک از توابع این کتابخانه پرداخته است ،  پس با من در ادامه همراه باشید .

 

توابعی که در این جلسه به آن‌ها پرداخته می‌شود در زیر مشاهده می‌کنید . 

توابع مربوط به بخش پنجره ( Window )

  • slWindow
  • slClose
  • slShouldClose

توابع مربوط به بخش ورودی  ( Input )

  • slGetKey
  • slGetMousetButton
  • slGetMouseX
  • slGetMouseY

توابع مربوط به بخش رندر ( Rendering )

  • slRender

توابع تا همین‌جا باشند که توضیحات درمورد هر کدام کمی زیاد است و حوصله‌سربر که در واقع با زیاد شدن توضیحات حوصله شما هم سرریز  می‌کند و خسته می‌شوید که از خواندن ادامهٔ آموزش صرف‌نظر می‌کنید . پس بی معطلی برویم سر اصل مطلب! 

از توابع مربوط به بخش پنجره شروع می‌کنیم ، جایی که شما با در دست داشتن توابع ذکر شده می‌توانید به ایجاد پنجره ، بستن پنجره ، و واکنش به بستن پنجره اقدام کنید . 

slWindowاین تابع با داشتن چهار آرگومان ورودی باعث ایجاد یک پنجره می‌شود، شما می‌توانید به دادن چهار آرگومان ورودی که شامل عرض ( Width )  ، ارتفاع ( Height ) ، عنوان پنجره ( Title )  و تنظیم اینکه پنجره تمام صفحه ( FullScreen ) باشد یا به اندازه‎هایی که در دو آرگومان ورودی یعنی عرض و ارتفاع مشخص کردید نمایش داده شود . همچنین شما می‌توانید از مقادیر بولین که شامل True ( درست ) و یا False ( غلط ) در آرگومان آخر که مشخص کننده‎ی نمایش تمام صفحه و یا نمایش به صورت اندازه‌های دلخواه که مشخص کردید ، استفاده کنید ، بدین صورت که اگر از مقدار True استفاده کنید پنجره صرف‌نظر از اینکه چه مقدارهایی برای عرض و ارتفاع مشخص کردید به حالت تمام صفحه به نمایش در خواهد آمد و اگر از مقدار False استفاده کنید در اندازه‌های دلخواه که در همان آرگومان‌های اول مشخص کردید نمایش داده می‌شود . 

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

slShouldCloseاگر اقدام به ایجاد پنجره کردیم و به هر روشی پنجره را بستیم این تابع فعال شده و مقداری غیر صفر به ما بر می‌گرداند ، کاربرد این تابع توی شروط هستش که می‌توان چک کرد که کاربر پنجره را بسته است یا نه ؟ که در حالت عادی مقدار برگشتی 0 است این یعنی هنوز کاربر اقدام به بستن پنجره نکرده است و در غیر اینصورت اگر کاربر پنجره را ببندد مقدار برگشتی 1 است . 

در تصویر زیر همان‌طور که مشاهده می‏‌کنید یک مثال از هر سه تابع آورده شده است که شما هم می‌توانید امتحان کنید و با دستکاری کدها بیشتر این موضوع را درک کنید . 

0fzv_sigil.jpg

 نتیجهٔ اجرای کدهای بالا را در تصویر زیر مشاهده می‌کنید

sigile.jpg

در اینجا بنده پنجره را بستم تا بتوانید خروجی را ببینید و همان‌طور هم که مشاهده می‌کنید در صورتیکه پنجره در حال نمایش و رندر باشد ( منظور از رندر اشیائی هستند که در پنجره در حال نمایش هستند ) مقدار برگشتی عدد 0 و در غیر اینصورت اگر پنجره بسته شود مقدار برگشتی 1 خواهد بود . 

 

با توابع ورودی می‌توانید از کاربر ورودی از صفحه کلید ، مختصات موس ، و کلیک کردن موس را در دست بگیرید و استفاده کنید . 

slGetKeyبا استفاده از این تابع می‌توانید یک کلید از صفحه کلید را در صورتیکه کاربر بر بروی کلید مورد نظر از صفحه کلید کلیک کند را دریافت کنید . نحوه کارکرد این تابع به این صورت است که یک  مقدار از مقادیر زیر دریافت کرده و در صورتیکه کاربر بر روی کلید مورد نظر در صفحه کلید کلیک کند 1 برگشت داده می‌شود و در غیر اینصورت 0 .

  •  به صورت کاراکتر مانند 'W' دقت کنید حتما باید همان‌طور که در فایل ضمیمه هم اشاره شده است باید کارکتر مورد نظر بزرگ نوشته شود در غیر اینصورت عمل نخواهد کرد . دلیلش هم در کدهای اسکی است که با هم تفاوت دارند .
  • مقدار بصورت عددی باشد مانند 290 که در این تابع حکم کلید F1 را دارد . 
  • یا استفاده از ثابت‌های عدد که خود این کتابخانه در نظر گرفته است که لیست این ثابت ها در زیر آمده است . دقت کنید که تعداد کمی از این ثابت‌ها در این کتابخانه تعریف شده‌اند و شما به ناچار باید از روی کد اسکی یا حروف بزرگ به بررسی کلیدها بپردازید . 

SL_KEY_ESCAPE

SL_KEY_ENTER

SL_KEY_TAB

SL_KEY_BACKSPACE

SL_KEY_INSERT

SL_KEY_DELETE

SL_KEY_RIGHT

SL_KEY_LEFT

SL_KEY_DOWN

SL_KEY_UP

SL_KEY_PAGE_UP
SL_KEY_PAGE_DOWN

SL_KEY_HOME

SL_KEY_END

SL_KEY_CAPS_LOCK

SL_KEY_SCROLL_LOCK

SL_KEY_NUM_LOCK

SL_KEY_PRINT_SCREEN

SL_KEY_PAUSE

SL_KEY_F1

SL_KEY_F2

SL_KEY_F3

SL_KEY_F4

SL_KEY_F5

SL_KEY_F6

SL_KEY_F7

SL_KEY_F8

SL_KEY_F9

SL_KEY_F10

SL_KEY_F11

SL_KEY_F12

SL_KEY_F13

SL_KEY_F14

SL_KEY_F15

SL_KEY_F16

SL_KEY_F17

SL_KEY_F18

SL_KEY_F19

SL_KEY_F20

SL_KEY_F21

SL_KEY_F22

SL_KEY_F23

SL_KEY_F24

SL_KEY_F25

SL_KEY_KEYPAD_0

SL_KEY_KEYPAD_1

SL_KEY_KEYPAD_2

SL_KEY_KEYPAD_3

SL_KEY_KEYPAD_4

SL_KEY_KEYPAD_5

SL_KEY_KEYPAD_6

SL_KEY_KEYPAD_7

SL_KEY_KEYPAD_8

SL_KEY_KEYPAD_9

SL_KEY_KEYPAD_DECIMAL

SL_KEY_KEYPAD_DIVIDE

SL_KEY_KEYPAD_MULTIPLY
SL_KEY_KEYPAD_SUBTRACT

SL_KEY_KEYPAD_ADD

SL_KEY_KEYPAD_ENTER

SL_KEY_KEYPAD_EQUAL

SL_KEY_LEFT_SHIFT

SL_KEY_LEFT_CONTROL

SL_KEY_LEFT_ALT

SL_KEY_LEFT_SUPER

SL_KEY_RIGHT_SHIFT

SL_KEY_RIGHT_CONTROL

SL_KEY_RIGHT_ALT

SL_KEY_RIGHT_SUPERint

ببب

slGetMousetButton : اگر می‌خواهید به بررسی کلیک شدن یکی از دکمه‌های موس بپردازید باید از این تابع استفاده و یکی از این مقادیر را به عنوان آرگومان در هنگام فراخوانی این تابع وارد کنید. در صورتیکه کاربر دکمه‌ای از موس را کلیک کند و منطبق با ورودی تابع باشد 1 را برگشت می‌دهد و در غیر اینصورت نتیجه 0 خواهد بود .

  • استفاده از مقدار عددی مانند 2 که نشانگر دکمهٔ سمت راست موس است . 
  • استفاده از ثابت‌های عدد تعریف شده در خود این کتابخانه که لیست این ثابت‌ها در زیر آورده شده است . 

SL_MOUSE_BUTTON_1

SL_MOUSE_BUTTON_2

SL_MOUSE_BUTTON_3

SL_MOUSE_BUTTON_4

SL_MOUSE_BUTTON_5

SL_MOUSE_BUTTON_6

SL_MOUSE_BUTTON_7

SL_MOUSE_BUTTON_LEFT

 SL_MOUSE_BUTTON_RIGHT

SL_MOUSE_BUTTON_MIDDL

 

slGetMouseX این تابع موقعیت X موس را بر می‌گرداند ، به طور مثال شما در حال تکان دادن موس خود هستید و مشاهده هم می‌کنید که مکان نمای موس در حال حرکت بر روی صحفه نمایش است ، حال برای اینکه بتوانید با استفاده از این کتابخانه موقعیت مکان نمای موس را در جهت X بدست بیاوردید باید از این تابع استفاده کنید . مقدار برگشتی این تابع موقعیت مکان نما در صفحه نمایش است . 

slGetMouseYاین تابع هم دقیقا مشابه تابع slGetMouseX عمل می‌کند با این تفاوت که در جهت  Y  موقعیت را بر می‌گرداند .

البته بنده در اینجا برای اینکه بهتر متوجه بشوید تمام ورودی‌های ممکن را داده‌ام و شما بهتر است جداگانه آزمایش کنید و نتیجه را ببینید که در این مثال نتیجه به دلیل عدد‌های زیاد قابل تشخیص نیست . 

 و در نهایت تابع بخش رندر که در ادامه به توضیح آن خواهم پرداخت . 

slRenderاین تابع وظیفه رندر ( پردازش اشیا و نمایش آن‌ها در پنجره ) تمام اشیائی که در صحنه حضور دارند را بر عهده دارد ، این اشیا می‌توانند شکل باشند و یا متن و سایر مواردی دیگر که در جلسات بعد به توضیح آنها خواهیم پرداخت . 

 

در نهایت بعد از مطالعه این آموزش برای یادگیری بهتر و کامل‌تر به تمرین نیاز دارید ، پس تا می‌توانید تمرین کنید ? .

فایل ضمیمه 

ویرایش شده در توسط قاسم رمضانی منش
تصحیح برخی از موارد نگارشی.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...