はてなキーワード: テトリスとは
switch onlineの無料ゲーム「テトリス99」にはまっている。
レーティングを採用しているぷよテトでは、いつもストレスが溜まってしまうが、テトリス99では何故か99人に一人しか勝者がいないのにぷよテトより勝率がいい。
1対1のぷよテトでは猛者と当たると一瞬でやられる。すぐに終わるのでまたすぐに猛者が現れる。5回も負け続けるとやる気も無くなる。
テトリス99で採用しているバトルロイヤル形式のいいところは、猛者は1ゲームの時間が長くなるため、ゲーム回数が少なくなり、強者のいないゲームが多く存在することにある。
このためレーティングがなくても自然に猛者と当たる回数が少なくなる。
テトリス99は運要素も強い。大勢に狙われれば狙われるほど強くなる。
10人ぐらいに狙われると1行消しただけで狙っている奴全員に、かなりの攻撃が行く。
どんなにうまくても、タイミング次第で初心者に返り討ちに合う。
残り10人ぐらいになると早くなるが、多分初心者でも運しだいでそこまで行ける。
1対1で負けるのと99人中の10位では気分も変わる。
テトリスプレーヤーは40行を1分以内に切れれば1人前。ガチ勢は30秒切りみたいな感じだけど、俺の40LINEは大体1分半。
積む速さだけはどうしようもない。テトリス30年やっててもあまり変わらない。
これはテトリスをいつもやってる人間の中では多分格段に遅い。でも勝率は5割を超えてる。
艦これ運営に限っては、この発言は全く信用出来ないんだよなあ。
まあ警察に届け出たとツイートしてたらしいから多分本当なんだろうけど、今までのあの運営のやり口見てると、心情的には嘘としか思えないんだわ。
「頭にきました」とかキャラのセリフ引用するのも安直極まりないし。
艦これ遊んでない人には分かりにくいし、遊んだことある奴にとっては気持ち悪いだけ。
バカじゃねーの。
そもそもここの運営、接続障害をほぼ全てユーザ側の回線が原因として片付けやがるのがすげー気に入らない。
流石はしょぼいブラゲというか、一度に請けられる任務の最大数が6なうえに自動受託も未だに実装できない開発が無能なら、インフラもインフラで仕事してねーじゃん。
まともな原因究明もやらない給料泥棒を雇ってんじゃねーよ。
それに最近は腕組みデブ狼中年のお気に入り絵師と、社員として雇った声優しか積極起用していないし、全体的にやる気の無さが垣間見えるんだよなあ。
あと、大昔「ツールの不正利用は発見次第BAN」とか言ってたけど実際は怪しいもんだね。
だって、遠征だけでレベル70とか、遠征だけで資材20万とか、人間が手動でやってたら気が遠すぎて、できるわけねー。
テトリスを延々プレイするとか、MMOを1日23時間遊ぶのとはわけが違うんだよ。
ぶっちゃけ、どう考えてもツールかマクロ使わなきゃありえねー話だわ。
まあ資材は課金してる奴もいそうだけど。
課金といえば、大型艦建造の画面で出る明石の警告がまた、偽善者ぶってて腹立たしいんだよなあ。
「押すなよ、絶対押すなよ!」ってか?
あんなもん、課金頼みじゃなきゃ「出るまで回す」みたいな芸当は無理だと分かって書いてるのバレバレなんだよ。
全く、いちいちやることが頭悪い上に性格悪いとか、救えねーわ。
キャリアもう20年近い
わざと雑に書いているけど
清書しようとおもったら
何回も何回もくりかえし書き直すしかない
プロでもそんなかんじ
はじめてから日記の日数がわりとあるのは、休みだからもあるけど
でも、言い方を変えれば根性さえあればひたすら書き直すだけともいえる
時間 | 記事数 | 文字数 | 文字数平均 | 文字数中央値 |
---|---|---|---|---|
00 | 71 | 9892 | 139.3 | 37 |
01 | 36 | 6742 | 187.3 | 58.5 |
02 | 33 | 7078 | 214.5 | 61 |
03 | 11 | 5436 | 494.2 | 100 |
04 | 15 | 1533 | 102.2 | 18 |
05 | 23 | 4368 | 189.9 | 45 |
06 | 12 | 6098 | 508.2 | 67 |
07 | 14 | 4361 | 311.5 | 66 |
08 | 34 | 3300 | 97.1 | 49 |
09 | 57 | 6856 | 120.3 | 43 |
10 | 92 | 8391 | 91.2 | 29 |
11 | 85 | 6067 | 71.4 | 34 |
12 | 70 | 8691 | 124.2 | 40 |
13 | 64 | 10543 | 164.7 | 25 |
14 | 66 | 6090 | 92.3 | 40 |
15 | 89 | 13096 | 147.1 | 43 |
16 | 71 | 3256 | 45.9 | 27 |
17 | 89 | 9813 | 110.3 | 40 |
18 | 115 | 10643 | 92.5 | 32 |
19 | 123 | 6546 | 53.2 | 36 |
20 | 106 | 11900 | 112.3 | 34 |
21 | 198 | 13936 | 70.4 | 34.5 |
22 | 166 | 9431 | 56.8 | 31 |
23 | 181 | 11476 | 63.4 | 31 |
1日 | 1821 | 185543 | 101.9 | 35 |
人(165), ワイ(134), 自分(126), 増田(109), 今(81), 話(77), 好き(56), あと(52), 問題(50), 必要(46), 人間(45), 気(43), 日本(40), 前(40), 他人(39), 感じ(39), 仕事(39), 相手(38), 理由(36), 結婚(36), 普通(35), 女性(35), 人生(33), 子供(32), 一人(32), 最近(31), 男(31), 頭(30), 手(30), 女(30), ネット(29), 投稿(29), 気持ち(29), ー(28), しない(28), 今日(27), 時間(26), 一番(26), 家族(25), 子(25), 無理(25), 関係(25), 今年(25), 時代(25), 意味(24), 正月(24), 大学(24), 他(24), ゲーム(24), 嫌(24), 韓国(23), 勝手(23), 結局(23), レベル(22), 平成(22), 社会(21), 目(21), 別(21), 世界(20), 会社(20), しよう(20), 本(20), 親(20), 理解(20), 昔(20), 幸せ(20), ハラスメント(19), お金(19), 先(19), ゴミ(19), 受験(19), 顔(19), 全部(19), 加害(19), そうだ(19), 一つ(19), 存在(19), 学校(19), 絶対(18), 会話(18), 家(18), 自体(18), 最初(18), 言葉(18), 甘え(18), 内容(18), 漫画(18), 個人(17), 男性(17), 逆(17), では(17), 金(17), バカ(17), ホモ(17), 興味(17), 勉強(16), 経験(16), 間(16), 認定(16), 女の子(16), 東大(16), ダメ(16), 母(16)
ワイ(134), 増田(109), 日本(40), 韓国(23), 平成(22), 東大(16), 元増田(14), じゃなくて(12), KKO(12), キモ(11), 被害者(11), ブコメ(11), 承認欲求(11), 可能性(10), アプリ(10), マジで(10), 一般論(10), ブログ(9), 一緒に(8), 低脳(8), イケメン(8), なんだろう(8), 京大(8), アメリカ(8), ムーブ(7), 阪大(7), 北朝鮮(7), 何度(7), PC(7), 被害妄想(7), ブクマ(7), テトリス(7), 3日(7), LGBT(7), 自衛隊(7), 低能先生(7), 具体的(7), 藁人形(7), 同人誌(7), わからん(7), キチガイ(6), どんだけ(6), 社会人(6), 娘(6), なんの(6), はてサ(6), 3年(6), スマホ(6), キモい(6), 生産性(6), -1(6), ブクマカ(6), Amazon(6), ネトウヨ(6), VR(6), 2019年(6), Google(6), metoo(6), t(6), 30歳(5), 円高(5), 個人の感想(5), その子(5), is(5), 日本政府(5), 昭和(5), プレイ(5), アレ(5), ヤバい(5), いいね(5), Apple(5), 数年(5), 高校時代(5), s(5), 大学受験(5), 個人的(5), P(5), バーサーカー(5), Oculus(5), オナホ(5), SNS(5), 東京(5), な!(5), 中国(5), 好きな人(5), 20代(5), なんJ(5), hatena(5), twitter(5), 10年(5), 過去問(5), 脳内(4), 熊本(4), 上の(4), 日(4), 人間性(4), 国立大(4), ロシア(4), 早稲田(4), 卑怯者(4), A(4), 1人(4), かもしれん(4), 2人(4), ウザ(4), 政権批判(4), 100点(4), FGO(4), 竹下通り(4), ガチャ(4), キツ(4), いない(4), ガチ(4), youtube(4), 偏差値(4), センター試験(4), お酒(4), おせち(4), 数年前(4), OK(4), 1番(4), 1000円(4), -3(4), 外国人(4), ノンケ(4), 自分自身(4), 40歳(4), 何回(4), ザ・ノース・フェイス(4), …。(4), 自分語り(4), にも(4), 地震計(4), 専業主婦(4), 1年(4), ー(4), はてブ(4), 滑り止め(4), ツイート(4), アセクシャル(4), レズ(4), 安倍(4), 3人(4), 30代(4), 高3(4), ええんや(4), CM(4)
わらい(4), ロスカット(3), バーサーカー(5), 今年の抱負(3), Quest(3), 竹下通り(4), 初売り(3), そごう(3), 赤本(3), 非コミュ(3), 破れる(3), 年賀状(11), 正月(24), ワイ(134), 加害(19), 包丁(9), 早々(10), 年末年始(8), metoo(6), ハラスメント(19), 受験生(6), 地震(15), 京大(8), 低脳(8), 藁人形(7), 平成(22), 受験(19), 再(32), 東大(16), 思い出(14), 試験(11), 甘え(19), 去年(10), ホモ(17)
■兄に虐待されていたこと /20190103065022(14), ■誰かと付き合いたいと思う感情が湧かないまま20代が終わった /20181230221848(11), ■買った鞄がホモランドセルと呼ばれている噂を知り感情を整理できない /20190103174931(10), ■承認欲求という奴がよくわからん /20190103053948(9), ■姉と一線越えかけた話 /20190103055748(8), ■電車の中で外人さんに話しかけられた /20190103224650(7), ■ /20190102211142(7), ■転職する度に後悔している /20190103224035(7), ■〇〇は平成で終わりにする /20190103085720(7), ■孫がウザい /20190103145155(7), ■小さなことを気にしない奴が主人公の話 /20190103161935(6), ■電子マネーやクレカ中心で生活してて、広域停電になったら /20190103134507(6), ■コミュ障の活字中毒者は漢字の読み方を知らない /20190102215750(6), ■こういうドラマがみたい /20190103104753(6), ■笑い以外の感情を湧かせる芸人っていますか /20190103190346(6), ■「起立性調節障害で学校にいけない状態」には適したサポートをしてほしい /20190103015906(5), ■東大までの受験の思い出 /20190102063518(5), ■ラーメン屋に行ったけど /20190102154322(5), ■ダメージジーンズ業界はもっと現実を見ろ /20190103101841(5), ■正月モヤモヤした気持ちのとりとめもないメモ /20190103212946(5), ■引っ越したら住所変更しろ /20190102225933(5), ■年始早々のクソ縁起悪い話 /20190101213910(5), ■結婚したいけどできない人なんているんかな /20190102213349(5)
次はシューティングなどでもよくある
当たり判定
今のBOXがあたるかどうかの判定
というのはどうかとはおもうけど
基本は一緒
これができれば まぁ マリオもできなくはない
テトリス風
落ちてくるブロックの描き方
まずはブロックの種類は3種類
の違いをよく見比べて
自力で違いがわかれば
プログラマーにはなれるとおもう
とはいえ、コレを自力でわかるならもっと儲かる仕事あるとはおもうけどな
BOOL WriteBox() { switch (boxType) { case 0: return WriteBoxI(); case 1: return WriteBoxL(); case 2: return WriteBoxZ(); } }
// WindowsProject7.cpp: アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" #include "WindowsProject7.h" #define MAX_LOADSTRING 100 // グローバル変数: HINSTANCE hInst; // 現在のインターフェイス WCHAR szTitle[MAX_LOADSTRING]; // タイトル バーのテキスト WCHAR szWindowClass[MAX_LOADSTRING]; // メイン ウィンドウ クラス名 // このコード モジュールに含まれる関数の宣言を転送します: //ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); #include <list> class MyWindow; std::list< MyWindow *> windows; class MyWindow { public: HWND hWnd; MyWindow() :hWnd(NULL) { windows.push_back(this); } virtual ~MyWindow() { std::list< MyWindow *>::iterator it; for (it = windows.begin(); it != windows.end(); it++) { if (*it == this) { windows.erase(it); break; } } } static MyWindow * find(HWND key) { std::list< MyWindow *>::iterator it; for (it = windows.begin(); it != windows.end(); it++) { MyWindow *target = *it; if (target->hWnd == key) { return target; } } return NULL; } // // 関数: MyRegisterClass() // // 目的: ウィンドウ クラスを登録します。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXW wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7)); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassExW(&amp;wcex); } // // 関数: InitInstance(HINSTANCE, int) // // 目的: インスタンス ハンドルを保存して、メイン ウィンドウを作成します。 // // コメント: // // この関数で、グローバル変数でインスタンス ハンドルを保存し、 // メイン プログラム ウィンドウを作成および表示します。 // BOOL InitInstance() { hInst = hInstance; // グローバル変数にインスタンス処理を格納します。 ATOM c = MyRegisterClass(hInstance); x = 0; y = 0; boxType = 0; hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } return TRUE; } BOOL ShowWindow() { BOOL ret; ret = ::ShowWindow(hWnd, SW_SHOW); ::UpdateWindow(hWnd); return ret; } HINSTANCE hInstance; MSG msg; BOOL run; int x; int y; BOOL Main() { HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7)); run = true; int rc; // メイン メッセージ ループ: while (run) { DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL, 100 , QS_PAINT| QS_ALLEVENTS,0); if (obj <= WAIT_OBJECT_0) { while (PeekMessage(&amp;msg, NULL, 0, 0, PM_REMOVE)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &amp;msg)) { TranslateMessage(&amp;msg); DispatchMessage(&amp;msg); } if (msg.message == WM_QUIT) { run = FALSE; } if (msg.message == WM_CLOSE) { run = FALSE; } } } else if (obj == WAIT_TIMEOUT) { y++; PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &amp;ps); this->OnPaint(ps); EndPaint(hWnd, &amp;ps); ::UpdateWindow(hWnd); RECT Rect2 = { 0,0,48*9,48 * 8 }; InvalidateRect(hWnd, &amp;Rect2, TRUE); } else if (obj == WAIT_FAILED) { rc = GetLastError(); } else { } } return TRUE; } int boxType; BOOL WriteBox() { switch (boxType) { case 0: return WriteBoxI(); case 1: return WriteBoxL(); case 2: return WriteBoxZ(); } } BOOL WriteBoxZ() { HDC hdc = GetDC(hWnd); HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246)); int width = 24; RECT Rect = { 0,0,48,48 }; BOOL ret; Rect.left = width * x + 1; Rect.right = width * (x + 1) - 1; Rect.top = width * y + 1; Rect.bottom = width * (y + 1) - 1; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.left += width; Rect.right += width; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); DeleteObject(hBrush); return TRUE; } BOOL WriteBoxL() { HDC hdc = GetDC(hWnd); HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246)); int width = 24; RECT Rect = { 0,0,48,48 }; BOOL ret; Rect.left = width * x + 1; Rect.right = width * (x + 1) -1 ; Rect.top = width * y + 1; Rect.bottom = width * (y + 1) -1; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.left += width; Rect.right += width; ret = FillRect(hdc, &amp;Rect, hBrush); DeleteObject(hBrush); return TRUE; } BOOL WriteBoxI() { HDC hdc = GetDC(hWnd); HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246)); int width = 24; RECT Rect = { 0,0,48,48 }; BOOL ret; Rect.left = width * x + 1; Rect.right = width * (x + 1) - 1; Rect.top = width * y + 1; Rect.bottom = width * (y + 1) - 1; ret = FillRect(hdc, &amp;Rect, hBrush); //Rect.left += width; //Rect.right += width; Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); DeleteObject(hBrush); return TRUE; } BOOL OnPaint(PAINTSTRUCT &amp;ps) { if (x > 8) { x = 0; } if (x <0) { x = 8; } if (y > 8) { y = 0; boxType++; if (boxType > 2) { boxType = 0; } } this->WriteBox(); return TRUE; } BOOL OnKey() { x++; return TRUE; } }; int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: ここにコードを挿入してください。 // グローバル文字列を初期化しています。 LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING); //MyRegisterClass(hInstance); MyWindow win; win.hInstance = hInstance; // アプリケーションの初期化を実行します: if (!win.InitInstance()) { return FALSE; } BOOL ret; win.ShowWindow(); ret = win.Main(); if (ret) { return 0; }else { return (int)win.msg.wParam; } } // // 関数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: メイン ウィンドウのメッセージを処理します。 // // WM_COMMAND - アプリケーション メニューの処理 // WM_PAINT - メイン ウィンドウの描画 // WM_DESTROY - 中止メッセージを表示して戻る // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: { int wmId = LOWORD(wParam); // 選択されたメニューの解析: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_KEYDOWN: { MyWindow *target = MyWindow::find(hWnd); target->OnKey(); } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &amp;ps); MyWindow *target = MyWindow::find(hWnd); target->OnPaint(ps); // TODO: HDC を使用する描画コードをここに追加してください... EndPaint(hWnd, &amp;ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // バージョン情報ボックスのメッセージ ハンドラーです。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; }
ま、きちんと基礎を習っていれば
テトリスぐらいはすぐに作れる
とはいえ、基礎を習っていれば
絵ぐらいすぐに書けるとか
(もちろん、音とか背景とか 凝りだしたらキリがない)
BOOL WriteBox() { HDC hdc = GetDC(hWnd); HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246)); int width = 24; RECT Rect = { 0,0,48,48 }; BOOL ret; Rect.left = width * x + 1; Rect.right = width * (x + 1) -1 ; Rect.top = width * y + 1; Rect.bottom = width * (y + 1) -1; ret = FillRect(hdc, &amp;Rect, hBrush); //Rect.left += width; //Rect.right += width; Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); Rect.top += width; Rect.bottom += width; ret = FillRect(hdc, &amp;Rect, hBrush); DeleteObject(hBrush); return TRUE; } BOOL OnPaint(PAINTSTRUCT &amp;ps) { if (x > 8) { x = 0; } if (x <0) { x = 8; } if (y > 8) { y = 0; } this->WriteBox(); return TRUE; }
で 次は キー入力が右しかないけど これじゃぁ テトリスっぽくないから
そうするといまは 作画関数のOnPaint(ペイントせよ)命令の中に全部ダラダラとかいてあるけど
OnPain()
{
WriteBox();
}
って やればいいとなるよな
第何回だろうな
まだ、何を押してもブロックが右に移動するだけ(右端にいくと左にワープ)
// WindowsProject7.cpp: アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" #include "WindowsProject7.h" #define MAX_LOADSTRING 100 // グローバル変数: HINSTANCE hInst; // 現在のインターフェイス WCHAR szTitle[MAX_LOADSTRING]; // タイトル バーのテキスト WCHAR szWindowClass[MAX_LOADSTRING]; // メイン ウィンドウ クラス名 // このコード モジュールに含まれる関数の宣言を転送します: //ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); #include <list> class MyWindow; std::list< MyWindow *> windows; class MyWindow { public: HWND hWnd; MyWindow() :hWnd(NULL) { windows.push_back(this); } virtual ~MyWindow() { std::list< MyWindow *>::iterator it; for (it = windows.begin(); it != windows.end(); it++) { if (*it == this) { windows.erase(it); break; } } } static MyWindow * find(HWND key) { std::list< MyWindow *>::iterator it; for (it = windows.begin(); it != windows.end(); it++) { MyWindow *target = *it; if (target->hWnd == key) { return target; } } return NULL; } // // 関数: MyRegisterClass() // // 目的: ウィンドウ クラスを登録します。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXW wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7)); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassExW(&amp;wcex); } // // 関数: InitInstance(HINSTANCE, int) // // 目的: インスタンス ハンドルを保存して、メイン ウィンドウを作成します。 // // コメント: // // この関数で、グローバル変数でインスタンス ハンドルを保存し、 // メイン プログラム ウィンドウを作成および表示します。 // BOOL InitInstance() { hInst = hInstance; // グローバル変数にインスタンス処理を格納します。 ATOM c = MyRegisterClass(hInstance); x = 0; y = 0; hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } return TRUE; } BOOL ShowWindow() { BOOL ret; ret = ::ShowWindow(hWnd, SW_SHOW); ::UpdateWindow(hWnd); return ret; } HINSTANCE hInstance; MSG msg; BOOL run; int x; int y; BOOL Main() { HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7)); run = true; int rc; // メイン メッセージ ループ: while (run) { DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL, 100 , QS_PAINT| QS_ALLEVENTS,0); if (obj <= WAIT_OBJECT_0) { while (PeekMessage(&amp;msg, NULL, 0, 0, PM_REMOVE)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &amp;msg)) { TranslateMessage(&amp;msg); DispatchMessage(&amp;msg); } if (msg.message == WM_QUIT) { run = FALSE; } if (msg.message == WM_CLOSE) { run = FALSE; } } } else if (obj == WAIT_TIMEOUT) { y++; PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &amp;ps); this->OnPaint(ps); EndPaint(hWnd, &amp;ps); ::UpdateWindow(hWnd); RECT Rect2 = { 0,0,48*9,48 * 8 }; InvalidateRect(hWnd, &amp;Rect2, TRUE); } else if (obj == WAIT_FAILED) { rc = GetLastError(); } else { } } return TRUE; } BOOL OnPaint(PAINTSTRUCT &amp;ps) { HDC hdc = GetDC(hWnd); HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246)); RECT Rect = { 0,0,48,48 }; Rect.left = 48 * x; Rect.right = 48 * (x+1); Rect.top = 48 * y; Rect.bottom = 48 * (y+1); if (x > 8) { x = 0; } if (x <0) { x = 8; } if (y > 8) { y = 0; } BOOL ret = FillRect(ps.hdc, &amp;Rect, hBrush); DeleteObject(hBrush); return TRUE; } BOOL OnKey() { x++; return TRUE; } }; int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: ここにコードを挿入してください。 // グローバル文字列を初期化しています。 LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING); //MyRegisterClass(hInstance); MyWindow win; win.hInstance = hInstance; // アプリケーションの初期化を実行します: if (!win.InitInstance()) { return FALSE; } BOOL ret; win.ShowWindow(); ret = win.Main(); if (ret) { return 0; }else { return (int)win.msg.wParam; } } // // 関数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: メイン ウィンドウのメッセージを処理します。 // // WM_COMMAND - アプリケーション メニューの処理 // WM_PAINT - メイン ウィンドウの描画 // WM_DESTROY - 中止メッセージを表示して戻る // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: { int wmId = LOWORD(wParam); // 選択されたメニューの解析: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_KEYDOWN: { MyWindow *target = MyWindow::find(hWnd); target->OnKey(); } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &amp;ps); MyWindow *target = MyWindow::find(hWnd); target->OnPaint(ps); // TODO: HDC を使用する描画コードをここに追加してください... EndPaint(hWnd, &amp;ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // バージョン情報ボックスのメッセージ ハンドラーです。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; }
マリオパーティ、マリオカート、ボンバーマン、桃鉄みたいな、自分は持ってないゲームならまぁいい。
問題は、スマブラみたいな、自分でも持ってて家でやってるゲームでも勝てないということだ。
だいたい攻撃を読まれてほとんど当たらず、コテンパンにされる。
20代の頃には、ゲーマーじゃないからゲーム下手だろうとタカを括っていた当時の彼女に、ゲームでボコボコにされた。
ポケモンは、厨ポケ使って俺TUEEEしてたら、高校の頃滅茶苦茶強い奴にコテンパンにされて心折れた。
オセロもそこそこ強くて俺TUEEEしてたと思いきや、ネットで知り合った友達にオセロでもコテンパンにされ、テトリスはSNSの友達の中じゃ上位に食い込むが、如何せんT-Spinが出来ない。
どうも、全てが苦手というわけでもないらしく、ハンプシャーツリータスクという、何やらミニゲームっぽいテストでは、世界上位2%以内に入る成績を軽く取った。
運動もそうだが、ゲームの上手い下手は脳の認知機能の性能とリンクしてる。つまり、ゲームが下手である事は、(どれだけ幼少期にゲームに触れたか?との相関を外してみれば)現実世界での頭の悪さとか要領の悪さとかとリンクしてる。
最近、ゲームをやっててとにかくヘタクソな自分が、リアルでも要領が良くない自分を彷彿とさせて嫌になる。
たぶん、何かしら得意なことがあって、その事ならきっとなんの努力もせずに軽く結果を出せるんだけど、自分のいる環境では得意なことは必要とされてない上に、娯楽としてすらメインストリームではないという残念さ。
結果、「やらなくちゃいけないこと」も「やりたいこと」も、苦手な事だらけで人生ハードモードという。
ハンプシャーツリータスクで上位2%が取れる能力を必要とされる仕事ってなによ?
まぁたぶん、殆どの人が、得意なことなんかさせてもらえてないんだろうけどさ。日本の会社はスペシャリストじゃなくてジェネラリストを好むからね。