سفارش ساخت بازی
سطح بازی مورد نظر خود را انتخاب نمایید
موتور بازی سازی مورد نظر خود را انتخاب نمایید
سبك بازی را انتخاب نمایید
نام:
نام خانوادگی:
نام مدرسه:
نام معلم:
تلفن تماس:
آی تلگرام:
توضیحات :
مدت زمان تولید دو روز كاری
هزینه تولید پروژه 300.000 تومان

موتور بازی سازی مورد نظر خود را انتخاب نمایید
سبك بازی را انتخاب نمایید
نام:
نام خانوادگی:
نام دانشگاه:
نام استاد:
تلفن تماس:
آی تلگرام:
توضیحات :
مدت زمان تولید پنج روز كاری
هزینه تولید پروژه 600.000 تومان

موتور بازی سازی مورد نظر خود را انتخاب نمایید
سبك بازی را انتخاب نمایید
نام:
نام خانوادگی:
نام دانشگاه:
نام استاد:
تلفن تماس:
آی تلگرام:
توضیحات :
مدت زمان تولید پانزده روز كاری
هزینه تولید پروژه 2.000.000 تومان

برای ساخت بازی و مشاوره رایگان با آی دی تلگرام زیر تماس بگیرید: Tfh1368
برای ساخت بازی و مشاوره رایگان با آی دی تلگرام زیر تماس بگیرید: Tfh1368


بازی های سبك پلتفرم (ساده)


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

گرافیك آماده
تعداد مراحل 2
منوی ورود ساده
حركات حركت به طرفین- پرش- دشمن ثابت
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های سبك پلتفرم (متوسط)


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

گرافیك آماده
تعداد مراحل 5
منوی ورود نیمه حرفه ای
حركات حركت به طرفین- پرش- شلیك- دشمنان متحرك
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های سبك پلتفرم (حرفه ای)


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

گرافیك آماده-حرفه ای
تعداد مراحل 10
منوی ورود حرفه ای
حركات حركت به طرفین- پرش- شلیك- دشمنان متحرك- دشمن تیر انداز- دشمن دارای هوش مصنوعی- حركات خاص كاراكتر- تغییر اصلحه
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های جنگی (ساده)


محوریت اصلی این نوع بازی ها بر روی پیروزی در جنگ استوار است و شما باید با غلبه بر دشمنان مراحل را به پایان برسانید. مانند جنگ هوایی یا جنگ تانكی

گرافیك آماده
تعداد مراحل 2
منوی ورود ساده
حركات حركت به طرفین- شلیك- دشمن ثابت
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های جنگی (متوسط)


محوریت اصلی این نوع بازی ها بر روی پیروزی در جنگ استوار است و شما باید با غلبه بر دشمنان مراحل را به پایان برسانید. مانند جنگ هوایی یا جنگ تانكی

گرافیك آماده
تعداد مراحل 5
منوی ورود نیمه حرفه ای
حركات حركت به طرفین-  شلیك- دشمنان متحرك- جوایز حین جنگ
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های جنگی (حرفه ای)


محوریت اصلی این نوع بازی ها بر روی پیروزی در جنگ استوار است و شما باید با غلبه بر دشمنان مراحل را به پایان برسانید. مانند جنگ هوایی یا جنگ تانكی

گرافیك آماده-حرفه ای
تعداد مراحل 10
منوی ورود حرفه ای
حركات حركت به طرفین-  شلیك- دشمنان متحرك- دشمنان ثابت- هوش مصنوعی- جوایز حین جنگ- ارتقا- تغییر صلاح
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های مسابقه ای (متوسط)


محوریت اصلی این نوع بازی ها پیروزی بر رقبا در مسابقات است معمولا مسابقات با وسایل نقلیه انجام میپذیرد.

گرافیك آماده
تعداد مراحل 5
منوی ورود نیمه حرفه ای
حركات حركت- مسابقه با رقبای كامپیوتری-
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های مسابقه ای (حرفه ای)


محوریت اصلی این نوع بازی ها پیروزی بر رقبا در مسابقات است معمولا مسابقات با وسایل نقلیه انجام میپذیرد.

گرافیك آماده-حرفه ای
تعداد مراحل 10
منوی ورود حرفه ای
حركات حركت- مسابقه با رقبای كامپیوتری- ماژول های خاص در حین مسابقه- ارتقا و شخصی سازی وسیله
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های آموزشی ای (متوسط)


محوریت اصلی این نوع بازی ها آموزش است. مانند آموزش الفبا فارسی یا انگلیسی و آموزش ریاضی

گرافیك آماده
تعداد مراحل 0
منوی ورود نیمه حرفه ای
حركات آموزش جزئی بحث
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی


بازی های آموزشی ای (حرفه ای)


محوریت اصلی این نوع بازی ها آموزش است. مانند آموزش الفبا فارسی یا انگلیسی و آموزش ریاضی

گرافیك آماده-حرفه ای
تعداد مراحل 0
منوی ورود حرفه ای
حركات آموزش كلی- ثبت امتیاز
سورس كد
خروجی ویندوز
خروجی اندروید
صدا گذاری
درج اطلاعات شما در بازی
درج اطلاعات درخواستی

دسته بندی

آموزشهای تخصصی
آموزش ساخت بازی آنلاین-نوبتی(قسمت سوم) آموزش ساخت بازی آنلاین-نوبتی(قسمت سوم) آموزش ساخت بازی آنلاین-نوبتی(قسمت سوم)


آموزش ساخت بازی آنلاین-نوبتی(قسمت سوم)


قبل از اینکه بریم سراغ آموزش لازمه یه کد رو توی ایونت draw آبجکت obj_helthbar اصلاح کنیم تا نام کاربری دو طرف بازی زیر اسپرایت نوار زندگی (healthbar) نمونه و نمایش داده بشه برای این کار در این اونت آبجکت خط 8 رو منتقل میکنیم به خط 1 در این صورت کدهای این ایونت به صورت زیر در میاد.

draw_sprite(sprite_index,0,x,y)
draw_healthbar(x+143,y+66,x+291, y+85, global.heath,c_black, c_aqua,c_aqua,0,1,0)
draw_healthbar(x+496,y+66,x+344, y+85, global.e_heath,c_black, c_aqua,c_aqua,0,1,0)

draw_set_colour(c_white)
draw_text(x+180,y+43,global.username)
draw_text(x+457,y+43,global.e_username)

نتیجه این کارمون نمایش نام کاربری دو طرف در بخش مربوطه به رنگ سفید هست (تست1 و تست2 در تصویر زیر) به صورت زیر

آموزش ساخت بازی آنلاین-نوبتی(قسمت سوم)

خب بریم سراغ کار خودمون

چهار تا اسپرایت ایجاد میکنیم برای نمایش حالات ضربه و دفاع کاراکتر با نامهای spr_but1 و spr_but2 وspr_but3 وspr_but4 (برای این آموزش یکی از همین اسپرایتها کافیه برای آموزش بعدی هر 4 مورد الزامیه)

یه چندتا متغییر گلوبال جدید لازم داریم و این متغییر ها رو در آبجکت obj_global ایونت Create ایجاد میکنیم که کدهای این ایونت به صورت زیر تغییر پیدا میکنه

randomize()
global.username=""
global.userhero=0
global.heath=100

global.e_username=0
global.e_userhero=0
global.e_heath=100


global.tern=0
////new
global.file=""
global.attack=0
global.e_attack=0
////

برای اینکه بتونیم دو کاربر رو با همدیگه مرتبط کنیم نیازمند یک فایل هستیم که بین دو کاربر مشترک باشه برای این کار نام فایل مربوطه رو به دو کاربر باید اختصاص بدیم که این نام باید یکتا باشه تا تداخلی بین بازی ها به وجود نیاره به این منظور کدهای فایل player.php رو به صورت زیر تغییر میدیم

<?php

$user=$_GET['name'];
$hero=$_GET['hero'];

$read = file("start.txt");

foreach($read as $name)

{
$old_user=$name; 
}


$char=substr_count($old_user,"±");
if($char!=0)
{
$myfile = fopen("start.txt", "w");
fclose($myfile); 
$old_user='';
}


if($old_user!='')
{
$myfile = fopen("start.txt", "w");
fwrite($myfile,$old_user."±".$user.'°'.$hero);
fclose($myfile);
//////new
$time=rand(1000,9999).time().".txt";
$myfile = fopen("file.txt", "w");
fwrite($myfile,$time);
fclose($myfile);
/////
}
else
{
$myfile = fopen("start.txt", "w");
fwrite($myfile,$user.'°'.$hero);
fclose($myfile);
}

?>

 

  • کدهای 29 تا 34 یک نام یکتا با ترکیب اعداد رندوم و زمان کنونی با فرمت txt ایجاد کرده و در فایل file.txt ذخیره میکند.

جهت جلوگیری از بروز خطاهای احتمالی یک فایل به نام file.txt در سرور یا هاست ایجاد نمایید (خالی)

برای اینکه این نام فایل رو به کاربر ارجاع بدیم فایل start.php رو هم به صورت زیر اصلاح میکنیم.

<?php

$user=$_GET['name'];

$array = array();

$read = file("start.txt");
foreach($read as $name)
{$file=$name; }
///////new
$read = file("file.txt");
foreach($read as $name)
{$filename=$name; }
//////////
$char=substr_count($file,"±");
if($char!=0)
{

$users=explode("±",$file);

$users1=explode("°",$users[0]);
$users2=explode("°",$users[1]);
if($user==$users1[0])
{
array_push($array,array("name"=>"$users2[0]", "hero"=>"$users2[1]","file"=>"$filename"));
array_push($array,array("show"=>"1"));
}
else
{
array_push($array,array("name"=>"$users1[0]", "hero"=>"$users1[1]","file"=>"$filename"));
array_push($array,array("show"=>"2")); 
}


$print = json_encode($array);

echo $print;


}
?>

 

  • دقت کنید در این فایل در خطوط 10 تا 14 نام فایل یکتا رو از فایل file.txt خونده و در خطوط 25 و یا 30 به کاربر ارجاع میدیم برای استفاده.

برای دریافت نام فایل یکتا در گیم میکر تغییرات زیر رو در آبجکت obj_loading_player اعمال میکنیم

ایونت .http. رو به صورت زیر تغییر میدیم

var type = ds_map_find_value(async_load,'id');
    if type == get
    {
        if ds_map_find_value(async_load,'status') == 0
        {
            var requestResult = ds_map_find_value(async_load,'result');
            var resultMap = json_decode(requestResult);
            var list = ds_map_find_value(resultMap, "default");
            top_rank_size = ds_list_size(list);
            size=real(top_rank_size);
            for (var n = 0; n < ds_list_size(list); n++;)
            {
                var map = ds_list_find_value(list, n);
                var curr = ds_map_find_first(map);
                while (is_string(curr))
                {  
                 
                name[n] = ds_map_find_value(map, "name");
                hero[n] = ds_map_find_value(map, "hero");
                ////new
                file[n] = ds_map_find_value(map, "file");
                ////
                curr = ds_map_find_next(map, curr);
                } 
     
                show = ds_map_find_value(map, "show");                      
                    
                ds_map_destroy(map);
            }
            ds_list_destroy(list);
            ds_map_destroy(resultMap);
        }
    }
  • خط 21 رو به این ایونت اضافه کردیم تا نام فایل رو از سرور یا هاست دریافت کنه

ایونت .step. رو به صورت زیر تغییر میدیم

if(show='1' or show='2')
{
global.e_username=string(name[0])
global.e_userhero=real(hero[0])
////new
global.file=string(file[0])
////
global.tern=real(show)

room_goto_next()
}
  • خط 6 رو به این ایونت اضافه کردیم تا نام فایل رو در متغییر گلوبال مربوطه ذخیره کنه

یه آبجکت با نام obj_send_attack ایجاد میکنیم تا اطلاعات حمله رو به سرور ارسال و دریافت کنه برای این آبجکت اسپرایت spr_loading رو انتخاب میکنیم.

یه آبجکت ایجاد میکنیم با نام obj_attack این آبجکت برای نمایش حالت ضربه هست و هدفمون اینه که با کلیک بر روی این آبجکت حمله مربوطه به سرور ارسال بشه و در صورتی که طرف مقابل هم ضربه زده باشه اقدامات لازمه انجام بگیره

یکی از چهار اسپرایت جدید رو به این آبجکت اختصاص میدیم

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

image_speed=0

در ایونت left pressed این آبجکت کدهای زیر رو وارد میکنیم

if(instance_number(obj_send_attack)=0 )
{
global.attack=random_range(0.1,2)
instance_create(400,240,obj_send_attack)
}
  • در خط 1 بررسی میکنیم اگه تعداد آبجکت obj_send_attack موجود در روم صفر باشه کدهای مربوطه اجرا بشه (برای جلوگیری از چند بار کلیک)
  • خط سوم یه عدد رندوم به متغییر حمله میدیم (این مقدار رندم فعلا قرار داده شده و در مراحل بعدی این مقدار بر اساس اصولی در نظر گرفته خواهد شد)
  • خط چهارم هم ابجکت obj_send_attack رو ایجاد میکنیم تا با سرور ارتباط برقرار کنه و اطلاعات بگیره.

در ایونت draw این آبجکت کدهای زیر رو وارد میکنیم

if(instance_number(obj_send_attack)=0 )
{
draw_sprite(sprite_index,image_index,x,y)
}
  • این کدها فقط جهت جلوگیری از کلیک مدام کابر هست و آبجکت رو در حالت انتظار محو میکنه و نمایش نمیده

برای آبجکت obj_send_attack کدهای زیر رو وارد میکنیم این آبجکت از روی آبجکت obj_loading_player کپی شده و تغییرات چندانی در کدهاش ایجاد نکردیم به همین دلیل تغییرات توضیح داده میشه. 

در ایونت Create کدهای زیر رو وارد میکنیم

http_get(string('https://gmstudio.ir/online_tenbase/attack.php?name=')
+string(global.username)+ string('&file=')+string(global.file)+
string('&attack=')+string(global.attack))

get = ''

image_speed=0.5

show=0
size=0


alarm[0]=30
  • در خطوط 1 تا 3 کدهای ارسال حمله به صفحه attack.php رو زدیم که متغییر های نام پلیر میزان حمله و نام فایل مشترک رو به این فایل ارسال میکنه
  • در خط 13 هم میزان آلارم رو برابر 30 فریم گذاشتیم تا نتیجه سریعتر به دستمون برسه

در ایونت alarm این آبجکت کدهای زیر رو وارد میکنیم

get = http_get(string("https://gmstudio.ir/online_tenbase/end.php?name=")
+string(global.username)+string('&file=')+string(global.file))

alarm[0]=30
  • در خطوط 1 تا 2 کدهای ارسال اطلاعات برای دریافت اطلاعات طرف مقابل به صفحه end.php رو زدیم که متغییر های نام پلیر و نام فایل مشترک رو به این فایل ارسال میکنه
  • در خط 4 هم میزان آلارم رو برابر 30 فریم گذاشتیم تا نتیجه سریعتر به دستمون برسه

در ایونت .http. همین آبجکت کدهای زیر رو وارد میکنیم 

var type = ds_map_find_value(async_load,'id');
    if type == get
    {
        if ds_map_find_value(async_load,'status') == 0
        {
            var requestResult = ds_map_find_value(async_load,'result');
            var resultMap = json_decode(requestResult);
            var list = ds_map_find_value(resultMap, "default");
            top_rank_size = ds_list_size(list);
            size=real(top_rank_size);
            for (var n = 0; n < ds_list_size(list); n++;)
            {
                var map = ds_list_find_value(list, n);
                var curr = ds_map_find_first(map);
                while (is_string(curr))
                {  
                 
                attack[n] = ds_map_find_value(map, "attack");
                
                curr = ds_map_find_next(map, curr);
                } 
     
                show = ds_map_find_value(map, "show");                      
                    
                ds_map_destroy(map);
            }
            ds_list_destroy(list);
            ds_map_destroy(resultMap);
        }
    }
  • در خط 18 متغییر حمله طرف مقابل رو از سرور دریافت کردیم

در ایونت .step. کدهای زیر رو وارد میکنیم

if(show='1' or show='2')
{
global.e_attack=real(attack[0])
global.e_heath=global.e_heath-global.attack*10
global.heath=global.heath-global.e_attack*10
instance_destroy()
}
  • در این کدها بررسی میکنیم اگه متغییر از سرور گرفته شده باشه میزان جان پلیر و طرف مقابل رو با استفاده از متغییر حمله دو طرف محاسبه میکنیم (فعلا)
  • بعد از اتمام کار این آبجکت رو در خط 7 حذف کردیم تا آماده حمله بعدی بشیم

یک فایل به نام attack.php ایجاد میکنیم و کدهای زیر رو داخلش وارد میکنیم

<?php

$user=$_GET['name'];
$attack=$_GET['attack'];
$file=$_GET['file'];

$read = file($file);
foreach($read as $name)

{
$old_attack=$name; 
}


$char=substr_count($old_attack,"±");
if($char!=0)
{
$myfile = fopen($file, "w");
fclose($myfile); 
$old_attack='';
}


if($old_attack!='')
{
$myfile = fopen($file, "w");
fwrite($myfile,$old_attack."±".$user.'°'.$attack);
fclose($myfile);
}
else
{
$myfile = fopen($file, "w");
fwrite($myfile,$user.'°'.$attack);
fclose($myfile);
}

?>

 

  • خط 3 تا 5 دو متغییر رو که از سمت گیم میکر ارسال شده دریافت میکنیم
  • خط 7 تا 12 محتویات فایل با نام یکتایی که از کاربر دریافت کردیم  رو میخونیم و در متغییر $old_attack ذخیره میکنیم
  • خط 15 تعداد کاراکتر ± موجود در محتویات فایل یکتا رو برمیگردونیم (چون اطلاعات دو پلیر رو با ± از هم جدا میکنیم پس اگه این کاراکتر وجود داشته باشه یعنی دوتا پلیر جمله رو انجام دادن)
  • خط 16 تا 21 اگه تعداد این کاراکترمون صفر نباشه محتویات فایل رو خالی کرده و متغییر$old_attack رو خالی میکنیم (این حالت یعنی دو پلیر قبلا حمله انجام دادن و این حمله جدید هست پس فایل رو خالی کرده و حمله جدید رو ذخیره میکنیم)
  • خط 24 بررسی میکنیم اگ فایل یکتامون خالی نباشه خط 25 تا خط 29 اجرا بشه و اگه خالی باشه کدهای خط 31 تا 35 اجرا بشه.
  • خط 25 تا 29 اطلاعات پلیر منتظر (پلیری که اول حمله رو تموم کرده ) رو با ± از اطلاعات پلیر دوم از هم جدا کرده در فایل ثبت میکنیم (نام و میزان حمله رو با استفاده از ° از هم جدا میکنیم)
  •  خط 31 تا 35 اطلاعات پلیر دوم در فایل ثبت میکنیم (نام و میزان حمله رو با استفاده از ° از هم جدا میکنیم)

یک فایل با نام end.php ایجاد میکنیم و کدهای زیر رو داخلش وارد میکنیم

<?php

$user=$_GET['name'];
$files=$_GET['file'];
$array = array();

$read = file($files);
foreach($read as $name)
{$file=$name; }


$char=substr_count($file,"±");
if($char!=0)
{

$users=explode("±",$file);

$users1=explode("°",$users[0]);
$users2=explode("°",$users[1]);

if($user==$users1[0])
{
array_push($array,array("name"=>"$users2[0]", "attack"=>"$users2[1]"));
array_push($array,array("show"=>"1"));
}
else
{
array_push($array,array("name"=>"$users1[0]", "attack"=>"$users1[1]"));
array_push($array,array("show"=>"2")); 
}


$print = json_encode($array);

echo $print;


}
?>
  •  خط3 و نام پلیر درخواست کننده و نام فایل یکتای مبارزه رو میگیریم
  • خط 5 یه متغییر از نوع آرایه ایجاد میکنیم بعدا لازم داریم
  • خط 7 تا 9 اطلاعات فایل یکتا رو میخونیم
  • خط 12 تعداد کاراکتر ± موجود در محتویات فایل یکتا رو برمیگردونیم (چون اطلاعات دو پلیر رو با ± از هم جدا میکنیم پس اگه این کاراکتر وجود داشته باشه یعنی دوتا پلیر حمله رو انجام دادن)
  • خط 13 بررسی میکنیم اگه کاراکتر ± داخل فایل موجود باشه (یعنی اگه دو پلیر حمله رو انجام داده باشن) کدهای خطوط 23 تا 35 رو اجرا میکنیم
  • خطوط 16 و 18 و 19 به ترتیب اطلاعات دو پلیر رو از هم جدا کرده بعد نام و میزان حمله رو از هم جدا میکنیم 
  • خط 21 بررسی میکنیم اگه پلیر درخواست دهنده پلیر اول باشه کدهای خطوط 23 و 24 رو اجرا میکنیم در غیر این صورت کدهای خطوط 28 و 29 اجرا میشه (یعنی میزان حمله طرف مقابل رو براش نشون میدیم)
  • خط 23 و 24 نام پلیر دوم و میزان حمله کاربر دوم رو در متغییر ارایه خودمون برای نمایش به کاربر اول (درخواست دهنده )ذخیره میکنیم و بعد متغییر show رو برابر یک وارد میکنیم به آرایه که یعنی پلیر درخواست دهنده پلیر اول ما هست.
  •  خط 28 و 29 نام پلیر اول  و میزان حمله کاربر دوم رو در متغییر ارایه خودمون برای نمایش به کاربر دوم (درخواست دهنده) ذخیره میکنیم و بعد متغییر show رو برابر دو وارد میکنیم به آرایه که یعنی پلیر درخواست دهنده پلیر دوم ما هست.
  •  خط 33 و 35 متغییر آرایه خودمون رو تبدیل به جیسون کرده و نمایش میدیم.

خب برای این جلسه کافیه آبجکت obj_attack رو در روم قرار داده از بازی خروجی گرفته دو بار اجرا کرده و تست میکنیم دقت کنید میزان جون هر دو طرف کم میشه و به صورت یکسان برای هر دو کاربر نمایش داده میشه.

آموزش ساخت بازی آنلاین-نوبتی(قسمت سوم)

 

 

 



Download

نویسنده:

tfh1368





نظرات


نام: ahmadreza

8 آذر 1396
عالیه ممنون

نام: ایران رادا

7 دی 1396
حتما بخوانید با سامانه افزایش بازدید ایران رادا رتبه گوگل و الکسا سایتتان را بهبود دهید. ویژگی های استفاده از سامانه افزایش بازدید ایران رادا : 1 ) بهبود رتبه الکسا 2 ) بهبود جایگاه سایت در گوگل 3 ) قدرت بسیار زیاد نسبت به پاپ آپ 4 ) بهبود بانس ریت و پیج و ویو و تایم سایت 5 ) قیمت مناسب و تاثیر گذاری بالا به ما اعتماد کنید و یکبار تست کنید لینک سفارش : https://goo.gl/rQpcqs در صورت نیاز به هرگونه مشاوره با ما تماس بگیرید ☎️ تلفن : 03136511074 و 09395304616

نام: ali

2 تیر 1397
سلام. میشه راجع به کدهای php و کدهای مربوط به ارسال و دریافت اطلاعات توضیحات بیشتری بدید و چگونی نوشتن کد ها را بنویسید. ممنون

نام: sedsajjad

2 خرداد 1399
سلام سایتتون فوق العادست ولی اگه ویدیو آموزشی قرار بدید بهتره ممنون

نام: majid

2 اسفند 1400
این لینک اموزش هم خرابه