Jump to content
  • Advertisement
Sign in to follow this  
Mr_Derek

Help consolidating my levelling system into a more efficient form

This topic is 3364 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

I'd like to make a levelling system past 2, and I know there is an efficient way to do it. Currently my code looks like this, and while it is completely functional until level 2, I can see that it is not the most efficient way to make a levelling system. Here is my code: EDIT: I learned how to include a source window, so I'm doing that:
#include <stdio.h>
     int a;
     int monhp=25;
     int xp=0;
     void monbattle()
     {
               while (monhp >0)
     {
     printf ("The monsters hp is %d!\n",monhp);
     printf ("How much do you want to attack for?\n");
     scanf ("%d",&a);
     monhp-=a;
     printf("The kobold's hp is now %d\n",monhp);
     }
     printf("You have slain the Kobold! You gain 10 xp!\n");
     xp+=10;
     printf ("You now have %d xp!\n",xp);
     monhp+=25;
     }
     
     
main ()
{
     while(xp<50)
      {
      monbattle();
      }
printf("You have levelled to 2!");
scanf("%d",&a);

     }

I'd like to put the levelling system into some kind of function, structure, or possibly array. I am currently refreshing my knowledge on pointers because I seem to remember somehow pointers can be used to do this.. it's just fuzzy. Any suggestions?

Share this post


Link to post
Share on other sites
Advertisement
Quote:
Original post by Mr_Derek
I'd like to make a levelling system past 2, and I know there is an efficient way to do it. Currently my code looks like this, and while it is completely functional until level 2, I can see that it is not the most efficient way to make a levelling system. Here is my code:
EDIT: I learned how to include a source window, so I'm doing that:

*** Source Snippet Removed ***


I'd like to put the levelling system into some kind of function, structure, or possibly array. I am currently refreshing my knowledge on pointers because I seem to remember somehow pointers can be used to do this.. it's just fuzzy. Any suggestions?


Instead of


while(xp < 50)
{
[...]
}




You can do

int expLvl = 1;
const int MAX_LEVEL = 7;
int expNeeded[] = {50, 100, 200, 400, 800, 1600, [...]}
while (expLvl < MAX_LEVEL)
{
while(xp < expNeeded[expLvl - 1])
{
[...]
}
expLvl++;
printf (...)
}



It could be cleaner to make a function which calculates the experience needed for a particular level. For example, in FallOut:


int ExpNeededForNextLevel(int CurrentLevel)
{
int ExpNeeded = CurrentLevel * 1000;
if (CurrentLevel > 1)
ExpNeeded += ExpNeededForNextLevel(CurrentLevel - 1);
return ExpNeeded;
}

int main()
{
[...]
int expLvl = 1;
while (true)
{
while(xp < ExpNeededForNextLevel(expLvl))
{
[...]
}
expLvl++;
[...]
} // Infinite loop, never goes out of here
}


Share this post


Link to post
Share on other sites
Hi, this is what I've done so far.

#include <stdio.h>
int a;
int monhp=25;
int xp;
int lvl;

//monbattle
void monbattle()
{
while (monhp >0)
{
printf ("The monsters hp is %d!\n",monhp);
printf ("How much do you want to attack for?\n");
scanf ("%d",&a);
monhp-=a;
printf("The kobold's hp is now %d\n",monhp);
}
printf("You have slain the Kobold! You gain 10 xp!\n");
xp+=10;
printf ("You now have %d xp!\n",xp);
monhp+=25;
}
//monbattlestop

//lvlscr
void lvlscr()
{
printf("You have levelled to %d!\n",lvl+2);

lvl+=1;
monbattle();
}
//lvlscrstop

//engine
void engine()
{
switch(lvl)
{
case 0:


while(xp<50)
{
monbattle();
}
lvlscr();

case 1:

while(xp<150&&xp>50)
{

monbattle();
}
lvlscr();

}
}
//enginestop

main ()
{

engine();

scanf("%d",&a);



}





I used the case method for my levelling system, although I am sure there is a more simple way to do this. Any advice?

Specifically, could I form

while(xp<150&&xp>50)
{

monbattle();
}
lvlscr();



and

while(xp<50)
{
monbattle();
}
lvlscr();



into one function somehow? That would be amazing and save alot of finger soreness.

Ok, I found a way to do it, but it only works for levels past 1, because if it's 1(0 in the array value) it sets the array value to -1, which there is no value for.


#include <stdio.h>
int a;
int monhp=25;
int xp;
int lvl;
int xpneeded[] = {50,100,150,200,250,300};

//monbattle
void monbattle()
{
while (monhp >0)
{
printf ("The monsters hp is %d!\n",monhp);
printf ("How much do you want to attack for?\n");
scanf ("%d",&a);
monhp-=a;
printf("The kobold's hp is now %d\n",monhp);
}
printf("You have slain the Kobold! You gain 10 xp!\n");
xp+=10;
printf ("You now have %d xp!\n",xp);
monhp+=25;
}
//monbattlestop

//lvlscr
void lvlscr()
{
printf("You have levelled to %d!\n",lvl+2);

lvl+=1;
monbattle();
}
//lvlscrstop

//engine
void engine()
{
while(xp<xpneeded[lvl]&&xp>xpneeded[lvl-1])
{
monbattle();
}
lvlscr();
}
//enginestop

main ()
{
engine();

scanf("%d",&a);



}


If I can get it to work for level one, I've got it!

[Edited by - Mr_Derek on May 3, 2009 1:23:14 PM]

Share this post


Link to post
Share on other sites

[...]
int xpneeded[] = {0, 50,100,150,200,250,300};
[...]
while(xp<xpneeded[lvl+1] && xp>=xpneeded[lvl])
[...]



BTW, you should initialize your variables (xp, lvl,...)

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.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!