Cara Mengeluarkan Virus di Corona SDK

gambar

$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' ");

Tidak usah panik kawan, artikelnya tidak menular! Selain itu, penulisnya meninggal tahun lalu. Tidak ada yang bisa dilakukan di dunia berikutnya, kecuali menulis dan menerbitkan game sendiri-tahu-di mana.

Tidak lebih dari 7 pengguna per hari dipotong menjadi gim baru. Tak satu pun dari mereka yang mampu mengatasi bar sihir. Iblis juga tertawa, - Lemah untuk membuat game sehingga lebih dari 7 orang tetap melakukannya? Katakan seribu?

Saya harus mencoba.

Bagaimana ide itu muncul


Bukan di kamar mandi saat ini, tetapi dalam proses pengembangan. Dua permainan baru adalah permainan kartu, satu - BlockOut II tiga dimensi (ingat veteran), tiga lagi di blok (yatzee dan doodo) dan, perhatian, beberapa teka-teki untuk pertempuran emotikon melawan virus mahkota.

Dua ide terakhir lahir berkat stiker animasi yang dikirim kepada saya oleh bot Telegram. Emoticon bersembunyi dari virus lucu di dalamnya.

Dalam salah satu game, bug merangkak keluar, yang awalnya membuatku takjub, kemudian membuatku tertawa, dan ternyata itu adalah aplikasi yang bagus untuk genre yang tidak dikenal. Kesimpulan - menulis dengan ceroboh, bot.

Mesin


Sudah sekitar 3 tahun sejak saya kecanduan Corona SDK. Saya berhasil menulis game tiga dimensi di atasnya dan bahkan ada di staf perusahaan, tetapi pada 2018 semua sepatu dibubarkan, dan mesin pergi ke open-source. Biarkan saya mengingatkan Anda bahwa Corona SDK adalah mesin lintas platform 45 (lihat nilai hex) untuk semua ponsel, desktop, dan HTML5.

Lihat ke dalam
, , , . : 11- iPhone . Xcode->Window->Devices->Drug and Drop.

Ya, tuan-tuan, mesinnya sangat pintar untuk pengembangan, prototipe permainan dilakukan dalam beberapa jam, maka berhari-hari penggilingan dan produknya siap. Sebagai perbandingan, publikasi tentang Habré membutuhkan waktu dua kali tiga kali empat kali lebih banyak.

Seni


Saya ulangi, saya mengambil gambar-gambar dari stiker animasi di Telegram - di sana mereka disimpan dalam format tgs, sebenarnya itu diganti nama gzip, itu membuka ritsleting ke file json dan terlihat seperti ini:

{"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"

Dengan tergesa-gesa, saya mulai menciptakan program saya sendiri untuk rendering json, tetapi, setelah membakar diri, saya meludah ke Internet. Dan saya menerima sebagai tanggapan telegram bot #GIF Ekspor Bot, yang mengubah tgs-stiker menjadi file GIF. Ya Tuhan, berapa umur saya, saya ingat GIF dan masih sangat kecil ... Setiap GIF menyimpan sekitar 100-200 frame berukuran 512x512. GIMP.app diluncurkan pada GIF, lalu skalanya, mentransformasikannya , yah, Anda tahu, hal utama adalah jangan terjebak dalam mengedit seni ...

gambar

Itu salah satu karakter negatif. Coronovirus - sialan ... (c) Slepakov.

Game dan fisika


Corona SDK memiliki mesin box2D yang ajaib dan luar biasa. Tonton bagaimana lapangan bermain dan co-virus ditulis di dalamnya

 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() 

--     

 

Pada dasarnya, saya tidak perlu menambahkan apa pun pada kode ini - Anda semua mengerti.

Ide game itu sendiri


Ingat Panda hit ? Di sana (di bidang gravitasi), panda bears dan mommy memisahkan kubus berwarna. Mereka perlu dibunuh (kubus, bukan beruang), tetapi mereka jahat berlipat ganda seperti kepala hydra Lirnean dan tidak ingin bergabung dengan geng Panda.

Geng Panda
. .

Jadi, kubus berwarna dalam game ini terletak pada grid reguler orthogonal yang seragam. Sekitar lima tahun yang lalu, Panda adalah buku terlaris, bahkan saya menulis remix dari Hex Rabbit kepadanya. Pada kotak yang sama, hanya heksagonal dan dengan panda yang sama, hanya kelinci. Saya terkejut bahwa kelinci masih diusir - tujuh (sialan!) Orang.

Dan jika Anda memeriksa?
, Apple .

Hex-kelinci kemudian dilukis untuk saya oleh seniman Andryukha Chesnokov. Memori yang cerah baginya. Meskipun dia hidup, syukurlah, teruslah maju.

Begitu? Katakan padaku, mengapa kamu membutuhkan jaring di game panda ini? Singkirkan, tambahkan fisika. Kami mengganti kubus jahat dengan kotak segi delapan (maafkan saya Profesor Ponomarev dan geometri analitik) dan mengubah geng panda menjadi koloboks.
Co-virus terhadap co-pubis.
Itu tidak senonoh, tapi lucu. Saya mengendarai koloboks untuk minggu kedua, saya menunggu ketika saya lelah. Berkat isolasi diri, waktu yang cukup.

Fisika debugger


Corona memiliki fungsi yang sesuai untuk men-debug fisika, seperti ini

 physics.setDrawMode( "debug" )  
 

Dalam mode ini, elemen-elemen dari dunia fisik digambarkan secara skematis.

gambar

Ngomong-ngomong, ada kusen - dinding kaca pada awalnya tidak terlalu tinggi (tiga layar) dan pada beberapa tingkat roti rontok. Saya bertanya-tanya - kemana mereka pergi? Mungkin masih terbang ke pusat Bumi ... Meskipun tidak, kemungkinan besar mereka sudah terbang dengan mempertimbangkan hambatan udara K_ {air} = 0,75.

Matikan mode debug

--  physics.setDrawMode( "debug" )  
 

dan kami mendapatkan karya seni yang

gambar

saya akui untuk Anda, sebagai seorang seniman untuk seorang seniman - saya membatasi animasi sprite menjadi dua bingkai - menambahkan kedipan pahlawan, dan saya baik-baik saja. Biarkan Kisa Vorobyaninov menggambar, saya pribadi - lulus.

Editor level


Tombol-tombol pada layar pemilihan level digambar sendiri, dengan gaya coronavirus.

gambar

Awalnya, ia menentukan 12 level, berpikir untuk secara bertahap meningkatkan jumlah co-virus dan kelinci di papan tulis, yang merupakan #anobolics.

Dia beralasan seperti ini:
Pada dua tingkat pertama, hanya 2 jenis penjahat yang hidup. Hijau adalah yang paling berbahaya (c) DMB.
Pada dua berikutnya - lebih rumit, 3 jenis penjahat hidup.
Lalu - 4 spesies.
Lima - planet ini tidak bisa diselamatkan.
Sh (G) adalah - tidak mungkin.

Dengan senang hati saya bergegas untuk men-debug permainan dan setelah 24 jam saya melihat kebosanan di level dengan 5 atau 6 jenis monster. Sulit untuk berpikir.

Apa yang harus dilakukan? Oh, saya mengambil alat ski, pergi ke luar, kembali, mengganti alat ski dengan tongkat dan berlari ke hutan. Pada menit ke-19 lari, otak mulai dan saya tiba-tiba menyadari - saya akan menambahkan tongkat horizontal ke bidang permainan! Berdasarkan jenis partisi di ruang terbuka . Jadi ruang terbuka adalah kotoran langka dalam hidup, tetapi dalam permainan itu normal.

Semuanya berjalan - semuanya bernafas, setiap tingkat mulai menunjukkan karakter, denyut nadi, dan suhu. Anda periksa juga! Maksudku, suhunya ... Jumlah bidang bermain dalam pengaturan ini, Anda tahu, tidak terbatas. Tapi menghitung. Saya membatasi diri saya ke selusin level dan menarik seorang putra kelas tiga bodoh untuk debugging, meletakkan salah satu iPhone kelima di tangannya. Dan dia senang, ada sesuatu yang bisa dilakukan dalam pelajaran video.

Voila, pelajaran sudah selesai, levelnya sudah di-debug dan diberi nama tempat di planet iniTanah tempat saya merasa nyaman.

Dan alangkah baiknya untuk menyelamatkan tempat-tempat ini . Sekarang saya tidak bercanda.

Lebih banyak geometri


Siapa bilang para pahlawan gim adalah oktagon? Saya menambahkan kotak, segi enam, lingkaran, segi lima. Untuk menghormati profesor Dubrovsky, Mishchenko dan Fomenko. Diff Geometri dari virus sangat mengubah suasana permainan. Lihat diri mu sendiri.

gambar

Dan Anda bisa membuat koloboks persegi. Roti rakyat Rusia dan tidak akan mentolerirnya.

gambar

Oh! Kemana perginya virus? Dihapus ... Google mengambil keseriusan brutal dari kata virus, terinfeksi, disembuhkan ... Saya harus mengedit meta-data, co-virus menjadi monster berwarna , semua orang mati , coba lagi , dll

. Gambar Telegram yang diganti secara paralel. Eh, eh, maafkan Pavel Durov, ironi dan tawa tidak akan menyelamatkan dunia.

Kesalahan, bosan tanpa itu


Box2D terkadang jatuh secara tidak sengaja di fungsi onGlobalCollision. Terutama pada perangkat nyata, yaitu iPhone. Ini lucu, tetapi saya tidak memiliki satu pun Android di rumah, dan aplikasinya ada di Google Play ...

Kode ini terlihat sangat sederhana, tetapi rusak seperti perempuan.

Saya mematikan suara - tidak pecah. Apakah gadis itu keluar tuli?

Kami melihat kode:


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

Anda lihat, di fungsi onGlobalCollision saya menangkap tabrakan koloboks dan kehilangan 2 jenis suara dari tabrakan. Jadi, pada beberapa tingkat sinus sama dengan dua , lebih dari 500 objek bertabrakan pada saat yang sama (atau pada saat yang sama? Grishkovets). Pada saat yang langka ini, saat memanggil suara dalam tabrakan , mengerikan kecelakaan terjadi di runtime . <kznm! Jangan mematikan suaranya, kan?

Bagaimana cara memperbaiki? Memutuskan untuk tidak memanggil play (suara) langsung dari fungsi onGlobalCollision, dan mengakumulasi jumlah tabrakan dalam variabel boom1 dan boom2. Kemudian dalam siklus runTimeLoop (fungsi ini disebut dalam game 10 kali per detik, jangan pahami alasannya) periksa boom1 dan boom2 dan mainkan suara jika perlu.

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

Kesalahannya menghilang, tetapi suaranya menjadi irama yang tidak menyenangkan (bisa dimengerti, 10 kali per detik)
Lalu saya baru saja memasukkan suara penundaan waktu . Penundaan acak 100 milidetik - dan oppa! semuanya mulai terdengar sangat alami:


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
  

Dengan tampan? Siapa yang berhasil? Saya tahu, saya tahu, Anda sendiri yang akan melakukan itu.

Google Play dan YouTube


Saya menyiapkan tangkapan layar dan merekam video untuk youtube, penulis ada di belakang piano. Kelihatannya melambat, tapi dalam hidup saya, ini tidak bisa diperbaiki:


Video direkam oleh program poppy asli QuickTime.app . Untuk Apple store, video yang diterima perlu diedit (atur frame-rate menjadi 30). Untuk ini, saya biasanya menggunakan aplikasi handBrake.app , saya sangat merekomendasikannya.

Server, tidak mungkin tanpa itu


Minat dalam permainan didorong oleh kompetisi jarak jauh. Hasil terbaik disimpan di server. Masterhost adalah rasa sakit yang terpisah, mengapa mereka ...

Oke, lupakan penghinaan ... Di server saya menyimpan hasil terbaik hari ini dan memberi peringkat para pemain. Para pemain, tentu saja, ingin menjadi yang pertama dan merebut Piala.

Setiap tengah malam (zona waktu MSK), tabel skor tinggi di server diatur ulang dan hari King berubah menjadi Labu malam. Anda mengubah Kings menjadi bergers ... Lagu yang bagus.

Pemenang hari itu pergi ke Hall of Fame, pertempuran baru terjadi untuk Piala berikutnya.

Bagaimana backendnya?

Membuat 4 tabel mysql: cvirus_users, cvirus_events, cvirus_today, cvirus_ticks.
Tabel cvirus_ticks hanya memiliki satu entri dan dua hari dan centang bidang.

UPD . Sekarang saya menyadari bahwa bidang centang tidak berguna.

Setiap tengah malam, entri dalam tabel diperiksa berdasarkan tanggal saat ini dan diperbarui sebagai berikut.

    $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 ");
    } 

Setelah skrip dipicu, semua hasil pemain dicatat dalam tabel cvirus_today dengan tag centang yang diperbarui . Dengan demikian, tabel cvirus_today menyimpan catatan pemain yang diurutkan berdasarkan hari. Pecundang bisa melihat siapa yang menjadi pemenang di hari-hari sebelumnya.

Sangat menarik untuk mengamati geografi pengguna - untuk ini saya mengeluarkan alamat IP-nya dari permintaan pemain, etsa alamatnya ke api.wipmania.com , sebagai imbalannya saya mendapatkan nama domain negara (misalnya, RU atau UA) dan memperlihatkan bendera RU.PNG atau UA.PNG yang berseberangan dengan nama pemain. Dalam beberapa game, geografi pengguna sangat mengesankan dan menggugah pikiran. Tapi kita tidak akan menikmati mimpi perjalanan (seperti apa geografi dalam mode isolasi diri?!), Tetapi lihat pada contoh-php bagaimana mengubah ip -> negara

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

Kami tidak mengizinkan aplikasi yang kurang sensitif terhadap atau memanfaatkan bencana alam, kekejaman, konflik, kematian, atau peristiwa tragis lainnya.

Ini bukan saya, ini Google-UFO ...

Daftar tautan yang digunakan


Sementara itu, di Play the Google of N-th hari ke- 12 tunggu cek game saya yang buruk. Hanya satu - tanpa host, tanpa iklan, tanpa dukungan. Tapi saya tidak menangis. Saya sudah mengganti kata, gambar, dan suara di dalamnya. Dan terima kasih kepada Google, menjadi lebih baik, selain itu, saya memperbaiki beberapa penyimpangan.
Jadi, hasilnya adalah permainan di Google Play. Tanpa iklan dan tanpa harga. Saya sudah lama mengerti bahwa waktu penyendiri santai sudah pergi.

Namun, ingatkan saya, Nak, Anda tidak bisa memberikan tautan unduhan ? Dan kemudian Anda berubah menjadi Pinocchio jahat, dua kali bajingan (bajingan + bajingan) dan penjahat, kan?

Tautan untuk mengunduh
! ?!

Ya, siapa yang tidak melarang saya untuk itu tidak diketahui apa - Google dilarang, Apple - dilarang, Habr - dilarang dua kali ... Di kali ada.

Tapi saya tidak berkecil hati - saya duduk di rumah, memperbaiki kompor, makan gandum. Untuk apa membeli begitu banyak?

HTML5 menyimpan semua orang


-Biarkan saya, tapi bagaimana h t versi ml5? Di mana cross-platform yang dibanggakan? - pembaca yang penuh perhatian akan berseru.

Dan benar, Github ada di tangannya.

Biarkan saya mengingatkan Anda bahwa di Github setiap pengguna memiliki kesempatan untuk menyimpan satu situs gratis - Saya menghabiskan kesempatan ini untuk versi web gim .
Saya memperingatkan Anda, desain-d tua, tanpa sensor. Gugup (dan tanpa humor), tolong jangan lari.

Katakan padaku, orang bijak
, remote web- ( ) - . , .htaccess Access-Control-Allow-Origin: papabubadiop.imtqy.com, . — , .

Saya hampir lupa! Ada kesalahan peramban lain. Saat memulai permainan di Safari, ia menerima selusin pesan / peringatan yang identik

libpng warning: iCCP: CRC error

Kesalahannya tidak kritis (Anda menekan OK sepuluh kali dan bermain), tetapi tidak menyenangkan. Internet mengklaim bahwa editor gambar GIMP yang harus disalahkan. Ini bebas-b dan menyimpan file PNG dengan checksum palet warna yang salah. Kiat online tidak membantu
hapus centang amplop
- tidak, itu tidak berhasil.

Dia memperbaiki masalah dengan bodoh - dia membuka semua file PNG di aplikasi Preview (aplikasi sistem Mac OS untuk melihat dan mengedit semua jenis file), membuat Flip dua kali dan menutupnya. Semua gambar disimpan dalam format yang benar.

Mungkin beberapa pembaca mungkin mendapatkan bug lain, well, saya bukan HelloWorld yang suci , saya kode dengan cepat dan ceroboh.
Tulis tentang kesalahan dalam komentar, kami akan.

Epilog


Saya berharap kesehatan keluarga Anda baik. Untuk Anda, pembaca - sabar.

PS Semua kesalahan ketik - disengaja, jangan menulis dalam PM.

All Articles