ヌメロン製作講座第1回
毎度おなじみヌメロン製作講座のお時間がやってまいりました。
ソースコードは空白入れて1万行弱程度のものです。
グラフィックデータは一切使わないのでリソースファイルはありません。
なのでVisual C++以外でもビルド可能かもしれません。試してませんが。
起動すると以下のような感じになります。
開始ボタンを押すと以下のような画面になります。
分析ボタンを押すとこうなります。
棋譜データを保存すると以下のようなテキストファイルが作成されます。ちなみにこれはコンピュータ同士に対戦させた結果です。
Numer0n.dat
// 共通データ Title "Numer0n 2012/9/15 23:58"; Column 3; Rule Numer0n6; // 先攻データ First Name None; First Type Com; First Card 0 1 2 3 4 5 5 6 6 7 7 8 8 9 9; // After 0 0 1 2 3 4 5 5 5 6 6 7 7 8 8 9 9 9; First Item HighLow Double Shuffle; // After Double Shuffle; First Number Secret "BJH"; // 後攻データ Second Name None; Second Type Com; Second Card 0 1 2 3 4 5 5 6 6 7 7 8 8 9 9; // After 1 2 3 4 5 6 6 7 7 8 8 9; Second Item HighLow Double Shuffle; // After Double; Second Number Secret "AJF"; // 棋譜データ First Call 083 0 - 1; Second Call 017 0 - 2; First Call 206 0 - 1; Second Call 670 0 - 1; First Call 618 0 - 0; Second Call 781 2 - 0; First Call 950 1 - 2; Second HighLow High High Low; Second Call 751 2 - 0; Second Shuffle Secret "FAJ"; First HighLow High Low High; First Call 905 3 Eat;
メインウィンドウは、前回ご紹介した「ウィンドウ基底クラス」を継承して使用しますので、まずは空のプロジェクトに例のwindow.hとwindow.cppを追加しておいてください。
そして以下に示すmain.hとmain.cppを追加します。
main.h
#ifndef MAIN_H #define MAIN_H #include "window.h" #include <tchar.h> class Application : public Window { public : static const SHORT wndWidth = 640; static const SHORT wndHeight = 480; static LPCTSTR className; BOOL Init( HINSTANCE hInstance, int nCmdShow ); VOID Run(); VOID OnDestroy(); }; #endif // MAIN_H
main.cpp
#include "main.h" LPCTSTR appName = _T( "Numer0n" ); Application app; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if ( app.Init( hInstance, nCmdShow ) ) { app.Run(); } return 0; } LPCTSTR Application :: className = _T( "Application" ); BOOL Application :: Init( HINSTANCE hInstance, int nCmdShow ) { WNDCLASSEX wcx; HWND hWnd; wcx.cbSize = sizeof( WNDCLASSEX ); wcx.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wcx.lpfnWndProc = Window :: WindowProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = sizeof( HANDLE ); wcx.hInstance = hInstance; wcx.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wcx.hCursor = LoadCursor( NULL, IDC_ARROW ); wcx.hbrBackground = ( HBRUSH ) ( COLOR_MENU + 1 ); wcx.lpszMenuName = NULL; wcx.lpszClassName = className; wcx.hIconSm = LoadIcon( NULL, IDI_WINLOGO ); RegisterClassEx( & wcx ); hWnd = CreateWindow( className, appName, WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, wndWidth, wndHeight, NULL, NULL, hInstance, ( LPVOID ) this ); ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); return TRUE; } VOID Application :: Run() { MSG msg; while ( GetMessage( & msg, NULL, 0, 0 ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } } VOID Application :: OnDestroy() { PostQuitMessage( 0 ); lresult = 0; }
ビルドして下さい。次のような画面が立ち上がると思います。
とりあえず今回はここまで。