sanmoku.CPP、sanmoku.hpp, game.cpp, game.hppに分けたいです
詳しい方、よろしくお願いいたします。
今、こんな感じですが、元はネットから引っ張りました。
---
//sanmoku.cpp
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "sanmoku.hpp"
#include "game.hpp"
//初期化
void sanmoku::init()
{
for(int i=0; i<3; i++){
for(int j=0; j<3; j++) {
me[i][j] = 0;
}
}
}
//座標入力
void sanmoku::get_pos(char *player, int *x, int *y)
{
cout << player << "の横座標を入力:";
cin >> *x;
while(*x > 3)
{
cin.clear();
cin.ignore(1024, '\n');
cout << "文字が入ってやり直し\n";
cout << player << "の横座標を入力:";
cin >> *x;
}
cout << player << "の縦座標を入力:";
cin >> *y;
while(*y > 3 )
{
cin.clear();
cin.ignore(1024, '\n');
cout << "文字が入ってやり直し\n";
cout << player << "の縦座標を入力:";
cin >> *y;
}
}
void com_pos()
{
srand((unsigned)time(NULL));
}
//main
int main()
{
//enum {x = 0, y =0 };
int x, y;
int p1win=0, p2win=0, draw=0;
int con = 1;
sanmoku g;
g.init();
do
{
while(1)
{
do
{
g.get_pos("○", &x, &y);
}while(g.player1(x-1, y-1) == false);
if(g.check()) {
cout << "プレイヤ1の勝ち\n";
p1win++;
break;
}
if(g.check_drawn()){
cout << "引分け\n";
draw++;
break;
}
do
{
g.get_pos("×", &x, &y);
}while(g.player2(x-1, y-1) == false);
if(g.check())
{
cout << "プレイヤ2の勝ち\n";
p2win++;
break;
}
if(g.check_drawn())
{
cout << "引分け\n";
draw++;
break;
}
}
cout << "1Pの勝ち数:" << p1win << "\n";
cout << "2Pの勝ち数:" << p2win << "\n";
cout << "ドロー:" << draw << "\n";
cout << "0でストップ:";
cin >> con;
}while(con != 0);
return 0;
}
---
//sanmoku.hpp
#include <iostream>
#ifndef SANMOKU_HPP
#define SANMOKU_HPP
using namespace std;
class sanmoku{
private:
enum me{x=3, y=3};
int me[x][y];
public:
void init();
void get_pos(char *player, int *x, int *y);
//bool player1(int x, int y);
//bool player2(int x, int y);
//bool check_drawn();
//bool check();
};
#endif //
---
//game.cpp
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include "Board.hpp"
#include "sanmoku.hpp"
#include "sanmoku.cpp"
bool game::playerproc(int x, int y, int player)
{
if(x>= 3|| y>=3 || x<0 || y<0)
{
cout << "超過中\n";
return false;
}
if(me{x][y] != 0)
{
cout << "使用中\n";
return false;
}
me[][] = player;
draw();
return true;
}
/*void com_pos()
{
game::srand((unsigned)time(NULL));
}
*/
//プレイヤ1
bool game::player1(int x, int y)
{
return playerproc(x, y, 1);
}
//プレイヤ2
bool game::player2(int x, int y)
{
return playerproc(x, y, 2);
}
//各プレイヤの入力した座標をチェック
/*bool game::playerproc(int x, int y, int player)
{
if(x>= 3|| y>=3 || x<0 || y<0)
{
cout << "超えてるよ\n";
return false;
}
if(TicTacToe::me[x][y] != 0)
{
cout << "使ってるよ\n";
return false;
}
me[][] = player;
draw();
return true;
}*/
//表と○と×を描画
void game::draw()
{
cout << " 1 2 3\n";
for(int i=0; i<3; i++)
{
cout << i + 1;
for(int j=0; j<3; j++)
{
if(me[i][j] == 1)
{
cout << "o";
}
else if(me[i][j] == 2)
{
cout << "x";
}
else
cout << " ";
cout << " ";
}
cout << "\n";
}
}
//引分けかチェック
bool game::check_drawn()
{
bool drawn = true;
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
if(me[i][j] == 0){
drawn = false;
break;
}
}
}
return drawn;
}
//勝敗のチェック
bool game::check()
{
for(int i=0; i<3; i++)
{
if((me[i][0] != 0) && (me[i][0] == me[i][1] && me[i][0] == me[i][2])) return true;
}
for(int j=0 ; j<3 ; j++)
{
if((me[0][j] != 0) && (me[0][j] == me[1][j] && me[0][j] == me[2][j])) return true;
}
if((me[0][0] != 0) && (me[0][0] == me[1][1]) && (me[0][0] == me[2][2])) return true;
if((me[2][0] != 0) && (me[2][0] == me[1][1]) && (me[2][0] == me[0][2])) return true;
return false;
}
---
#ifndef GAME_HPP
#define GAME_HPP
class game{
private:
bool playerproc(int x, int y, int player);
void draw();
public:
void init();
bool player1(int x, int y);
bool player2(int x, int y);
bool check_drawn();
bool check();
};
#endif //
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
>メンバーに入っていないのはわかりますがどうして入っていないのかが分かりません。
そういう風に設計しているからでは?
継承しているわけでもないのですから、入っていないものはどうにもなりません。
貴方自身(class sanmoku)についている筈のロケットエンジン(player1メンバー)で火星まで行ってください。
ロケットエンジンついている筈ですが?
って言われて可能ですか?
>メンバーに入れる方法はどのような方法があるのでしょうか?
クラスに宣言を加えて、実装コードを記述してください。
# bool game::player1(int x, int y) は記述の通りclass sanmokuのメンバーではありませんのであしからず。
No.6
- 回答日時:
なるほど, そんなエラーか.
ただ, 「こうすれば治る」という処方だけ書いても「本当に勉強するため」には意味がないので「考える筋道」を書いてみよう.
とはいっても難しいことではなく, まず
そのエラーメッセージが何を言っているのか
を理解するところから始まる. 例えば
'class sanmoku' has no member named 'player1'
を日本語に直してみてください.
メンバーに入っていないのはわかりますがどうして入っていないのかが分かりません。メンバーに入れる方法はどのような方法があるのでしょうか?
よろしくお願いいたします。
No.5
- 回答日時:
おぉ, そんなところに
using namespace std;
がいるのか....
とりあえず最初の方のエラーメッセージをいくつかプリーズ.
ありがとうございます。 いくつかエラーを書いときます。
mainの while(g.player1(x-1, y-1) == false);のところで、
下記のエラー
|74|error: 'class sanmoku' has no member named 'player1'|
if(g.check()) のところでも、
|76|error: 'class sanmoku' has no member named 'check'|
Game.cppの meが読み込めません。
|78|error: 'me' was not declared in this scope|
|23|error: expected primary-expression before ']' token|
すみませんよろしくお願いいたします。
No.3
- 回答日時:
あ~, これ今のコンパイラだと本質とは全く関係ないエラーがいろいろ出てくるねぇ....
例えば, cout は名前空間 std にあるから, 上の方の
cout << player << "の横座標を入力:";
でエラーが出ちゃう.
まあ, とりあえず #1 でも言われているように「最初の方のものだけでいいからエラーメッセージを出してくれ」ってところかなぁ.
あと,
enum me{x=3, y=3};
int me[x][y];
については通ってもいいはず>#1. ただ, 「me」って名前を選んだ理由がさっぱりわからない.
No.1
- 回答日時:
長々とコードは細かく見ていませんが…
>エラーも長くて載せられませんでした。
最初のいくつかは掲示できませんか?
ディレクトリ名などは省略すると短くできるかと思いますが。
>enum me{x=3, y=3};
>int me[x][y];
enumとint型の二次元配列の名前が被ってるように見えますが、通ります?
>me[][] = player;
配列のアドレスに値を代入…ですか?
というかこういう書き方は無いように思いますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
卒業研究でよく分からないとこ...
-
ラップ関数とはどんなものですか?
-
if と配列の組み合わせ
-
C言語初心者です、、、お助けく...
-
【C++】関数ポインタの使い方
-
アスタリスクで正方形
-
インライン展開されているか確...
-
構造体の勉強中です 合計点の高...
-
異なる文字列のマッチングを、D...
-
数字列を3桁ごとにカンマで区切...
-
C言語 配列と関数の練習問題
-
C言語で三目並べをするプログラ...
-
入力を待たずにstdinの監視をし...
-
ファイルから読みこむ方法
-
課題でつまってます・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報
コードでいっぱいいっぱいになったので補足を。
もとはネットでから引っ張ってきました。それはCppファイルひとつで動きました。 エラーも長くて載せられませんでした。どうしたらよくなりますでしょうか? アドバイスまたは任意のコードを教えてください。よろしくお願いいたします。