Zwei rote Knöpfe, Lötkolben und React: Wie wir uns für eine IT-Konferenz entschieden haben

Badoo nimmt regelmäßig mit einem Stand an Ausstellungen von IT-Konferenzen teil. Aus diesem Grund haben wir uns jedes Jahr mit Kollegen - Ingenieuren und Entwicklern - etwas einfallen lassen, um zwischen den Berichten keine Langeweile aufkommen zu lassen.


Mein Name ist Ivan, ich bin ein Frontend-Entwickler. In diesem Artikel erzählen wir Ihnen zusammen mit unserem Lilek- Kollegen und DIY-Enthusiasten Yuri Lilekov, wie wir mit zwei roten Knöpfen, einem Mikrocontroller, einem React-Code und 250 Wörtern für ein IT-Thema das Spiel „IT-Ratespiel“ erstellt und eine gemütliche Party auf Highload ++ zusammengestellt haben und Heisenbug.



Inhalt:


Nichttriviale TK
Spielmechanik und Wertung
Animation
Frontend
Hardware: zwei rote Knöpfe
Ergebnis


Nichttriviale TK


IT-Konferenzen haben ihre eigene Atmosphäre: Es gibt viele Leute, es ist nicht einfach, ihre Aufmerksamkeit auf den Stand zu lenken. Damit sie genau in den Pausen zwischen den Berichten zu uns kommen, müssen wir ihnen eine interessante, aber unkomplizierte Lektion anbieten.


Inspiriert vom Erfolg des IT-Alias ​​vom letzten Jahr haben wir die folgenden Anforderungen für das neue Spiel formuliert:


  • Es muss ein Mehrbenutzer sein. Die Kommunikation der Teilnehmer ist die Hauptaufgabe. Wir wissen, dass viele allein kommen und nicht immer leicht mit Fremden ins Gespräch kommen. Das Spiel sollte Gelegenheit geben, sich untereinander und mit den Badoo-Ingenieuren zu unterhalten.
  • Die Sitzungen sollten kurz sein. Es könnten ein bis dreitausend Personen an der Konferenz teilnehmen, und wir wollten so viele Teilnehmer wie möglich erreichen.
  • Das Spiel sollte spektakulär sein. Wenn eine Person nicht am Spiel teilnimmt, sollte sie es zumindest sehen. Dies weckt Interesse, hilft, das Wesentliche zu verstehen und sich für eine Teilnahme zu entscheiden.
  • Das einfachste Management. Wie wir alle wissen, wenn etwas kaputt gehen kann, wird es mit Sicherheit kaputt gehen.
  • Ohne Registrierung und SMS!

Nach einem Brainstorming, einem Traumdenken und dem Versuch, sich inspirieren zu lassen, entwickelten wir ein „IT-Ratespiel“ - ein einfaches Spiel mit Worten zu IT-Themen.



Was ist die Essenz von:


  • Zwei Teilnehmer spielen gleichzeitig.
  • Die Aufgabe besteht darin, die Taste schneller als der Gegner zu drücken und das auf dem Bildschirm angezeigte verschlüsselte Wort zu erraten.
  • Zwei Stufen: die einfache („Shortcuts“), bei der die Wörter von hinten nach vorne geschrieben werden, und die schwierige („Stirrers“), bei der alle Buchstaben in den Wörtern gemischt werden.
  • Wenn die Antwort richtig ist, wird dem Antwortenden ein Punkt gezählt. Falsch - das Ergebnis geht an den Gegner.
  • Wer mindestens N Punkte erzielt, kann an der Verlosung cooler Kopfhörer mit Geräuschunterdrückung teilnehmen.

Es scheint, dass alles recht einfach und einfach ist, aber es lagen Schwierigkeiten vor uns.


Spielmechanik und Wertung



Aus diesem GIF ist ziemlich klar, wie der runde Prozess aussieht:


  1. Ein verschlüsseltes Wort wird angezeigt.
  2. Der Timer startet für 10 Sekunden.
  3. Wenn einer der Spieler den Knopf drückt, stoppt dieser Timer und der andere startet stattdessen - für 3 Sekunden. Während dieser Zeit muss dem Spieler eine Antwort gegeben werden, ansonsten wird die Punktzahl dem Gegner gutgeschrieben.
  4. Wenn niemand die Taste drückt, ändert sich das Wort automatisch und der gesamte Vorgang wird erneut wiederholt.

Das Hauptproblem, mit dem wir konfrontiert sind, besteht darin, die Punktzahl zu halten und die Spieler aufzunehmen. Wir wollten das Spiel so schnell wie möglich machen und die Teilnehmer nicht zwingen, sich irgendwo anzumelden. Es war jedoch notwendig zu verstehen, wer von ihnen eine bestimmte Anzahl von Punkten erzielte und den Hauptpreis erhalten konnte.


Wir haben uns die Berechnungsmechanik nicht zum ersten Mal ausgedacht. Erst nach mehreren Tests wurde klar, wie das Spiel bequem und einfach zu gestalten ist - sowohl für die Teilnehmer als auch für die Gastgeber.


Fehlgeschlagene und geniale Ideen


Idee Nr. 1: Ein Punkt = eine kleine Tafel Schokolade


Für jede richtige Antwort haben wir uns zunächst entschieden, einen Schokoriegel zu geben. Am Ende bringt der Teilnehmer Pralinen (oder zumindest Bonbonpapier aus den gegessenen "Punkten") und das war's! Wir zählen Trophäen, wir erkennen den Gewinner.


Es gibt jedoch einige Punkte.


Erstens: es ist unpraktisch. Es stellte sich heraus, dass es nicht möglich war, das Spiel zu moderieren und gleichzeitig Punkte zu berechnen, es wurde ein zweiter Assistent benötigt. Dies ist zu kostspielig in Bezug auf die Kraft und Zeit der Jungs am Stand. Und angesichts der Geschwindigkeit des Spiels müsste ich den Teilnehmern im wahrsten Sinne des Wortes Schokolade zuwerfen.


Der zweite Punkt - wie unterscheide ich meine Pralinen von den Pralinen anderer Leute? Die Spieler könnten zusammenarbeiten und Pralinen oder Bonbonpapier von ihnen stapeln. Die Schaltung funktioniert also nicht! Darüber hinaus sind die Konferenzen zweitägig und Sie können endlos Pralinen sammeln.


Dritter Punkt: Sie brauchen zu viele Pralinen. Wir haben experimentell überprüft, wie viele Punkte ein durchschnittlicher Spieler erzielt, und festgestellt, dass mindestens ein Wagen Schokolade braucht. Und wir hatten nur einen kleinen Karren.



Idee Nr. 2: Wertung


Während einige spielen, nehmen andere sich selbst in der Gesamtwertung auf. In diesem Fall würden wir auf alle möglichen Probleme stoßen: Namensvetter, Namensvetter, Schreibfehler, unleserliches Schreiben (oder die Notwendigkeit, einen anderen großen Monitor und Laptop für die Eingabe zu verwenden), Unwillen, Ihre Kontakte zu verlassen und vieles mehr.


Deshalb haben wir weiter gesucht.


Idee Nr. 3: Markierungen auf den Teilnehmerausweisen


Um das Problem der Registrierung von Spielern zu beseitigen, haben wir eine vorgefertigte Lösung verwendet: Abzeichen, die an alle Teilnehmer verteilt wurden. Dies ist etwas, das niemand verlieren wird und das jeder Teilnehmer hat. Wir haben beschlossen, einen Account direkt an sie zu schreiben. Der Teilnehmer kam zur Zählung, schaute auf das Abzeichen, zählte die Punkte und bestimmte den Sieger. Aber es gab auch einen Haken in diesem Schema: Die Spieler konnten das Endergebnis auf ihren Abzeichen „vortäuschen“.


Dann haben wir die Idee, die Partitur aufzunehmen, komplett aufgegeben. Lassen Sie diejenigen, die den Schwellenwert von Punkten erreichen, eine besondere Markierung im Abzeichen - einen Stempel in Form unseres Herzens - erhalten, die sie in den Kreis der "Auserwählten" eingetragen haben. Und zwischen diesen Teilnehmern werden die Hauptpreise nach dem Zufallsprinzip gezogen. Und der Rest bekommt noch Geschenke: unsere Sticker, Notizbücher, Karteninhaber und Entscheider.


Natürlich haben die Mitarbeiter von Badoo nicht am Gewinnspiel teilgenommen.
Natürlich haben die Mitarbeiter von Badoo nicht am Gewinnspiel teilgenommen.


Das Schema ist wie folgt:


  1. Ein Gast ist auf dem Abzeichen mit einem Teilnahmestempel gekennzeichnet: Schwarz, um 20 Punkte zu erreichen, oder Violett, nur um zu spielen. Pro Tag konnten drei Versuche unternommen und drei Herzen gewonnen werden.
  2. Alle Gewinner mit schwarzen Flecken versammeln sich zu einer bestimmten Zeit am Stand und mit Hilfe einer warmen Rohrlotterietrommel spielen wir Kopfhörer zwischen ihnen.


Nachdem wir das Spiel an lebenden Personen getestet hatten, errechneten wir die Schwelle: Es war nicht einfach, im Spiel 20 Punkte zu erzielen. Aber in jedem der beiden Tage von Highload ++ waren ungefähr 15 Leute die Gewinner!


Zwar gab es in der Wortliste einige Begriffe, die der Entwickler zuallererst verstand, so dass wir uns für die Heisenbug-QS-Konferenz auf eine Schwelle von 15 Punkten geeinigt hatten. Vielleicht umsonst: Die Halbfinalisten waren um ein Vielfaches stärker, was bedeutet, dass die Gewinnchancen für Kopfhörer geringer sind.


PS In der Anfangsphase haben wir entschieden, dass der Teilnehmer mit der falschen Antwort die Schokoladentafel-Punktzahl verliert. Aber niemand mag etwas beraubt werden. „Das ist meine Tafel Schokolade, das habe ich mir verdient!“ - die ersten Spieletester waren empört. Deshalb begannen wir als Strafe, einem Gegner einen Punkt zu geben.



Animation


Ein erratenes Wort sollte mit einer Art Animation erscheinen. Dies gibt uns zwei Vorteile:


  1. Eine Art "Prügel" zwischen Wörtern. Es ist für die Spieler viel einfacher, von einem Wort zum anderen zu wechseln, wenn zwischen ihnen eine Aktion stattfindet. Erinnern Sie sich an die alten Kampfspiele. Jede neue Runde begann mit „3..2..1..FIGHT!“. Ich wollte hier keinen weiteren Timer machen - wir haben sie bereits in loser Schüttung.
  2. Visuelle Vielfalt. Wir haben versucht, das Spiel so einfach wie möglich zu gestalten. Wir hatten keine animierten Hintergründe und Übergänge zwischen den Levels. Wir konnten auch keinen Ton verwenden, um andere Konferenzteilnehmer nicht zu stören. Daher war eine Animation notwendig.

Bei ihr lief nicht alles auf Anhieb reibungslos. Bei den Testläufen gab es schlaue Typen, die nicht auf das Ende der Animation gewartet und zuvor auf den Button geklickt haben. Um die Tricks zu lehren, haben wir begonnen, das Wort nicht mehr anzuzeigen, wenn einer der Spieler vorzeitig einen Knopf gedrückt hat. Der Teil des Wortes, der noch keine Zeit hatte zu erscheinen, blieb in diesem Fall hinter den Zeichen verborgen. Ob der Spieler es wollte oder nicht, er musste antworten. Es ist schwierig, ein Wort mit mehreren Buchstaben zu erraten, daher bekam der Gegner einen Punkt.


So sieht das Wort aus, wenn Sie vorher auf die Schaltfläche klicken:



Der zweite schwierige Moment ist die Dauer der Animation. Es dauerte immer die gleiche Zeit - 1,5 Sekunden. Wenn Sie "den Rhythmus erfassen", können Sie den Dreh raus haben, einen Knopf schneller als der Gegner zu drücken. Um das Problem zu lösen, haben wir eine Zufallsvariable zwischen 0 und 500 ms hinzugefügt. In diesem Fall ist die Anpassung an den Rhythmus sehr viel schwieriger geworden.


Frontend


Ich werde Ihnen ein wenig über den Softwareteil erzählen. Wenn Sie nicht interessiert sind, lesen Sie gleich die Geschichte, wie wir nach den roten Knöpfen gesucht haben .


Die Spielmechanik erwies sich als recht einfach, und ich wollte das Rad nicht neu erfinden. Nahm create-react-app für die Client-Seite. Aber die Herausforderung wurde noch gebraucht.


Also hakt! Lange Zeit tauchten Haken am Horizont auf, doch ihre Anwendung in den wichtigsten Badoo-Produkten erforderte ein gründliches Überdenken des Entwicklungsprozesses. Ein kleines Nebenprojekt war ein großartiges Sprungbrett für ihre Verwendung.


Kein Redux! Redux ist eine großartige Sache, und wir setzen sie jeden Tag in unserer Arbeit ein. Für eine so kleine Anwendung war die Verwendung von Redux jedoch nicht gerechtfertigt. Außerdem gibt es einen neuen useContext Hook.


 const { score, changeScore } = useContext(SessionContext); const { next } = useContext(QuestionsContext); const steps = useContext(StepsContext); 

Ja, statt einer globalen Geschichte haben wir drei Kontexte, die sich überhaupt nicht überschnitten haben.


SessionContext erzielt.
StepsContext war für das Umschalten der Anwendungsbildschirme verantwortlich: Intro, Loop, Outro ...
QuestionsContext wusste alles über die Fragen: Welche wurden beantwortet, welche Frage wird als nächstes gestellt, wie viel ist noch übrig?


Provider


Jeder Kontext benötigt einen Anbieter, der Daten an die endgültigen Komponenten liefert. Als Beispiel verwenden wir einen einfachen Anbieter für das Scoring.


 const increment = score => score + 1; const SessionProvider = props => { const [leftPlayerScore, changeLeftPlayerScore] = useState(0); const [rightPlayerScore, changeRightPlayerScore] = useState(0); const resetScore = useCallback(() => { changeLeftPlayerScore(0); changeRightPlayerScore(0); }, []); const changeScore = useCallback(player => { player === 'left' ? changeLeftPlayerScore(increment) : changeRightPlayerScore(increment); }, []); const score = { left: leftPlayerScore, right: rightPlayerScore }; return ( <SessionContext.Provider value={{ score, changeScore, resetScore }}> {props.children} </SessionContext.Provider> ); }; 

Wie Sie dem Code entnehmen können, verfolgen wir Punkte unabhängig voneinander. Es gibt einen separaten Status für die Spieler "links" und "rechts". Sowie Funktionen zur Verwaltung des Kontos: Konto zurücksetzen und ändern.


Die resultierende Provider-API ist sehr einfach. Im Allgemeinen war fast die gesamte Logik der Anbieter sehr einfach, sodass wir uns nicht darauf konzentrieren werden.


Timer


Die Komponente der Hauptrunde des Spiels erwies sich als interessant: Es gab mehrdeutige Momente. Die Komponente ist für beide Modi gleich (Reverse und Shuffle - „Shortcuts“ und „Mixer“).


Aus der Beschreibung der Runde geht hervor, dass es viel Wechselwirkung mit der Zeit gibt.


Erstens gibt es einen Timer, der für die Dauer des Wortes auf dem Bildschirm verantwortlich ist: 10 Sekunden, um eine Taste zu drücken. Wenn niemand die Taste gedrückt hat, erscheint automatisch das nächste Wort.


Zweitens ein Timer, der startet, wenn einer der Spieler auf eine Schaltfläche klickt. Dann hat er 3 Sekunden Zeit, um das Wort zu erraten.


Es scheint, dass dies nichts Kompliziertes ist, also schreiben wir solch scheinbar offensichtlichen Code:


 const [time, nextTick] = useState(0); useEffect(() => { let id = setInterval(() => { nextTick(time + 1); }, 1000); return () => clearInterval(id); }, []); 

Aber wie Sie sich denken können, hat dies nicht funktioniert. Es hat einfach überhaupt nicht funktioniert!


Der Timer erreichte 1 und blieb dabei stehen. Tatsache ist, dass der alte Zeitwert innerhalb der Funktion des Handlers "gesperrt" wurde. Daher bezog sich setInterval bei jedem Häkchen auf den Zeitwert ab dem ersten Rendern.


Es gab eine Lösung für das Problem, eine Funktion anstelle eines direkten Werts zu verwenden:


 nextTick(currentTime => currentTime + 1); 

Ja, so hatten wir immer einen "frischen" Wert für den Timer. Aber wir konnten zum Beispiel keine "frischen" props bekommen.


Offensichtlich musste ein anderer Ansatz gefunden werden. Und die sicherste Entscheidung war, die Handlerfunktion veränderbar zu machen. React hat dafür einen speziellen useRef Haken.


Am häufigsten wird es zum Arbeiten mit DOM-Elementen verwendet, dies ist jedoch nicht die einzige Anwendung. Wir können uns jede Variable in der current Eigenschaft merken und sie bei jedem Rendern aktualisieren.


 function callback() { setCount(count + 1); } useEffect(() => { savedCallback.current = callback; }); useEffect(() => { function tick() { savedCallback.current(); } let id = setInterval(tick, 1000); return () => clearInterval(id); }, []); 

Es gibt einen guten Artikel von Dan Abramov über die Arbeit mit setInterval und React-Hooks: setInterval mit React-Hooks deklarieren . Er beschrieb perfekt alle Fallstricke und alle Phasen der Reflexion über die Implementierung des useInterval Hakens, den wir als Lösung für unser Problem verwendeten.


Da der Stand während der gesamten Konferenz geöffnet war, war eine kontinuierliche Sitzung mit dem Spiel sehr groß. Die Seite wurde überhaupt nicht aktualisiert (F5), daher war es sehr wichtig, den Speicher in der Entwicklungsphase zu überwachen. Wie Sie wissen, gehen Lecks mit Timern einher, und wenn dies alles mit Re-Renderings der Reaktion gewürzt ist, dann wäre es ziemlich einfach, Code zu schreiben, der sehr, sehr viel Speicher benötigt.


Countdown wurde Dutzende (oder sogar Hunderte) Mal in einer Spielsitzung gestartet, gestoppt, zurückgesetzt und neu gestartet. Um uns nicht mit Schecks zu beschäftigen, die eigentlich viel hätten sein müssen, haben wir einen einfachen „Trick“ angewendet - wir haben dieser Komponente key hinzugefügt.


 <QuestionCountdown key={question.text} onComplete={nextQuestion} /> 

Wir werden nicht im Detail darauf eingehen, Dan Abramov hat eine umfassende Beschreibung des Prozesses der Abstimmung der Reaktion: Reagieren als UI-Laufzeit .


Hardware: zwei rote Knöpfe


Wir haben also bereits einige der Anforderungen für das Spiel erfüllt: Es war im Mehrspielermodus, schnell und mit einfacher Mechanik. Es bleibt zu ihrer Unterhaltung hinzuzufügen. Die Geschichte wird von Yura Lilekov Lilek verfolgt - unserem DIY-Enthusiasten, einem ständigen Sprecher der Community, dem Schöpfer des fliegenden Flügels und anderen Do-it-yourself-Geräten.


Wir wollten unbedingt zwei große mechanische Knöpfe finden. Und um sicher zu gehen, dass die roten - wie in diesem Meme mit Agutin.


Leider war alles, was in Online-Shops zu finden war, entweder zu klein (5 cm Durchmesser) oder es gab überhaupt keine Knöpfe. Natürlich gab es ein gutes, altes AliExpress, aber es gab keine Zeit, auf die Lieferung zu warten.


Als Ergebnis fanden wir die richtigen Schaltflächen auf der Website einer Kreativagentur. Knöpfe irgendwo in den Vororten hatte Alexander (anscheinend Absolvent der Fakultät für Radioelektronik). Wir haben angerufen, gefragt, welcher Mikrocontroller in die Box eingenäht ist, und gefragt, ob wir darauf zugreifen dürfen, weil wir ihn neu programmieren müssen.


Alexander war, gelinde gesagt, über solche Fragen überrascht. Als wir fragten, ob die Tasten dem Druck begeisterter Programmierer standhalten würden, versicherte er uns, dass sich solche Tasten in den Spielautomaten von "Cosmic" befinden und den Kinderfluss perfekt bewältigen. Mit Blick auf die Zukunft werde ich sagen, dass die Heizungsingenieure auch die Knöpfe behalten haben (nur die Batterie musste einmal gewechselt werden).



Füllung


Leider hatte das fertige Gerät nicht alle Eigenschaften, die wir brauchten. Und wenn Sie die Soundeffekte immer noch beseitigen könnten, indem Sie das Kabel zum Lautsprecher abschneiden, wäre es keine leichte Aufgabe, automatisch festzustellen, welche Taste gedrückt wurde. Es bot sich eine einfache Möglichkeit an: Schließen Sie das Gerät an den Computer an und übersetzen Sie das Drücken dieser Tasten in die Tastenanschläge auf der Tastatur.


Die Lösung ohne Schnickschnack - die alte USB-Tastatur zu nehmen und ein paar Tasten mit zusätzlichen Kabeln von der Tastatur zum Gerät zu bringen - wird sofort als "kollektive Farm" abgetan. Und schloss die Macht der DIY.


Nach einiger Überlegung entschieden wir uns, das Arduino Pro Micro Board auf Basis des ATmega32u4-Mikrocontrollers der AVmel-Familie von Atmel mit der erforderlichen Bindung zu verwenden. Auf dieser Karte sind unter anderem I / O- und MicroUSB-Ports getrennt. Und was am wichtigsten ist: Der ATmega32u4-Mikrocontroller kann als HID-Gerät fungieren, dh in unserem Fall können Tastatureingaben unter bestimmten Bedingungen emuliert werden.


(Das Foto wurde von einem der Verkäufer von AliExpress.com gemacht


Um diesen Mikrocontroller zu programmieren, benötigen Sie nur den üblichen MicroUSB-Draht und die Arduino IDE-Entwicklungsumgebung.


Nach der Installation der Entwicklungsumgebung sind die einfachsten Codebeispiele sofort verfügbar.


Hier befindet sich beispielsweise ein Programm, das das Schreiben auf einer Tastatur emuliert, wenn eine Taste gedrückt wird (verbunden mit einem Eingabe- / Ausgabeport):


Datei-> Beispiele-> USB-> Tastatur-> KeyboardMessage


Die Emulation von Tastenanschlägen ist sehr einfach:


 #include "Keyboard.h" //      void setup() { Keyboard.begin(); //   } void loop() { Keyboard.print("Test"); //   4  delay(1000); //   1  } 

Das Lesen des Eingangsportstatus ist auch kein Schnickschnack:


 int button_pin = 7; //  ,     void setup() { pinMode(button_pin, INPUT); //     } void loop() { if (digitalRead(button_pin)) { //   } else { //    } } 

Da der Port durch Spannung und nicht durch Strom geöffnet wird, können die kleinsten induzierten Ströme in den Drähten, die vom Knopf zum Port gehen, falsch positive Ergebnisse liefern. Wir empfehlen daher, die Eingangsanschlüsse mit hochohmigen Widerständen "hochzuziehen": Der induzierte Strom fließt sofort durch sie in die "Masse", wodurch verhindert wird, dass eine hohe Spannungsdifferenz zwischen dem Eingang und der "Masse" auftritt und somit keine falsche Auslösung erfolgt. Für diese Zwecke reicht ein 5-10 kΩ Widerstand, der zwischen den Eingang des Mikrocontrollers und dessen "Masse" geschaltet ist.


Somit erhalten wir das folgende Schema:



Das Arduino Pro Micro Board wird über microUSB mit einem Laptop mit dem Softwareteil des Spiels verbunden, zwei Tasten verbinden sich mit zwei Eingängen des Boards und der allgemeinen Stromversorgung. Auch diese beiden Eingänge werden von zwei Widerständen auf Masse gezogen.


Wenn eine der Tasten gedrückt wird, fließt der Strom vom Stromversorgungsausgang der Karte über die Taste zum entsprechenden Eingang der Karte - daher sehen wir eine logische „Einheit“ am Eingang.


Im Softwareteil haben wir uns entschlossen, die Tastenanschläge „linker Pfeil“ und „rechter Pfeil“ zu emulieren und nach dem Ermitteln des Drucks eine Verzögerung von 4 Sekunden einzuhalten, um wiederholte Klicks von Teilnehmern oder Klappern von Kontakten in den Tasten zu vermeiden.


 #include <Keyboard.h> char leftKey = KEY_LEFT_ARROW; char rightKey = KEY_RIGHT_ARROW; int btn1pin = 7; int btn1value = 0; int btn2pin = 8; int btn2value = 0; void setup() { pinMode(btn1pin, INPUT); pinMode(btn2pin, INPUT); Keyboard.begin(); } void loop() { btn1value = digitalRead(btn1pin); btn2value = digitalRead(btn2pin); if (btn1value == 1 && btn2value == 1) { //    =    } else if (btn1value == 0 && btn2value == 0) { //    =    } else if (btn1value == 1) { //    =       4  Keyboard.press(leftKey); delay(100); Keyboard.releaseAll(); delay(4000); } else if (btn2value == 1) { //    =       4  Keyboard.press(rightKey); delay(100); Keyboard.releaseAll(); delay(4000); } } 

So haben wir mit Hilfe einfacher Geräte die Tasten gelehrt, den Spieler zu identifizieren, der schneller als der Gegner darauf klickt, und dies dem Moderator zu signalisieren.


Management


Vollständig manuell und so einfach wie möglich:


  • Leertaste - Nächstes Wort
  • Enter - zeigt das richtige Wort
  • + - wahr (1 Punkt)
  • 0 - falsch (Punkt zum Gegner)
  • Linke Umschalttaste - Nächster Schritt
  • Rechtsverschiebung - vorheriger Schritt

Ergebnis


Alle vier Konferenztage (zwei auf Highload ++, zwei auf Heisenbug) am Badoo-Stand spielten ununterbrochen das „IT-Ratespiel“. Alle unsere Hoffnungen haben sich erfüllt:


  • Das Spiel zog sowohl Teilnehmer als auch Zuschauer an: Eine ganze Reihe von Menschen versammelte sich am Stand. Besonders erfreulich ist, dass am zweiten Konferenztag die Teilnehmerzahl nicht gesunken ist.
  • Knöpfe sind die Spitze! Addiere +100 zur Aufregung. Auch wenn die Rivalen einander fremd waren, verursachte das Spiel viele Emotionen.
  • Die Idee mit den Markierungen auf dem Abzeichen ging auf: Es war kein Problem, Gewinner zu finden und Kontakte zu sammeln. Ein paar Leute baten darum, ihren Ausweis sauber zu lassen, also haben wir unsere Handgelenke mit Markierungen versehen (sie ließen sich leicht löschen).
  • Wir verteilten 14 Kopfhörer und mehrere hundert kleine Preise. Niemand wurde ohne ein Geschenk verlassen!


Für die Teilnahme am Spiel auf der Konferenz haben wir einen coolen Merch vorgestellt

Entscheider auf einen Magneten. Sie wissen nicht, was Sie mit der Aufgabe anfangen sollen - drehen Sie die magische Scheibe! Wir haben nur noch ein paar Fotos übrig, da wir alles verteilt haben:



Für QS-Ingenieure



Für Entwickler


IT-Vorhersage-Cookies
Vorhersagen wurden selbst erfunden (52 Optionen). Erfüllen Sie sich mit einer Wahrscheinlichkeit von bis zu 100%.



Source: https://habr.com/ru/post/de482028/


All Articles