C++ コンソール
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
はじめまして。
この掲示板としては、後々の人のために記録に残る掲示板でのやりとりをお願いします。ここは出会い・紹介系の掲示板ではありませんので。
さて、本題ですがソースコードがあると話が進みやすいと思います。
あるいは、うまく行かなかったクラス設計の構想でも構いません。
それと念の為にお聞きしますが、課題ではありませんか?
この掲示板としては、後々の人のために記録に残る掲示板でのやりとりをお願いします。ここは出会い・紹介系の掲示板ではありませんので。
さて、本題ですがソースコードがあると話が進みやすいと思います。
あるいは、うまく行かなかったクラス設計の構想でも構いません。
それと念の為にお聞きしますが、課題ではありませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ コンソール
課題ではありませんが記載いたします。softya(ソフト屋) さんが書きました:はじめまして。
この掲示板としては、後々の人のために記録に残る掲示板でのやりとりをお願いします。ここは出会い・紹介系の掲示板ではありませんので。
さて、本題ですがソースコードがあると話が進みやすいと思います。
あるいは、うまく行かなかったクラス設計の構想でも構いません。
それと念の為にお聞きしますが、課題ではありませんか?
コンソールのプロジェクトで画面遷移のクラス設計を教えて頂ければと思います。
クラス設計で説明してくれる方お待ちしております。
タイトル、ゲームというかメイン(中身は特にいりません。)リザルトがクラス化しているサンプルまたは説明お待ちしております。
私個人の技量としてはクラス化前には画面遷移は作成したことあります。
クラス化しようと挑戦しましたが挫折したのでお力をお貸し頂ければと思っています。
//=====================================================================================
//=====================================================================================
#include <stdio.h> //stdio.hをインクルード
#include <stdlib.h> //stdlib.hをインクルード
#include <conio.h> //conio.hをインクルード
#include <time.h> //time.hをインクルード
#include "main.h"
//グローバル変数
int stage[21][12]= {0}; //壁と固定済みブロック用
int block[4][4] = {0}; //現在落下中のブロックを入れる
int field[21][12] ={0}; //描画するデータ。stage[][]にblock[][]を重ねたもの
//7種類のブロックのデータ
int block_list[7][4][4] =
{{{0,1,0,0},
{0,1,0,0},
{0,1,0,0},
{0,1,0,0}},
{{0,0,0,0},
{0,1,1,0},
{0,1,0,0},
{0,1,0,0}},
{{0,0,1,0},
{0,1,1,0},
{0,1,0,0},
{0,0,0,0}},
{{0,1,0,0},
{0,1,1,0},
{0,0,1,0},
{0,0,0,0}},
{{0,0,0,0},
{0,1,0,0},
{1,1,1,0},
{0,0,0,0}},
{{0,0,0,0},
{0,1,1,0},
{0,1,1,0},
{0,0,0,0}},
{{0,0,0,0},
{0,1,1,0},
{0,0,1,0},
{0,0,1,0}}};
int y = 0; //ブロックの画面上でのy座標
int x = 4; //ブロックの画面上でのx座標
int oneline, twoline, threeline, fourline; //消したラインの数
int gameover = 0; //ゲームオーバー判定。新しいブロックが初期位置に置けなければ1になる。
//関数プロトタイプ宣言
void Initialize(); //ゲーム起動直後 初期設定を行う関数。画面と壁のデータを初期化
int CreateBlock(); //新しいブロックを生成して次のブロックに発生させる
void ShowGameField(); //field[][]の中身に応じて、画面を描画する
void ControlBlock(); //キー入力に応じてブロックに移動や回転等の処理を行わせる
//=====================================================================================
// ブロック処理一覧
//=====================================================================================
int CheckOverlap(int, int); //落下中ブロックが壁や固定済みブロックに接触していないか判別
void MoveBlock(int, int); //落下中ブロックを一旦消して、任意の座標に移動させる
int TurnBlock(); //ブロックの回転を処理する
void DropBlock(); //ブロックを落下させる。下に移動できない場合ブロックをその位置に固定
void LockBlock(); //着地したブロックを固定済みブロックに加える関数
void CheckLines(); //ブロックが横一列にそろえばそこを消去後、上のブロックをそこに下ろす
#define SCREEN_CENTER_X //タイトル用
#define SCREEN_CENTER_Y //タイトル用
void SceneTitle();
static GAMEMODE eGameMode = GAMEMODE_TITLE;
static GAMEMODE ePreGameMode = eGameMode;
//=====================================================================================
// メイン関数開始
//=====================================================================================
int main()
{
int time = 0; //時間をカウント
//Initialize(); //初期化(描画実行)
//ゲームオーバーになるまでゲーム続行
while(!gameover)
{
if(ePreGameMode != eGameMode)
{
//シーンの変更が行われた
Initialize();
//プリデータ更新
ePreGameMode = eGameMode;
}
if(eGameMode == GAMEMODE_TITLE)
{
//タイトル画面処理
SceneTitle();
}
else if(eGameMode == GAMEMODE_MAIN)
{
if(kbhit())
{
ControlBlock();
}
//時間がきたらブロックを1マス落下させる。時間が来てなければ時間を1だけインクリメント。
if(time < 20000)
{
time++;
}
else{
DropBlock();
time = 0;
}
}
//キー入力があればそれに応じて操作
}
return 0;
}
//=====================================================================================
// メイン関数終了
//=====================================================================================
//ゲームの初期化
void Initialize()
{
int i, j; //for文ループ制御用変数
//画面と壁を初期設定
for(i = 0; i <= 20; i++)
{
for(j = 0; j <= 11; j++)
{
if((j == 0) || (j == 11) || (i == 20))
{
field[i][j] = stage[i][j] = 9;
}
else {
field[i][j] = stage[i][j] = 0;
}
}
}
CreateBlock(); //最初のブロック発生させる
ShowGameField(); //ゲーム直後の画面を描画
}
//ブロック作成
int CreateBlock()
{
int i, j; //forループ制御用の変数
int block_type; //ブロックの種類用。0~6の乱数を入れる
//まずブロックの座標を初期位置にリセット
y = 0;
x = 4;
//乱数を発生させ、その乱数を7で割った余り(0~6まで)でブロックの種類を決定
srand((unsigned)time(NULL));
block_type = rand() % 7;
//ブロックデータの中からblock_typeに応じた種類のブロックを読み込む
for(i = 0; i<4; i++) {
for(j = 0; j<4; j++) {
block[i][j] = 0;
block[i][j] = block_list[block_type][i][j];
}
}
//壁+ブロックをフィールドへ
for(i = 0; i<4; i++)
{
for(j = 0; j<4; j++)
{
field[i][j+4] = stage[i][j+4] + block[i][j];
//初期位置に置いたブロックが既に固定ブロックに重なっていればゲームオーバー
if(field[i][j+4] > 1)
{
gameover = 1;
return 1;
}
}
}
return 0;
}
//画面表示
void ShowGameField()
{
int i, j; //forループ制御用変数
//画面を一旦クリア
system("cls");//内部のシステムから
//データに応じてブロックや空白を画面表示
for(i = 0; i<21; i++) {
for(j = 0; j < 12; j++) {
switch(field[i][j]) {
case 0:
printf(" ");
break;
case 9:
printf("□");
break;
default:
printf("■");
break;
}
}
printf("\n");
}
//ゲームオーバーの場合はGAME OVERを表示
if(gameover){
system("cls");
printf("GAME OVER");
getchar();//キーが押されるまで待機
}
}
//キー入力に応じてブロックを処理
void ControlBlock()
{
char key; //受け付けたキーを保存する変数
key = getch(); //キーから一文字入力
//キーに応じて各方向へブロックを移動したり、回転させたりする
switch(key) {
case 's'://右キー
if(!CheckOverlap(x+1, y))
{
MoveBlock(x+1, y);
}
break;
case 'f'://左キー
if(!CheckOverlap(x-1, y))
{
MoveBlock(x-1, y);
}
break;
case 'd'://中心キー
if(!CheckOverlap(x, y+1))
{
MoveBlock(x, y+1);
}
break;
case ' ':
TurnBlock();
}
}
//重なり検査
int CheckOverlap(int x2, int y2)
{
int i, j; //forループ制御用変数
//ブロックが向かう位置に、固定ブロックもしくは壁があるかどうかを検査
for(i = 0; i<4; i++) {
for(j = 0; j<4; j++) {
if(block[i][j]) {
if(stage[y2 + i][x2 + j] != 0) {
return 1;
}
}
}
}
return 0;
}
//移動
void MoveBlock(int x2, int y2)
{
int i, j; //forループ制御用変数
//今までのブロックを消して
for(i = 0; i<4; i++) {
for(j = 0; j<4; j++) {
field[y+i][x+j] -= block[i][j];
}
}
//ブロックの座標を更新
x = x2;
y = y2;
//新しい座標にブロックを入れなおし
for(i = 0; i<4; i++) {
for(j = 0; j<4; j++) {
field[y+i][x+j] += block[i][j];
}
}
ShowGameField();
}
//ブロックを回転する処理
int TurnBlock()
{
int i, j; //forループ制御用
int temp[4][4] = {0}; //ブロックを一時保存するための配列
//ブロックを回転する前にtempにセーブ
for(i = 0; i<4; i++) {
for(j = 0; j<4; j++) {
temp[i][j] = block[i][j];
}
}
//ブロックを回転
for(i = 0; i<4; i++) {
for(j = 0; j<4; j++) {
block[i][j] = temp[3-j][i];
}
}
//重なってるブロックが出てしまったらブロックを回転前に戻して中止
if(CheckOverlap(x, y)) {
for(i = 0; i<4; i++) {
for(j = 0; j<4; j++) {
block[i][j] = temp[i][j];
}
}
return 1;
}
//一旦フィールドからブロック消して回転後のブロックを再表示
for(i = 0; i<4; i++) {
for(j = 0; j<4; j++) {
field[y+i][x+j] -= temp[i][j];
field[y+i][x+j] += block[i][j];
}
}
ShowGameField();
return 0;
}
//ブロックを落とす
void DropBlock()
{
//重なりがなければ移動
if(!CheckOverlap(x, y+1)) {
MoveBlock(x, y+1);
}
//重なりがあれば壁にする
else{
LockBlock();
CreateBlock();
ShowGameField();
}
}
//着地後のブロックを固定し、横一列がそろってるかの判定を呼び出す
void LockBlock()
{
int i, j; //forループ制御用変数
//ブロックを壁に加える
for(i = 0; i<21; i++) {
for(j = 0; j<12; j++) {
stage[i][j] = field[i][j];
}
}
CheckLines(); //横一列がそろってるか判定して処理する関数を呼ぶ
//列完成判定後の壁をフィールドへ
for(i = 0; i<21; i++) {
for(j = 0; j<12; j++) {
field[i][j] = stage[i][j];
}
}
}
//横一列が完成しているか検査。そろっていればそこを消して上のブロック群を下ろす
void CheckLines()
{
int i, j, k; //forループ制御用
int comp; //横一列がそろっていれば1、一つでも隙間があると0になる
int lines = 0; //同時に消したラインの数
while(1)
{
for(i = 0; i<20; i++)
{
comp = 1;
for(j = 1; j<11; j++)
{
if(stage[i][j] == 0)
{
comp = 0;
}
}
if(comp == 1) break;
}
if(comp == 0) break;
lines++;
// 列を消去
for(j = 1; j<11; j++)
{
stage[i][j] = 0;
}
//消えた列より上にあった固定ブロックを列の消えたところへ下ろす
for(k = i; k>0; k--) {
for(j = 1; j<11; j++) {
stage[k][j] = stage[k-1][j];
}
}
}
//同時に消したラインの数をカウント
switch(lines)
{
case 1:
oneline++;
break;
case 2:
twoline++;
break;
case 3:
threeline++;
break;
case 4:
fourline++;
break;
default:
break;
}
}
//初期タイトル画面処理
void SceneTitle(){
printf("TTTTT");
printf("T");
printf("T");
printf("T");
printf("T");
//=====================
//ここまでがTをprintf
//=====================
printf("EEEE");
printf("E");
printf("EEE");
printf("E");
printf("EEEE");
//=====================
//ここまでがEをprintf
//=====================
printf("TTTTT");
printf("T");
printf("T");
printf("T");
printf("T");
//=====================
//ここまでがTをprintf
//=====================
printf("RRR");
printf("R R");
printf("RRRR");
printf("R R ");
printf("R R");
//=====================
//ここまでがRをprintf
//=====================
printf(" III ");
printf(" I ");
printf(" I ");
printf(" I ");
printf(" III ");
//=====================
//ここまでがIをprintf
//=====================
printf(" SSS ");
printf("S ");
printf(" SSS ");
printf("S");
printf(" SSS ");
//=====================
//ここまでがSをprintf
//=====================
printf("\n\n\n\n\n\n\n\n操作方法一覧\n");
printf("\n右 移動Sキー\n下 移動Dキー\n左 移動Fキー");
while(!kbhit());//キーが入力される待機
eGameMode = GAMEMODE_MAIN;
}
下手にあえとファイル分割を崩しています。
一応コンパイル通ります。
こちらを参考に画面遷移の部分でも構いませんクラス設計に直して説明頂けると幸いです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
いきなり、このソースコードに手を付けるのは無謀だと思いますので、とりあえずTitle、Game、Resultクラスをmainから呼ぶのを作ってみてもらえますか。
中身は、printfでprintf("タイトル");な感じだけあれば十分です。
クラスに対しての理解度も知りたいので。
中身は、printfでprintf("タイトル");な感じだけあれば十分です。
クラスに対しての理解度も知りたいので。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ コンソール
すみませんクラス化を正しく理解出来ていないため記載して下手な回答になってしまうのでsoftya(ソフト屋) さんが書きました:いきなり、このソースコードに手を付けるのは無謀だと思いますので、とりあえずTitle、Game、Resultクラスをmainから呼ぶのを作ってみてもらえますか。
中身は、printfでprintf("タイトル");な感じだけあれば十分です。
クラスに対しての理解度も知りたいので。
正直こちらで掲載出来かねます。
本当に申し訳ないですが…解答というかクラス化したもので説明お願いします。
それからこちらで疑問に思ったことがあれば質問したいと思っています。
また、私自身で一から考えてみたいと思っています。
大変申し訳ないですが…お力をお貸しくだされば幸いです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
恥ずかしくて書けないと言うことでしょうか? だれでも最初は無茶苦茶で下手くそですよ。
理解度が分からないと回答しても無駄足に成ることが多いのでお願いしたわけです。
あと、元のコードをクラス化しては提供しないつもりです。それでは、勉強になりませんので。
出てくる元のコードも不十分ながらクラス化されていると思ったのですが、C言語のまま出てきたので予想外でした。
なお、これを最初にクラス化するのは絶対に避けてください。
最初にやるには複雑すぎると思います。
と言うことでサンプルを書きますのでお待ちください。
※ 下記の件の説明があるまで保留いたします。
理解度が分からないと回答しても無駄足に成ることが多いのでお願いしたわけです。
あと、元のコードをクラス化しては提供しないつもりです。それでは、勉強になりませんので。
出てくる元のコードも不十分ながらクラス化されていると思ったのですが、C言語のまま出てきたので予想外でした。
なお、これを最初にクラス化するのは絶対に避けてください。
最初にやるには複雑すぎると思います。
と言うことでサンプルを書きますのでお待ちください。
※ 下記の件の説明があるまで保留いたします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
ところですいませんが、こちらのコードとそっくりなのですがご自分で作られたものではないと言うことでしょうか?
「テトリス - AFTER★SE7EN」
http://d.hatena.ne.jp/Kow/20111103/1320289940
「テトリス - AFTER★SE7EN」
http://d.hatena.ne.jp/Kow/20111103/1320289940
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ コンソール
連絡ありがとうございます。softya(ソフト屋) さんが書きました:ところですいませんが、こちらのコードとそっくりなのですがご自分で作られたものではないと言うことでしょうか?
「テトリス - AFTER★SE7EN」
http://d.hatena.ne.jp/Kow/20111103/1320289940
こちらかは分かりませんが別のサイトにて許可頂き掲載しました。
一部改編しています。
出来れば上記にコードで実践して説明して頂ければ幸いです。
または、ゲーム自体は必要はなく画面遷移をクラス設計している状態のクラス化が確認したいのです。
色々無理を承知で頼んでいますが…
引き続きよろしくお願いします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
> または、ゲーム自体は必要はなく画面遷移をクラス設計している状態のクラス化が確認したいのです。
テトリス以外の簡単ならサンプルならお引き受けします。
ちゃんとクラスを使いオブジェクト指向で、簡単なサンプルならお見せできます。
デザインパターンのstateパターンを使う予定です。
テトリス以外の簡単ならサンプルならお引き受けします。
ちゃんとクラスを使いオブジェクト指向で、簡単なサンプルならお見せできます。
デザインパターンのstateパターンを使う予定です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ コンソール
度々回答ありがとうございます。softya(ソフト屋) さんが書きました:> または、ゲーム自体は必要はなく画面遷移をクラス設計している状態のクラス化が確認したいのです。
テトリス以外の簡単ならサンプルならお引き受けします。
ちゃんとクラスを使いオブジェクト指向で、簡単なサンプルならお見せできます。
デザインパターンのstateパターンを使う予定です。
テトリス以外で構いません。
むしろこちらの要望にお応え手いただき感謝いたします。
基本的に画面遷移が確認できれば参考になるのですみませんがよろしくお願いします。
これで基本的に質問はまとまったので最後にします。
解決できましたらこちらから書き込みいたします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
何かキーを押すと次の画面状態に遷移するサンプルです。
ご要望の通りにクラスである効用を使っております。
ご要望の通りにクラスである効用を使っております。
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
class GameBase;
class GameState {
private:
GameBase *mNowGameState;
public:
GameState()
{
mNowGameState = NULL;
}
~GameState()
{
clear();
}
void set(GameBase *GameState)
{
clear();
mNowGameState = GameState;
}
GameBase * get()
{
return mNowGameState;
}
bool isEnd() {
return mNowGameState == NULL;
}
private:
void clear()
{
if( mNowGameState != NULL ) {
delete mNowGameState;
}
}
};
class GameBase {
private:
bool mbNextState;
public:
GameBase() {
mbNextState = false;
}
void keyAction()
{
mbNextState = true;
}
void run(GameState &gameState)
{
if( mbNextState ) {
gameState.set(getNextState());
} else {
view();
}
}
virtual void view() = 0;
virtual GameBase* getNextState() = 0;
};
class GameResult : public GameBase {
public:
void view()
{
cout << "Game Over" << endl;
}
GameBase* getNextState()
{
cout << "to End" << endl;
return NULL;
}
};
class GameMain : public GameBase {
public:
void view()
{
cout << "Game" << endl;
}
GameBase* getNextState()
{
cout << "to Result" << endl;
return new GameResult();
}
};
class GameTitle : public GameBase {
public:
void view()
{
cout << "Title" << endl;
}
GameBase* getNextState()
{
cout << "to Main" << endl;
return new GameMain();
}
};
class GameMng {
private:
GameState mGameState;
public:
GameMng()
{
mGameState.set(new GameTitle());
}
void action()
{
GameBase *nowGame = mGameState.get();
if( _kbhit() && _getch() ) {
nowGame->keyAction();
} else {
nowGame->run(mGameState);
}
}
bool isEnd()
{
return mGameState.isEnd();
}
};
int main()
{
GameMng gameMng;
while( !gameMng.isEnd() ) {
gameMng.action();
Sleep( 20 );
system("cls");
}
return 0;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ コンソール
softya(ソフト屋) さんが書きました:何かキーを押すと次の画面状態に遷移するサンプルです。
ご要望の通りにクラスである効用を使っております。
#include <iostream> #include <windows.h> #include <conio.h> using namespace std; class GameBase; class GameState { private: GameBase *mNowGameState; public: GameState() { mNowGameState = NULL; } ~GameState() { clear(); } void set(GameBase *GameState) { clear(); mNowGameState = GameState; } GameBase * get() { return mNowGameState; } bool isEnd() { return mNowGameState == NULL; } private: void clear() { if( mNowGameState != NULL ) { delete mNowGameState; } } }; class GameBase { private: bool mbNextState; public: GameBase() { mbNextState = false; } void keyAction() { mbNextState = true; } void run(GameState &gameState) { if( mbNextState ) { gameState.set(getNextState()); } else { view(); } } virtual void view() = 0; virtual GameBase* getNextState() = 0; }; class GameResult : public GameBase { public: void view() { cout << "Game Over" << endl; } GameBase* getNextState() { cout << "to End" << endl; return NULL; } }; class GameMain : public GameBase { public: void view() { cout << "Game" << endl; } GameBase* getNextState() { cout << "to Result" << endl; return new GameResult(); } }; class GameTitle : public GameBase { public: void view() { cout << "Title" << endl; } GameBase* getNextState() { cout << "to Main" << endl; return new GameMain(); } }; class GameMng { private: GameState mGameState; public: GameMng() { mGameState.set(new GameTitle()); } void action() { GameBase *nowGame = mGameState.get(); if( _kbhit() && _getch() ) { nowGame->keyAction(); } else { nowGame->run(mGameState); } } bool isEnd() { return mGameState.isEnd(); } }; int main() { GameMng gameMng; while( !gameMng.isEnd() ) { gameMng.action(); Sleep( 20 ); system("cls"); } return 0; }
解答ありがとうございます。
可能であれば#include <iostream>ではなく#include <stdio.h> を使ったものは用意できますか?
#include <iostream>に依存しているインクルードではないもで対応頂ければ幸いです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
#include <iostream>がC++としては良いと思いますがダメな理由を教えて下さい。
【追記】
と言うよりも <iostream>とか<stdio.h>などC++の勉強としては瑣末な問題です。
クラスの勉強用なので、そのまま元のコードが動く必要性も無いはずです。
【補足】
ちなみに、元のテトリスコードをそのまま流用できない形でわざと組んであります。
テトリスは必要ないと言われたので間違いないですよね?
【追記】
と言うよりも <iostream>とか<stdio.h>などC++の勉強としては瑣末な問題です。
クラスの勉強用なので、そのまま元のコードが動く必要性も無いはずです。
【補足】
ちなみに、元のテトリスコードをそのまま流用できない形でわざと組んであります。
テトリスは必要ないと言われたので間違いないですよね?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ コンソール
回答ありがとうございます。softya(ソフト屋) さんが書きました:#include <iostream>がC++としては良いと思いますがダメな理由を教えて下さい。
【追記】
と言うよりも <iostream>とか<stdio.h>などC++の勉強としては瑣末な問題です。
クラスの勉強用なので、そのまま元のコードが動く必要性も無いはずです。
【補足】
ちなみに、元のテトリスコードをそのまま流用できない形でわざと組んであります。
テトリスは必要ないと言われたので間違いないですよね?
#include <iostream>元のコードを動かすというか私個人としては<iostream>を触ったことがないのとこれからも使う予定がないため
出来れば<iostream>を使わないで画面遷移が確認できれば基本的に解決するのでよろしくお願います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
C++の勉強のためにもiostreamを使ってください。
C++の特徴であるオペレータのオーバーロードの良い見本です。
【補足】
これから長い勉強なのに課題でもないなら急ぐ理由はないはずです。
【ついでに補足】
初心者なら絶対質問してくるはずの記述方法で書いてあります。コード自体の疑問はないのでしょうか?
C++の特徴であるオペレータのオーバーロードの良い見本です。
【補足】
これから長い勉強なのに課題でもないなら急ぐ理由はないはずです。
【ついでに補足】
初心者なら絶対質問してくるはずの記述方法で書いてあります。コード自体の疑問はないのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ コンソール
じゃあわざわざC++使ってクラス化する必要無いじゃん。初見 さんが書きました:#include <iostream>元のコードを動かすというか私個人としては<iostream>を触ったことがないのとこれからも使う予定がないため
出来れば<iostream>を使わないで画面遷移が確認できれば基本的に解決するのでよろしくお願います。
何でそこにこだわるの?
課題じゃないのでしょう?
ここは質問に答えるところですよ。何かを作ってもらうところじゃありません。
written by へにっくす
Re: C++ コンソール
申し訳ありませんが、softya(ソフト屋)さんを批判したいと思います。
なぜ画面遷移のクラス設計の話をしているのに、オペレータのオーバーロードが出てくるのですか?
確かにC++を学ぶ上では重要かもしれないですが、今でなくてもいいのではないでしょうか?
coutで出力している場所を全てputsでの出力に置き換えれば、iostreamを使う必要は無くなるはずです。
なぜ画面遷移のクラス設計の話をしているのに、オペレータのオーバーロードが出てくるのですか?
確かにC++を学ぶ上では重要かもしれないですが、今でなくてもいいのではないでしょうか?
coutで出力している場所を全てputsでの出力に置き換えれば、iostreamを使う必要は無くなるはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ コンソール
すいません。強要するつもりはないです。みけCAT さんが書きました:申し訳ありませんが、softya(ソフト屋)さんを批判したいと思います。
なぜ画面遷移のクラス設計の話をしているのに、オペレータのオーバーロードが出てくるのですか?
確かにC++を学ぶ上では重要かもしれないですが、今でなくてもいいのではないでしょうか?
coutで出力している場所を全てputsでの出力に置き換えれば、iostreamを使う必要は無くなるはずです。
勉強する姿勢としての話として描かせていただきました。
そもそも<iostream>を変える事はC/C++を理解していれば全然難しい話ではないと思いますが、どう思われますでしょうか。
この質問は言語の勉強の話だと私は思っているのですが、<iostream>から変えること自体も学びになると思います。
そのコードをそのまま載せてはせっかくの機会がなくなるので意味が無い気がしました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ コンソール
わかりました。確かにいろいろな要素に触れるのも良い事だと思います。softya(ソフト屋) さんが書きました:すいません。強要するつもりはないです。
勉強する姿勢としての話として描かせていただきました。
同意します。softya(ソフト屋) さんが書きました:そもそも<iostream>を変える事はC/C++を理解していれば全然難しい話ではないと思いますが、どう思われますでしょうか。
この質問は言語の勉強の話だと私は思っているのですが、<iostream>から変えること自体も学びになると思います。
そのコードをそのまま載せてはせっかくの機会がなくなるので意味が無い気がしました。
自分で考えるそぶりを見せずに、何でも人に聞きまくるのは良くないと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)