Jump to content
  • Advertisement
Sign in to follow this  
cavendert

Apparently, no so simple Math.....

This topic is 1372 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Pokemon battling again for practice. Tried to make it a little harder this time with attack and defense. Health - (attack - defense).

 

I get the feeling my order of operations is getting messed up somehow, because no matter, how I re-code it, somebody is always gaining life. 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApplication9
{
    class Pokemon
    {
        public string Name;
        public int Health;
        public int Attack;
        public int Defense;
    }
    class Program
    {
        static List<Pokemon> shaunPokemon = new List<Pokemon>() {
            new Pokemon {
                Name = "Mega Bidoof",
                Health = 700,
                Attack = 600,
                Defense = 500
            },
            new Pokemon {
                Name = "Bidoof",
                Health = 350,
                Attack = 150,
                Defense = 50,
            },
            new Pokemon {
                Name = "Bidoof", 
                Health = 350, 
                Attack = 150,
                Defense = 50,
            }
        };


        static List<Pokemon> myPokemon = new List<Pokemon>() {
            new Pokemon {
                Name = "Scizor",
                Health = 400, 
                Attack = 180,
                Defense = 100
            },
            new Pokemon {
                Name = "Houndoom",
                Health = 380,
                Attack = 220,
                Defense = 50
            },
            new Pokemon {
                Name = "Tyranitar",
                Health = 350,
                Attack = 100,
                Defense = 80
            }
        };


        static void Main(string[] args)
        {
            //Random Generator
            var rnd = new Random();
            var randomChoice = shaunPokemon[rnd.Next(shaunPokemon.Count)];


            Console.WriteLine("Writer Shaun challenges you to a battle!");
            Console.WriteLine("I choose you, " + randomChoice.Name + "! \n");
            Console.WriteLine("Please choose your Pokemon.");
            for (int i = 0; i < myPokemon.Count; i++)
            {
                Console.WriteLine("Press " + (i + 1) + " for " + myPokemon[i].Name + ".");
            }
            var myInput = Console.ReadLine();
            int index = int.Parse(myInput) - 1;
            Console.WriteLine();
            Pokemon selected = myPokemon[index];


            Console.WriteLine("I choose you, " + selected.Name + "! \n");
            Console.WriteLine("Press Enter to attack.");
            string acceptInput = Console.ReadLine();


            while (selected.Health > 0 && randomChoice.Health > 0)
            {
                selected.Health -= (randomChoice.Attack - selected.Defense);
                randomChoice.Health -= (selected.Attack - randomChoice.Defense);
                Console.WriteLine(selected.Name + "'s health = " + selected.Health);
                Console.WriteLine(randomChoice.Name + "'s health = " + randomChoice.Health);
                Console.WriteLine();
                Console.WriteLine("Press Enter to Attack again.");
                Console.ReadLine();
            };
        }
    }
}

As you can see, I even raised the attacks, to make sure that (Attack-Defense) should always be positive. 

 

Am I missing something that simple?

 

 

Share this post


Link to post
Share on other sites
Advertisement

If it helps, I just found that my compiler got stuck.....so, this might actually work. So, I have a follow up question!! This code should work about 60% of the time, every time. 

 

Until "Mega Bidoof" is chosen. As a joke, his stats are so high, that he is ruining the equation. Other than writing an if/else statement for bidoof, and mega bidoof, with their own while statements, is there a better way to write that?

Share this post


Link to post
Share on other sites

Something like this should do the trick:

int damageTaken = attack - defense;
if (damageTaken > 0)
    health -= damageTaken;

Share this post


Link to post
Share on other sites

 

Something like this should do the trick:

int damageTaken = attack - defense;
if (damageTaken > 0)
    health -= damageTaken;

damn........that's genius.........Then make two? One for my damage, and one for their damage?

Share this post


Link to post
Share on other sites

I still have the same issue, where Mega Bidoof throws off the numbers. Though, as I look at it, my health should always hit 0 in the first move anyway, so I'm not sure I care that much. Thanks again for the idea!

Share this post


Link to post
Share on other sites

I see your min/max ops and raise you blocking logic!

 

int damageTaken = attack - defense;
if (damageTaken > 0)
    health -= damageTaken;
else
    Console.WriteLine("Attack blocked!");

Share this post


Link to post
Share on other sites

 

I see your min/max ops and raise you blocking logic!

int damageTaken = attack - defense;
if (damageTaken > 0)
    health -= damageTaken;
else
    Console.WriteLine("Attack blocked!");

I wouldn't put game logic and (arguably) UI code in the same place. Just saiyan.

Share this post


Link to post
Share on other sites

I see your min/max ops and raise you blocking logic!
 
 

int damageTaken = attack - defense;
if (damageTaken > 0)
    health -= damageTaken;
else
    Console.WriteLine("Attack blocked!");


In pokemon, all offensive attacks do at least one damage even if they should be 100% negated(except for move types that are uneffective against the opponent types(i.e ghost/normal iirc))

so, let me just fix chubu's real quick:
health -= max(attack - defense, 1)
Edited by slicer4ever

Share this post


Link to post
Share on other sites

It could also easily be non-UI related. E.g. every time you block all damage 4 times in a row, gain double damage for next attack. Do counter related things inside the if/else blocks. Just to continue the derail a bit.

 

But we both know you're just typing stuff here to avoid coding!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!