トップページ > 過去ログ > 記事閲覧
オセロのアルゴリズム
名前:bin 日時: 2011/05/03 18:16

こんにちは。 この度オセロを作ろうと考えております。 現在50pxおきに線がひかれている画像を制作しました。 マウスがクリックされたらその部分に石をおきたいのですが、例えば60*60の部分をクリックされたら[1][1]の中身に1を入れるという処理はどうすればよいでしょうか?(1なら黒、2なら白のような形です。) アイディアがありましたらお願いいたします。

Page: 1 |

Re: オセロのアルゴリズム ( No.1 )
名前:管理人 日時:2011/05/03 20:01

どのマスをクリックされたか、というマスの座標は マスX座標 = ( マウスのX座標 - 一番左上のマスの左上端のX座標 ) / マス1つのドット幅 マスY座標 = ( マウスのY座標 - 一番左上のマスの左上端のY座標 ) / マス1つのドット幅 で求められます 横10縦8のマス目の中をクリックしたら色が緑から赤に変わるというプログラムを組んでみましたので よろしければご覧になってみてください m(_ _)m #include "DxLib.h" #define MAP_SIZE_X 10 #define MAP_SIZE_Y 8 #define CHIP_SIZE 32 #define MAP_LEFTUP_X 100 #define MAP_LEFTUP_Y 50 int Map[ MAP_SIZE_Y ][ MAP_SIZE_X ] ; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int oldinput ; int nowinput ; int edgeinput ; int mouseX, mouseY ; int mapX, mapY ; int i, j ; int Color ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // マウスの入力情報を初期化する oldinput = 0 ; nowinput = 0 ; mouseX = 0 ; mouseY = 0 ; // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // マウスの入力情報を更新する oldinput = nowinput ; nowinput = GetMouseInput() ; edgeinput = nowinput & ~oldinput ; GetMousePoint( &mouseX, &mouseY ) ; // マスの座標を算出する mapX = ( mouseX - MAP_LEFTUP_X ) / CHIP_SIZE ; mapY = ( mouseY - MAP_LEFTUP_Y ) / CHIP_SIZE ; // マウスの左ボタンが押されたらマップの値を変化させる if( ( edgeinput & MOUSE_INPUT_LEFT ) != 0 ) { // マップの範囲内にある場合のみマップの状態を変化させる if( mapX >= 0 && mapX < MAP_SIZE_X && mapY >= 0 && mapY < MAP_SIZE_Y ) { Map[ mapY ][ mapX ] ++ ; if( Map[ mapY ][ mapX ] >= 2 ) { Map[ mapY ][ mapX ] = 0 ; } } } // 画面のクリア ClearDrawScreen(); // マップを描画する for( i = 0 ; i < MAP_SIZE_Y ; i ++ ) { for( j = 0 ; j < MAP_SIZE_X ; j ++ ) { // 内側の部分を描画 switch( Map[ i ][ j ] ) { case 0 : Color = GetColor( 0, 255, 0 ) ; break ; case 1 : Color = GetColor( 255, 0, 0 ) ; break ; } DrawBox( MAP_LEFTUP_X + j * CHIP_SIZE, MAP_LEFTUP_Y + i * CHIP_SIZE, MAP_LEFTUP_X + j * CHIP_SIZE + CHIP_SIZE, MAP_LEFTUP_Y + i * CHIP_SIZE + CHIP_SIZE, Color, TRUE ) ; // 枠を描画 DrawBox( MAP_LEFTUP_X + j * CHIP_SIZE, MAP_LEFTUP_Y + i * CHIP_SIZE, MAP_LEFTUP_X + j * CHIP_SIZE + CHIP_SIZE, MAP_LEFTUP_Y + i * CHIP_SIZE + CHIP_SIZE, GetColor( 255,255,255 ), FALSE ) ; } } // マスの座標を表示する DrawFormatString( 0, 0, GetColor( 255,255,255 ), "X:%d Y:%d", mapX, mapY ) ; // 裏画面の内容を表画面に反映 ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
Re: オセロのアルゴリズム ( No.2 )
名前:bin 日時:2011/05/07 18:28

どうもありがとうございます。 ご親切にソースコードまでありがとうございます。 こちらのソースを参考にさせていただきますね

Page: 1 |