さらにステータスの初期値が変わるという関数を作っています。
各レベルの初期値を二次元配列にしたり、経験値・レベルをグローバル関数にしたりしましたが、上手くいかず煮詰まっています。
あと、どの作例でも、レベル2や3から始まったり
一定以上達すると、レベルが急降下したり、二段飛ばしでレベルが上がったりするなどの
問題があります;;
玄人の皆さんに申し訳ありませんが、よろしければお知恵を拝借いただけますよう、よろしくお願いします。
↓ 作例 1 初期パラメータを switch()で切替え。経験値、レベルとグローバルに。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX_LEVEL 3 //とりあえず試作なので「レベル3」を最大に
typedef struct character //キャラクタのパラメータを構造化 (もっと増やしたい)
{
int hp;
int max_hp;
}character;
character init_player[];
character player;
int levelup[]={0, 50, 100}; // レベルアップに必要な経験値
int exp=0; //グローバルにした経験値変数
int level=0; //初期レベル「0」
int lvup=1;
void main(void)
{
player = init_player[]={100, 100};
while(1){
printf("現体力 : %d, 最大体力 : %d, 経験値 : %d, レベル : %d\n", player.hp, player.max_hp, exp, level);
getch();
exp += 10;
if(exp>=levelup[level]){
level = level+lvup; //レベルが上がる処理が、単純に「1」足してもなぜか上手くいかない?
switch(level)
{
case 1: init_player[]={100,100}; //「式が必要です」というエラーが出ます
break;
case 2: init_player[]={200, 200};
break;
case 3: init_player[]={300, 300}
break;
}
}
}
}
↓ 作例2 作例1と比べて、switch()を使わずに、各レベルの初期パラメータを二次元配列にしています
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX_LEVEL 3 //試作なので、とりあえず最大レベルは「3」(どこに設置すればいいのか分からない・・・)
typedef struct character //キャラクタのパラメータを構造化 現在HPと最大HP
{
int hp;
int max_hp;
}character;
character init_player[3][2] = {{100, 100}, //各レベルのパラメータを二次元配列に
{200, 200},
{300, 300},};
character player;
int levelup[]={0, 50, 100,}; //レベルアップに必要な経験値
int exp=0; //グローバル化された経験値
int level=1; //初期レベル
int lvup=1;
void main(void)
{
player = init_player[level-2][2];
while(1){
printf("現体力 : %d, 最大体力 : %d, 経験値 : %d, レベル : %d\n", player.hp, player.max_hp, exp, level);
getch();
exp += 10;
if(exp>=levelup[level]){
level = level;
printf("レベルが %d に上がった\n", level);
player = init_player[level-1][2]; //配列で[1]を入れると、実質2番目なので、あえて1引いたり・・・
}
}
}
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX_LEVEL 6
typedef struct character //今回は経験値、レベル、なども構造体の中に
{
int hp;
int max_hp;
int exp;
int level;
int lvup;
}character;
character init_player[][4]={{100, 100, 0, 1, 0}, //二次元配列にした各レベルの初期パラメータ
{200, 200, 0, 1, 1},
{300, 300, 0, 2, 1},
{400, 400, 0, 3, 1},
{500, 500, 0, 4, 1},
{600, 600, 0, 5, 1},
};
character player = init_player[player.level-1][4];
int levelup[MAX_LEVEL]={0, 50, 100, 150, 150, 200}; //レベルアップに必要な経験値
int main(void)
{
while(1){
printf("現体力 : %d, 最大体力 : %d, 経験値 : %d, レベル : %d\n", player.hp, player.max_hp, player.exp, player.level);
getch();
player.exp += 10;
if(player.exp>=levelup[player.level]){
player.level = player.level + player.lvup;
printf("レベルが %d に上がった\n", player.level-1);
player = init_player[player.level-1][4];
//レベルの上がり方が急激だったり、思うようにならなかったり、色々ごちゃごちゃいじくってしまいました;;
}
}
}