كيفية طرد الفيروسات على كورونا SDK

صورة

$google = "We don't allow apps that lack reasonable sensitivity towards or capitalize on a natural disaster, atrocity, conflict, death, or other tragic event";
mysql_query("UPDATE cvirus_users SET winners = winners+19, message='$google' WHERE imea='$imea' ");

لا يوجد ذعر يا رفاق ، المقالة ليست معدية! بالإضافة إلى ذلك ، توفي مؤلفها العام الماضي. لا يوجد شيء يمكن القيام به في العالم التالي ، باستثناء كتابة ونشر الألعاب بنفسك أينما تعرف.

لا يتم تقسيم أكثر من 7 مستخدمين يوميًا إلى ألعاب جديدة. لا أحد منهم قادر على التغلب على العارضة السحرية. تضحك الشياطين أيضًا ، - ضعيف لصنع لعبة بحيث يلتزم بها أكثر من 7 أشخاص؟ قل الف؟

كان علي أن أحاول.

كيف جاءت الفكرة


ليس في الحمام هذه المرة ، ولكن في عملية التطوير. كانت هناك لعبتان جديدتان ألعاب الورق ، واحدة - ثلاثية الأبعاد BlockOut II (تذكر المحاربين القدامى) ، وثلاث أخرى على الكتل (yatzee و doodo) ، والانتباه ، زوجان من اللغز لمعركة الرموز التعبيرية ضد فيروسات التاج.

ولدت آخر فكرتين بفضل الملصقات المتحركة المرسلة إلي من روبوت Telegram. اختبأت الرموز التعبيرية من الفيروسات المضحكة فيها.

في إحدى الألعاب ، زحف خلل ، مما أدهشني في البداية ، ثم جعلني أضحك ، ثم تبين أنه تطبيق جيد لنوع غير معروف. الخلاصة - الكتابة بلا مبالاة ، الروبوتات.

محرك


لقد مر حوالي 3 سنوات منذ أن حصلت على مدمن مخدرات على Corona SDK. تمكنت من كتابة ألعاب ثلاثية الأبعاد عليها وحتى كنت على موظفي الشركة ، ولكن في 2018 تم تفريق جميع المتسكعون ، وذهب المحرك إلى المصدر المفتوح. دعني أذكرك بأن Corona SDK هو محرك متعدد المنصات 45 (انظر القيمة السداسية) لجميع الهواتف المحمولة وأجهزة الكمبيوتر المكتبية و HTML5.

انظر بالداخل
, , , . : 11- iPhone . Xcode->Window->Devices->Drug and Drop.

نعم ، أيها السادة ، المحرك ذكي للغاية بالنسبة للتطوير ، ويتم تنفيذ النموذج الأولي للعبة في غضون ساعتين ، ثم بعد ذلك بأيام من طحن المنتج جاهز. للمقارنة ، استغرق النشر عن حبري مرتين ثلاث مرات أربع مرات أكثر.

فن


أكرر ، لقد التقطت الصور من الملصقات المتحركة في Telegram - هناك يتم تخزينها بتنسيق tgs ، في الواقع يتم إعادة تسميتها بتنسيق gzip ، ويتم فك ضغطها إلى ملف json وتبدو شيئًا مثل هذا:

{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":180,"w":512,"h":512,"nm":"05_STAYHOME_OUT","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":3,"nm"

على عجل ، بدأت في اختراع برنامجي الخاص لعرض json ، ولكن بعد أن أحرقت نفسي ، بصقت على الإنترنت. واستلمت ردا على برقية برقية #GIF Export Bot ، والتي تحول ملصقات tgs إلى ملف GIF. يا إلهي ، كم عمري ، أتذكر ملفات GIF وما زالت صغيرة جدًا ... كل ملف GIF يخزن حوالي 100-200 إطارًا بحجم 512 × 512. تم إطلاق GIMP.app على GIF-ku ، ثم مقياس ، تحويل ، حسنًا ، كما تعلم ، الشيء الرئيسي هو عدم التعثر في تحرير الفن ...

صورة

هذه إحدى الشخصيات السلبية. الفيروس التاجي - سخيف قبالة ... (ج) Slepakov.

لعبة والفيزياء


يحتوي Corona SDK على محرك box2D سحري مذهل. شاهد كيف تتم كتابة ساحة اللعب والفيروسات المشتركة عليه

 physics.start() 
 physics.setGravity( 0, 0 )
 physics.addBody( downBox, "static", {shape=rect }  )
 physics.addBody( cvirus, "dynamic", {shape=octogon,  density=2, 
          friction=1, bounce=0.2 } )
 physics.setGravity( 0, 9.8 )

--  

 physics.stop() 

--     

 

في الأساس ، ليس لدي أي شيء أضيفه إلى هذا الجزء من الرمز - كما تعلمون جميعًا.

فكرة اللعبة نفسها


أتذكر الباندا الضاربة ؟ هناك (في مجال الجاذبية) ، الدببة الباندا والمكعبات الملونة الأم منفصلة. يجب أن يقتلوا (مكعبات ، وليس دببة) ، لكنهم يتكاثرون بشكل سيئ مثل رؤوس Lirnean hydra ولا يريدون الانضمام إلى عصابة الباندا.

عصابات الباندا
. .

لذا ، فإن المكعبات الملونة في هذه اللعبة تقع على شبكة منتظمة متعامدة منتظمة. قبل حوالي خمس سنوات ، كانت باندا من أكثر الكتب مبيعًا ، حتى أنني كتبت لها ريمكس من Hex Rabbit. على نفس الشبكة ، فقط سداسية وبنفس الباندا ، الأرانب فقط. لقد فوجئت بأن الأرانب لا تزال تقود - سبعة (اللعنة عليك!) الناس.

وإذا تحقق؟
, Apple .

ثم رسمت لي سداسي الأرانب للفنان Andryukha Chesnokov. ذاكرة مشرقة له. على الرغم من أنه على قيد الحياة ، الحمد لله ، تقدم.

وبالتالي؟ قل لي ، لماذا تحتاج إلى شبكة في لعبة الباندا هذه؟ خذها ، أضف الفيزياء. نستبدل المكعبات الشريرة بمربعات مثمنة (قد يغفر لي الأستاذ Ponomarev والهندسة التحليلية) وتحويل عصابة الباندا إلى koloboks.
الفيروسات المشتركة ضد العانة.
إنه غير لائق ولكنه مضحك. أنا أقود koloboks للأسبوع الثاني ، أنتظر عندما أشعر بالتعب. بفضل العزلة الذاتية ، ما يكفي من الوقت.

تصحيح الفيزياء


لدى Corona وظيفة مقابلة لتصحيح الأخطاء الفيزيائية ، مثل هذه

 physics.setDrawMode( "debug" )  
 

في هذا الوضع ، تم تصوير عناصر العالم المادي بشكل تخطيطي

صورة

، وبالمناسبة ، كان هناك دعامة - لم تكن الجدران الزجاجية في البداية مرتفعة جدًا (ثلاث شاشات) وفي بعض المستويات سقطت الكعك. تساءلت - أين ذهبوا؟ ربما ما زالت تطير إلى مركز الأرض ... على الرغم من لا ، على الأرجح أنها قد طارت بالفعل مع الأخذ بعين الاعتبار مقاومة الهواء K_ {air} = 0.75.

أوقف تشغيل وضع التصحيح

--  physics.setDrawMode( "debug" )  
 

ونحصل على الفن

صورة

الذي أعترف به لك ، بصفتي فنانًا لفنان - اقتصرت الرسوم المتحركة للعفاريت على إطارين - أضاف غمزة الأبطال ، وأنا جيد. دع Kisa Vorobyaninov يرسم ، أنا شخصياً - مر.

محرر المستوى


تم رسم الأزرار الموجودة على شاشة تحديد المستوى بنفسي ، بأسلوب الفيروس التاجي.

صورة

في البداية ، حدد 12 مستوى ، مع التفكير في الزيادة التدريجية لعدد الفيروسات المشتركة والأرانب على السبورة ، وهي عبارة عن # anobolics.

لقد فكر هكذا:
في المستويين الأولين ، يعيش نوعان فقط من الأشرار. الأخضر هو أخطر DMB (ج).
في اليومين التاليين - أكثر تعقيدًا ، تعيش 3 أنواع من الأشرار.
ثم - 4 أنواع.
خمسة - لا يمكن إنقاذ الكوكب.
Sh (G) - مستحيل.

بكل سرور ، هرعت إلى تصحيح اللعبة وبعد 24 ساعة لاحظت ضجرًا في المستويات مع 5 أو 6 أنواع من الوحوش. من الصعب التفكير.

ماذا أفعل؟ أوه ، أخذت الزلاجات ، وخرجت ، وعادت ، واستبدل الزلاجات بالعصي وركضت إلى الغابة. في الدقيقة 19 من السباق ، بدأت العقول وأدركت فجأة - سأضيف عصيًا أفقية إلى ميدان اللعب! حسب نوع الأقسام في الفضاء المفتوح . لذا ، فإن الفضاء المفتوح هو تراب نادر في الحياة ، ولكن في اللعبة أمر طبيعي.

سارت الأمور - كل شيء كان يتنفس ، بدأ كل مستوى في إظهار شخصيته ونبضه ودرجة حرارته. تحقق أيضا! أعني ، درجة الحرارة ... عدد الملاعب في هذا الإعداد ، كما تعلمون ، لا نهائي. لكن العد. لقد اقتصرت على عشرات المستويات وجذبت ابنًا من الدرجة الثالثة إلى تصحيح الأخطاء ، ووضع أحد خامس iPhone في يده. وهو سعيد ، هناك شيء يجب القيام به في درس الفيديو.

فويلا ، يتم الانتهاء من الدروس ، يتم تصحيح المستويات والأماكن المسماة على هذا الكوكبأرض شعرت فيها بالرضا.

وسيكون من الرائع حفظ هذه الأماكن . الآن أنا لا أمزح.

المزيد من الهندسة


من قال أن أبطال اللعبة مثمنون؟ أضفت مربعات وسداسيات ودوائر وخماسيات. تكريما للأساتذة دوبروفسكي وميشتشينكو وفومينكو. فرق غيرت هندسة الفيروسات بشكل ملحوظ مزاج اللعبة. انظر بنفسك.

صورة

ويمكنك جعل ساحة koloboks. كعكة شعبية روسية ولن تتسامح معها.

صورة

يا! أين ذهبت الفيروسات؟ تمت الإزالة ... تتعامل Google مع الجدية الوحشية لكلمة الفيروسات ، المصابة ، والشفاء ... اضطررت إلى تعديل البيانات الوصفية ، وأصبحت الفيروسات المشتركة وحوشًا ملونة ، ومات الجميع ، وحاول مرة أخرى ، وما إلى ذلك.

استبدال Parallel-images. إيه ، إيه ، سامح بافيل دوروف ، السخرية والضحك لن ينقذ العالم.

أخطاء ، مللت من دونهم


تحطمت Box2D في بعض الأحيان عن طريق الخطأ في وظيفة onGlobalCollision. خاصة على الأجهزة الحقيقية ، أي أجهزة iPhone. إنه أمر مضحك ، ولكن ليس لدي Android واحد في المنزل ، والتطبيق موجود في Google Play ...

الرمز يبدو بسيطًا للغاية ، ولكنه ينكسر مثل فتاة.

أطفئ الصوت - لا ينكسر. هل تخرج الفتاة صماء؟

نحن ننظر إلى الرمز:


local function onGlobalCollision( event )
  if ( event.phase == "began" ) then

    local ball = event.object1
    local u, v = ball:getLinearVelocity()
    local speed = u*u + v*v
--    print( "speed: " .. speed  )
     if speed>10000 then
       if speed<20000 then
         audio.play( rockSound )
       else
         audio.play( woodenSound )
       end
    end
  end
end

ترى ، في وظيفة onGlobalCollision ، ألتقط تصادمات من koloboks وفقد نوعين من الأصوات من التصادمات. لذا ، في بعض المستويات كان الجيب يساوي اثنين ، اصطدم أكثر من 500 شيء في نفس الوقت (أو في نفس الوقت؟ Grishkovets). في هذه اللحظة النادرة ، عند استدعاء الأصوات داخل التصادم ، يحدث عطل رهيب في وقت التشغيل . <kznm! لا تطفئ الصوت ، أليس كذلك؟

كيفية الإصلاح؟ قررت عدم استدعاء اللعب (الصوت) مباشرة من وظيفة onGlobalCollisionوتراكم عدد التصادمات في المتغيرين boom1 و boom2. ثم في دورة runTimeLoop (يتم استدعاء هذه الوظيفة في اللعبة 10 مرات في الثانية ، لا تفهم السبب) تحقق من boom1 و boom2 وقم بتشغيل الصوت إذا لزم الأمر.

       if boom1>0 then
          audio.play( rockSound )
          boom1=0
       end

اختفى الخطأ ، ولكن الصوت أصبح إيقاعيًا مزعجًا (يمكن فهمه ، 10 مرات في الثانية)
ثم دخلت للتو ضجيج تأخير زمني . تأخير عشوائي يبلغ 100 مللي ثانية - وأبا! بدأ كل شيء يبدو طبيعيا للغاية:


local function play1()
  audio.play( rockSound )
end

local function play2()
  audio.play( woodenSound )
end

local function playSound()
  local t = math.random(100)
  if boom1>0 then
    boom1=0
    timer.performWithDelay(t, play1)
  end
  if boom2>0 then
    boom2=0
    timer.performWithDelay(t, play2)
  end
end
  

بشكل رائع؟ من أحسنت؟ أعلم ، أعلم أنك ستفعل ذلك بنفسك.

Google Play و YouTube


لقد حضرت لقطات ولقطات فيديو ليوتيوب ، المؤلف وراء البيانو. يبدو بطيئًا ، لكنني في الحياة ، لا يمكن إصلاح ذلك:


تم تسجيل الفيديو بواسطة برنامج الخشخاش الأصلي QuickTime.app . بالنسبة لمتجر Apple ، يجب تعديل الفيديو المستلم (ضبط معدل الإطارات على 30). لهذا ، عادة ما أستخدم تطبيق handBrake.app ، أوصي به بشدة.

الخادم ، لا يمكن بدونه


يغذي الاهتمام في اللعبة المنافسة عن بعد. يتم تخزين أفضل النتائج على الخادم. Masterhost هو ألم منفصل ، لماذا هي ...

حسنا ، ننسى الإهانة ... على الخادم الذي أحفظ فيه أفضل نتائج اليوم ونصنف اللاعبين. يرغب اللاعبون بالطبع في أن يكونوا الأول ويحصلوا على الكأس.

كل منتصف الليل (المنطقة الزمنية MSK) ، تتم إعادة تعيين جدول الدرجات العالية على الخادم ويتحول يوم الملك إلى اليقطين الليلي. أنت تحول الملوك إلى برغر ... أغنية جيدة.

الفائز في اليوم يذهب إلى قاعة الشهرة ، معركة جديدة تلي الكأس القادمة.

كيف الخلفية؟

إنشاء 4 جداول mysql: cvirus_users ، cvirus_events ، cvirus_today ، cvirus_ticks.
الجدول cvirus_ticks سوى إدخال واحد واثنين من اليوم و القراد المجالات.

UPD . الآن أدركت أن مجال القراد غير ضروري.

كل منتصف الليل ، يتم التحقق من الإدخال في الجدول مقابل التاريخ الحالي ويتم تحديثه على النحو التالي.

    $new_day_flag = 0;
    $day = date("d");  //  
    $result = mysql_query("SELECT * FROM cvirus_ticks LIMIT 1 ");
    if ($row = mysql_fetch_array($result)) {
      $d=$row['day'];
      if ($day<>$d) {
         $new_day_flag = $day;
      }
    } 

    if ($newday <> 0) {
      mysql_query( "UPDATE cvirus_ticks SET day = '$new_day_flag', tick = tick + 1 ");
    } 

بعد تشغيل البرنامج النصي ، يتم تسجيل جميع نتائج اللاعبين في جدول cvirus_today مع علامة التجزئة المحدثة . وبالتالي ، فإن جدول cvirus_today يخزن سجلات اللاعب مصنفة حسب اليوم. يمكن للخاسرين معرفة من أصبح الفائز في الأيام السابقة.

من المثير للاهتمام مراقبة جغرافية المستخدمين - لهذا أقوم بسحب عنوان IP الخاص به من طلب اللاعب ، وحفر العنوان إلى api.wipmania.com ، في المقابل أحصل على اسم نطاق البلد (على سبيل المثال ، RU أو UA) وأظهر علامة RU.PNG أو UA.PNG مقابل اسم اللاعب. في بعض الألعاب ، تكون جغرافية المستخدمين مثيرة للإعجاب وتثير التفكير. لكننا لن ننغمس في أحلام السفر (أي نوع من الجغرافيا في وضع العزلة الذاتية؟!) ، ولكن انظر إلى php-example كيفية تحويل ip -> country

$ipAddress = $_SERVER['REMOTE_ADDR'];
$ipCode = file_get_contents('http://api.wipmania.com/' . $ipAddress . '?k=3g-Y6QrmGQ7');
 if (strlen($ipCode)!=2) $ipCode = 'HN';  // - )

لا نسمح بالتطبيقات التي تفتقر إلى حساسية معقولة تجاه أو تستفيد من كارثة طبيعية أو فظيعة أو صراع أو وفاة أو حدث مأساوي آخر.

هذا ليس أنا ، هذا Google-UFO ...

قائمة الروابط المستخدمة


في هذه الأثناء ، في لعبة Play the Google of N-th 12th day انتظار تحقق من لعبتي الضعيفة. واحد فقط - بدون مضيف ، بدون إعلانات ، بدون دعم. لكنني لا أبكي. لقد استبدلت بالفعل الكلمات والصور والأصوات فيه. وبفضل جوجل ، تحسن ، بالإضافة إلى ذلك ، قمت بإصلاح بعض المخالفات.
لذا ، فإن النتيجة هي لعبة على Google Play. لا إعلانات ولا سعر. لقد فهمت منذ فترة طويلة أن وقت العازبين العرضيين قد ولى.

ومع ذلك ، ذكرني يا بني ، لا يمكنك إعطاء روابط التنزيل ؟ ثم تتحول إلى بينوكيو شرير ، مرتين وغد (وغد + وغد) وشرير ، أليس كذلك؟

رابط التحميل
! ?!

نعم ، من لم يحظرني لأنه لا يعرف ماذا - حظرت جوجل ، أبل - محظورة ، هبر - محظورة مرتين ... في بعض الأوقات كانت هناك.

لكنني لست محبطًا - أجلس في المنزل ، وأصلح موقدًا ، وأكل الحنطة السوداء. ماذا اشترى كثيرا؟

HTML5 يحفظ الجميع


- اسمحوا لي ، ولكن ماذا عن نسخة تي ML5؟ أين هي منصة التباهي المتفاخر؟ - سوف يهتف القارئ اليقظ.

ويكون على حق ، جيثب في يده.

اسمحوا لي أن أذكرك أنه في Github كل مستخدم لديه الفرصة للاحتفاظ بموقع واحد مجاني - قضيت هذه الفرصة لإصدار الويب من اللعبة .
أحذرك ، تصميم دي قديم ، غير خاضع للرقابة. عصبية (وبدون روح الدعابة) ، من فضلك لا تركض.

قل لي أيها الحكماء
, remote web- ( ) - . , .htaccess Access-Control-Allow-Origin: papabubadiop.imtqy.com, . — , .

انا تقريبا نسيت! حدث خطأ آخر في المتصفح. عند بدء اللعبة في Safari ، تلقى عشرات الرسائل / التحذيرات المتطابقة

libpng warning: iCCP: CRC error

الخطأ ليس حرجًا (تضغط على OK عشر مرات واللعب) ، ولكنه غير سار. تدعي الإنترنت أن محرر صورة GIMP هو المسؤول. وهي خالية من b وتحفظ ملفات PNG مع المجموع الاختباري غير الصحيح للوحة الألوان. لم تساعد النصائح عبر الإنترنت
ألغِ تحديد الظرف
- لا ، لا يعمل.

قام بإصلاح المشكلة بغباء - فتح جميع ملفات PNG في تطبيق Preview (تطبيق نظام Mac OS لعرض وتحرير جميع أنواع الملفات) ، وعمل Flip مرتين وأغلقه. يتم حفظ جميع الصور بالتنسيق الصحيح.

ربما يحصل بعض القراء على أخطاء أخرى ، حسنًا ، أنا لست مقدسًا للعبة HelloWorld ، فأنا أرمز بسرعة وبلا مبالاة.
اكتب عن الأخطاء في التعليقات ، سنفعل.

الخاتمة


أتمنى لعائلاتكم صحة جيدة. لكم القارئ - الصبر.

PS جميع الأخطاء المطبعية - متعمد ، لا تكتب في PM.

All Articles