c++ combat code

Started by
5 comments, last by Servant of the Lord 10 years, 7 months ago

Hi, im learning c++ currently and am adventuring into creating a very basic game, I posted list week regarding a problem with a while loop on a coin flip program, I currently have an issue with the following code and was hoping someone could offer me advice. (please ignore the int startfight2 and my over-indulgent use of header files).


#include <string>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>

using namespace std;

int userhitpoints = 100;
int manhitpoints = 100;
int bla;
int startfight;
int startfight2;

int main()



{
    cout << "Begin?\n\n1: Yes\n2:No\n\n";
    cin >> startfight;

        if (startfight == 1)
            {
                cout << "\nA man approaches you 'lets fight'\n\n1:Fight\n2:Defend\n\n";
                cin >> startfight2;
                    if (startfight2 == 1)
                        {
                            do
                        {
                                srand(time(0));
                                int damage = rand() % (50 - 10) + 10;
                                int damage2 = rand() % (50 - 10) + 10;
                                int minushp = userhitpoints - damage;
                                cout << "\nYou hit the man for: " << damage << "\nThe man hits you for: " << damage2 << "\n\n" << "mans Hit Points:" << minushp;

                                cout << "\nYour Hit Points: ";
                                int minushp2 = manhitpoints - damage2;
                                cout << minushp2 << "\n\nHit Again?\n";
                                cin >> startfight2;
                        }
                        while (manhitpoints > 0);
                        }
                            else
                                {
                                cout << "You are dead";
                                }
                        }

                    else if (startfight2 == 2)
                        {
                            int damage = rand() % (50 - 10) + 10;
                            int defend = damage / 2;
                            cout << "You defend and do 0 damage";
                        }


        else
        cout << "fail";
        return 0;
}






Its a work in progress and isn't complete but my current issue regards the "hitpoints" integers i want them to retain their value after the first loop so the attacker will have to keep attacking untill either userhitpoints or manhitpoints reaches 0.

Advertisement

Hello! C++ is fun, but takes quite alot of patience, so try to stick with it through the frustrations. smile.png

With new C++ code and standard library headers, you should use the <cstdio> instead of the older <stdio.h> variants. Same with stdlib and time.

Your variables shouldn't be outside the main function. While easy and convenient at first, global variables bite you hard later on in your programming life and should be avoided. It's best to start off learning good practices rather than trying to unlearn bad practices later.

Variables should be declared and initialized as close as possible to when they are first needed.

The problem you were asking about:

If you want your health to persist, you need to actually modify the original variable 'manhitpoints', instead of creating a new variable 'minushp2' that later gets thrown away.

Also, variables need very good descriptive names (again, better to learn good practices right at the start, then trying to unlearn bad practices later). 'minushp2' and 'bla' are not very descriptive.

Now is also a good time to learn about structs: You can put multiple variables in a struct, and then use the struct to create a variable for both the user and the user's enemy.

//"Person" becomes a new _type_ of variable.
struct Person
{
     int attackPower = 5;
     int maxHealth = 100;
     int currentHealth = 100;
};
 
Person player;
Person humanEnemy;
Person wolf;

srand(time(0)); is only supposed to be called once at the very start of your program. It initializes the random number generator. It could be initialized more than once, but people only do that for specifically creating a sequence of numbers that intentionally repeats. You want it to be random every time, so a single initialization is the right way to go.

I say do not share much of your code. Especially all of it unless it is copyrighted because communists will own your code.

I say do not share much of your code. Especially all of it unless it is copyrighted because communists will own your code.

I'm pretty sure the cold war has ended, copyright applies automatically to anything you create even if you share it, posting code in a online forum does not remove the copyright nor does it give anyone else the right to re-distribute that code or derivates of it.

Code you find online is not automatically free to use in your own projects, you always need permission from the copyrightholder. (In some cases that permission may be considered implicitly given but there is absolutely nothing in the original post that suggests that the OP is granting anyone permission to do anything with his code except read and review it).

[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!

I say do not share much of your code. Especially all of it unless it is copyrighted because communists will own your code.

1. Copyright protection is immediate and automatic; you do not have to do anything for copyright to apply to your work (although in many countries registration will strengthen your protection).

2. The code a beginner or even intermediate developer writes whilst learning will not be particularly interesting or novel, and "stealing" it would not likely be beneficial to others. The feedback that can be gained by sharing relevant samples of code for review will be far more valuable than keeping code a secret. By the time a programmer is skilled enough to write code that is interesting or novel enough to warrant this type of paranoia they will be less likely to benefit from this type of review, and will know that what they are producing is valuable.

3. You didn't help the original poster with their question at all, and in this particular case they can only possibly benefit from having shared the code.

- Jason Astle-Adams

Well, what he posted doesn't work right, so I guess the joke's on the communists.

void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.

Well, what he posted doesn't work right, so I guess the joke's on the communists.

Quick, anyone have a gas pipeline we can run the code on?

This topic is closed to new replies.

Advertisement