前提・実現したいこと
C++初心者です。
テトリスの作成をしています。
以下のサイトを参考に、サイトにあるソースファイルをVisual Studioでコンパイルしようとしましたが、失敗してエラーがでてしまいました。
エラーコードから検索して調べたのですが、原因が特定できずに困っております。
参考にしているサイト
http://www13.plala.or.jp/kymats/study/game_other/SPACE_TETRIS/st1.html
ソースコード
http://www13.plala.or.jp/kymats/program/SPACE_TETRIS/SPACE_TETRIS.cpp
発生している問題・エラーメッセージ
エラーメッセージ
警告 C6387 'hMutex' は '0' である可能性があります: この動作は、関数 'WaitForSingleObject' の指定に従っていません。 SpaceTetris C:\USERS\USER\SOURCE\REPOS\SPACETETRIS\SPACETETRIS\SPACETETRIS.CPP
警告 C6387 'hMutex' は '0' である可能性があります: この動作は、関数 'ReleaseMutex' の指定に従っていません。 SpaceTetris C:\USERS\USER\SOURCE\REPOS\SPACETETRIS\SPACETETRIS\SPACETETRIS.CPP
警告 C6387 'hMutex' は '0' である可能性があります: この動作は、関数 'CloseHandle' の指定に従っていません。これが行われる可能性のある以前の行 360 を参照してください SpaceTetris C:\USERS\USER\SOURCE\REPOS\SPACETETRIS\SPACETETRIS\SPACETETRIS.CPP 361
警告 C28251 'WinMain' に対する整合性のない注釈: このインスタンスには 注釈なし が含まれます。c:\program files (x86)\windows kits\10\include\10.0.18362.0\um\winbase.h(933) を参照してください。 SpaceTetris C:\USERS\USER\SOURCE\REPOS\SPACETETRIS\SPACETETRIS\SPACETETRIS.CPP 563
エラー LNK2019 未解決の外部シンボル _main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました。 SpaceTetris C:\Users\User\source\repos\SpaceTetris\SpaceTetris\MSVCRTD.lib(exe_main.obj) 1
エラー LNK1120 1 件の未解決の外部参照 SpaceTetris C:\Users\User\source\repos\SpaceTetris\Debug\SpaceTetris.exe 1
該当のソースコード
C++
ソースコード http://www13.plala.or.jp/kymats/program/SPACE_TETRIS/SPACE_TETRIS.cpp
#include<time.h> // winmm.lib をリンクする #pragma comment(lib,"winmm") // エラー #define ERR -1 // ピースの横と縦のマス数 #define PIECE_WIDTH 4 #define PIECE_HEIGHT 4 /* フィールドの横と縦のマス数 */ #define FIELD_WIDTH 14 #define FIELD_HEIGHT 24 // マスのピクセル数 #define CELL_WIDTH 20 #define CELL_HEIGHT 20 /* MovePiece 関数の引数 */ #define PIECE_LEFT 2 #define PIECE_RIGHT 4 #define PIECE_DOWN 8 BYTE field[FIELD_WIDTH][FIELD_HEIGHT]={0}; /* ゲームフィールド */ DWORD fColor[FIELD_WIDTH][FIELD_HEIGHT]={0}; // ゲームフィールドの色 BYTE piece[PIECE_WIDTH][PIECE_HEIGHT]={0}; /* 現在移動中のブロック */ DWORD pColor[PIECE_WIDTH][PIECE_HEIGHT]={0}; // 現在移動中のブロックの色 POINT location={0,0}; /* 現在移動中のブロックの位置 */ BYTE next[PIECE_WIDTH][PIECE_HEIGHT]={0}; // 次のブロック DWORD nColor[PIECE_WIDTH][PIECE_HEIGHT]={0}; // 次のブロックの色 DWORD score=0; // 獲得点数 DWORD playTime=0; // プレイ時間 BOOL GameOver=FALSE; // TRUE となるのはゲームオーバーからリプレイするまで #define MUTEX_NAME "MutexObject of SPACE TETRIS" // ミューテックスオブジェクトの名前 #define WM_MUTEX WM_APP // メインスレッドにミューテックスの所有権取得を要求するメッセージ /* piece[][] 内のブロックの最上部の位置を返す */ int GetPieceTop(void) { for(int y=0;y<PIECE_HEIGHT;y++){ for(int x=0;x<PIECE_WIDTH;x++){ if(piece[x][y]){ return y; } } } return ERR; } /* piece[][] 内のブロックの最下部の位置を返す */ int GetPieceBottom(void) { for(int y=PIECE_HEIGHT-1;y>=0;y--){ for(int x=0;x<PIECE_WIDTH;x++){ if(piece[x][y]){ return y; } } } return ERR; } /* piece[][] 内のブロックの左側の位置を返す */ int GetPieceLeft(void) { for(int x=0;x<PIECE_WIDTH;x++){ for(int y=0;y<PIECE_HEIGHT;y++){ if(piece[x][y]){ return x; } } } return ERR; } /* piece[][] 内のブロックの右側の位置を返す */ int GetPieceRight(void) { for(int x=PIECE_WIDTH-1;x>=0;x--){ for(int y=0;y<PIECE_HEIGHT;y++){ if(piece[x][y]){ return x; } } } return ERR; } コード
以下長いので省略させていただきます。全様は文字数オーバーしてしまいますので、リンクを参照しっただければ幸いです。申し訳ございません。
試したこと
新規プロジェクトでファイルの設定を変えてみたりしましたが、特に変化はありませんでした。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2019,Windows 10 Homeを使用しています。
回答2件
あなたの回答
tips
プレビュー