トップ・ページの表示 注意書きの表示 掲示板に書き込む前に必ず この ”注意書き”を お読み下さい.

"Reportage Pickup Report"

   
   

ページの表示順:{ 新しい順/ 古い順}.
初期・ページの表示・位置:{ 先頭ページ/ 末尾ページ}.
1ページ内のスレッド表示数:







<Number>: [0000003A]  <Date>: 2024/02/01 20:02:28
<Title>: Chromeモバイル・エミュレーターの使い方
<Name>: amanojaku@管理人



PCモニターの場合、現在4k画面(横幅3840px)が普及価格帯で販売されており、「HD(ハイビジョン)画面(横幅1280px)、FHD(Full-HD:Fullハイビジョン)画面(横幅1920px)、WQHD(Wide Quad-HD:Quadハイビジョン)画面(横幅2560px)」などもあります。
また高解像度モニターは(高価ですが)「5k画面(横幅5120px)、6k画面(横幅6016px)、8k画面(横幅7680px)」も販売されています(そのうち量産効果で安くなるか?)。
逆に低解像度モニターは1K画面(横幅1024px)や(2020年9月現在、価格.com調べ)800px画面(横幅800px)も有るようです。

参考:下記はテレビ画面のHD(ハイビジョン)以降の規格(解像度)です。
今どきの若い人はHD(ハイビジョン)など知らないかもしれませんが、テレビ画面の「4k画面、8k画面」ぐらいは聞いたことは有るでしょう。
ただしPCモニターの解像度は、テレビ画面のような正式な規格と言う訳では無いですが。

https://images.app.goo.gl/ZQctd4Rb7AorGsNp6


【要注意】初心者の勉強用に方便として単位にpxなどを使うのは良いですが、(メディアクエリは除き)pxなどの絶対単位(px以外の絶対単位も同様)を使っていると「特定の解像度に依存する」ので、欠陥Webページになるのでご注意下さい。
(メディアクエリは除き)pxなどの絶対単位(px以外の絶対単位も同様)を使っていると「特定の解像度に依存する」ので、SEO(Search Engine Optimization:検索エンジン最適化)的には当然 マイナスになるので ご注意ください。
「特定の解像度に依存するWebページ」だと、他の人のモニター解像度が違う場合や、自分がモニター解像度が違うPCに買い換えたりとかしたら正常に表示できない場合が有ります。
当然 ベンダーも そんなコード(欠陥Webページ)は許さないので、欠陥Webページしか作れないようならフロントエンド(プロ)として失格と言って良いでしょう。
※なお、最近のWindowsは画面の表示倍率を変更できるスケーリング(ズーム)機能が有り、スケーリング(ズーム)の倍率を拡大し仮想的な解像度を下げて1k解像度に近似させる事もできるようです。

例えば1pxはモニターの1ドッドを表わします。
1k解像度(1024px解像度)モニターの100pxは画面の約9.766%のサイズに見えます。
4k解像度(3840px解像度)モニターの100pxは画面の約2.604%のサイズに見えます。
モニター解像度によって肉眼で見えるサイズ感が違ってきます、フォントなどは読めないぐらいまで小さくなることが有ります。


Chromeの開発者ツール(デベロッパー・ツール)にはスマホをエミュレートできるモバイル・エミュレーターが搭載されており、このモバイル・エミュレーターは仮想的に解像度も変更できるようです(なお 「Galaxy、Pixel、iPhone、iPad」などの解像度のプリセットも用意されているようです)。
ただし、そのプリセットは解像度を再現するだけであり、(当然 本質はPC用ブラウザなので)「スマホでは余りCSSが効かないとか、バク的な仕様とか」などを再現するわけではないので注意して下さい。

モバイル・エミュレーターは、当然 モバイル(スマホ、タブレット)用のエミュレーターなので(metaタグの)viewport属性で固定値が指定されている場合は、viewportの設定値の解像度が優先されるので注意して下さい(この制限を理解していればPC用としても利用可能です)、つまり PC用ページとしてチェックしたい場合で(metaタグの)viewport属性で固定値が指定されている場合は、その設定をコメントにし、代わりに下記の(metaタグの)viewport属性を設定て下さい。
そうしないとスマホ用(metaタグの)viewport属性の固定値が有効になってしまうのでPC用の表示をチェックできません。
(metaタグの)viewport属性の設定が存在しない場合は、(metaタグの)charset属性の設定の次あたりに それを記述して下さい。

<meta name="viewport" content="width=device-width">


とりあえずChromeモバイル・エミュレーターで一般的には約「300px~3000px」解像度ぐらいをチェックしてみると良いでしょう(プロなら6k解像度ぐらいは使ってるかもしれませんので、ポートフォリオを作成するなら約「280px~6000px」解像度ぐらいには対応すると良いでしょう)。

PC 版 Chrome モバイルサイト表示エミュレーターの使い方
https://webllica.com/smart-phone-simulator/

↑漢字入力はOFFにして下さい。
デフォルトではブラウザの右側に開発者ツール(デベロッパー・ツール)が表示されます。
開発者ツール(デベロッパー・ツール)の右上のスリー・ドットをクリックすると、メニューの先頭に開発者ツール(デベロッパー・ツール)・ドックの位置が指定できます(3番目の画像の赤く囲われた所)、左から順番に「別ウインドウ、左側、下側、右側」(個人的には別ウインドウを推します)。
開発者ツール(デベロッパー・ツール)・ドックを別ウインドウにした場合、Windowsなら下のタスク・バーに、その(開発者ツール(デベロッパー・ツール)・ドック用の)タスク・アイコンが表示されるので、それをクリックすることで表示・非表示を簡単に切り替えられます。
開発者ツール(デベロッパー・ツール)の上部のモバイル・エミュレーター・アイコン(1番目の画像の赤く囲われた所)をクリックすればモバイル・エミュレーター・モードになります。

【解像度の変更時の注意点】
モバイル・エミュレーターで解像度を変更したら、必ずリロードして下さい、Windowsなら[F5]。
単位に「em、ex、ch、rem、lh」を使っている場合、解像度を変更してフォントなどの表示サイズが合わなくなったら、見やすいサイズにブラウザでフォント・サイズを設定して下さい。
《重要》ただし「Chrome」の「最小フォント・サイズ」設定は、「HTML、CSS」の設定を無視して強制的にフォント・サイズを変更してしまうので、本当にユーザー・フレンドリーか どうかをチェックしたいなら、「最小フォント・サイズ」設定は最小にしておかなければなりません。
例えば単位に「vw」などを使っている場合に、モバイル・エミュレーターで解像度を小さくしてもフォントの表示サイズが小さくならない時は「最小フォント・サイズ」設定が最小に設定されてないと思われるので ご注意ください(つまり「最小フォント・サイズ」設定が最小に設定されてないと、正しい表示をチェックできない)。
通常の「フォント・サイズ」設定でフォント・サイズが大きくならない場合は、フォント・サイズがフォント系単位 以外で指定されていると思われます。

【PC画面のエミュレイトの場合】
自分のモニター解像度より解像度を小さくする場合は、説明が難しくなるので、(Chromeモバイル・エミュレーターでチェックする場合は)かえって1k解像度モニターのほうが分かりやすいでしょう。
現状で1k解像度モニターが無い場合、(モニターが1600px解像度 以上なら)新規アカウントを作成し解像度を「800px~1280px」程度の解像度に設定すると良いでしょう(アカウント名は「1k」とかにして、そのアカウントは1k解像度専用にする)、1366px解像度 以下なら特に いじらなくても良いです。

自分のモニター解像度より解像度を大きくする場合は、少々コツが要ります。
まず 最初に2番目の画像の赤く囲われたズーム指定(パーセント指定)を一旦 100%に指定、"幅"(左)に自分が指定したい解像度を入力し[Enter]、ビュー・エリアの右下の縁をドラッグし、縦・横を画面幅いっぱいにして下さい(特にビュー・エリアの幅は必ず、画面幅いっぱいにして下さい)。
(自分のモニター解像度より解像度を大きくする場合は)大まかなイメージが確認できれば良いだけなので解像度の値は多少 誤差があっても問題ありません。
※PC画面のエミュレイトの場合は「約1000px、約2000px、約3000px」と言う感じで「約1000px」の間隔でおk(なお、モバイル画面の場合は、ビュー・エリアの縁をドラッグして変更してやる)。

【モバイル画面のエミュレイトの場合】
モバイルの場合は2番目の画像の赤く囲われたズーム指定(パーセント指定)を とりあえず100%に設定してみて下さい(明らかにサイズ感が違う場合は変更して下さい)。

ブレイク・ポイントをチェックしたい場合は、ビュー・エリアの縁をドラッグし、ブレイク・ポイントあたりで正常にレイアウトが変化するかを注視して下さい。
ビュー・エリアの縁をドラッグする場合、横幅の最小値は280pxまでで良いです。

「タブレット、スマホ」の解像度のプリセットは(2番目の画像の赤く囲われたプリセット指定の)[サイズ:レスポンシブ]コンボボックスで選択可能です。
プリセットの解像度でチェックする場合はビュー・エリアはマウスで動かさないで下さい。

蛇足

【PC画面のエミュレイトの問題点】
Chromeモバイル・エミュレーターはモバイル・ブラウザをエミュレートしているので、スクロールバーの幅はゼロになります(つまり通常のスクロールバーは表示されない)。
もし 本格的にチェックしたい場合は4k解像度モニター(+グラボ?)を買って、そのデフォルト解像度を「2k~2.5k」解像度とした場合には、「800px」解像度のアカウントも作って、その「デフォルト」解像度と「800px」解像度をチェックしてやれば良いでしょう。
※自分のPC画面の解像度がフルHD画面(横幅1920px)以上なら、とりあえず「4k解像度モニター(+グラボ?)」は必要ないです。

4kモニターを購入する場合の注意点
http:../utf8/smt.cgi?r+twilight/&bid+00000041&tsn+00000258&bts+2021/03/26%2020%3A00%3A27&

Block( Address 00000050 Identity 0000003A )


<Number>: [00000017]  <Date>: 2023/11/22 07:18:26
<Title>: デザインカンプからコーディングを行う際のマシン・スペック
<Name>: amanojaku@管理人



(コ-ダーの場合)一般的に「Photoshop、Illustrator、XD」を揃えとけと言われてますが、殆どは「Photoshop、Illustrator」の案件多いと思われます(XDは「Photoshop、Illustrator」で何か問題が発生した場合の保険と言う意味合いが強いようです)。
稀に「XD、Figma」の案件も有るようですが、これからはFigma案件は増えていくかもしれません。


■「Photoshop、Illustrator、XD」の必要システム構成

【共通】
RAM:16GB以上を推奨、余裕を見て32GBで良いでしょう
GPUメモリ(VRAM):2GB~4GB
インターネットに繋がっていること


■ Photoshop の必要システム構成
https://helpx.adobe.com/jp/photoshop/system-requirements.html

>アプリケーションのインストール用の高速内蔵 SSD:50GB

↑M.2 SSDの事を言っている。
PCケースを開けてM.2 SSDを挿す必要があるので、割と面倒です。
PCを購入する前にショップ側でM.2 SSDを挿して貰えるか確認してみると良いでしょう(当然 手数料が掛かります)。

参考

【2023年版】M.2 SSDのおすすめ20選。選び方もあわせて解説
https://sakidori.co/article/908293


■ Illustrator の必要システム構成
https://helpx.adobe.com/jp/illustrator/system-requirements.html

>OpenGL バージョン 4.0 以上をサポートしている

↑ゲーミングPCレベルのスペックを意味しているが、ゲーミングPCでもOpenGLがサポートされて無い場合もあるので、必ずOpenGL バージョン 4.0以上がサポートされているかを確認する事。
良く分からないがIllustratorはGPUアクセラレーションの「オン/オフ」の設定が有るようなので、OpenGL バージョン 4.0がサポートされて無くても一応は動作するようだが、(GPUアクセラレーションを)CPUが代替するのでCPUに負荷が掛かるとか、描画のパフォーマンスに何らかの影響が出る可能性は有る。
もし何らかの理由でOpenGL バージョン 4.0を諦めた場合は「CPU:最新のIntel Core i7(を強く推奨)」(AMD CPUは推奨しない)、「DirectX 10以降に対応したGPU」「GPUメモリ(VRAM):2GB~4GB」、「WQHD 2K画面(横幅2560px)以上」などのスペックが強く推奨される(ただし、そのスペックだと金額的に高くなったりするが)。
逆にOpenGL バージョン 4.0がサポートされているなら「CPU:第12世代以降のIntel Core i5でもおk」(AMD CPUは推奨しない)、つまり「最新のIntel Core i7」で無くても良いと言うこと。

>アウトラインモードの制限事項:必要な最小モニター解像度は、いずれの次元にも 2000 ピクセルです。

↑「WQHD 2K画面(横幅2560px)」かそれ以上の解像度のモニターが必要。


■ Adobe XD デスクトップ版の必要なシステム構成
https://helpx.adobe.com/jp/xd/system-requirements.html


■ QM5J-B230/B2
https://www.tsukumo.co.jp/bto/pc/quadro/2023/QM5J-B230B2.html

>NVIDIA® T1000
>16GB (8GBx2枚) DDR4-3200

↑恐らく購入時に指定すれば増設できると思われる

>500GB SSD※ (M.2規格 / NVMe接続)

↑500GB SSD M.2が同梱

>税込 ¥159,800

※モニターなどは別売


■ NVIDIA® T1000

>https://www.elsa-jp.co.jp/products/detail/nvidia-t1000/?tab=specification

>NVIDIA® T1000
>4GB GDDR6 SDRAM 搭載
>OpenGL 4.6 / DirectX 12 Ultimate / DirectX 11~8.1 / NVIDIA CUDA / DirectCompute 5.0 / OpenCL / Vulkan

Block( Address 00000040 Identity 00000017 )


<Number>: [00000014]  <Date>: 2023/11/10 06:41:29
<Title>: 食料危機、エネルギー危機、金融危機、ペスト、日本終了のお知らせ
<Name>: amanojaku@管理人



コメ農家の8割が赤字
https://www.ryusuke-m.jp/3954/

酪農家の窮地を国は救え! 放置すれば4割廃業の危機 血の通った財政出動を
https://www.chosyu-journal.jp/shakai/25081

コメ農家を襲う「三重苦」 価格下落、肥料・燃料高騰 離農加速懸念も
https://www.sankei.com/article/20221228-HV7QIRWE65EN7GHXHMG5XSOFEA/

米価下落と肥料高騰 水田経営の赤字拡大 農中総研が試算
https://www.jacom.or.jp/nousei/news/2022/07/220721-60488.php

食料危機が突きつける農業再生の課題――正念場迎えた日本の食料生産 東京大学大学院教授・鈴木宣弘
https://www.chosyu-journal.jp/seijikeizai/25439

インド 小麦の輸出禁止を発表 国内での安定供給を図る
https://www3.nhk.or.jp/news/html/20220514/k10013626441000.html

(2022年時点での話し)もう洒落にならん!食料危機とエネルギー危機の現実[三橋TV第616回]三橋貴明・高家望愛
https://youtu.be/xn7JtTbktsg

2023年の食料危機はこれまでよりも深刻かもしれない…戦争、パンデミック、異常気象の影響で
https://www.businessinsider.jp/post-258559

世界2位の農業大国が崩壊寸前…オランダの農家が「政府の環境政策」に過激デモで対抗しているワケ
https://president.jp/articles/-/61680?page=2&fbclid=IwAR10zUhctotqhN64J1SoQ6eGyqjmME4Hv6ny3_xlV4X5O1NPcNTDW2KIw_Q

中国から始まる 世界的食糧危機の恐れ / 歴史上治水で失敗した皇帝は淘汰されていく 習近平の命運や如何に… 【渡邉哲也show・ML】473 Vol.2 / 20230811
https://youtu.be/itseWzZDHk8?si=UlxuCuz_TQ-pLh6J

【恐ろしい世界】エネルギー不足はこれからが本番!燃料価格下落も楽観視は禁物【朝香豊の日本再興チャンネル】
https://youtu.be/rPpRYorUfdU

人類史最悪の株価暴落が起こります。リーマンショックを予言して大儲けした伝説のヘッジファンドとロックフェラー系やハーバード大学までもが警告していてヤバすぎる【 株 日経平均 都市伝説 予言 FX 】
https://youtu.be/tQWQ_ang9k4

【悲報】リーマンショック級の株価暴落と金融危機、もうすぐ起きる超ヤバい裏話4つ。ウニパー社や中国の恒大集団の経営危機。利上げと自社株買いとゾンビ企業【 株 日経平均 都市伝説 世界の終わり 歴史 】
https://youtu.be/R0nzS7ZyvuA

【教えて!ワタナベさん】中国版リーマンショックが来るかもしれない[R5/8/19]
https://youtu.be/LW-P1NPHGUY?si=qvavSBIloc45qf9e

ドイツも、欧州も、米国も、中国も!世界経済のお先は真っ暗!【朝香豊の日本再興チャンネル】
https://youtu.be/Nnq6QMXzvgo?si=hnVGUm2wHXty0wMf

Five minutes 2023/08/20 中国・最悪の伝染病ペスト、再び流行 !!
https://youtu.be/FSxZXNqvJjM?si=I6MlNkB_em4PJ8sH

システムが誤動作するかもしれない2025年問題とは
https://www.j-motto.co.jp/00000000/column/2021/20210818/

>コメ農家の8割が赤字

良く考えて欲しい、農家の人口は農水省のプレゼンス(存在感)の源泉であり、農林族議員の集票マシン(生命線)なのである。
(ジャブジャブの補助金で農家人口を維持して来た)その農水省が積極的に農家の人口を減らしていて、農林族議員からも文句が出ている様子も無い、恐らく誰も文句が言えないのだろう。
日本はアメリカの属国と言われて久しいが、それは今までの仮初の自由も無くなると言う事を意味している。
いよいよ日本政府の上にいる存在が本気を出して日本を属国化するのだ。

Block( Address 0000003D Identity 00000014 )


<Number>: [00000037]  <Date>: 2023/10/10 03:16:05
<Title>: PHPデモ/タイマー
<Name>: amanojaku@管理人



サーバー・サイドの場合、多数のユーザーが同時にアクセスした場合を考慮する必要があります。
具体的にはサーバー・サイドの場合は、ファイル出力時にファイルをロックしないとデータ破壊される危険性があります。
また ファイルの書き換え(ファイル入力してファイル出力する)は、ファイル入出力を一体としてロックしないとデータ破壊される危険性があります、つまり ファイル入力とファイル出力でファイル・ロックを2つに分けるとファイル・データが破壊される危険性があります。
下記デモでもファイル入力とファイル出力でファイル・ロックは1つだけだと言うことに注意して下さい。

なお (データの削除などで)ファイル・サイズが前より小さくなる場合は「rewind(~)、ftruncate(~,0)」で一旦ファイル・サイズをゼロにする必要があります。


【TimeLimit.php】

<?php
$nDebugSW = 0;

$sFFirst_Print = "@Print_";
$sFExt_Print = ".txt";
$FName_Print = $sFFirst_Print . $sFExt_Print;
if ($nDebugSW) {
  touch($FName_Print);
  ($FHW_Print = fopen($FName_Print, "w"))
    || die("die: fopen w: {$FName_Print}.");
  flock($FHW_Print, LOCK_EX); // ファイル排他ロック
  // LOCK_SH : ファイル共有ロック
  // LOCK_EX : ファイル排他ロック
}

$sPT_TimeLimit = "";
if (isset($_POST['TimeLimit'])) {
  $sPT_TimeLimit = $_POST['TimeLimit'];
  // PrintOut("sPT_TimeLimit: {$sPT_TimeLimit}");
}
$nPT_TimeLimit = intval($sPT_TimeLimit);
PrintOut("sPT_TimeLimit: {$sPT_TimeLimit}");
PrintOut("nPT_TimeLimit: {$nPT_TimeLimit}");

$fname  = "Sample.txt";
touch($fname);
($fhrp = fopen($fname, "r+"))
  || die("die: fopen r+: {$fname}.");
flock($fhrp, LOCK_EX); // ファイル排他ロック
// LOCK_SH : ファイル共有ロック
// LOCK_EX : ファイル排他ロック
$sTimeLimit = fgets($fhrp);
$nTimeLimit = intval($sTimeLimit);
PrintOut("sTimeLimit: {$sTimeLimit}");
PrintOut("nTimeLimit: {$nTimeLimit}");
$sResponse = strval($nTimeLimit);;
PrintOut("sResponse: {$sResponse}");

$nTimeCurr = time();
$remnant = $nTimeLimit - $nTimeCurr;
$vFWrite = false; // true;
PrintOut("nTimeCurr: {$nTimeCurr}");
PrintOut("remnant : {$remnant}");
/*
if ((0 <= $nTimeLimit) && ($nTimeCurr < $nTimeLimit)) {
  PrintOut("if ((0 <= $nTimeLimit) && ($nTimeLimit < $nTimeCurr))");
  $vFWrite = true;
  $sTimeLimit = "";
}
*/
if ("" < $sPT_TimeLimit) {
  PrintOut("if (0 <= nPT_TimeLimit)");
  $vFWrite = true;
  $sTimeLimit = strval($nPT_TimeLimit);
}
if (($sPT_TimeLimit == "") && ($nTimeLimit < $nTimeCurr)) {
  PrintOut("if ((nPT_TimeLimit < 0) && (nTimeLimit < nTimeCurr))");
  $vFWrite = true;
  $sTimeLimit = "";
}
PrintOut("vFWrite: {$vFWrite}");

if ($vFWrite) {
  // fseek
  rewind($fhrp)
    || die("die: rewind: {$fname}.");
  ftruncate($fhrp, 0)
    || die("die: ftruncate: {$fname}.");
  fwrite($fhrp, $sTimeLimit . PHP_EOL)
    || die("die: fwrite: {$fname}.");
  $sResponse = $sTimeLimit;
}
PrintOut("sResponse: {$sResponse}");

// ファイルclose // ファイル・ロックも開放
fclose($fhrp)
  || die("die: fclose: {$fname}.");

echo $sResponse;

if ($FHW_Print) {
  // ファイルclose // ファイル・ロックも開放
  fclose($FHW_Print)
    || die("die: fclose: {$FName_Print}.");
}

function PrintOut($msg)
{
  global $FHW_Print, $FName_Print, $sPT_Submit;
  if ($FHW_Print) {
    $msg = $msg ? $msg : "";
    fwrite($FHW_Print, $msg . PHP_EOL)
      || die("die: fwrite: {$FName_Print}.");
  }
}


【index.htm】

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<style>
</style>
<body>
  <div id="idMessage"></div>
  <input type="text" id="idTimeLimit">
  <button type="button" onclick="sSubmit = 'TimeLimit';">Submit</button><br>
  <button type="button" id="idAJAX" style="display: none;" onclick="AJAXComm();">AJAX</button><br>
</body>
<script>
  nDebugSW = 0;

  nTimeout = 500;
  sAJAX_Server = "TimeLimit.php"
  sSubmit = "";
  wMessage = document.getElementById("idMessage");
  wTimeLimit = document.getElementById("idTimeLimit");
  wAJAX = document.getElementById("idAJAX");

  if (nDebugSW === 1) {
    wAJAX.style = "display: block;"
  }

  function Clear_TimeLimit() {
    wTimeLimit.value = "";
  }

  function AJAXComm() {
    ConsoleOut();
    ConsoleOut("function AJAXComm()");
    ConsoleOut(`sSubmit: ${sSubmit}, `);
    var sAJAX_Charset = "UTF-8";
    var nTimeLimit = 0;
    var nSTimeLimit = 0;
    var sSTimeLimit = "";
    var nNativeTimeLimit = 0;
    var nMSTimeCurr = 0;
    var nSTimeCurr = 0;
    // var nUNIXTimeLimit = 0;
    // var sUNIXTimeLimit = "";
    var sUserTimeLimit = "";
    var sQueryParameter = "";

    if (sSubmit) {
      ConsoleOut("if (sSubmit)");
      sSubmit = "";
      sUserTimeLimit = wTimeLimit.value;
      ConsoleOut(`sUserTimeLimit: ${sUserTimeLimit}, `);
      if ("" < sUserTimeLimit) {
        nUserTimeLimit = parseInt(sUserTimeLimit);
        nMSTimeCurr = new Date().getTime();
        nSTimeCurr = Math.round(nMSTimeCurr / 1000);
        nSTimeLimit = nSTimeCurr + nUserTimeLimit;
      }
      sQueryParameter += `Submit=AJAX&`;
      sQueryParameter += `TimeLimit=${encodeURI(nSTimeLimit)}&`;
      ConsoleOut(`sQueryParameter: ${sQueryParameter}, `);
      Clear_TimeLimit();
    }

    var sAJAX_Parameter = "";
    // wTimeLimit.value = "";
    // wMessage.innerText = "";
    var oAJAX = new XMLHttpRequest();
    // oAJAX.responseText = "";
    oAJAX.onload = function () {
      ConsoleOut();
      ConsoleOut("oAJAX.onload");
      if (this.readyState === 4 && this.status === 200) {
        ConsoleOut("this.readyState: " + this.readyState);
        ConsoleOut("this.status: " + this.status);
        var res = oAJAX.responseText;
        // ConsoleOut(`res: ${res}, `);
        if ("" < res) {
          var sSTimeLimit = res;
          nSTimeLimit = sSTimeLimit ? parseInt(sSTimeLimit) : 0;
          nMSTimeCurr = new Date().getTime();
          nSTimeCurr = Math.round(nMSTimeCurr / 1000);
          var remnant = nSTimeLimit - nSTimeCurr;
          ConsoleOut("sSTimeLimit: " + sSTimeLimit);
          ConsoleOut("nSTimeLimit: " + nSTimeLimit);
          ConsoleOut("nSTimeCurr: " + nSTimeCurr);
          ConsoleOut("remnant: " + remnant);
          if (sSTimeLimit) {
            wMessage.innerText = 0 <= remnant ? remnant : 0;
          } else {
            // wMessage.innerText = "";
          }
        }
      }
      if (nDebugSW != 1) {
        setTimeout(AJAXComm(), nTimeout);
      }
    }
    // oAJAX.overrideMimeType('text/plain; charset=' + sAJAX_Charset);
    oAJAX.open('POST', sAJAX_Server);
    oAJAX.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    oAJAX.send(sQueryParameter);
    ConsoleOut(`oAJAX.send(sQueryParameter)`);
    ConsoleOut(`sQueryParameter: ${sQueryParameter}, `);
  }

  if (nDebugSW != 1) {
    setTimeout(AJAXComm(), nTimeout);
  }

  function ConsoleOut(msg) {
    if (nDebugSW) {
      msg = msg ? msg : "";
      console.log(msg);
    }
  }

</script>
</html>

Block( Address 00000039 Identity 00000037 )


<Number>: [00000007]  <Date>: 2023/10/08 11:53:49
<Title>: Javaデモ:オブジェクト指向プログラミング
<Name>: amanojaku@管理人



オブジェクト指向プログラミングの基本は、ザックリと言うとクラスが設計図、インスタンスが実体です。
オブジェクト指向プログラミングの基本概念を自動車で喩えると、設計図(クラス)から自動車の実体(インスタンス)を10台でも100台でも作れると考えるとイメージしやすいでしょう。

クラス型・変数と中身のインスタンスの型が違う場合が有り、クラス型・変数の(継承上の)子孫型のインスタンスが入っている場合が有ります。
ミッキーで喩えると、クラス型・変数が「ミッキーの着ぐるみ」で、インスタンスが「中の人」と言うイメージです。

オブジェクト指向プログラミングの基本概念には継承もありますが、それらの基本概念だけではオブジェクト指向プログラミングの本当のメリットは生かされません。
オブジェクト指向プログラミングの肝は多態性(ポリモーフィズム)です(大抵は抽象化(アブストラクション)と言う概念も必要になるでしょう)。
なので多態性(ポリモーフィズム)が理解できてないなら、オブジェクト指向プログラミングが理解できてないと言って良いです。

下記はJavaデモですが、実際に動かすことで、プログラムの理解に役立つでしょう。
多態性(ポリモーフィズム)の勉強には下記で勉強すると良いでしょう。
一旦スレッドの無い状態(静止した状態)に改造すれば、オブジェクト指向の部分が明確化するでしょう。

Javaデモ/Swingグラフィック「Figure、Thread」(2) オブジェクト指向プログラミング
http:../utf8/smt.cgi?r+sara/&bid+0000045B&tsn+0000063D&bts+2021/03/10%2022%3A24%3A19&

下記はJavaScriptデモですが、実際に動かすことで、プログラムの理解に役立つでしょう。
このデモなら多態性(ポリモーフィズム)を(見た感じで)イメージしやすいでしょう。
「ラミー、魔法陣、宝石、宝箱」は外面的にFigure_Bottomとして扱えるようにクラス設計しているので、取り扱いが楽になります、それが多態性(ポリモーフィズム)のメリットです。
ただし多態性(ポリモーフィズム)を具現化するためのクラス設計は初心者には難しいでしょうが、そこは根性を入れて勉強していただくしか無いです。

JavaScriptデモ/FieldRoll 016 オブジェクト指向プログラミング
http:../utf8/smt.cgi?r+sara/&bid+00000602&tsn+0000060F&bts+2022/04/02%2023%3A03%3A39&

>オブジェクト指向プログラミングの基本概念を自動車で喩えると、設計図(クラス)から自動車の実体(インスタンス)を10台でも100台でも作れると言うイメージです。

例えば「JavaScriptデモ/FieldRoll 016」で「new Figure_Cabinet(R, null, this.R.nSubjectModelSize, 1, 0.1)」だけで宝箱の実体(インスタンス)を生成しています。
なので多数の宝箱の実体(インスタンス)の生成も簡単です。

勉強の教材にするなら『Javaデモ/Swingグラフィック「Figure、Thread」(2)』の方が圧倒的に分かり易いです。
一旦スレッドの無い状態(静止した状態)に改造すれば、オブジェクト指向の部分が明確化するでしょう。


参考

https://www.sejuku.net/blog/1177

【スッキリわかるJava入門 第3版(スッキリシリーズ)】

>「Javaのオブジェクト指向をもっと理解したい」「挫折しないか不安を感じている」という方は、一度お手に取ってみてください。

【新わかりやすいJava オブジェクト指向徹底解説】

>前半ではJavaのオブジェクト指向について詳しく丁寧に解説されており、
>ポリモーフィズムなどの難しいテーマでも理解しやすいですね。
>後半からはオブジェクト指向の応用について解説されています。

Block( Address 00000036 Identity 00000007 )


<Number>: [00000035]  <Date>: 2023/09/15 15:06:58
<Title>: URLパラメータ・デモ
<Name>: amanojaku@管理人



【syoukuzai.html】

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>食材一覧</title>
</head>
<body>
  《syoukuzai.html》<br>

  <p>食材一覧</p>

  <div>
    <form method="get" action="nyuuryoku.html">
      <!-- HTMLファイルにパラメータを渡す場合は「method="get"」にしなけらばならない -->
      <!-- 「method="get"」の場合は、「アドレス+パラメータ」の合計サイズは約2kBytの限界がある -->
      <h1>肉類</h1>
      <div>
        <label><input type="checkbox" name="肉類" value="牛薄切り肉">牛薄切り肉</label>
      </div>

      <div>
        <label><input type="checkbox" name="肉類" value="牛焼肉用">牛焼肉用</label>
      </div>

      <div>
        <label><input type="checkbox" name="肉類" value="牛ステーキ用">牛ステーキ用</label>
      </div>

      <div>
        <label><input type="checkbox" name="肉類" value="鶏もも肉">鶏もも肉</label>
      </div>

      <div>
        <label><input type="checkbox" name="肉類" value="鶏むね肉">鶏むね肉</label>
      </div>

      <div>
        <label><input type="checkbox" name="肉類" value="その他鶏肉">その他鶏肉</label>
      </div>

      <div>
        <label><input type="checkbox" name="肉類" value="挽き肉">挽き肉</label>
      </div>

      <div>
        <label><input type="checkbox" name="肉類" value="ハム・ソーセージ・ベーコン類">ハム・ソーセージ・ベーコン類</label>
      </div>

      <button type="submit">決定</button>
    </form>
  </div>
</body>
</html>


【nyuuryoku.html】

<!DOCTYPE html>
<html>
<body>
  《nyuuryoku.html》<br>
  <div id="idDsp"></div>
</body>
<script>
  wDsp = document.getElementById("idDsp");
  sUPES = location.search.substring(1);
  d1sUPEI = sUPES.split('&');
  wDsp.innerText = "";
  for (i = 0; i < d1sUPEI.length; i++) {
    sUPEI = d1sUPEI[i];
    [sUPEK, sUPEV] = sUPEI.split('=');
    sUPDK = decodeURI(sUPEK);
    sUPDV = decodeURI(sUPEV);
    console.log(`sUPDK: ${sUPDK}, sUPDV: ${sUPDV}, `)
    wDsp.innerText += sUPDK + ": " + sUPDV + "\n";
  }
</script>
</html>

Block( Address 00000035 Identity 00000035 )


<Number>: [00000034]  <Date>: 2023/09/09 02:30:04
<Title>: CSSデモ/アコーディオン・メニュー
<Name>: amanojaku@管理人



<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<!--
参考

意外と知らない!?CSSセレクタ20個のおさらい
http://weboook.blog22.fc2.com/blog-entry-268.html

!importantはもう使わない!CSSの優先順位をおさらいしよう
http://creator.aainc.co.jp/archives/4947
※↑ページ後半にCSS優先順位の表が記載されています、なおCSS優先順位が同じ場合は後のコードが優先されます。
-->
<style>
  .Accordion_Container {
    width: 97%;
    margin: 0 auto;
  }

  .Accordion_Exterior {
    width: 90%;
    margin: 0 auto;
  }

  .Accordion_LOpener {
    display: block;
    font-weight: bold;
    color: #fef;
    background: #0bb;
    margin: 0.1rem 0;
    padding: 0.2em 1em;
  }

  .Accordion_Content {
    display: none;
    border: solid thin #000;
  }

  .Accordion_ISwitch:checked+.Accordion_LOpener {
    /*CSS優先順位:21点*/
    font-weight: bold;
    color: #767;
    background: #0f7;
  }

  .AccordionEntirety_ISwitch:checked+.Accordion_LOpener {
    /*CSS優先順位:21点*/
    font-weight: bold;
    color: #767;
    background: #0f7;
  }

  .Accordion_ISwitch:checked+.Accordion_LOpener+.Accordion_Content {
    /*CSS優先順位:31点*/
    display: block;
  }

  .AccordionEntirety_ISwitch:checked+label+.Accordion_Container>.Accordion_Content {
    /*CSS優先順位:32点*/
    display: block;
  }

  .Accordion_Container>.Accordion_LOpener:hover {
    /*CSS優先順位:21点*/
    font-weight: bold;
    color: #767;
    /*#0ee #5ef #aef #bef #ede*/
    background: #0ee;
  }

  .Accordion_Container>input[type="checkbox"] {
    /*CSS優先順位:21点*/
    display: none;
  }

  .Accordion_Exterior>input[type="checkbox"] {
    /*CSS優先順位:21点*/
    display: none;
  }

</style>
<body>
  <div class="Accordion_Exterior">
    <input id="TUnit-001" type="checkbox" name="TUnit-001" class="AccordionEntirety_ISwitch">
    <label class="Accordion_LOpener" for="TUnit-001">001-Entirety</label>
    <div class="Accordion_Container">
      <input id="TUnit-001-001" type="checkbox" name="TUnit-001" class="Accordion_ISwitch">
      <label class="Accordion_LOpener" for="TUnit-001-001">001-001</label>
      <div class="Accordion_Content">
        いろはにほへと<br>
        ちりぬるをわかよたれそ<br>
        つねならむうゐのおくやま<br>
        けふこえてあさきゆめみし<br>
        ゑひもせす<br>
      </div>

      <input id="TUnit-001-002" type="checkbox" name="TUnit-001" class="Accordion_ISwitch">
      <label class="Accordion_LOpener" for="TUnit-001-002">001-002</label>
      <div class="Accordion_Content">
        ちりぬるをわかよたれそ<br>
        つねならむうゐのおくやま<br>
        けふこえてあさきゆめみし<br>
        ゑひもせす<br>
      </div>

      <input id="TUnit-001-003" type="checkbox" name="TUnit-001" class="Accordion_ISwitch">
      <label class="Accordion_LOpener" for="TUnit-001-003">001-003</label>
      <div class="Accordion_Content">
        つねならむうゐのおくやま<br>
        けふこえてあさきゆめみし<br>
        ゑひもせす<br>
      </div>
    </div>
  </div>
</body>
</html>

Block( Address 00000034 Identity 00000034 )


<Number>: [00000033]  <Date>: 2023/08/20 03:21:44
<Title>: Javaデモ/偶数・奇数
<Name>: amanojaku@管理人



public class p001 {
  public static void main(String[] args) {
    int[] a1Data = { 4, 7, 12, 17 };
    for (int i = 0; i < a1Data.length; i++) {
      String s = "";
      if (a1Data[i] % 2 == 0) {
        s = "偶数";
      } else {
        s = "奇数";
      }
      System.out.println(a1Data[i] + " " + s);
    }

    System.out.print("奇数は");
    for (int i = 0; i < a1Data.length; i++) {
      if (a1Data[i] % 2 != 0) {
        System.out.print(" " + a1Data[i]);
      }
    }
    System.out.println();

    System.out.print("偶数は");
    for (int i = 0; i < a1Data.length; i++) {
      if (a1Data[i] % 2 == 0) {
        System.out.print(" " + a1Data[i]);
      }
    }
    System.out.println();
  }
}

Block( Address 00000033 Identity 00000033 )


<Number>: [00000023]  <Date>: 2023/07/21 21:33:43
<Title>: Javaデモ/グラフ理論:クラスカル アルゴリズム
<Name>: amanojaku@管理人



// グラフ理論:クラスカル アルゴリズム
// 無向グラフの最小全域木を求める

import java.awt.Point;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

public class Main {

  static int[][] a2iPath0Matrix = {
    //A  B  C  D  E  F  G  H
    { 0, 3, 0, 4, 0, 0, 0, 0 }, // A
    { 3, 0, 2, 0, 1, 0, 0, 0 }, // B
    { 0, 2, 0, 0, 8, 12, 0, 0 }, // C
    { 4, 0, 0, 0, 11, 0, 9, 0 }, // D
    { 0, 1, 8, 11, 0, 6, 0, 7 }, // E
    { 0, 0, 12, 0, 6, 0, 0, 5 }, // F
    { 0, 0, 0, 9, 0, 0, 0, 10 }, // G
    { 0, 0, 0, 0, 7, 5, 10, 0 }, // H
  };
  static int iPathMatrixSize = a2iPath0Matrix.length;
  static int[][] a2iPath1Matrix = new int[iPathMatrixSize][iPathMatrixSize];
  static ArrayList<Point> daloWeightPosList = new ArrayList<Point>();
  static HashMap<Integer, Integer> dhmNodeAffiliatMap = new HashMap<Integer, Integer>();

  public static void main(String[] args) {
    CheckWeight(a2iPath0Matrix, daloWeightPosList);
    Point WP = null;
    do {
      WP = MinWeight(a2iPath0Matrix, daloWeightPosList);
      if (WP != null) {
        Integer NAY = dhmNodeAffiliatMap.get(WP.y);
        Integer NAX = dhmNodeAffiliatMap.get(WP.x);
        int NAU = -1; // Node Affiliat Unity
        if (NAX == null | NAY == null) {
          NAY = NAY != null ? NAY : WP.y;
          NAX = NAX != null ? NAX : WP.x;
          NAU = Math.min(NAX, NAY);
        } else if (NAX != NAY) {
          NAU = Math.min(NAX, NAY);
        }
        System.out.printf("NAU: %d,%n", NAU);
        System.out.println();
        if (0 <= NAU) {
          a2iPath1Matrix[WP.y][WP.x] = a2iPath0Matrix[WP.y][WP.x];
          System.out.println("a2iPath1Matrix");
          Display_PathMatrix(a2iPath1Matrix);
          // a2iPath0Matrix[WP.y][WP.x] = 0;
          // System.out.println("a2iPath0Matrix");
          // Display_PathMatrix(a2iPath0Matrix);
          dhmNodeAffiliatMap.put(WP.y, NAU);
          dhmNodeAffiliatMap.put(WP.x, NAU);
          for (Integer k : dhmNodeAffiliatMap.keySet()) {
            int NA = dhmNodeAffiliatMap.get(k);
            if (NAX == NA | NAY == NA) {
              dhmNodeAffiliatMap.put(k, NAU);
            }
          }
          System.out.println("dhmNodeAffiliatMap");
          Display_NodeAffiliatMap();
        }
        a2iPath0Matrix[WP.y][WP.x] = 0;
        // System.out.println("a2iPath0Matrix");
        // Display_PathMatrix(a2iPath0Matrix);
      }
    } while (WP != null);
    System.out.println("a2iPath1Matrix");
    Display_PathMatrix(a2iPath1Matrix);
    System.out.println("dhmNodeAffiliatMap");
    Display_NodeAffiliatMap();
    MirrorhMatrix(a2iPath1Matrix);
    System.out.println("a2iPath1Matrix:Mirror");
    Display_PathMatrix(a2iPath1Matrix);
  }

  static Point MinWeight(int[][] a2iPM, ArrayList<Point> daloWPL) {
    int Min = Integer.MAX_VALUE;
    int ID = -1;
    Point WP = null;
    for (int i = 0; i < daloWPL.size(); i++) {
      WP = daloWPL.get(i);
      int w = a2iPM[WP.y][WP.x];
      if (0 < w & w < Min) {
        Min = w;
        ID = i;
      }
    }
    WP = 0 <= ID ? daloWPL.remove(ID) : null;
    if (WP != null) {
      // a2iPM[WP.y][WP.x] = 0;
    }
    return WP;
  }

  static void CheckWeight(int[][] a2iPM, ArrayList<Point> daloWPL) {
    for (int y = 0; y < a2iPM.length; y++) {
      for (int x = 0; x < a2iPM[y].length; x++) {
        if (a2iPM[y][x] != a2iPM[x][y]) {
          System.out.printf("a2iPM[%d][%d]!=a2iPM[&d][%d]%n", y, x, x, y);
        }
      }
    }
    for (int y = 0; y < a2iPM.length; y++) {
      for (int x = 0; x < a2iPM[y].length; x++) {
        if (y <= x) {
          a2iPM[y][x] = 0;
        }
        if (0 < a2iPM[y][x]) {
          daloWPL.add(new Point(x, y));
        }
      }
    }
    Display_PathMatrix(a2iPM);
  }

  static void MirrorhMatrix(int[][] a2iPM) {
    for (int y = 0; y < a2iPM.length; y++) {
      for (int x = 0; x < a2iPM[y].length; x++) {
        int Max = Math.max(a2iPM[y][x], a2iPM[x][y]);
        a2iPM[y][x] = Max;
        a2iPM[x][y] = Max;
      }
    }
  }

  static void Display_PathMatrix(int[][] a2iPM) {
    for (int y = 0; y < a2iPM.length; y++) {
      for (int x = 0; x < a2iPM[y].length; x++) {
        System.out.print(a2iPM[y][x] + ", ");
      }
      System.out.println();
    }
    System.out.println();
  }

  static void Display_NodeAffiliatMap() {
    List<Integer> dlNodeAffiliatKeyList = dhmNodeAffiliatMap
      .keySet()
      .stream()
      .sorted()
      .collect(Collectors.toList());
    for (Integer k : dlNodeAffiliatKeyList) {
      int NA = dhmNodeAffiliatMap.get(k);
      System.out.printf("[%d]:%d, ", k, NA);
    }
    System.out.println();
    System.out.println();
  }
}

Block( Address 00000030 Identity 00000023 )


<Number>: [00000028]  <Date>: 2023/07/21 05:45:38
<Title>: Javaデモ/脱出アルゴリズム
<Name>: amanojaku@管理人



人間の(x、y)座標を入力
人間の表示:☆
添付画像:黄色が出口、白が通路、「赤、オレンジ」が火災。

本当の最短では無いので、本当の最短を目指すなら2手先を読だほうが良いでしょいうが、2手先の最短の判定だと1手先に障害物が有る場合も想定しなければならないので、その分 処理が複雑になる。
a3iFieldは出口より遠い方が数値が大きくなる、分かりやすく言うと数値は出口との距離と考えると分かりやすい(数学的な意味での距離では無い)、出口ごとに個々に計算している。
(水の波紋のように)角で回り込んでいる事に注意、そうしないと複雑な経路では対応できない。
波紋の数値の表示は1桁目だけの表示だが、デバッグ用ならその波紋のイメージさえわかれば良いので問題ない。

注意点としては、このデモでは斜めでも移動できるので、それが問題になる、下記の場合でも4から3に移動できる。

3□
□4

>(水の波紋のように)角で回り込んでいる事に注意、そうしないと複雑な経路では対応できない。

2番目の添付画像の情況で青の地点に人が居る場合など。
このデモでa2iMapに、実際にそのデータを入れて試してみると良いでしょう。


import java.awt.Point;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

  static int iManX = -1;
  static int iManY = -1;

  public static void main(String[] args) {
    Scanner SC = new Scanner(System.in);

    int[][] a2iMap = {
      { 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
      { 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 0 },
      { 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2 },
      { 1, 1, 2, 2, 3, 3, 2, 2, 2, 1, 1, 2, 2 },
      { 1, 2, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 2 },
      { 1, 2, 2, 2, 3, 3, 3, 1, 1, 2, 2, 2, 2 },
      { 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2, 2 },
      { 1, 1, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2 },
      { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 },
      { 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2 },
    };
    Display_Map(a2iMap);

    int iMapH = a2iMap.length;
    int iMapW = a2iMap[0].length;
    ArrayList<Point> d1aExit = new ArrayList<Point>();
    int iExitQnt = 0;
    int iExitCnt = 0;
    for (int y = 0; y < a2iMap.length; y++) {
      for (int x = 0; x < a2iMap[y].length; x++) {
        switch (a2iMap[y][x]) {
          case 0:
            d1aExit.add(new Point(x, y));
            iExitQnt++;
            break;
        }
      }
    }

    int[][] a2iLog = new int[iMapH][iMapW];
    int[][][] a3iField = new int[iExitQnt][iMapH][iMapW];
    for (int i = 0; i < a3iField.length; i++) {
      for (int y = 0; y < a3iField[i].length; y++) {
        for (int x = 0; x < a3iField[i][y].length; x++) {
          if (a2iMap[y][x] <= 1) {
            a3iField[i][y][x] = Integer.MAX_VALUE;
          } else {
            a3iField[i][y][x] = -1;
          }
        }
      }
      /* 
      System.out.printf("iExitCnt: %d, %n", i);
      Display_Field(a3iField[i]);
      */
    }

    for (iExitCnt = 0; iExitCnt < iExitQnt; iExitCnt++) {
      int dist = 0;
      ArrayList<Point> d1aRipples = new ArrayList<Point>();
      d1aRipples.add(d1aExit.get(iExitCnt));
      Point p = d1aRipples.get(0);
      a3iField[iExitCnt][p.y][p.x] = dist;
      System.out.printf("iExitCnt: %d, p: %s, %n", iExitCnt, p);
      while (0 < d1aRipples.size()) {
        // System.out.println("while (0 < d1aRipples.size())");
        ArrayList<Point> d1aRipNext = new ArrayList<Point>();
        dist++;
        for (Point rp : d1aRipples) {
          for (int j = 0; j < 9; j++) {
            int dx = j % 3 - 1;
            int dy = j / 3 - 1;
            int cx = rp.x + dx;
            int cy = rp.y + dy;
            if (0 <= cx & cx < iMapW & 0 <= cy & cy < iMapH) {
              // System.out.println("if (0<=cx<iMapW & 0<=cy<iMapH)");
              int pres = a3iField[iExitCnt][cy][cx];
              // System.out.printf("pres: %d, dist: %d, %n", pres, dist);
              if (pres > dist) {
                // System.out.println("if (pres > dist)");
                a3iField[iExitCnt][cy][cx] = dist;
                d1aRipNext.add(new Point(cx, cy));
              }
            }
          }
        }
        d1aRipples = d1aRipNext;
        /* 
        System.out.printf("iExitCnt: %d, %n", iExitCnt);
        Display_Field(a3iField[iExitCnt]);
        */
      }
      Display_Field(a3iField[iExitCnt]);
    }

    System.out.println("Input:人間の(x,y)座標");
    iManX = SC.nextInt();
    iManY = SC.nextInt();

    boolean normal = Display_Map(a2iMap);
    if (!normal) {
      System.out.println("人間を配置できない(x,y)座標が指定されました");
      System.exit(255);
    }

    escape:while (true) {
      a2iLog[iManY][iManX] = 1;
      Point mp = null;
      int min = Integer.MAX_VALUE;
      iExitCnt = -1;
      for (int k = 0; k < iExitQnt; k++) {
        // System.out.printf("k(iExitCnt): %d,%n", k);
        // System.out.printf("iManX: %d, iManY: %d, %n", iManX, iManY);
        for (int j = 0; j < 9; j++) {
          int dx = j % 3 - 1;
          int dy = j / 3 - 1;
          int cx = iManX + dx;
          int cy = iManY + dy;
          if (0 <= cx & cx < iMapW & 0 <= cy & cy < iMapH) {
            /* 
            System.out.printf(
              "cx: %d, cy: %d, a3iField[k][cy][cx]: %d, %n",
              cx,
              cy,
              a3iField[k][cy][cx]
            );
            */
            if (a2iLog[cy][cx] == 0) {
              int fd = a3iField[k][cy][cx];
              if (0 <= fd & fd < min) {
                iExitCnt = k;
                min = a3iField[k][cy][cx];
                mp = new Point(cx, cy);
              }
            }
          }
        }
      }
      iManX = mp.x;
      iManY = mp.y;
      System.out.printf("iManX: %d, iManY: %d, %n", iManX, iManY);
      System.out.printf("iExitCnt: %d, min: %d, %n", iExitCnt, min);
      Display_Field(a3iField[iExitCnt]);
      if (min == 0) {
        break;
      }
    }
  }

  static void Display_Field(int[][] field) {
    for (int y = 0; y < field.length; y++) {
      for (int x = 0; x < field[y].length; x++) {
        int cell = field[y][x];
        String sCell = "0123456789";
        char cCell = ' ';
        if (cell == Integer.MAX_VALUE) {
          cCell = '■';
        } else if (0 <= cell) {
          cCell = sCell.charAt(cell % 10);
        }
        if (iManX == x & iManY == y) {
          cCell = '☆';
        }
        System.out.print(cCell);
      }
      System.out.println();
    }
    System.out.println();
  }

  static boolean Display_Map(int[][] map) {
    boolean normal = true; // false; //
    for (int y = 0; y < map.length; y++) {
      for (int x = 0; x < map[y].length; x++) {
        char cCell = '◇';
        switch (map[y][x]) {
          case 0:
            cCell = '★';
            break;
          case 1:
            cCell = '■';
            break;
          case 2:
            cCell = ' ';
            break;
          case 3:
            cCell = '火';
            break;
        }
        if (iManX == x & iManY == y) {
          cCell = '☆';
          if (2 <= map[y][x]) {
            normal = false; // true; //
          }
        }
        System.out.print(cCell);
      }
      System.out.println();
    }
    System.out.println();
    return normal;
  }
}

Block( Address 0000002F Identity 00000028 )






ページの表示順:{ 新しい順/ 古い順}.
初期・ページの表示・位置:{ 先頭ページ/ 末尾ページ}.
1ページ内のスレッド表示数:

   
   

管理者用 Password:

  




SMT Version 8.022(+A) Release M6.
Author : amanojaku.