Jump to content

  • Log In with Google      Sign In   
  • Create Account

Is it alive? No. But wait... Yes!

  • You cannot reply to this topic
12 replies to this topic

#1 _greyfox()   Members   -  Reputation: 1134

Like
15Likes
Like

Posted 25 May 2013 - 02:49 AM

Glorious code snippet from my old scrapped game. I just don't have the right words to describe this...

 

public boolean isAlive(){
    boolean alive = false;
    
    if(isDead() == true) alive = isDead();
    if(isDead() == false) alive = !isDead();
 
    return alive;
}

 

 

 


“There are thousands and thousands of people out there leading lives of quiet, screaming desperation, where they work long, hard hours at jobs they hate to enable them to buy things they don't need to impress people they don't like.”― Nigel Marsh

Sponsor:

#2 Rattenhirn   Crossbones+   -  Reputation: 1810

Like
4Likes
Like

Posted 25 May 2013 - 03:11 AM

Nice, I wonder how "isDead" is implemented though...

#3 _greyfox()   Members   -  Reputation: 1134

Like
1Likes
Like

Posted 25 May 2013 - 04:19 AM

Nice, I wonder how "isDead" is implemented though...

It just returns isDead boolean variable lol!


“There are thousands and thousands of people out there leading lives of quiet, screaming desperation, where they work long, hard hours at jobs they hate to enable them to buy things they don't need to impress people they don't like.”― Nigel Marsh

#4 Aurioch   Crossbones+   -  Reputation: 1304

Like
0Likes
Like

Posted 25 May 2013 - 06:34 AM

This sounds like something my friend would made on a regular basis XD



#5 Bacterius   Crossbones+   -  Reputation: 9281

Like
13Likes
Like

Posted 25 May 2013 - 07:57 AM

This is the class implementation for Schrodinger's cat.


The slowsort algorithm is a perfect illustration of the multiply and surrender paradigm, which is perhaps the single most important paradigm in the development of reluctant algorithms. The basic multiply and surrender strategy consists in replacing the problem at hand by two or more subproblems, each slightly simpler than the original, and continue multiplying subproblems and subsubproblems recursively in this fashion as long as possible. At some point the subproblems will all become so simple that their solution can no longer be postponed, and we will have to surrender. Experience shows that, in most cases, by the time this point is reached the total work will be substantially higher than what could have been wasted by a more direct approach.

 

- Pessimal Algorithms and Simplexity Analysis


#6 Grimshaw   Members   -  Reputation: 655

Like
0Likes
Like

Posted 25 May 2013 - 08:07 AM

hahaha Bacterius, good one!

 

amazing function, lets always return true! :)


Indie Game Developer - Daeva Theory Studios

 

Twitter - Facebook

 

Next

Terra - rise of mankind

 

Previous

SFML Game Development (Book)


#7 Ectara   Crossbones+   -  Reputation: 3058

Like
0Likes
Like

Posted 26 May 2013 - 05:49 PM

On first read, I actually thought it did what it was supposed to. That is amusing, though. I always wonder when people give a variable an initial value, before assigning a value to it in all possible branches.



#8 Sik_the_hedgehog   Crossbones+   -  Reputation: 1833

Like
0Likes
Like

Posted 27 May 2013 - 08:09 AM

That is amusing, though. I always wonder when people give a variable an initial value, before assigning a value to it in all possible branches.

It's more foolproof in case you forget to initialize it later. It ensures the variable can't be used with an undefined value no matter what.

 

Also, compilers will complain if you don't do this. Most of the time they will detect if it's guaranteed to get initialized later (in which case they won't emit a  warning), but in some cases they may fail to realize it (and in some cases it's guaranteed but it relies on code from outside which means the compiler outright can't tell).


Don't pay much attention to "the hedgehog" in my nick, it's just because "Sik" was already taken =/ By the way, Sik is pronounced like seek, not like sick.

#9 rip-off   Moderators   -  Reputation: 8727

Like
5Likes
Like

Posted 27 May 2013 - 10:05 AM

Nice, I wonder how "isDead" is implemented though...

Why, the implementation of isDead() is obvious!

 
public boolean isDead() {
    boolean dead = false;
    
    if(isAlive() == true) dead = isAlive();
    if(isAlive() == false) dead = !isAlive();
 
    return dead;
}
 

 

And if you feel that is just leaving Schrödinger's cat in the box:

 
 
public class Critter {
 
    // Given
    public boolean isAlive(){
        boolean alive = false;
        
        if(isDead() == true) alive = isDead();
        if(isDead() == false) alive = !isDead();
     
        return alive;
    }
 
    private boolean dead = false;
 
    private int counter = 0;
    
    private boolean isDead() {
        if(dead) {
            ++counter;
            return dead && counter % 2 == 0;
        }
        return dead;
    }
    
    public void squish() {
        dead = true;
    }
 
}
 

 

Now we can take our critters for a quick spin:

 
 
public class Main {
 
    private static String describeStatus(Critter critter) {
        return critter.isAlive() ? "very much alive" : "a little worse for wear";
    }
    
    private static String describeStep() {
        double random  = Math.random();
        if(random < 1.0 / 3.0) {
            return "Squish!";
        } else if(random < 2.0 / 3.0) {
            return "Squelch!";
        }
        return "Crunch!";
    }
    
    public static void main(String [] args) {
        Critter critter = new Critter();
        System.out.println("What a lovely little critter! I sure hope nothing happens it!");
        if(Math.random() < 0.5) {
            System.out.println(describeStep());
            critter.squish();
            System.out.println("Oh dear, I accidentally stepped on it. Poor thing is looking " + describeStatus(critter) + " now...");
        } else {
            System.out.println("Close call, I narrowly avoided it. It is looking " + describeStatus(critter) + " now...");
        }
    }
    
}
 

I hate it when I find actual code which looks not unlike this, bugs in one area worked around by equally crazy stuff somewhere else.



#10 slicer4ever   Crossbones+   -  Reputation: 3982

Like
0Likes
Like

Posted 27 May 2013 - 10:37 AM

And if you feel that is just leaving Schrödinger's cat in the box:

 

 
 
public class Critter {
 
    // Given
    public boolean isAlive(){
        boolean alive = false;
        
        if(isDead() == true) alive = isDead();
        if(isDead() == false) alive = !isDead();
     
        return alive;
    }
 
    private boolean dead = false;
 
    private int counter = 0;
    
    private boolean isDead() {
        if(dead) {
            ++counter;
            return dead && counter % 2 == 0;
        }
        return dead;
    }
    
    public void squish() {
        dead = true;
    }
 
}
 

i'm curious if you intended the counter to actually be useful in making sure isAlive return the correct result?

 

edit: actually, after re-reading the code several times, i'm not sure if it does actually fix it.

 

edit2: you'd use a pre-increment on it's own line?  i tend to stick to post-increments if it's on it's own line.


Edited by slicer4ever, 27 May 2013 - 10:44 AM.

Check out https://www.facebook.com/LiquidGames for some great games made by me on the Playstation Mobile market.

#11 Sik_the_hedgehog   Crossbones+   -  Reputation: 1833

Like
0Likes
Like

Posted 27 May 2013 - 12:30 PM

edit2: you'd use a pre-increment on it's own line?  i tend to stick to post-increments if it's on it's own line.

Some programmers see postincrement as a no-no, especially because of the behavior of some standard classes with those operators in some cases (don't remember the exact details)... Postincrement does look nicer in the source code though.


Don't pay much attention to "the hedgehog" in my nick, it's just because "Sik" was already taken =/ By the way, Sik is pronounced like seek, not like sick.

#12 rip-off   Moderators   -  Reputation: 8727

Like
0Likes
Like

Posted 27 May 2013 - 04:24 PM

i'm curious if you intended the counter to actually be useful in making sure isAlive return the correct result?

 

edit: actually, after re-reading the code several times, i'm not sure if it does actually fix it.

Fix is almost certainly the wrong word for that code. If my attempt doesn't actually cause the resulting program to "work", then please take it that this was intended as hilarious commentary on how such band-aids often fail to achieve what they set out to do. I, umm, I'm sure I must have meant it that way...

 

edit2: you'd use a pre-increment on it's own line?  i tend to stick to post-increments if it's on it's own line.

I generally avoid using the increment operators as part of more complex expressions, and I use pre-increment due to auto-pilot from writing loops. Thanks to spending a bit of time with Ruby, I wouldn't mind switching to += 1, at least for integers.



#13 L. Spiro   Crossbones+   -  Reputation: 14262

Like
0Likes
Like

Posted 13 June 2013 - 04:15 PM

edit2: you'd use a pre-increment on it's own line?  i tend to stick to post-increments if it's on it's own line.

Pre-increment is never slower than and sometimes faster than post-increment.

Postfix creates a copy of the original value which takes a small bit of extra time.
However when it is on its own line and is its own statement, the copy is nothing more than an address of a temporary or a register, but no instructions to actually act upon it, which makes it impossible for any compiler to generate code to reference it, and without it being referenced any compiler written within the last 276.45 (as of the time of writing) years will also omit the copy operation itself, leading to equivalent code either way.

However, in general, you should prefer prefix when possible, even on its own line, if for nothing more than the practice and consistency.


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums





PARTNERS