2016-12-10 16 views
0

私は助けが必要な小さな宿題プロジェクトに取り組んでいる学生です。私は2つの問題がある小さなターンベースのゲームを作っています。呼び出す前にこの関数を定義するにはどうすればよいですか?

ゲームのコード:このターンベースのゲームで

#include<iostream.h> 

class player 
{ 
public: 
    int health; 
    char name[15]; 
    int atk; 
    int mgatk; 
    int agi; 
    int def; 
    int mgdef; 
    int turnvalid; 
    int type; 
    int ctr; 

    void turnend(player, player); 
    void attack(player, player); 
    void block(player, player); 
    void menu(player, player); 
}; 

void turnend(player p1, player p2) 
{ 
    if(p1.turnvalid == 1) 
    { 
     menu(p1, p2); 
    } 
    else 
    { 
     menu(p2, p1); 
    } 
} 

void attack(player p1, player p2) 
{ 
    if(p1.turnvalid == 1) 
     if(p1.type == 1) 
     { 
      p2.health = p2.health - (p1.atk/p2.def)*100; 
     } 
     else if(p1.type == 2) 
     { 
      p2.health = p2.health - (p1.mgatk/p2.mgdef)*100; 
     } 
    p1.turnvalid = 0; 
    turnend(p1, p2); 
} 

void block(player p1, player p2) 
{ 
    if(p1.type == 1) 
    { 
     p2.health = p2.health - (p1.atk/p2.def)*50; 
    } 
    else if(p1.type == 2) 
    { 
     p2.health = p2.health - (p1.mgatk/p2.mgdef)*50; 
    } 
    p1.turnvalid = 0; 
    turnend(p1, p2); 
} 

void menu(player p1, player p2) 
{ 
    int ch; 
    cout<< "What will you do? \n1.Attack\n2.Block\n3.Counter"; 
    cin >> ch; 
    switch(ch) 
    { 
    case '1': 
     attack(p1, p2); 
     break; 
    case '2': 
     block(p1, p2); 
     break; 
    case '3': 
    default: 
     { 
      cout<< "\nWrong choice! Enter again...\n"; 
      menu(p1, p2); 
     } 
    } 
} 

// this is not a part I am currently using because I can't 
// figure out how to make it work 
void counter(player p1, player p2) 
{ 
    cout<< "Player " << p1.name << "countered!"; 
} 

void main() 
{ 
    cout<<"Beginning the game! Know your options!\nAttack to deal damage.\n" 
      "Block to reduce damage taken.\nCounter to take damage, then deal " 
      "twice the damage you took on the same turn."; 
} 

、選手たちは今、2つの選択肢があります。攻撃やブロックを。彼らは正常に動作しますが、私はそれらを再度ターンメニューにリダイレクトすると問題が発生します。この関数を呼び出すときは、次のように書かれています: [エラー] c:\ users \ vive \ desktop \ not games \ utilities \ C++ programs \ game2.cpp:27:E2268関数未確定関数 'menu' 、プレーヤー)

私はメニューを定義する前に私はターンを定義したので、これはおそらく起こります。しかし、私がターンの前にメニューを定義すると、これは起こります:

[エラー] c:\ users \ madhav \ desktop \ not games \ utilities \ C++ programs \ game2.cpp:30:E2268未定義の関数 'attack'ファンクションメニューで(プレーヤー、プレーヤー)

[エラー] C:\ユーザー\マダブの\デスクトップ\ないゲーム\ユーティリティ\ C++プログラム\ game2.cpp:34:関数内の未定義の関数にE2268コール 'ブロック'メニュー(プレーヤー、プレーヤー)

私は本質的にトラップされており、何をすべきかわかりません。私が最初に定義したものに関係なく、私はエラーが発生します。私はクラスプレイヤーの中でそれらをすべて宣言しました。なぜこれが起こっていますか?どうすれば修正できますか?

また、カウンターの仕事をどうすればいいのか教えてもらえれば、本当に感謝しています。私が望むのは、取ったダメージを倍にしてカウンターを最後にすることです。これにより、プレイヤーは最初にダメージを受けてからダメージを2倍に戻すことができます。そして、atk、mgatkなどの統計については、それらをint変数 'type'によって決まる2つの異なる 'クラスのクラス'に貼り付けます。

プログラム上の助け、批判、アドバイスなどは、本当に感謝しています。前もって感謝します!

+2

コードを正しくフォーマットしてください。 – plasmacel

+0

いくつかのメソッドを含むクラスを宣言しました。次に、クラスメソッドと同じ名前を持ついくつかのグローバル関数を定義しました。ただし、クラスメソッドではありません。それはあなたの問題だ。クラスメソッドを適切に定義する方法を学ぶには、C++の本を見直してみてください。 –

+3

標準のC++では ''と 'void main'は決して合法ではありませんでした。最新の学習教材を入手する必要があります。使用している教材は90年代のものです。 –

答えて

3

エラーは、定義内の関数名の前に、player::がないために発生します。 単にように

void player::attack(player p1, player p2){ 
(...) 

として

void attack(player p1, player p2){ 
(...) 

を交換してください。

あなたは、コンパイラは完全に別の機能としてそれを認識します関数名の前にクラス名を置くことによって、クラスのメンバーとして定義された関数をマーク(またはクラス内に定義)はありません。

しかし、おそらくあなたは、将来的に、より複雑なミスを回避するためのheader-とソース - ファイルにコードを分割について学ぶことになるため、より良いです。

+0

ありがとう!レッスンで学んだこと:> – V1V3

関連する問題