Giter Site home page Giter Site logo

marcusklaas / achtung--die-kurve- Goto Github PK

View Code? Open in Web Editor NEW
11.0 11.0 2.0 2.97 MB

Remake of the classic Achtung die Kurve using HTML5 websockets

Home Page: https://achtung-starter.azurewebsites.net/

License: GNU Lesser General Public License v2.1

C++ 4.59% C 70.86% Shell 4.14% JavaScript 9.17% Makefile 7.30% CSS 1.69% HTML 0.81% M4 0.24% Dockerfile 0.02% Objective-C 1.19%

achtung--die-kurve-'s People

Contributors

marcusklaas avatar rdragon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

cymruu ritesh7792

achtung--die-kurve-'s Issues

joingame link werkt niet als al geconnect

Omdat # een anchor is en geen paginareload veroorzaakt. Op te lossen door ?game= te zetten. Is wel even de vraag of die met javascript ook weg te halen is. Dat is nodig anders probeert hij de game elke keer te joinen als je in lobby komt. Dit is echter weer op te lossen door variabele bij te houden die aangeeft of je al eerder de game hebt proberen te joinen. (dus dat je enkel die game probeert te joinen wanneer je voor de eerste keer in lobby komt)

better use of bandwidth

voor aantal berichten geen json gebruiken om bandbreedte te besparen.

als we de spelers in een spel toch gameid's geven, zijn 3 bits genoeg om te zeggen over welke speler het gaat (max 8 spelers)
als we voor de tick het verschil met de vorige tick die we stuurden gebruiken, zijn 11 bits al genoeg voor een maximaal verschil van 49 seconden, bij 24ms per tick.

  • input bericht
    2 bytes lang. dit is het enige bericht van twee bytes lang, dus daaraan kan de client zien dat het een input bericht is. 3 bits voor de user, 11 bits voor het tickverschil, 2 bits voor links/rechts/vooruit (voor deze twee bits hebben we nog 1 combinatie speling, deze kan worden gebruikt als er nog een ander bericht is dat twee bytes lang is)
    modified is niet nodig om mee te sturen met dit bericht, deze berichten sturen we gewoon nooit naar de user waar die vandaan komt. enkel wanneer we iets modifien sturen we een bericht naar de user zelf.
  • modified input bericht
    zal niet zovaak worden verstuurd, dus kan ook met json. anders:
    1 byte om te zeggen dat het een modified input bericht is
    2 bytes om te zeggen over welke input het gaat (de hoeveelste het is)
    2 bytes om te zeggen naar welke tick die is veranderd

nieuw updatemechanisme

om bandbreedte te sparen en toch spelers in de lobby goed op de hoogte houden:

createGame stuurt pakketje naar iedereen in lobby: yo, ik ben game gestart

om de zoveel seconden hele lijst sturen naar spelers in lobby om op te hoogte te houden van games die gestopt zijn en een veranderd aantal spelers

als client zo'n pakketje ontvangt moet ie ff de scrollstand onthouden, de lijst herversen en proberen zo veel te scrollen. voor kleine veranderingen kun je dan nog redelijk de lijst bekijken (je springt dan niet om de zoveel seconden naar boven)

idealiter: alleen sturen als er wat veranderd is en niet aan iedereen op dezelfde tick

misschien ook ff een bool in config.js toevoegen om te filteren/ sorteren op game state, zodat we gemakkelijk kunnen aanpassen welke games het best zichtbaar zijn (reeds gestarte games zijn bijv niet zo heel interessant voor spelers en daarom wellicht liever onderaan of helemaal niet zichtbaar)

iPad renderfouten

Dingen verdwijnen van baseCanvas bij het tekenen van pencilsegmentjes.

segfault bij herhaald connecten

de server segfault als je (te snel?) te vaak (dis?)connect. om te simuleren: ga naar diekurve.net en houdt f5 in. segfault in < 2 seconden (start wel ff de server daarna weer ff op pls ;P)

oke hoe kan dat? opsomming van dingen die me te binnen schieten

  • bug in libwebsockets. onwaarschijnlijk want ik kan me herinneren dat vroeger je wel kon doen
  • bij het opruimen van user worden bepaalde dingen gefreed maar misschien kunnen die nog op 0 staan omdat ze nog niet zijn geinitialiseerd. user kan bijv al disconnecten tussen het connecten en het joinen van de lobby?
  • iets van messages versturen bij het leaven naar users die al weg zijn?

nieuw puntensysteem

zoals rik voorstelde, het huidige punt systeem beloont het niet echt om als allerlaatste dood te gaan. ik stel voor dat we elke game struct ook een pointer naar een 'puntenfunctie' geven. zo'n functie neemt dan 2 argumenten: aantal spelers in de ronde en als hoeveelste je dood bent gegaan en returnt het aantal punten dat je krijgt. op deze manier kun je gemakkelijk puntensystemen inwisselen voor andere, omdat je enkel die pointer in game hoeft aan te passen. zo ist ook makkelijk misschien later mogelijk te maken dat hosts zelf hun puntensysteem kiezen.

edit: oja en om te zorgen dat games altijd eindigen moet zo'n functie aantal eisen voldoen: niet-negatief en tenminste 1 speler per ronde positief aantal punten

wat contrastdingetjes

ff iemand met gevoel voor opmaak laten kijken naar de verschillende grijswaarden die we gebruiken. over het algemeen vind ik het niet storend ofzo maar volgens mij gebruiken we nog steeds de kleur grijs voor de canvas die ik gewoon uit m'n hoed trok voor het testen van het tekenen van een lijntje toen die dag voor onze laatste presentatie seminar :P

enige waar echt naar gekeken moet worden is bijv de table headers van de gamelist, die hebben te weinig tot geen contrast met de achtergrond daarachter. ik denk dat dat wel prettig zou zijn. dus iets lichter/ donkerder dan ze nu zijn.

zelfde eigenlijk voor de vakjes waar minimum players/ maximum players in staan. te laag contrast.

oh en iets dat me opviel toen ik bij iemand anders op het scherm keek, dat die "Invite your friends" vakje roodig is ofzo? ik zie het niet zo op mijn scherm, het is een beetje een oud ding volgens mij :P maar dat lijkt me niet zo gepast iig. zou meer blauwig/ wittig moeten zijn? het is meer van "yo, wist je dat dit ook kan?" ipv "er ging iets fout, hier moet je echt ff aandacht aan besteden!"

owja en nog 3 minidingetjes:

de onder- en linkerborder van het game lijken net een andere waarde grijs, zou wel mooi zijn om die t zelfde al te maken

de editor heeft nog geen borders

misschien een mooie tweak om rechterborder van de game/ editor enkel te laten zien als de game in hoogte beperkt is en enkel een onderborder laten zien als de breedte de beperkende factor is

uniforme playerkleuren

Elke player heeft op elke client zelfde kleur. Players mogen zelf hun eigen kleur kiezen (per game of bij connecten?). Wat goochelwerk nodig wanneer players kleuren hebben ze lijken erg op elkaar.

powerups

Pickups of activeerbaar. Ideeen voor powerups: extra speed voor zelf, minder speed voor zelf, extra speed voor anderen. minder speed voor anderen, hogere hoeksnelheid voor zelf, lagere hoeksnelheid voor anderen, onstervelijkheid voor zelf. Allemaal tijdelijk natuurlijk ;-) Inversie van sturen is geen goed idee, want makkelijk te omzeilen.

visually award points

+1 in canvas next to every living snake's head when someone dies. add 1 score to each of those players during game. we might want to fade those +1s out after a while. implementation? two options i can think of

  1. do it on a canvas layer.
    PROS:
    canvas drawing is FAST/ EFFICIENT
    no work needed to be resizable (because we redraw all the time anyway cause of animation)
    CONS:
    animation with canvas is cumbersome.
    styling will have to be done by javascript
  2. use DOM elements.
    PROS:
    animation very natural using css transitions
    style can be fully customized in css
    CONS:
    potentially less efficient
    positioning/ resizing not as elementary

editor reset werkt niet in 2e game

hoe te herproduceren:

  1. start custom game en teken een map
  2. speel een game
  3. ga back en weer in editor -- clear het level
  4. druk op done en start nog een keer de game
  5. zelfde map!!!

fixed start positions for custom maps

mogelijkheid om vaste startposities te zetten voor custom maps. reden: maakt complexere maps speelbaar en maakt nieuwe speltypes mogelijk zoals hindernisbanen of racemaps!

implementatie-idee:

druk een toets 1 tot en met 8 om speler lokatie te zetten
1e druk op de kaart geeft positie aan
2e druk geeft richting aan

daarna wordt de speler gedeselecteerd

druk ~ om speler onselecteren. als ~ wordt gedrukt tussen 1e en 2e klik, vergeet dan de lokatie.

als speler lokatie al is gegeven en wordt opnieuw geselecteerd en gedrukt voor de 1e keer, vergeet dan de oude positie.

server moet deze startlokaties ff onthouden uiteraard, kan mischien wel random kiezen welke speler op welke lokatie start. als #spelers > #vaste_start_lokaties, kies dan random startlokaties voor (#vaste_start_lokaties - #spelers) spelers

hoe te doen voor touch controls??

disconnecten werkt niet

In browsers die volgens RFC 6455 communiceren. Op te lossen door libwebsockets aan te passen. Zou in principe niet veel werk moeten zijn, maar moet wel even goed de verschillen specificaties v8 en RFC 6455 bestuderen.

pencilrechten notification

zet ff in de chat een message wanneer lokale speler doodgaat dat ie mag tekenen (als het ook mag ;P) zodat nieuwe spelers weten dat ze niet enkel hoeven te wachten wanneer zij afgaan.

wanneer te tonen?

  • 1e keer dat speler doodgaat per spel?
  • na 3x doodgaan zonder te hebben getekend per spel?
  • elk spel of per connect of zelfs iets opslaan in cookies?

editorbestudering suboptimaal

Er zijn nog geen touch controls en de muisbesturing is ook niet helemaal zoals zou moeten zijn. Misschien meer zoals de muis/ touch besturing van Pencil?

gamelist scrollbaar

als er veel games zijn dan verspringt die lijst de hele tijd en vervelend dan die buttons te drukken

spambeveiliging

Alle messages die server accepteert groeperen en per groep een teller bijhouden zodat er niet teveel per tijdseenheid binnenkomen.

nog niet mogelijk spel te verlaten in fullscreen

misschien een klein knopje om de sidebar te showen, dan kan je meteen ff de chat lezen. denk dan wel de canvas resizen zodat ie in zn geheel zichtbaar blijft. dan ook knopje nodig om weer fullscreen te gaan.
bij endgame kan die dan automatisch de sidebar showen - nu is het nog onduidelijk hoe je uit fullscreen gaat bij endgame

extra bootstrap elementen

Zoals die button-achtige check- en radioboxes. Zijn wel mooi en ook makkelijker te bedienen op touch. Oja en ook prepended text inputs voor min/ maxplayers.

account systeem

Onthoudt jouw custom game settings, naam en instellingen. Misschien zelfs met ranking?

reclame maken

wij kunnen onszelf beetje gaan aanmelden bij sites die websocketdemoos bijhouden of sites die linken naar online (multiplayer) games

en toevoegen aan de lijst van clones op http://en.wikipedia.org/wiki/Achtung,_Die_Kurve natuurlijk!

liefst wel nadat we ergste segfaults zijn opgelost :P

test bug

dit en dat werkt niet -- fix pls!111

out of sync

Het zou wellicht nog mogelijk kunnen zijn out of sync te geraken. Heeft nog laatste ronde testing nodig.

gecentreerde tabelelementen

Css-expert wiethoofd heeft gesuggereerd dat gecentreerde tabelelementen strakker eruit zien. Maar dan niet de playernames. Is een poging waard.

game settings opslaan op server

dus dat je de settings/ map/ startposities opslaat en dat de server ze opslaat in file of database en dat jij (en andere mensen) later weer met dezelfde map kunnen spelen.

ik stel voor om niet enkel map op te slaan, maar ook de game settings. dit is bijvoorbeeld van belang wanneer je een hindernisbaan maakt voor een bepaalde (turn) snelheid of dat je ervan uitgaatdat je door muren heen kan.

ik kan me ook voorstellen dat je gewoon chille settings hebt die je vaker wilt gebruiken zonder dat er per se een map bij hoort.

en dan een soort lijst bij een nieuwe custom game die je kan oproepen om te kiezen uit een preset. om de goede deruit te filteren misschien een soort systeem bouwen met thumbs up/ down? maar da's lastig te handhaven zonder accounts voorlopig. dus misschien #gespeeld betere sorteermethode tot dan.

later met accounts ook mogelijkheid tot persoonlijke presets/ maps

geluid

Geluidjes toevoegen voor dingen zoals chat, verkrijgen van pencilteken rechten, leaveGame, doodgaan van andere spelers. Ook huidige geluidjes vervangen door beter passende. Bovendien alles in zowel MP3 als OGG formaat op server zodat ondersteuning onder meeste browsers.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.