質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

0回答

604閲覧

実現したいことの項目お願いします

haku-sama

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2023/01/24 01:26

前提

このソースコードからどこを変えれば全項目実行されるか教えてください。

実現したいこと

・プレイヤーのターン毎の選択コマンドにオリジナルコマンドを追加する
・プレーヤーの魔法攻撃の種類を3種類以上に増やす
・プレーヤーの「にげる」コマンドは現在確実に成功しますが、
一定確率で失敗するようにする(確率は任意)
また、逃げれたかどうかを示すメッセージを表示する
・敵に魔法タイプの敵を作成し、魔法タイプの敵は魔法で攻撃するようにする
・敵のパラメータの合計を敵のレベルと同じになるように調整する
・プレーヤーの武器パラメータにAgilityを追加し、戦闘時装備していたら
そのパラメータを戦闘に反映させる
・敵が落とす武器をランダムで決めること
・敵が落とすお金をランダムで決めること
・プレーヤーの武器の種類を現在の2種類から5種類以上に増やす
・アイテムの種類を3種類以上つくること(ただし、使うアイテムのみでも可)

発生している問題・エラーメッセージ


#include "all.h"

CREATURE_DATA::CREATURE_DATA() {

PARAM_DATA data; data.hp = 0; data.mp = 0; data.atk = 0; data.def = 0; data.agi = 0; SetParam(data);

}

CREATURE_DATA::CREATURE_DATA(PARAM_DATA data) {

SetParam(data);

}

CREATURE_DATA::~CREATURE_DATA() {
}

void CREATURE_DATA::SetParam(PARAM_DATA data) {

param.hp = data.hp; param.mp = data.mp; param.atk = data.atk; param.def = data.def; param.agi = data.agi; max_hp = data.hp; max_mp = data.mp;

}

void CREATURE_DATA::PrintParam() {
printf("hp = %d mp = %d atk = %d def = %d agi = %d\n", param.hp, param.mp, param.atk, param.def, param.agi);
}

void CREATURE_DATA::CalcDam(int dam) {

dam += GetRand(-2, 2); if (dam <= 0) dam = 1; //5分の1の確率でダメージが1.2倍 int tmp = GetRand(1, 5); if (tmp == 1) { dam = (int)((float)dam * 1.2f); } else { //5%の確率で攻撃をミスする tmp = GetRand(1, 20); if (tmp == 1) dam = 0; } printf("%dのダメージ\n",dam); param.hp -= dam;

}

void CREATURE_DATA::UseMp(int data) {
param.mp -= data;
}

#include "all.h"

enum GAME_COMMAND_TYPE {
GAME_END,
GAME_INN,
GAME_BUYITEM,
GAME_GOTO_BATTLE,
GAME_COMMAND_ALL,
};

int main() {

PARAM_DATA pl_data; pl_data.hp = 100; pl_data.mp = 0; pl_data.atk = 40; pl_data.def = 20; pl_data.agi = 10; PLAYER_DATA player(pl_data); PARAM_DATA en_data; ENEMY_DATA* p_enemy; // CREATURE_DATA enemy2; int enemy_lv = 30; bool battle_flag; bool game_flag; InitRand(); player.PrintParam(); game_flag = true; while (game_flag) { int tmp = (int)GetRand(0, 1); if (tmp == 0) { en_data.hp = 200; en_data.mp = 0; } else { en_data.hp = 80; en_data.mp = 100; } en_data.atk = (int)GetRand(1, enemy_lv); en_data.def = (int)GetRand(1, enemy_lv - en_data.atk); en_data.agi = (int)GetRand(1, enemy_lv - en_data.atk - en_data.def);

#if 1
p_enemy = new ENEMY_DATA(en_data);
p_enemy->SetType(tmp);
#else
p_enemy = new ENEMY_DATA(en_data, tmp);
#endif
enemy_lv++;

p_enemy->PrintParam(); battle_flag = true; while (battle_flag) { // コマンドを入れるタイミング player.InputCommand(); switch (player.GetCommand()) { case (int)COMMAND_TYPE::ATTACK: if (player.GetAgi() >= p_enemy->GetAgi()) { printf("プレーヤーの攻撃:"); p_enemy->CalcDam(player.GetAtk() - p_enemy->GetDef()); player.CalcDam(p_enemy->GetAtk() - player.GetDef()); } else { player.CalcDam(p_enemy->GetAtk() - player.GetDef()); p_enemy->CalcDam(player.GetAtk() - p_enemy->GetDef()); } break; case (int)COMMAND_TYPE::DEFENSE: player.SetHp(player.GetHp() + player.GetMaxHp() * 0.1f ); player.CalcDam(p_enemy->GetAtk() - player.GetDef()); break; case (int)COMMAND_TYPE::MAGIC: p_enemy->CalcDam(30); player.CalcDam(p_enemy->GetAtk() - player.GetDef()); break; case (int)COMMAND_TYPE::ESCAPE: battle_flag = false; break;

#if 0
case アイテムの使用
アイテムを使う関数コールし、どのアイテムを使ったかアイテム番号を返す
switch アイテム番号
(それぞれの効果)
case やくそう
HPの回復
case MP回復剤
MPの回復
case 安全に逃げる
戦闘の強制終了
#endif
}

if (player.GetHp() <= 0 || p_enemy->GetHp() <= 0) battle_flag = false; } if (player.GetHp() <= 0) { printf("プレイヤーは倒された\n"); game_flag = false; } if (p_enemy->GetHp() <= 0) { printf("エネミーは倒された\n"); player.SetMoney( p_enemy->GetMoney() ); player.SetWeaponNo( p_enemy->GetDropWeapon()); } delete p_enemy; { int tmp = 0; bool flag = true; int item_kakaku; while (flag) { printf("1:ゲーム終了\n"); printf("2:宿屋で休む\n"); printf("3:アイテムの購入\n"); printf("4:バトルに戻る\n"); while (tmp <= 0 || tmp > (int)GAME_COMMAND_TYPE::GAME_COMMAND_ALL) { printf("なにをする?(1 - 4):"); scanf_s("%d", &tmp); } tmp--; switch (tmp) { case GAME_COMMAND_TYPE::GAME_END: game_flag = false; break; case GAME_COMMAND_TYPE::GAME_INN: if (player.GetMoney() >= 100) { player.SetMoney(-100); player.SetHp(player.GetMaxHp()); } else { printf("お金が足りません\n"); } break; case GAME_COMMAND_TYPE::GAME_GOTO_BATTLE: flag = false; break; case GAME_COMMAND_TYPE::GAME_BUYITEM: item_kakaku = player.item_data.Item_Buy_func(); if (item_kakaku >= 0) { if (player.GetMoney() < item_kakaku) { printf("お金が足りません\n"); } else { if (player.item_data.Check_Item_No()) { // アイテム購入の処理 player.SetMoney(item_kakaku * -1); player.item_data.Set_Item_no(); } else { printf("かばんに空きがありません\n"); } } } break; } } } } return 0;

}

#include "all.h"

int ENEMY_DATA::appear_num = 0;
int ENEMY_DATA::dead_num = 0;

ENEMY_DATA::ENEMY_DATA(PARAM_DATA data) : CREATURE_DATA(data) {
appear_num++;
money = 100;
type = 0;
drop_weapon_no = 0;
}

ENEMY_DATA::ENEMY_DATA(PARAM_DATA data, int type_data) :
CREATURE_DATA(data) {
appear_num++;
money = 100;
type = type_data;
drop_weapon_no = 0;
}

#include "all.h"

enum IT_ITEM_NO {
NONE = -1,
YAKUSOU = 0,
ITEM_NO_ALL,
};

enum IT_ITEM_TYPE {
USE,
};

typedef struct {
int kakaku;
int type;
char name[33];
} IT_ITEM_DATA;

IT_ITEM_DATA item_info[ITEM_NO_ALL] = {
{ 10, IT_ITEM_TYPE::USE, "やくそう", },
};

ITEM_DATA::ITEM_DATA() {
for (int i = 0; i < ITEM_MAX_NUM; i++) {
item_no[i] = -1;
}
}

int ITEM_DATA::Item_Buy_func() {

int tmp = -1; bool flag = true; int ret = -1; for (int i = 0; i < ITEM_MAX_NUM; i++) buy_item_list[i]; printf("0:何も買わない\n"); for (int i = 0; i < ITEM_NO_ALL; i++) { printf("%d:%s\n", i + 1, item_info[i].name ); } while (tmp < 0 || tmp > (int)IT_ITEM_NO::ITEM_NO_ALL) { printf("なにをする?(0 - %d):", (int)IT_ITEM_NO::ITEM_NO_ALL); scanf_s("%d", &tmp); } tmp--; if(tmp < IT_ITEM_NO::NONE) buy_item_list[0] = tmp; switch (tmp) { case IT_ITEM_NO::NONE: ret = -1; break; case IT_ITEM_NO::YAKUSOU: ret = item_info[tmp].kakaku; break; } return ret;

}

bool ITEM_DATA::Check_Item_No() {

bool ret = false; for (int i = 0; i < ITEM_MAX_NUM; i++) { if (item_no[i] == -1) { ret = true; break; } } return ret;

}

void ITEM_DATA::Set_Item_no() {

for (int i = 0; i < ITEM_MAX_NUM; i++) { if (item_no[i] == -1) { item_no[i] = buy_item_list[0]; break; } }

}

int ITEM_DATA::Use_Item() {
int tmp = 0;

printf("0:キャンセル\n"); printf("1:%s\n", item_info[0].name); while (tmp < 0 || tmp > (int)COMMAND_TYPE::COMMAND_ALL) { printf("なにをする?(1 - 4):"); scanf_s("%d", &tmp); } return tmp - 1;

}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include "mylib.h"

/*
関数名 GetRand

返り値 short型 算出した乱数を返す

引数 short型 乱数の下限
short型 乱数の上限

内容 rand関数を使用し下限から上限の範囲の乱数を発生させる

(上限 (四則演算) 下限 + 1 )+(ある値)

*/
short GetRand(short min, short max) {
if (max < min) max = min + 1;
return (short)(rand() % (max - min + 1) + min);
}

void InitRand() {
srand(time(NULL));
}

#include "all.h"

PL_WEAPON_DATA weapon_data[] = {{10},
{20},
{30} };

PLAYER_DATA::PLAYER_DATA(PARAM_DATA data) : CREATURE_DATA(data) {

weapon_atk = 0; money = 0; weapon_no = -1;

}

void PLAYER_DATA::InputCommand() {

int tmp = 0; printf("1:たたかう\n"); printf("2:まほう\n"); printf("3:ぼうぎょ\n"); printf("4:にげる\n"); while (tmp <= 0 || tmp > (int)COMMAND_TYPE::COMMAND_ALL) { printf("なにをする?(1 - 4):"); scanf_s("%d", &tmp); if (tmp == 2) { if (GetMp() < 3) tmp = 0; } } command_no = tmp - 1;

}

int PLAYER_DATA::GetDef() {

int tmp = 1; switch(command_no) { case (int)COMMAND_TYPE::DEFENSE: tmp = 2; break; } return param.def * tmp;

}

int PLAYER_DATA::GetAtk() {

if (weapon_no == -1) { weapon_atk = 0; } else { weapon_atk = weapon_data[weapon_no].atk; } return (weapon_atk + param.atk);

}

void PLAYER_DATA::SetWeaponNo(int no) {
printf("現在の武器は 攻撃力=%d\n", weapon_data[weapon_no].atk);
printf("新しい武器は 攻撃力=%d\n", weapon_data[no].atk);
printf("入れ替えますか?(0-1 0:はい それ以外:いいえ)\n");
int tmp;
scanf_s("%d", &tmp);
if (tmp == 0) weapon_no = no;
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2023/01/24 01:34

自身の投稿のMarkdown適用具合がぐっちゃぐちゃなのを見て何とも思わない(そのまま投稿する)神経がわからん.
pig_vba

2023/01/24 02:04

少なくとも半分以上は自分で書いたコードなら修正箇所の断定はできるはずでしょう。 自分でとりあえず仕様変更してみてその上で想定の挙動ができないという状態でない以上作業依頼としか捉えられませんね
haku-sama

2023/01/24 04:45

がちぃー???
fana

2023/01/24 05:17

> どこを変えれば に関して,あえて真面目に答えるならば「全体的に」となるように思える. 人によっては「作り直した方が早い」と答えるかもしれない.
luuguas

2023/01/24 05:20

コードの表示がぐちゃぐちゃなので、質問を編集して、[</>](コードの挿入)ボタンを押して出てくる```~```の囲いの中にコードを入れてください。それに加えて、実現したいことのリストの中で何が実現できていて何ができていないのか、実現できていないことについては、何がわからないのか(ランダムに選ぶ方法がわからない等)を書いてください。
jimbe

2023/01/24 08:12

C では無さそうですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問