「テトリス」を含む日記 RSS

はてなキーワード: テトリスとは

2019-02-28

テトリス99って1位になる割合がどのくらいなら強い?

トッププレイヤーは9割を平気で超えてくるらしいけど

2019-02-27

三河島のあたりってなんであんなに建物がぎゅうぎゅうに建ってるの

テトリスだったら全消しになってる

anond:20190227113732

私自身はLGBT権利を声高に主張するようなことはしたことはありません。

増田で公開してる時点で声高に主張してんじゃん。

世の中テトリスだけやってれば平和なのかもね。ゲームくそあんなもんいらねーだろ。

2019-02-19

テトリス99はぷよテトより気持ちがいい

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割を超えてる。

攻撃されてから実際に積みあがってくるまで、かなり猶予があるので、攻撃相殺やすいし、即死級の攻撃があまり来ないので

ちょっと攻撃を受けてから消し返しが利く。

テトリス99は人間性能が低くても猛者に負けまくることもなく、きれいに積めるだけで勝率もついてくる理想テトリスだった。

[]Tスピントリプル

テトリスでは、T字型のブロックタイミングよく回転させると、

真上から単純に落とすだけでは入らない狭いスペースに捩じ込むことができる。

このテクニックをTスピンと言う。

そのTスピンを使って、三列を消すことをTスピントリプルと言う。

略してTST

Tスピンで列を消すとスピンボーナスが入るため、

TST成功させれば相手にめちゃくちゃブロックを送れる。

      □
     □□
      □
■■■■■
■■■■
■■■■ ■■
■■■■  ■
■■■■ ■■

こういう形のとき

■■■■■□
■■■■□□□
■■■■ ■■
■■■■  ■
■■■■ ■■

こうして

■■■■■
■■■■
■■■■□■■
■■■■□□■
■■■■□■■

こうする。

2019-02-16

テトリス99楽しい

スイッチリリースされたやつだけど、イイね

500円のぷよぷよは全く勝てなくてシンドかったけど、これはだいたい5位以内には入れるくらいの難易度だったので、とても楽しいです

2019-02-15

anond:20180113092228

今更だけど1年前のこの記事選手たち

今頃すごいかがやいでるんだろうな

テトリスの最新作出たか

テトリス99

強い人をバッジ可視化してそれを狙われやすくするというのは一見巧みなゲームメカニクスだが、あんまりうまく機能してない気がする。

どうせ終盤まで生き残っていれば必然的バッジが転がり込んでくるので、バッジを集めるインセンティブが薄い。

バッジ未所持でも、たくさんバッジ持ってる人から理不尽な数のラインを送られて死ぬみたいなことは無いし。

2019-02-14

テトリス99やってみて99人中30位だった俺を誰か慰めて

2019-01-16

サーバ攻撃受けたとか言ってるけど

艦これ運営に限っては、この発言は全く信用出来ないんだよなあ。

まあ警察に届け出たとツイートしてたらしいから多分本当なんだろうけど、今までのあの運営のやり口見てると、心情的には嘘としか思えないんだわ。

「頭にきました」とかキャラセリフ引用するのも安直まりないし。

艦これ遊んでない人には分かりにくいし、遊んだとある奴にとっては気持ち悪いだけ。

バカじゃねーの。


そもそもここの運営接続障害をほぼ全てユーザ側の回線が原因として片付けやがるのがすげー気に入らない。

流石はしょぼいブラゲというか、一度に請けられる任務最大数が6なうえに自動受託も未だに実装できない開発が無能なら、インフラインフラ仕事してねーじゃん。

まともな原因究明もやらない給料泥棒を雇ってんじゃねーよ。

それに最近腕組みデブ中年お気に入り絵師と、社員として雇った声優しか積極起用していないし、全体的にやる気の無さが垣間見えるんだよなあ。


あと、大昔「ツール不正利用は発見次第BAN」とか言ってたけど実際は怪しいもんだね。

だって遠征だけでレベル70とか、遠征だけで資材20万とか、人間が手動でやってたら気が遠すぎて、できるわけねー

テトリスを延々プレイするとか、MMOを1日23時間遊ぶのとはわけが違うんだよ。

ぶっちゃけ、どう考えてもツールマクロ使わなきゃありえねー話だわ。

まあ資材は課金してる奴もいそうだけど。


課金といえば、大型艦建造の画面で出る明石の警告がまた、偽善者ぶってて腹立たしいんだよなあ。

「押すなよ、絶対押すなよ!」ってか?

あんなもん、課金頼みじゃなきゃ「出るまで回す」みたいな芸当は無理だと分かって書いてるのバレバレなんだよ。

全く、いちいちやることが頭悪い上に性格悪いとか、救えねーわ。

2019-01-06

しかったけど

コピペ元も だいたいコーダー底辺労働者だったりしても

おれらコピペしてるけだけど 給料いからとか

そんなのりだってのがわかって

オリジナルコードをきれいに書くって

やっちゃいけないことなだって

教えてもらった

ありがとう

 

テトリスコードでなにか残すつもりが

なんというかコピペして

それだけのひとのご飯になって

ちゃんオリジナルを書く人が沈められる文化

まだのこってたんだなと

 

しろ、昔よりもひどくなったんだな

2019-01-04

anond:20190104054605

テトリスプログラムをざっくり書いたけど

キャリアもう20年近い

わざと雑に書いているけど

清書しようとおもったら

何回も何回もくりかえし書き直すしかない

プロでもそんなかんじ

はじめてから日記の日数がわりとあるのは、休みからもあるけど

本業の合間でやるとしても、大変だから

楽で給料が高いってのはあまりない

でも、言い方を変えれば根性さえあればひたすら書き直すだけともいえる

[]2019年1月3日木曜日増田

時間記事文字数文字数平均文字数中央値
00719892139.337
01366742187.358.5
02337078214.561
03115436494.2100
04151533102.218
05234368189.945
06126098508.267
07144361311.566
0834330097.149
09576856120.343
1092839191.229
1185606771.434
12708691124.240
136410543164.725
1466609092.340
158913096147.143
1671325645.927
17899813110.340
181151064392.532
19123654653.236
2010611900112.334
211981393670.434.5
22166943156.831
231811147663.431
1日1821185543101.935

頻出名詞 ()内の数字単語が含まれ記事

人(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)

増田合計ブックマーク数 ()内の数字は1日の増減

5917212(0)

2019-01-03

anond:20190103193510

次はシューティングなどでもよくある

当たり判定

 

まり過去の落ちた残骸のBOX

今のBOXがあたるかどうかの判定

 

テトリスBOXをあたりはんてい

というのはどうかとはおもうけど

基本は一緒

 

これができれば まぁ マリオもできなくはない

anond:20190103170543

テトリス

落ちてくるブロックの描き方

わかりやす関数化してみた

まずはブロックの種類は3種類

 

WriteBoxLとWriteBoxIとWriteBoxZ

の違いをよく見比べて

自力で違いがわかれば

プログラマーにはなれるとおもう

とはいえ、コレを自力でわかるならもっと儲かる仕事あるとはおもうけどな

 

	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(&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(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&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, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 8 };
				InvalidateRect(hWnd, &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, &Rect, hBrush);


		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left += width;
		Rect.right += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &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, &Rect, hBrush);


		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left   += width;
		Rect.right  += width;
		ret = FillRect(hdc, &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, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &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, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &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;
}

anond:20190103170216

ま、きちんと基礎を習っていれば

テトリスぐらいはすぐに作れる

とはいえ、基礎を習っていれば

絵ぐらいすぐに書けるとか

そりゃなんでもそうだっていう突っ込みはあるだろうけど

 

結構 短いコードテトリスは動く

(もちろん、音とか背景とか 凝りだしたらキリがない)

anond:20190103155208

これで、ブロックを4つ書くからテトリス

	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, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 8) {
			y = 0;
		}

		this->WriteBox();

		return TRUE;
	}


anond:20190103154644

で 次は キー入力が右しかないけど これじゃぁ テトリスっぽくないか

ブロック作画をもうちょっと 本格的にしてみよっか?

 

そうするといまは 作画関数のOnPaint(ペイントせよ)命令の中に全部ダラダラとかいてあるけど

WriteBox()っていう関数あらたにつくって

 

OnPain()

{

WriteBox();

}

って やればいいとなるよな

ということで新規関数を作るという流れ

anond:20190101175055

テトリス風?プログラムに向けて

第何回だろうな

キー入力を追加した

まだ、何を押してもブロックが右に移動するだけ(右端にいくと左にワープ

タイマー自動落下

 

でもまぁ ここまでサンプルがあるとほぼテトリスは見えてきた

// 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(&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(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&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, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	BOOL OnPaint(PAINTSTRUCT &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, &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, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &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;
}

2019-01-02

僕は対戦ゲームが下手だ

からゲームの対戦で友達にあまり勝てたことがない。

マリオパーティマリオカートボンバーマン桃鉄みたいな、自分は持ってないゲームならまぁいい。

問題は、スマブラみたいな、自分でも持ってて家でやってるゲームでも勝てないということだ。

だいたい攻撃を読まれほとんど当たらず、コテンパンにされる。

20代の頃には、ゲーマーじゃないかゲーム下手だろうとタカを括っていた当時の彼女に、ゲームボコボコにされた。

ポケモンは、厨ポケ使って俺TUEEEしてたら、高校の頃滅茶苦茶強い奴にコテンパンにされて心折れた。

オセロもそこそこ強くて俺TUEEEしてたと思いきや、ネットで知り合った友達オセロでもコテンパンにされ、テトリスSNS友達の中じゃ上位に食い込むが、如何せんT-Spinが出来ない。

どうも、全てが苦手というわけでもないらしく、ハンプシャーリータスクという、何やらミニゲームっぽいテストでは、世界上位2%以内に入る成績を軽く取った。

運動もそうだが、ゲームの上手い下手は脳の認知機能の性能とリンクしてる。つまりゲームが下手である事は、(どれだけ幼少期にゲームに触れたか?との相関を外してみれば)現実世界での頭の悪さとか要領の悪さとかとリンクしてる。

最近ゲームをやっててとにかくヘタクソな自分が、リアルでも要領が良くない自分彷彿とさせて嫌になる。

たぶん、何かしら得意なことがあって、その事ならきっとなんの努力もせずに軽く結果を出せるんだけど、自分のいる環境では得意なことは必要とされてない上に、娯楽としてすらメインストリームではないという残念さ。

結果、「やらなくちゃいけないこと」も「やりたいこと」も、苦手な事だらけで人生ハードモードという。

ハンプシャーリータスクで上位2%が取れる能力必要とされる仕事ってなによ?

まぁたぶん、殆どの人が、得意なことなんかさせてもらえてないんだろうけどさ。日本会社スペシャリストじゃなくてジェネラリストを好むからね。

2019-01-01

プログラムなんてよ

ただひたすら頑張るだけで テトリスぐらいできる。

仲間が何人かいれば、マリオの初期のやつぐらいはつくれるだろう

ただひたすら頑張ればできるだけ

 

音楽もある程度まではそうなんじゃねーの?

かじってる程度だけどよ

ダンスや絵は ちがうのか?

映画は?

 

オレの場合

ただひたすら無駄努力を続けたんだけどよ

ログイン ユーザー登録
ようこそ ゲスト さん