なんとなくだらだらと。方向性はまだ決まってない。
当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。
本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html
DX Library Copyright (C) 2001-2008 Takumi Yamada.
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ゲーム終了の判定とかは、まだ手付かず。
ダウンロード http://hiyayakko.sarashi.com/MaruBatu/MB004.zip (2009.08.27) main.cpp #include "stdafx.h" const char* WindowText = "○×ゲーム(3目並べ)v0.04"; struct MousePoint { int sx,sy; // スクリーン座標 int x, y; // フィールド座標 int status; // マウスボタン情報 } mp; enum Board { NONE, MARU, BATU }; Board board[3][3]={NONE}; struct GameStatus { Board Teban; // 今の手番 bool MouseClick; // マウスのクリック状況 } game; : : int GameInit() { game.Teban = MARU; return 0; } GameStatusなんてグローバル構造体をでっちあげる。 ゲームで使いそうなものを片っ端からここにぶち込んでいくと予想。 あまりキレイなプログラムの構想じゃないなあ。 GameInit() ゲームの初期化で手番を決める。先手は○。 main.cpp int CheckKey() { int key; key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ); if(key & PAD_INPUT_START) { // PAD_INPUT_START [ESC]Key return -1; } // マウスの位置を取得 GetMousePoint( &mp.sx , &mp.sy ); mp.status = GetMouseInput(); // フィールド座標系に変換 mp.x=-1;mp.y=-1; if(mp.sx>=100 && mp.sx < 400) mp.x = (mp.sx-100)/100; if(mp.sy>=100 && mp.sy < 400) mp.y = (mp.sy-100)/100; // マウスクリック情報 game.MouseClick = false; int mouse = GetMouseInput(); if((mouse&MOUSE_INPUT_LEFT)!=0){ if((mp.x>=0)&&(mp.y>=0)){ game.MouseClick = true; } } return 0; } マウスから、クリックされたかどうかの状況を返す処理を追加。 ここで、その入力がゲーム的に有効かどうかの判定をしてもいいんだけど、ここは敢えて 他に任せる流れに。 入力の処理はあくまでも入力だけ担当していればいい。 簡単な処理だから、こちらの子が仕事してもいいんだけど、今だからけじめはしっかり。 で、その任されるゲーム内処理 main.cpp void GameFlame() { if(game.MouseClick == true){ // マウスクリックがあったとき if(board[mp.y][mp.x]==NONE){ // カーソル位置の盤面が空白なら board[mp.y][mp.x]=game.Teban; // 手番のひとのカーソルを置く if(game.Teban==MARU) game.Teban = BATU; else game.Teban = MARU; // 手番を入れ替える } } return; } 今のところは至極単純。コメントのとおり。 次は表示。 main.cpp void DrawScene() { static const int WHITE = GetColor(255,255,255); static const int BLACK = GetColor( 0, 0, 0); static const int RED = GetColor(255, 32, 32); static const int BLUE = GetColor( 64, 64,255); static const int YELLOW= GetColor(255,255, 32); // たてたてよこよこ DrawLine(200,100,200,400,WHITE, 10); DrawLine(300,100,300,400,WHITE, 10); DrawLine(100,200,400,200,WHITE, 10); DrawLine(100,300,400,300,WHITE, 10); // ○×を描く for(int y=0;y<3;y++){ for(int x=0;x<3;x++){ int curX = (x+1)*100; int curY = (y+1)*100; switch(board[y][x]){ case MARU: DrawCircle(curX+50,curY+50,43, RED,1); DrawCircle(curX+50,curY+50,30,BLACK,1); break; case BATU: DrawLine(curX+10,curY+10,curX+90,curY+90,BLUE,15); DrawLine(curX+10,curY+90,curX+90,curY+10,BLUE,15); break; default: break; } } } // マウスカーソル位置に枠を描く if((mp.x>=0)&&(mp.y>=0)){ int curX = (mp.x+1)*100+5; int curY = (mp.y+1)*100+5; DrawLine(curX,curY,curX+90,curY,YELLOW,5); DrawLine(curX,curY,curX,curY+90,YELLOW,5); DrawLine(curX+90,curY,curX+90,curY+90,YELLOW,5); DrawLine(curX,curY+90,curX+90,curY+90,YELLOW,5); } int line = 0; DrawFormatString(400,line,WHITE,"MousePos(%d,%d)",mp.sx,mp.sy);line+=20; DrawFormatString(400,line,WHITE,"BoardPos(%d,%d)",mp.x ,mp.y );line+=20; if(game.Teban==MARU) {DrawString( 400,line,"Teban:Maru",RED);line+=20;} else {DrawString(400,line,"Teban:Batu",BLUE);line+=20;} return; } 難しいところは無いと思う。 2重ループでボード配列を調べて、○×あれば描く。 最後にデバッグ情報ちょっと追加。○番×番を表示してみる。枠外のクリックとかで手番が 飛ばされないか確認のため。こんなところの作りは雑でいい。 ブログエントリ ○×ゲームを作る(1) http://http://hiyayakkoprog.blog.shinobi.jp/Entry/53/ ダウンロードHP http://hiyayakko.sarashi.com/Marubatu/MaruBatu.html したらば掲示板 http://jbbs.livedoor.jp/bbs/read.cgi/computer/42268/1250213377/l50 PR |
カレンダー
カテゴリー
フリーエリア
最新記事
(01/29)
(01/28)
(01/26)
(12/28)
(12/27)
(12/25)
(12/20)
(09/09)
(09/09)
(09/09)
(09/08)
(09/08)
(09/08)
(09/06)
(09/05)
(08/27)
(08/27)
(08/27)
(08/25)
(08/23)
ブログ内検索
P R
アクセス解析
カウンター
|