1.前提・実現したいこと
C++を用いてコンソール上で動作するブロック崩しアプリを作成しています。
下記動画の、1時間42分辺りが該当箇所です。
ブロックくずしを作ってみる #1「リアルタイム処理」 【C言語ゲームプログラミング実況ライブ】
エラーの発生原因を教えて頂きたいです。
2.発生している問題・エラーメッセージ
中央よりやや下、[6-?-?]パドルの座標を初期化する で構造体であるVEC2のpaddlePositionに値を代入しようとするとエラーが出てしまいます。
具体的なエラーメッセージは「expected expression gcc [83、 22]」です。
3.該当のソースコード
コード全体です。
C++
1// [1]ヘッダーをincludeする場所 2#include <stdio.h> // [1-?]標準入出力ヘッダーをインクルードする 3#include <string.h> // [1-?]文字列操作ヘッダーをインクルードする 4 5// [2]定数を宣言する場所 6#define FIELD_WIDTH (15) // [2-?]フィールドの幅を宣言 7#define FIELD_HEIGHT (20) // [2-?]フィールドの高さを宣言 8 9#define PADDLE_WIDTH (3) // [2-?]パドルの幅を宣言する 10 11// [3]列挙定数を宣言する場所 12// [3-?]タイルの種類を宣言する 13enum { 14 TILE_NONE, // [3-?-?]何も無い 15 TILE_BLOCK, // [3-?-?]ブロック 16 TILE_PADDLE, // [3-?-?]パドル 17 TILE_MAX // [3-?-?]種類の数 18}; 19 20// [4]構造体を宣言する場所 21// [4-?]ベクトル構造体を宣言する 22typedef struct { 23 int x, y; 24}VEC2; 25 26 27// [5]変数を宣言する場所 28// [5-?]タイルのアスキーアートを宣言する 29const char *tileAA[] = { 30 "・", // [5-?-?]TILE_NONE, 何も無い 31 "🟫", // [5-?-?]TILE_BLOCK, ブロック 32 "回", // [5-?-?]TILE_PADDLE, パドル 33}; 34 35int field [FIELD_WIDTH][FIELD_HEIGHT]; // [5-?]フィールドを宣言する 36int screen [FIELD_WIDTH][FIELD_HEIGHT]; // [5-?]画面を宣言する 37 38VEC2 paddlePosition; // [5-?]パドルの座標を宣言する 39 40// [6]関数を宣言する場所 41// [6-?]画面を描画する関数を宣言 42void DrawScreen(){ 43 // [6-?-?]画面にフィールドをコピーする 44 memcpy(screen, field, sizeof field); 45 46 // [6-?-?]パドルの幅だけ反復する 47 // for(int x = 0; x < PADDLE_WIDTH; x++){ 48 // screen[paddlePosition.y][paddlePosition.x] = TILE_PADDLE; 49 // } 50 51 // [6-?-?]上の壁を描画する 52 for(int x = 0; x < FIELD_WIDTH + 2; x++){ 53 printf("⬜️"); 54 } 55 // [6-?-?]上の壁の描画が終わり次第改行 56 printf("\n"); 57 // [6-?]全ての行を反復する 58 for(int y = 0; y < FIELD_HEIGHT; y++){ 59 // [6-?-?]左の壁を描画する 60 printf("⬜️"); 61 // [6-?-?]全ての列を反復する 62 for(int x = 0; x < FIELD_WIDTH; x++){ 63 // [6-?-?]対象のマスを描画する 64 printf("%s", tileAA[screen[y][x]]); 65 } 66 printf("⬜️"); // [6-?-?]右の壁を描画する 67 // [6-?-?]1行描画する毎に改行 68 printf("\n"); 69 } 70} 71// [6-?]ゲームをリセットする関数を宣言する 72void Reset(){ 73 // [6-?-?]フィールドの上の方を反復する 74 for(int y = 0; y < 6; y++){ 75 // [6-?-?]全ての列を反復する 76 for(int x = 0; x < FIELD_WIDTH; x++){ 77 // [6-?-?]対象の座標にブロックを配置する 78 field[y][x] = TILE_BLOCK; 79 } 80 } 81 82 // [6-?-?]パドルの座標を初期化する 83 // paddlePosition = {( FIELD_WIDTH - PADDLE_WIDTH ) / 2, FIELD_HEIGHT - 2}; 84 85 // [6-?-?]画面を描画する関数を呼び出す 86 DrawScreen(); 87} 88// [6-?]プログラムの実行開始を宣言する 89int main (){ 90 // [6-?]ゲームをリセットする関数を呼び出す 91 Reset(); 92 // [6-?-?]メインループを追加する 93 while (1){ 94 95 } 96}
エラーの原因であるコードを記述しない場合、下画像のような描写となります。
4.自分で調べたことや試したこと
C++
1typedef struct { 2 int x, y; 3}VEC2;
typedefを記述することによって、構造体を宣言する際structを省略出来るということは理解しました。
なので構造体を宣言する際本来は
struct VEC2 paddlePosition;
と記述する必要がある所を
VEC2 paddlePosition;
の記述だけで済む。
宣言までは上手くいっていると思っています。
ですが代入をする際にエラーとなります。
5.使っているツールのバージョンなど補足情報
エディターはVisual Studio Code
動作環境は拡張機能の「C/C++ v1.1.3」です。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。