- ベストアンサー
こんにちは、現在ブロック崩しをつくろうと思い、以下のサイトのコードを参
こんにちは、現在ブロック崩しをつくろうと思い、以下のサイトのコードを参考にしています。 ttp://www.geocities.jp/gamerabbits/bo1_5_s.htm しかしながら、これではブロックを描写することができませんでした。ゲーム初期関数における、for関数に問題があるということはわかるのですが、実際にどのようなコードを書けばいいのかわかりません。 どなたかアドバイスをお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>for文の記述はよくわかっています。 それでは、なぜ、文法に沿ったコードを書かないで、 コンパイルエラーに悩んでいらっしゃるのですか? さっきの回答で書いた、for文のAとBとCにあたる内容を よ~く吟味してくださいませ。
その他の回答 (3)
- asuncion
- ベストアンサー率33% (2127/6289)
>for(i=0 ; i (GAME_WND_WIDTH - BLOCK_WIDTH - (ball.width * 2))) ←292行目 for文の構文は for (A; B; C) { /* 何かの文 */ } であることを理解できていますか? くだんのfor文は、 上記Bが条件式の形をとっていない点と 上記Cが欠けている点とで問題ありです。
補足
for文の記述はよくわかっています。 つまりは、このfor文によって、ブロックを横においていき、画面端にきたら、一段下げてまた横に並べていきたいのです。 変数xにはブロックのx座標、yにはy座標を代入していきたいのです。
- asuncion
- ベストアンサー率33% (2127/6289)
>1>c:\users\user\documents\visual studio 2008\projects\block\block.cpp(292) : >error C2064: 1 引数を取り込む関数には評価されません。 >1>c:\users\user\documents\visual studio 2008\projects\block\block.cpp(292) : >error C2143: 構文エラー : ';' が ')' の前にありません。 block.cppの292行目を含む前後20~30行を見せてください。 なお、for「関数」ではなくてfor「文」です。
補足
for文でしたか、失礼しました。 int Paint_Blocks(HDC hdc) { int i; if(blocks == 0) return 0; // ブロックが画面に1つも残っていなければ戻る HDC hdc_all;// デバイスコンテキストハンドルの定義 hdc_all = CreateCompatibleDC(hdc);// デバイスコンテキストハンドルの作成 SelectObject(hdc_all, hb_all);// オブジェクトの選択 for(i=0 ; i< block_count ; i++) { if(blocks[i].enable == 0) continue; BitBlt(hdc, blocks[i].bounds.left, blocks[i].bounds.top, BLOCK_WIDTH, BLOCK_HEIGHT, hdc_all, 200, 200, SRCCOPY);// 転送 } DeleteDC(hdc_all);// デバイスコンテキストの開放 DeleteObject(hdc_all);// オブジェクトの開放 return 0; } //////////////////////////////////////////////////////////////// // ゲーム初期化関数 //////////////////////////////////////////////////////////////// int Init_Game() { int i; bar.width = 100; bar.height = 5; bar.location.x = 30; bar.location.y = 220; // ボール関連の初期化【ブロック関連の初期化より先に書くこと】 ball.width = 4; ball.height = 4; ball.move = 1; ball.location.x = 80; ball.location.y = 180; // ブロック関連 block_count = 56; // ブロックの数 // ブロックの数分メモリを確保する。 blocks = (blocks_info *)malloc(sizeof (blocks_info) * block_count); // 1番目のブロックのx座標 blocks[0].bounds.left = ball.width * 5; // 1番目のブロックのy座標【ボールの移動距離の倍数にすること】 blocks[0].bounds.top = ball.height * 8; for(i=0 ; i (GAME_WND_WIDTH - BLOCK_WIDTH - (ball.width * 2))) ←292行目 { x = ball.width * 5; y += BLOCK_HEIGHT; } } return 0; } 上記のfor文です。
- edomin7777
- ベストアンサー率40% (711/1750)
> ブロックを描写することができませんでした。 > ゲーム初期関数における、for関数に問題がある これでは、回答のしようがありません。 実際にどういうコードを書いているのでしょうか? 描画できない状態とはどういう状態?エラーが出た? 開発環境・実行環境も書きましょう。
補足
回答ありがとうございます。 失礼しました、開発環境はvissual C++ 2008 express edition です。 一部抜粋して書きますと、 int Paint_Blocks(HDC hdc) { int i; if(blocks == 0) return 0; // ブロックが画面に1つも残っていなければ戻る HDC hdc_all; // デバイスコンテキストハンドルの定義 hdc_all = CreateCompatibleDC(hdc); // デバイスコンテキストハンドルの作成 SelectObject(hdc_all, hb_all); // オブジェクトの選択 for(i=0 ; i< block_count ; i++) { if(blocks[i].enable == 0) continue; BitBlt(hdc, blocks[i].bounds.left, blocks[i].bounds.top, BLOCK_WIDTH, BLOCK_HEIGHT, hdc_all, 200, 200, SRCCOPY);// 転送 } DeleteDC(hdc_all); // デバイスコンテキストの開放 DeleteObject(hdc_all); // オブジェクトの開放 return 0; } //////////////////////////////////////////////////////////////// // ゲーム初期化関数 //////////////////////////////////////////////////////////////// int Init_Game() { int i; bar.width = 100; bar.height = 5; bar.location.x = 30; bar.location.y = 220; // ボール関連の初期化【ブロック関連の初期化より先に書くこと】 ball.width = 4; ball.height = 4; ball.move = 1; ball.location.x = 80; ball.location.y = 180; // ブロック関連 block_count = 56; // ブロックの数 // ブロックの数分メモリを確保する。 blocks = (blocks_info *)malloc(sizeof (blocks_info) * block_count); // 1番目のブロックのx座標 blocks[0].bounds.left = ball.width * 5; // 1番目のブロックのy座標【ボールの移動距離の倍数にすること】 blocks[0].bounds.top = ball.height * 8; for(i=0 ; i (GAME_WND_WIDTH - BLOCK_WIDTH - (ball.width * 2))) { x = ball.width * 5; y += BLOCK_HEIGHT; } } return 0; } 質問にあるURLを見てくださるとよりよくわかると思います。 デバッグしてみると、 1>c:\users\user\documents\visual studio 2008\projects\block\block.cpp(292) : error C2064: 1 引数を取り込む関数には評価されません。 1>c:\users\user\documents\visual studio 2008\projects\block\block.cpp(292) : error C2143: 構文エラー : ';' が ')' の前にありません。 1 とでました。
お礼
お時間取らせてすいません、もう一度良く考えてみます。どうもありがとうございました。