Negativer Wert (-1)



  • CuriousTee schrieb:

    m_Ammo codiert eben gleich zwei Sachen:
    - falls m_Ammo != 0, ist es möglich zu schießen
    - falls m_Ammo > 0, wird es nach dem Schießen dekrementiert
    Daraus ergibt sich für -1 die Bedeutung 'unendlich Munition'.

    Solange es konsequent ist, ist das schon mal etwas 🙂

    Allerdings fände ich

    public enum AmmoModes
    {
        Unlimited = -1 // Schießen möglich sowie unendlich Monition
        Locked = 0, // Schießen nicht möglich
        Normal = 1, // Schießen und wird Dekrementiert
    }
    

    um Welten lesbarer
    Sonst braucht man nur wieder Wissen was das -1 hier, da und dort alles bedeuten kann.

    Was mir dabei auffällt.
    Es ist so das jede Figur pauschal alle Waffen hat, diese bei "Erhalt" aber nur frei geschaltet werden? Finde ich merkwürdig.
    Wenn man schon eine Liste von Waffen hat (m_aWeapons), kann man diese doch auch nur mit den Vorhandenen Waffen bestücken.
    Dadurch spart man sich das m_Ammo = 0; (bzw das Locked) da es nur ein boolean geben muss ob die Munition dekrementieren kann oder nicht.
    Dadurch fällt das "Got" komplett weg und das m_Ammo wird deutlich einfacher.
    Der Code ist dann logischer und sauberer (Beurteile ich mal aus der ferne von dem was du so berichtest)



  • David W schrieb:

    Allerdings fände ich

    public enum AmmoModes
    {
        Unlimited = -1 // Schießen möglich sowie unendlich Monition
        Locked = 0, // Schießen nicht möglich
        Normal = 1, // Schießen und wird Dekrementiert
    }
    

    Dann braucht man aber wieder zusätzliche 4 Bytes für den AmmoMode, obwohl die Information in dem int gespeichert werden könnte.

    Mir schwebt da sowas vor:

    class ammo
    {
        int amount;
    
    public:
        bool can_shoot() { return amount != 0; }
        void shoot() { if(amount > 0) --amount; }
    
        void set_amount(int a) { amount = a; }
        void set_unlimited() { amount = -1; }
        void set_locked() { amount = 0; }
    };
    

    Man könnte bei den set-Methoden dann natürlich auch wieder mit AmmoMode arbeiten (set_mode(AmmoMode)).



  • Ehm. 4 Bytes gegen die allgemeine Lesbarkeit und damit Wartbarkeit des Codes, da eine Dokumentation hier größtenteils schon durch den Code erfolgt. Wer gewinnt da wohl -, vorallem da in der heutigen Zeit 4 Bytes so irrelevant wie ein Staubkorn im Wolkenkratzer sind?



  • ~bytes schrieb:

    Ehm. 4 Bytes gegen die allgemeine Lesbarkeit und damit Wartbarkeit des Codes, da eine Dokumentation hier größtenteils schon durch den Code erfolgt. Wer gewinnt da wohl -, vorallem da in der heutigen Zeit 4 Bytes so irrelevant wie ein Staubkorn im Wolkenkratzer sind?

    Natürlich darf die Lesbarkeit nicht leiden, deswegen auch mein Vorschlag der ammo-Klasse, welche ohne Speicheroverhead auskommt, weil die Kodierung des AmmoModes im int ein Implementierungsdetail ist. Und wir sind hier in der Domain der Spiele, wo durchaus auch heute noch Speicherverbrauch eine Rolle spielt.



  • Du willst auf einer Seite 4 bytes sparen, aber der anderen Seite hast du stetig ein Character der zur Laufzeit immer _alle_ Waffen in einem Array hällt, ob er sie tatsächlich hat oder nicht 🙄

    (Grundsätzlich ist so eine Ammo Klasse aber eine gute Alternative)



  • Bei unsigned Typen ist aber -1 auch gleichzeitig das Maximum. 😉

    Wen du zb ein unsigned int auf -1 setzt, ist es 0xFFFFFFFF ... ganz nett um einfach maximale Werte zu haben.



  • Wie schön für Leute, die keine Ballerspiele mit Waffen programmieren wollen oder sollen. Auch schön für jene, die mit solchem Ballerkram nichts am Hut haben. Für alle diese Leute ist im normalen Leben ein negativer Wert einfach ein Wert kleiner Null! 🤡



  • Ethon schrieb:

    Bei unsigned Typen ist aber -1 auch gleichzeitig das Maximum. 😉

    Wen du zb ein unsigned int auf -1 setzt, ist es 0xFFFFFFFF ... ganz nett um einfach maximale Werte zu haben.

    Ist nett, ja, aber keine Rechtfertigung für Magic Values.



  • David W schrieb:

    Es ist so das jede Figur pauschal alle Waffen hat, diese bei "Erhalt" aber nur frei geschaltet werden?

    Das variiert je nach Mod. Jeder Spieler hat im Normalfall am Anfang nur 2 Waffen. Die anderen 4 können aber auch eingesammelt bzw freigeschaltet werden.
    Also ist -1 ein synonym für unendlich?
    Dann würde es auch einigermaßen Sinn machen:

    if(m_FreezeTime == -1) //wenn die zeit, wie lange man gefreezt seien soll unendlich ist, fahre fort...
    	//mach irgendwas
    

    Und wer zur Hölle bist du CuriousTee? óÒ

    Falls es jemanden interessiert, hier der Downloadlink zum Source Code:
    http://www.teeworlds.com/?page=downloads



  • tortorios schrieb:

    Also ist -1 ein synonym für unendlich?

    Nein, -1 ist eine Zahl. Allerdings wird sie oft da benutzt wo nur Werte >= 0 sinnvoll sind, um besondere Umstände auszudrücken.


Anmelden zum Antworten