ちょっとプログラムしたいけどわざわざVisualStudioインストールするのは仰々しいと思う人向けです。
.NET FrameworkのC#コンパイラは今のWindowsには標準で入ってます。多分。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
バージョンによってフォルダ名が違うと思うので適当に自分の環境に合わせて確認してください。
とりあえず実際にコンパイルできるかどうが、Hello Worldを書いて試します。
1 2 3 4 5 6 7 8 9 10 |
using System; class console01 { public static int Main() { Console.WriteLine("hello world!"); return 0; } } |
コンパイル方法はコンソールで下記コマンドたたくだけです。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /optimize+ /out:helloworld.exe console01.cs
成功したら実行してみましょう
すんなり動きました。
コンソールアプリではなくWindowsアプリを作りたい場合はコンパイルオプションで /t:winexe を追加します。
せっかくコンパイルできたのでもうちょっと遊んでみます。
ゲーム製作に使われるDXライブラリは元々C++用なのですが、C#にも公開されているのでこれをコマンドラインコンパイルで使ってみます。
https://dxlib.xsrv.jp/
「DXライブラリのダウンロード」からダウンロードページを開き「VisualC# 用パッケージ」からダウンロードしてください。
ダウンロードしたファイルの解凍した中にあるDxLib.dllとDxLib_x64、DxDLL.csを自分のソース等と一緒におけばコンパイルできるはずです。
この画像を方向キーで左右に動かせる&スペースキーでジャンプするだけのものを作ってみます。Mainメソッド兼ゲーム全体を管理するGAME_CTRLクラスと、動かすキャラクター=Playerクラスを用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System; using DxLibDLL; public static class GAME_CTRL { [STAThread] static void Main() { // ウインドウモード DX.ChangeWindowMode(DX.TRUE); // DXライブラリの初期化 if (DX.DxLib_Init() < 0) { return; } Player m_player; //別ファイルで定義したプレイヤー用クラス int GHandle ; m_player = new Player(); // 透過色を指定 DX.SetTransColor( 0 ,128 , 128 ) ; GHandle = DX.LoadGraph( "p_01.png" ) ; DX.SetDrawScreen(DX.DX_SCREEN_BACK); // メインループ while (DX.ProcessMessage() != -1) { DX.ClearDrawScreen(); m_player.InputSetMove(); //キーボードからの入力をプレイヤーの移動値にセット m_player.Move(); //移動値をプレイヤーの座標を反映 m_player.Draw( GHandle ); //座標の場所に描画 DX.ScreenFlip(); } DX.DeleteGraph( GHandle ) ; DX.DxLib_End(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
using DxLibDLL; class Player { private float move_x; private float move_y; private float x; private float y; public Player(){ x = 0; y = 0; move_x = 0; move_y = 0; } public void Set(float in_x , float in_y ) { x = in_x; y = in_y; } public void Draw(int GHandle){ DX.DrawRectGraph( (int)x , (int)y , 0,0,64,64,GHandle , DX.TRUE , DX.FALSE); } public void InputSetMove(){ if( DX.CheckHitKey(DX.KEY_INPUT_RIGHT) != 0 ){ move_x = 4; } if( DX.CheckHitKey(DX.KEY_INPUT_LEFT) != 0 ){ move_x = - 4; } if( DX.CheckHitKey(DX.KEY_INPUT_SPACE) != 0 ){ if( y >= 400 ) { move_y = -8; } } move_x *= 0.98f; if( y < 400 ) { move_y += 0.24f; } } public void Move(){ x += move_x; y += move_y; if( y >= 400 ) { y = 400; move_y = 0; } } } |
この2ファイルと画像ファイルをおいてコンパイルを実行します。コンソールと違い /t:winexeのオプションが必要です。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /optimize+ /t:winexe /out:game.exe *.cs
game.exeを実行
こちらもすんなり動きました。
IDE無しデバッガ無しなのでイチから本格的なものを作るのはちょっとしんどいですが、ちょっとしたミニゲームや思いついたものをモジュール単位で試したりと色々使えるんじゃないでしょうか。
こんにちは。ソースコードをコピペして、上で言われた通り、fileを同じfolderに入れて、コンパイルしたのですが、次のようにコンパイルエラーが出ます。何が問題なのでしょうか。
GAME_CTRL.cs(15,13): error CS0246: 型または名前空間名 ‘Player’ が見つかりませんでした。using
ディレクティブまたはアセンブリ参照が不足しています。
GAME_CTRL.cs(18,28): error CS0246: 型または名前空間名 ‘Player’ が見つかりませんでした。using
ディレクティブまたはアセンブリ参照が不足しています。
こんにちは
Playerクラスがないエラーなので考えられる原因は下記のどちらかと思われます
・Player.csがない
GAME_CTRL.csの下のPlayer.csをコピペで作って再度コンパイルしてください
・Player.csはあるが、Player.csのclass宣言部分でスペルミスがある
3行目及9行目のPlayerが正しく入っている確認してください