レベルUP方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
勇者

レベルUP方法

#1

投稿記事 by 勇者 » 12年前

こんにちは

ドラクエのようなプログラムを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です。

回答よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: レベルUP方法

#2

投稿記事 by softya(ソフト屋) » 12年前

ソースコードが読みづらいのでcodeタグを利用して下さい。
詳しくはフォーラムルールをご覧ください。 http://dixq.net/board/board.html

ところでレベルアップの仕様というかルールは決まっていますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

とっち
記事: 56
登録日時: 13年前
住所: 岡山

Re: レベルUP方法

#3

投稿記事 by とっち » 12年前

ソースコードは読んでませんがこんなのはどうでしょう

コード:


#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;
}

LevelUp()は経験値テーブルを参考にどれだけレベルが上がったかを返します。
戻り値が0ならレベルアップなし、1ならレベルが1上がったことを知らせます。
戻り値が0より大きいならメイン関数でレベルアップの処理をしてあげればいいです。

閉鎖

“C言語何でも質問掲示板” へ戻る