So werfen Sie Viren im Corona SDK aus

Bild

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

Keine Panik Jungs, der Artikel ist nicht ansteckend! Darüber hinaus ist sein Autor im vergangenen Jahr verstorben. In der nächsten Welt gibt es nichts zu tun, außer Spiele selbst zu schreiben und zu veröffentlichen.

Nicht mehr als 7 Benutzer pro Tag werden in neue Spiele geschnitten. Keiner von ihnen kann die magische Leiste überwinden. Die Teufel lachen auch: - Schwach, ein Spiel so zu machen, dass mehr als 7 Leute daran festhalten? Sag tausend?

Ich musste es versuchen.

Wie ist die Idee entstanden?


Diesmal nicht im Badezimmer, sondern im Entwicklungsprozess. Zwei neue Spiele waren Kartenspiele, eines - dreidimensionales BlockOut II (Veteranen erinnern sich), drei weitere auf Blöcken (Yatzee und Doodo) und ein paar Rätsel für den Kampf der Emoticons gegen die Kronenviren.

Die letzten beiden Ideen wurden dank der animierten Aufkleber geboren, die mir der Telegramm-Bot geschickt hat. Emoticons versteckten sich vor lustigen Viren.

In einem der Spiele kroch ein Fehler heraus, der mich zuerst erstaunt, dann zum Lachen brachte, und dann stellte sich heraus, dass es sich um eine gute Anwendung eines unbekannten Genres handelte. Fazit - unachtsam schreiben, Bots.

Motor


Es ist ungefähr 3 Jahre her, seit ich vom Corona SDK begeistert war. Ich habe es geschafft, dreidimensionale Spiele darauf zu schreiben und war sogar Mitarbeiter des Unternehmens, aber 2018 wurden alle Slipper verteilt und die Engine wurde auf Open Source umgestellt. Ich möchte Sie daran erinnern, dass das Corona SDK eine plattformübergreifende 45-Engine (siehe Hex-Wert) für alle Mobiltelefone, Desktops und HTML5 ist.

Einblick
, , , . : 11- iPhone . Xcode->Window->Devices->Drug and Drop.

Ja, meine Herren, die Engine ist sehr intelligent für die Entwicklung, der Prototyp des Spiels ist in ein paar Stunden fertig, dann ebenso viele Tage Schleifen und das Produkt ist fertig. Zum Vergleich: Die Veröffentlichung auf Habré dauerte zweimal dreimal viermal länger.

Kunst


Ich wiederhole, ich habe die Bilder von den animierten Aufklebern im Telegramm aufgenommen - dort werden sie im tgs-Format gespeichert, tatsächlich wird es in gzip umbenannt, es wird in eine json-Datei entpackt und sieht ungefähr so ​​aus:

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

In Eile fing ich an, mein eigenes Programm zum Rendern von JSON zu erfinden, aber nachdem ich mich verbrannt hatte, spuckte ich ins Internet. Als Antwort erhielt ich einen Telegramm-Bot #GIF Export Bot, der tgs-Aufkleber in eine GIF-Datei konvertiert. Gott, wie alt ich bin, ich erinnere mich an GIFs und immer noch so klein ... Jedes GIF speichert ungefähr 100-200 Frames mit einer Größe von 512 x 512. GIMP.app auf dem GIF gestartet wird, dann ist die Skala, verwandeln , na ja, wissen Sie, die Hauptsache ist auf die Bearbeitung der nicht stecken zu bleiben Kunst ... Das

Bild

ist, eine der negativen Zeichen. Coronovirus - verdammt noch mal ... (c) Slepakov.

Spiel und Physik


Das Corona SDK verfügt über eine magische, unglaubliche Box2D-Engine. Beobachten Sie, wie das Spielfeld und die Co-Viren darauf geschrieben sind

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

--     

 

Grundsätzlich habe ich diesem Code nichts hinzuzufügen - Sie alle verstehen.

Spielidee selbst


Erinnerst du dich an den Hit Panda ? Dort (im Bereich der Schwerkraft) trennen Pandabären und Mama farbige Würfel. Sie müssen getötet werden (Würfel, keine Bären), aber sie vermehren sich böse wie die Köpfe einer lirnischen Hydra und wollen sich nicht der Panda-Bande anschließen.

Panda-Banden
. .

Die farbigen Würfel in diesem Spiel befinden sich also auf einem einheitlichen orthogonalen regelmäßigen Gitter. Vor ungefähr fünf Jahren war Panda ein Bestseller, sogar ich schrieb ihr einen Remix von Hex Rabbit. Auf dem gleichen Gitter, nur sechseckig und mit den gleichen Pandas, nur Kaninchen. Ich war überrascht, dass immer noch Kaninchen gefahren werden - sieben (verdammt noch mal!) Leute.

Und wenn Sie überprüfen?
, Apple .

Hex-Kaninchen, die der Künstler Andryukha Chesnokov für mich gemalt hat. Helle Erinnerung an ihn. Gott sei Dank, obwohl er lebt, mach weiter.

Damit? Sag mir, warum brauchst du ein Netz in diesem Panda-Spiel? Nehmen Sie es weg, fügen Sie Physik hinzu. Wir ersetzen die bösen Würfel durch achteckige Quadrate (verzeihen Sie mir Professor Ponomarev und analytische Geometrie) und verwandeln die Pandabande in Koloboks.
Co-Viren gegen Co-Pubis.
Es ist unanständig, aber lustig. Ich fahre Koloboks für die zweite Woche, ich warte, wenn ich müde bin. Dank Selbstisolation genug Zeit.

Physik debuggen


Corona hat eine entsprechende Funktion zum Debuggen der Physik

 physics.setDrawMode( "debug" )  
 

In diesem Modus werden Elemente der physischen Welt schematisch dargestellt.

Bild

Übrigens gab es einen Pfosten - die Glaswände waren anfangs nicht sehr hoch (drei Bildschirme) und auf einigen Ebenen fielen die Brötchen heraus. Ich fragte mich - wohin gingen sie? Wahrscheinlich immer noch zum Erdmittelpunkt fliegen ... Obwohl nein, höchstwahrscheinlich sind sie bereits geflogen, unter Berücksichtigung des Luftwiderstands K_ {air} = 0,75.

Deaktivieren Sie den Debug-Modus

--  physics.setDrawMode( "debug" )  
 

und wir bekommen Kunst, die

Bild

ich Ihnen zugebe, als Künstler zu einem Künstler - ich habe die Animation von Sprites auf zwei Frames beschränkt - fügte das Blinken der Helden hinzu, und ich bin gut. Lassen Sie Kisa Vorobyaninov zeichnen, ich persönlich - vorbei.

Level-Editor


Die Schaltflächen auf dem Ebenenauswahlbildschirm wurden von mir im Coronavirus-Stil gezeichnet.

Bild

Zunächst bestimmte er 12 Stufen und dachte daran, die Anzahl der Co-Viren und Kaninchen an der Tafel, die #anobolics sind, schrittweise zu erhöhen.

Er argumentierte so:
Auf den ersten beiden Ebenen leben nur zwei Arten von Bösewichten. Grün ist das gefährlichste (c) DMB.
Auf den nächsten zwei - komplizierteren - leben 3 Arten von Bösewichten.
Dann - 4 Arten.
Fünf - der Planet kann nicht gerettet werden.
Sh (G) ist - ein Unmöglichkeit.

Mit Vergnügen beeilte ich mich, das Spiel zu debuggen und nach 24 Stunden bemerkte ich Langeweile bei Levels mit 5 oder 6 Arten von Monstern. Es ist schwer zu denken.

Was zu tun ist? Oh, ich nahm die Skier, ging nach draußen, kehrte zurück, ersetzte die Skier durch Stöcke und rannte in den Wald. In der 19. Minute des Laufs begannen die Gehirne und mir wurde plötzlich klar - ich würde dem Spielfeld horizontale Stöcke hinzufügen! Nach Art der Partitionen im offenen Raum . So Open-Space ist ein seltener Dreck im Leben, aber in einem Spiel ist es normal.

Die Dinge gingen - alles atmete, jedes Level begann seinen Charakter, Puls und seine Temperatur zu demonstrieren. Sie überprüfen auch! Ich meine, die Temperatur ... Die Anzahl der Spielfelder in dieser Einstellung ist unendlich. Aber zählen. Ich beschränkte mich auf ein Dutzend Levels und zog einen Sohn aus der dritten Klasse zum Debuggen an, wobei ich eines der fünften iPhones in die Hand nahm. Und er ist froh, dass es in der Videolektion etwas zu tun gibt.

Voila, die Lektionen sind fertig, die Levels sind debuggt und Orte auf dem Planeten benanntEin Land, in dem ich mich gut fühlte.

Und es wäre schön, diese Orte zu retten . Jetzt scherze ich nicht.

Mehr Geometrie


Wer hat gesagt, dass die Helden des Spiels Achtecke sind? Ich habe Quadrate, Sechsecke, Kreise, Pentagone hinzugefügt. Zu Ehren der Professoren Dubrovsky, Mishchenko und Fomenko. Diff Die Geometrie der Viren hat die Stimmung des Spiels deutlich verändert. Überzeugen Sie sich selbst.

Bild

Und Sie können Koloboks quadratisch machen. Russisches Volksbrötchen und wird es nicht tolerieren.

Bild

Oh! Wohin gingen die Viren? Entfernt ... Google nimmt die brutale Ernsthaftigkeit des Wortes Viren, infiziert, geheilt ... Ich musste die Metadaten bearbeiten, Co-Viren wurden zu farbigen Monstern , alle starben , versuchen es erneut usw.

Parallel ersetzte Telegrammbilder. Eh, eh, vergib Pavel Durov, Ironie und Lachen werden die Welt nicht retten.

Fehler, ohne sie gelangweilt


Box2D stürzte manchmal versehentlich in der Funktion onGlobalCollision ab. Besonders auf realen Geräten, also iPhones. Es ist lustig, aber ich habe kein einziges Android im Haus und die Anwendung ist in Google Play ...

Der Code sieht extrem einfach aus, aber er bricht wie ein Mädchen.

Ich schalte den Ton aus - er bricht nicht. Kommt das Mädchen taub heraus?

Wir schauen uns den Code an:


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

Sie sehen, in der Funktion onGlobalCollision fange ich Kollisionen von Koloboks auf und verliere zwei Arten von Geräuschen durch Kollisionen. Auf einigen Ebenen war der Sinus also gleich zwei , mehr als 500 Objekte kollidierten gleichzeitig (oder zur gleichen Zeit? Grishkovets). In diesem seltenen Moment, wenn Geräusche innerhalb einer Kollision aufgerufen werden , tritt zur Laufzeit ein schrecklicher Absturz auf . <kznm! Schalten Sie den Ton nicht aus, oder?

Wie repariert man? Es wurde beschlossen, Play (Sound) nicht direkt über die Funktion onGlobalCollision aufzurufenund akkumulieren Sie die Anzahl der Kollisionen in den Variablen boom1 und boom2. Überprüfen Sie dann im runTimeLoop-Zyklus (diese Funktion wird im Spiel 10 Mal pro Sekunde aufgerufen, verstehen Sie nicht warum) boom1 und boom2 und spielen Sie den Sound bei Bedarf ab.

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

Der Fehler verschwand, aber der Ton wurde unangenehm rhythmisch (es ist verständlich, 10 Mal pro Sekunde).
Dann gab ich einfach ein Zeitverzögerungsgeräusch ein . Eine zufällige Verzögerung von 100 Millisekunden - und oppa! alles begann sehr natürlich zu klingen:


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
  

Schön? Wer ist gut gemacht? Ich weiß, ich weiß, du selbst würdest das tun.

Google Play und YouTube


Ich habe Screenshots vorbereitet und ein Video für Youtube gedreht, der Autor sitzt hinter dem Klavier. Es sieht langsamer aus, aber ich bin so im Leben, dass dies nicht behoben werden kann:


Das Video wurde vom nativen Mohnprogramm QuickTime.app aufgenommen . Für den Apple Store muss das empfangene Video bearbeitet werden (stellen Sie die Bildrate auf 30 ein). Dafür verwende ich normalerweise die Anwendung handBrake.app , ich kann es nur empfehlen.

Server, auf keinen Fall ohne


Das Interesse am Spiel wird durch den Distanzwettbewerb geweckt. Die besten Ergebnisse werden auf dem Server gespeichert. Masterhost ist ein separater Schmerz, warum zum Teufel sie sind ...

Okay, vergiss die Beleidigung ... Auf dem Server speichere ich die besten Ergebnisse des Tages und stufe die Spieler ein. Die Spieler wollen natürlich die Ersten sein und den Pokal gewinnen.

Jede Mitternacht (MSK-Zeitzone) wird die Highscore-Tabelle auf dem Server zurückgesetzt und der Tagkönig verwandelt sich in einen Nachtkürbis. Du machst Könige zu Bergern ... Gutes Lied.

Der Gewinner des Tages geht in die Hall of Fame, es folgt ein neuer Kampf um den nächsten Pokal.

Wie war das Backend?

Erstellt 4 MySQL-Tabellen: cvirus_users, cvirus_events, cvirus_today, cvirus_ticks.
Die cvirus_ticks Tabelle hat nur einen Eintrag und zwei Tag und Zecke Felder.

UPD . Jetzt wurde mir klar, dass das Häkchenfeld überflüssig ist.

Jeden Mitternacht wird der Eintrag in der Tabelle mit dem aktuellen Datum verglichen und wie folgt aktualisiert.

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

Nachdem das Skript ausgelöst wurde, werden alle Ergebnisse der Spieler in der Tabelle cvirus_today mit dem aktualisierten Tick- Tag aufgezeichnet . Daher speichert die Tabelle cvirus_today die nach Tag sortierten Spielerdatensätze. Verlierer können sehen, wer in den vergangenen Tagen der Gewinner wurde.

Es ist interessant, die Geografie der Benutzer zu beobachten. Dazu ziehe ich seine IP-Adresse aus der Anfrage des Spielers heraus, ätze die Adresse in api.wipmania.com . Im Gegenzug erhalte ich den Domainnamen des Landes (z. B. RU oder UA) und zeige das Flag RU.PNG oder UA.PNG gegenüber dem Namen des Spielers. In einigen Spielen ist die Geografie der Benutzer beeindruckend und regt zum Nachdenken an. Aber wir werden uns nicht den Reiseträumen hingeben (welche Art von Geografie befindet sich im Selbstisolationsmodus ?!), Sondern schauen Sie sich das PHP-Beispiel an, wie man IP -> Land dreht

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

Wir erlauben keine Apps, die keine angemessene Sensibilität für Naturkatastrophen, Gräueltaten, Konflikte, Todesfälle oder andere tragische Ereignisse haben oder diese nicht nutzen.

Das bin nicht ich, das ist Google-UFO ...

Liste der verwendeten Links


In der Zwischenzeit überprüfen Sie im Play the Google vom 12. Tag auf mein schlechtes Spiel. Nur eine - ohne Gastgeber, ohne Werbung, ohne Unterstützung. Aber ich weine nicht. Ich habe bereits Wörter, Bilder und Töne darin ersetzt. Und dank Google wurde es besser, außerdem habe ich ein paar Unregelmäßigkeiten behoben.
Das Ergebnis ist also ein Spiel bei Google Play. Keine Werbung und kein Preis. Ich habe lange verstanden, dass die Zeit der Einzelgänger vorbei ist.

Erinnern Sie mich jedoch, mein Sohn, Sie können keine Download-Links angeben ? Und dann verwandelst du dich in einen bösen Pinocchio, zweimal einen Schurken (einen Schurken + einen Schurken) und einen Bösewicht, oder?

Link zum Download
! ?!

Ja, wer mich einfach nicht dafür gebannt hat, weiß nicht was - Google verboten, Apple - verboten, Habr - zweimal verboten ... In Zeiten gab es.

Aber ich bin nicht entmutigt - ich sitze zu Hause, repariere einen Herd, esse Buchweizen. Was für so viel gekauft?

HTML5 rettet alle


-Lassen Sie mich, aber was ist h t ML5 Version? Wo ist die gepriesene plattformübergreifende Plattform? - wird der aufmerksame Leser ausrufen.

Und sei richtig, Github ist in seiner Hand.

Ich möchte Sie daran erinnern, dass jeder Benutzer auf Github die Möglichkeit hat, eine kostenlose Website zu behalten. Ich habe diese Chance für die Webversion des Spiels genutzt .
Ich warne Sie, D-Design ist alt, unzensiert. Nervös (und ohne Humor), bitte nicht rennen.

Sag es mir, weise Leute
, remote web- ( ) - . , .htaccess Access-Control-Allow-Origin: papabubadiop.imtqy.com, . — , .

Ich habe es fast vergessen! Es gab einen anderen Browserfehler. Als er das Spiel in Safari startete, erhielt er ein Dutzend identischer Nachrichten / Warnungen

libpng warning: iCCP: CRC error

Der Fehler ist nicht kritisch (Sie drücken zehnmal OK und spielen), aber unangenehm. Das Internet behauptet, dass der GIMP-Bildeditor schuld ist. Es ist b-frei und speichert PNG-Dateien mit der falschen Prüfsumme für die Farbpalette. Online-Tipps haben nicht geholfen
Deaktivieren Sie den Umschlag
- Nein, es funktioniert nicht.

Er hat das Problem dumm behoben - er hat alle PNG-Dateien in der Vorschau-Anwendung (Mac OS-Systemanwendung zum Anzeigen und Bearbeiten aller Dateitypen) geöffnet, Flip zweimal erstellt und geschlossen. Alle Bilder werden im richtigen Format gespeichert.

Vielleicht bekommen einige der Leser andere Fehler. Nun, ich bin keine heilige HelloWorld . Ich codiere schnell und nachlässig.
Schreiben Sie über Fehler in den Kommentaren, wir werden.

Epilog


Ich wünsche Ihren Familien gute Gesundheit. Für Sie, den Leser - Geduld.

PS Alle Tippfehler - absichtlich, nicht in PM schreiben.

All Articles