こんにちは
ドラクエのようなプログラムをC言語で作りたいのですが
経験値を得てレベルをあげる方法がわかりません。
#include<stdio.h>
#define TRUE 1
struct status{
char name[13];
int level;
int hp;
//int mp;
int offense;
int defense;
int money;
int exp;
};
struct status monster_data[]={{"スライム",1,10,1,1,3,5},{"小鳥",5,100,3,4,5,10},{"怪獣",50,500,30,10,10,50},{"ラスボス",100,999,100,100,100,1000}};
char message[80];
void print_message(char message[]){
printf("%s\n",message);
sleep(1);
}
int attack(int offense_power,int defense_power,char offense_name[],char defense_name[]){
int attack;
attack=offense_power-defense_power;
if(attack<0)attack=0;
sprintf(message,"%sの攻撃\n%sに%dのダメージを与えた",offense_name,defense_name,attack);
print_message(message);
return attack;
}
int main(){
struct status player ={"勇者 ",1,100,20,10,0};
struct status monster;
int number;
srand((unsigned int)time(NULL));//乱数の初期化
while(player.hp>0){
number=rand()%3;
//敵情報のコピー
monster=monster_data[number];
strcpy(monster.name,monster_data[number].name);
sprintf(message,"%sが現れた!",monster.name);
print_message(message);
//戦闘開始(面倒なので必ず勇者から)
while(TRUE){
monster.hp-=attack(player.offense,monster.defense,player.name,monster.name);
if(monster.hp<=0){
sprintf(message,"%sは%sを倒した\n%dゴールド見つけて、経験値を%d得た",player.name,monster.name,monster.money,monster.exp);
print_message(message);
player.money=+monster.money;
player.exp=+monster.exp;
if(player.exp==10 || ){
player.level++;
break;
}
player.hp-=attack(monster.offense,player.defense,
monster.name,player.name);
if(player.hp<=0){
sprintf(message,"%sは%sに倒されてしまった",
player.name,monster.name);
print_message(message);
break;
}
}
}
return(0);
}
OSはUbuntuです。
回答よろしくお願いします。
レベルUP方法
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: レベルUP方法
ソースコードが読みづらいのでcodeタグを利用して下さい。
詳しくはフォーラムルールをご覧ください。 http://dixq.net/board/board.html
ところでレベルアップの仕様というかルールは決まっていますか?
詳しくはフォーラムルールをご覧ください。 http://dixq.net/board/board.html
ところでレベルアップの仕様というかルールは決まっていますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: レベルUP方法
ソースコードは読んでませんがこんなのはどうでしょう
LevelUp()は経験値テーブルを参考にどれだけレベルが上がったかを返します。
戻り値が0ならレベルアップなし、1ならレベルが1上がったことを知らせます。
戻り値が0より大きいならメイン関数でレベルアップの処理をしてあげればいいです。
#define LEVEL_MAX 5
int ExpTable[LEVEL_MAX]={0,10,20,30,40};// 経験値テーブル
int LevelUp(int nowLevel,int nowExp){
int i;
for(i=0;i<LEVEL_MAX;i++)
if(nowExp<ExpTable[i])
break;
return i-nowLevel;
}
戻り値が0ならレベルアップなし、1ならレベルが1上がったことを知らせます。
戻り値が0より大きいならメイン関数でレベルアップの処理をしてあげればいいです。