بازی های سبك پلتفرم (ساده)
بازیکننده در این نوع بازی مجبور به پرش از روی موانع مختلف یا بالا رفتن از سدهای فیزیکی است، مانند بازی سوپر ماریو یا بازی سونیك
گرافیك | آماده |
---|---|
تعداد مراحل | 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); } ?>
جهت جلوگیری از بروز خطاهای احتمالی یک فایل به نام 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; } ?>
برای دریافت نام فایل یکتا در گیم میکر تغییرات زیر رو در آبجکت 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); } }
ایونت .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() }
یه آبجکت با نام 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) }
در ایونت 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
در ایونت alarm این آبجکت کدهای زیر رو وارد میکنیم
get = http_get(string("https://gmstudio.ir/online_tenbase/end.php?name=") +string(global.username)+string('&file=')+string(global.file)) alarm[0]=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); } }
در ایونت .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() }
یک فایل به نام 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); } ?>
یک فایل با نام 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; } ?>
خب برای این جلسه کافیه آبجکت obj_attack رو در روم قرار داده از بازی خروجی گرفته دو بار اجرا کرده و تست میکنیم دقت کنید میزان جون هر دو طرف کم میشه و به صورت یکسان برای هر دو کاربر نمایش داده میشه.
نویسنده:
tfh1368