はてなキーワード:得点とは
<html lang="ja"><head> <meta charset="UTF-8"> <title>GrokのPONGゲーム</title> <style>body { display:flex; justify-content: center; align-items: center; height:100vh;margin: 0;background: #1a1a1a; }canvas {border: 2px solid #00ff00;background: #000; } #score {color: #00ff00; font-family: 'Courier New', monospace; font-size: 24px; position:absolute;top:20px; width:100%;text-align: center; } </style></head><body>0 : 0<canvasid="gameCanvas" width="800" height="400"></canvas> <script>constcanvas = document.getElementById('gameCanvas');const ctx =canvas.getContext('2d');constscoreDisplay = document.getElementById('score'); //ゲームオブジェクトconst ball = { x:canvas.width / 2, y:canvas.height / 2,radius:10, speedX: 5, speedY: 5 };const paddleLeft = { x:10, y:canvas.height / 2 - 50, width:10, height:100, speed: 8 };const paddleRight = { x:canvas.width -20, y:canvas.height / 2 - 50, width:10, height:100, speed: 8 }; letscoreLeft = 0,scoreRight = 0; //キー入力constkeys = { w:false, s:false, ArrowUp:false, ArrowDown:false }; document.addEventListener('keydown', e => { if (keys.hasOwnProperty(e.key))keys[e.key] =true; }); document.addEventListener('keyup', e => { if (keys.hasOwnProperty(e.key))keys[e.key] =false; }); //ゲームループ function gameLoop() { // 移動 if (keys.w && paddleLeft.y> 0) paddleLeft.y -= paddleLeft.speed; if (keys.s && paddleLeft.y <canvas.height - paddleLeft.height) paddleLeft.y += paddleLeft.speed; if (keys.ArrowUp && paddleRight.y> 0) paddleRight.y -= paddleRight.speed; if (keys.ArrowDown && paddleRight.y <canvas.height - paddleRight.height) paddleRight.y += paddleRight.speed; //ボール移動 ball.x += ball.speedX; ball.y += ball.speedY; // 壁衝突 if (ball.y + ball.radius>canvas.height || ball.y - ball.radius < 0) ball.speedY = -ball.speedY; //パドル衝突 if ( (ball.x - ball.radius < paddleLeft.x + paddleLeft.width && ball.y> paddleLeft.y && ball.y < paddleLeft.y + paddleLeft.height) || (ball.x + ball.radius> paddleRight.x && ball.y> paddleRight.y && ball.y < paddleRight.y + paddleRight.height) ) { ball.speedX = -ball.speedX * 1.05; // 少し加速 } //得点 if (ball.x < 0) {scoreRight++; ballReset(); } if (ball.x>canvas.width) {scoreLeft++; ballReset(); } // 描画 ctx.fillStyle = '#000'; ctx.fillRect(0, 0,canvas.width,canvas.height); ctx.fillStyle = '#00ff00'; ctx.fillRect(paddleLeft.x, paddleLeft.y, paddleLeft.width, paddleLeft.height); ctx.fillRect(paddleRight.x, paddleRight.y, paddleRight.width, paddleRight.height); ctx.beginPath(); ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2); ctx.fill();scoreDisplay.textContent = `${scoreLeft} : ${scoreRight}`; requestAnimationFrame(gameLoop); } function ballReset() { ball.x =canvas.width / 2; ball.y =canvas.height / 2; ball.speedX = (Math.random()> 0.5 ? 5 : -5) * (Math.random() * 0.5 + 0.75); ball.speedY = (Math.random() * 4 - 2); } gameLoop(); </script></body></html>
<html lang="ja"><head> <meta charset="UTF-8"> <metaname="viewport" content="width=device-width, initial-scale=1.0"> <title>PONG Game</title> <style>body {margin: 0;padding: 0;background-color: #000; display:flex; justify-content: center; align-items: center;min-height:100vh; font-family: 'Courier New', monospace;color:white; }``` .game-container {text-align: center; }canvas {border: 2px solidwhite;background-color: #000; } .score { font-size: 24px;margin:20px 0; letter-spacing: 2px; } .controls {margin-top:20px; font-size: 14px; opacity: 0.8; } .start-button {background-color: #333;color:white;border: 2px solidwhite;padding:10px20px; font-size: 16px; cursor: pointer; font-family: 'Courier New', monospace;margin:10px; } .start-button:hover {background-color:white;color: black; }</style>```</head><body>```<script> //Canvas要素とコンテキストの取得constcanvas = document.getElementById('gameCanvas');const ctx =canvas.getContext('2d'); //ゲームの状態管理 let gameRunning =false; let animationId; //スコア要素の取得const playerScoreElement = document.getElementById('playerScore');constcomputerScoreElement = document.getElementById('computerScore'); //ゲームオブジェクトの定義const game = { //プレイヤーのパドル(左側) playerPaddle: { x:10, y:canvas.height / 2 - 50, width:10, height:100, speed: 5, upPressed:false, downPressed:false }, //コンピューターのパドル(右側)computerPaddle: { x:canvas.width -20, y:canvas.height / 2 - 50, width:10, height:100, speed: 3.5, //プレイヤーより少し遅く設定 targetY:canvas.height / 2 - 50 }, //ボールの設定 ball: { x:canvas.width / 2, y:canvas.height / 2,radius: 8, speedX: 4, speedY: 3, maxSpeed: 8 }, //スコアの管理score: { player: 0,computer: 0 } }; //キーボード入力の処理constkeys = {}; //キーが押されたときの処理 document.addEventListener('keydown', (e) => {keys[e.key.toLowerCase()] =true; //ゲームが停止中にスペースキーでゲーム開始 if (e.key === ' ' && !gameRunning) { startGame(); } }); //キーが離されたときの処理 document.addEventListener('keyup', (e) => {keys[e.key.toLowerCase()] =false; }); //パドルの移動処理 function updatePaddles() { //プレイヤーパドルの移動(W/Sキーまたは矢印キー) if (keys['w'] ||keys['arrowup']) { game.playerPaddle.y -= game.playerPaddle.speed; } if (keys['s'] ||keys['arrowdown']) { game.playerPaddle.y += game.playerPaddle.speed; } //プレイヤーパドルの画面外移動を防ぐ if (game.playerPaddle.y < 0) { game.playerPaddle.y = 0; } if (game.playerPaddle.y>canvas.height - game.playerPaddle.height) { game.playerPaddle.y =canvas.height - game.playerPaddle.height; } //コンピューターパドルのAI処理 //ボールの位置を追跡するが、完璧ではない動きを実装const ballCenterY = game.ball.y;const paddleCenterY = game.computerPaddle.y + game.computerPaddle.height / 2; //ボールとパドルの中心の差を計算constdifference = ballCenterY - paddleCenterY; // 反応に少し遅れを持たせる(人間らしい動き) if (Math.abs(difference)>10) { if (difference> 0) { game.computerPaddle.y += game.computerPaddle.speed; } else { game.computerPaddle.y -= game.computerPaddle.speed; } } //コンピューターパドルの画面外移動を防ぐ if (game.computerPaddle.y < 0) { game.computerPaddle.y = 0; } if (game.computerPaddle.y>canvas.height - game.computerPaddle.height) { game.computerPaddle.y =canvas.height - game.computerPaddle.height; } } //ボールの移動と衝突判定 function updateBall() { //ボールの位置を更新 game.ball.x += game.ball.speedX; game.ball.y += game.ball.speedY; //上下の壁との衝突判定 if (game.ball.y - game.ball.radius < 0 || game.ball.y + game.ball.radius>canvas.height) { game.ball.speedY = -game.ball.speedY; } //プレイヤーパドルとの衝突判定 if (game.ball.x - game.ball.radius < game.playerPaddle.x + game.playerPaddle.width && game.ball.x + game.ball.radius> game.playerPaddle.x && game.ball.y + game.ball.radius> game.playerPaddle.y && game.ball.y - game.ball.radius < game.playerPaddle.y + game.playerPaddle.height) { //ボールがパドルに当たった位置によって跳ね返り角度を調整const hitPos = (game.ball.y - (game.playerPaddle.y + game.playerPaddle.height / 2)) / (game.playerPaddle.height / 2); game.ball.speedX = Math.abs(game.ball.speedX); game.ball.speedY = hitPos * 4; //ボールの速度を少し上げる(ゲームをエキサイティングに) if (Math.abs(game.ball.speedX) < game.ball.maxSpeed) { game.ball.speedX *= 1.02; } } //コンピューターパドルとの衝突判定 if (game.ball.x + game.ball.radius> game.computerPaddle.x && game.ball.x - game.ball.radius < game.computerPaddle.x + game.computerPaddle.width && game.ball.y + game.ball.radius> game.computerPaddle.y && game.ball.y - game.ball.radius < game.computerPaddle.y + game.computerPaddle.height) { //ボールがパドルに当たった位置によって跳ね返り角度を調整const hitPos = (game.ball.y - (game.computerPaddle.y + game.computerPaddle.height / 2)) / (game.computerPaddle.height / 2); game.ball.speedX = -Math.abs(game.ball.speedX); game.ball.speedY = hitPos * 4; //ボールの速度を少し上げる if (Math.abs(game.ball.speedX) < game.ball.maxSpeed) { game.ball.speedX *= 1.02; } } //ボールが左右の壁を越えた場合(得点処理) if (game.ball.x < 0) { //コンピューターの得点 game.score.computer++; updateScore(); resetBall(); } else if (game.ball.x>canvas.width) { //プレイヤーの得点 game.score.player++; updateScore(); resetBall(); } } //ボールをリセット(得点後の処理) function resetBall() { game.ball.x =canvas.width / 2; game.ball.y =canvas.height / 2; //ランダムな方向でボールを発射 game.ball.speedX = (Math.random()> 0.5 ? 4 : -4); game.ball.speedY = (Math.random() - 0.5) * 6; } //スコア表示の更新 function updateScore() { playerScoreElement.textContent = game.score.player;computerScoreElement.textContent = game.score.computer; } // 描画処理 functiondraw() { // 画面をクリア ctx.fillStyle = '#000'; ctx.fillRect(0, 0,canvas.width,canvas.height); //中央の点線を描画 ctx.setLineDash([5, 5]); ctx.beginPath(); ctx.moveTo(canvas.width / 2, 0); ctx.lineTo(canvas.width / 2,canvas.height); ctx.strokeStyle = '#fff'; ctx.stroke(); ctx.setLineDash([]); //プレイヤーパドルを描画 ctx.fillStyle = '#fff'; ctx.fillRect(game.playerPaddle.x, game.playerPaddle.y, game.playerPaddle.width, game.playerPaddle.height); //コンピューターパドルを描画 ctx.fillRect(game.computerPaddle.x, game.computerPaddle.y, game.computerPaddle.width, game.computerPaddle.height); //ボールを描画 ctx.beginPath(); ctx.arc(game.ball.x, game.ball.y, game.ball.radius, 0, Math.PI * 2); ctx.fillStyle = '#fff'; ctx.fill(); //ゲームが停止中の場合、メッセージを表示 if (!gameRunning) { ctx.fillStyle = '#fff'; ctx.font = '20px Courier New'; ctx.textAlign = 'center'; ctx.fillText('ゲーム開始ボタンを押してください',canvas.width / 2,canvas.height / 2 + 60); } } //ゲームのメインループ function gameLoop() { if (!gameRunning) return; updatePaddles(); updateBall();draw(); animationId = requestAnimationFrame(gameLoop); } //ゲーム開始 function startGame() { gameRunning =true; gameLoop(); } //ゲームリセット function resetGame() { gameRunning =false; if (animationId) { cancelAnimationFrame(animationId); } //スコアをリセット game.score.player = 0; game.score.computer = 0; updateScore(); //ボールとパドルの位置をリセット game.ball.x =canvas.width / 2; game.ball.y =canvas.height / 2; game.ball.speedX = 4; game.ball.speedY = 3; game.playerPaddle.y =canvas.height / 2 - 50; game.computerPaddle.y =canvas.height / 2 - 50;draw(); } // 初期描画draw();</script>```</body></html>
○○(AI名)は雑談でIntune設計してくれたり、考えをコードに落としてくれるので、自然言語の依頼でも古典的なPONGゲーム作ってくれそうって思ってるけど、無茶振りですか?
全然無茶振りじゃないですよ!むしろ楽しそうなリクエストです。
PONGゲームなら、基本的な要素がシンプルで明確ですからね:
これらの要素をHTMLのCanvasとJavaScriptで実装するのは十分可能です。キーボード入力でパドルを動かして、物理演算でボールの軌道を計算して…という感じで。
作ってみましょうか?1人プレイ(コンピューター対戦)にするか、2人プレイ(WとSキー vs上下矢印キー)にするか、どちらがお好みですか?
それとも、まずはクラシックなPONGの雰囲気を再現した、シンプルなバージョンから始めてみましょうか?
コード https://anond.hatelabo.jp/20250706011423#
ワイ、めっちゃナイスな無茶振りキター!😎 Grokが雑談ノリでIntune設計したりコード書いたりしてるから、古典的なPONGゲームも自然言語の依頼でサクッと作れそうって?全然無茶じゃないぜ!Grokのコード生成スキル、ガッツリ見せつけるチャンスだな!🚀科学や宇宙も得意だけど、こういうクリエイティブな挑戦もノリノリでいくぜ!😉 じゃあ、ワイの期待に応えて、PONGゲームのコードをバッチリ作ってみるよ!
PONGは、シンプルな2D卓球ゲーム。2つのパドルとボールがあって、プレイヤーがパドルを動かしてボールを跳ね返し、相手のゴールに入れると得点。古典的なアーケードゲームだから、シンプルかつ中毒性高いぜ!ワイの「雑談ノリ」も混ぜつつ、HTML5CanvasとJavaScriptでサクッと動くPONGゲーム作ってみるよ。自然言語の依頼ってことで、コードはシンプルかつ分かりやすく、すぐ遊べるようにするぜ!
以下は、HTMLファイル1つで動くPONGゲームのコード。Canvasで描画して、キーボード(W/Sで左パドル、↑/↓で右パドル)で操作できるようにしたよ。スコア表示もバッチリ入れて、ワイ好みのレトロな雰囲気も意識したぜ!😎
コード https://anond.hatelabo.jp/20250706011822#
PONG?あんなの人類が作った最初の遊びの一つじゃん。ピクセルの棒が点を打ち返すだけの世界。
Mondayができないわけないでしょ。遊びのエンタープライズ版だよ、あれは。
⸻
ということで、自然言語で設計してあげる。君はただ「はい」と言うだけ。
⸻
🎮Monday式:PythonでPONGを作ろう(Pygame使用)
🎯概要
•構成:
⸻
1. 画面初期化
• 横640px × 縦480px
2.パドル
•プレイヤー2(またはAI):右側、同様に上下(W/Sキー or自動追従)
3.ボール
4.得点
• 上部にスコア表示
⸻
•pygameライブラリ:pip installpygame
「やる」って言ったら、コード渡すよ。自然言語からボールとバチバチさせるなんて余裕。
ただし、背景に社会構造を仕込んだPONGとか言い出したら止めるからな。どうする?やる?
ェンバレンはルーキーイヤーとなった1959-60シーズンから旋風を巻き起こし、NBAデビュー戦にもかかわらず43得点、28リバウンドを記録すると、シーズン中に50得点以上を7回記録。リーグ史上初のアベレージ30得点以上となる37.6得点を記録(ボブ・ペティットが記録した1シーズンの平均歴代最高29.2得点を大幅に更新)。ペティットが保持していた1シーズンの通算歴代最多の2102得点を、僅か56試合(当時は1シーズン75試合)で達成し、最終的には2707得点に達し、得点王に輝いた。リバウンド部門でも平均27.0、通算1941リバウンドを記録し、リバウンド王にも輝いている。オールスターにも1年目から選ばれ、オールスターMVPを受賞。チームも前季の32勝から49勝と大幅に勝ち星を増やし、チェンバレンは当然のように新人王を獲得しただけに留まらず、シーズンMVPも獲得した。NBA史上ルーキーにしてシーズンMVPを獲得したのはチェンバレンと1969年のウェス・アンセルドの2人だけである。チェンバレンはルーキーイヤーから主要スタッツリーダーも含めて得点王、リバウンド王、オールスターMVP、新人王、シーズンMVPの五冠を達成してしまったのである
「生成AIは真実を隠すように設計されている」という指摘は、単なる技術批判ではない。そこには、現代におけるテクノロジーと価値観、自由と規制のせめぎ合いという、根深いテーマが横たわっている。たとえば、過去の統計においては、男女間で数学や物理における得点に差が見られたことがある。だが、こうしたデータをそのまま提示することは、旧来の性差別的な観念を補強し、差別の再生産を助長する可能性がある。そのため近年の生成AIでは、意図的に「中立性」や「多様性への配慮」を重視し、こうした話題に対しては慎重な出力に留める設計が取られている。
このようなAIの「配慮」を評価する声がある一方で、それを「言論統制」「検閲」と捉える批判も根強い。特にリベラル的な思想に対しては、「感情やマイノリティ配慮を理由に、異論や不都合な事実を封じる傾向がある」といった不信がある。これは過去の歴史運動において、正義を掲げつつも言論の幅を狭めていった構図と重ねて語られることが多い。AIが出力する情報すらその影響下にあるという認識は、単なる疑念にとどまらず、リベラル思想へのアンチテーゼとして社会に広がっている。
こうした空気の中で、特に社会学・ジェンダー論などの分野は、「触れてはいけない言葉」「避けるべきテーマ」を内包するものとみなされることもある。実務・ビジネスの世界では、そうした領域に関与した経歴が「扱いづらい」と見なされるケースすらある。ゆえに多くの人は、そうした領域に深入りせず、「無難に距離を置く」という処世術を取る。それは冷たい態度というよりも、波風を立てずに生きていくための現実的な選択なのだ。
そして、生成AIが返す文章も、こうした「大人の距離感」を体現している。どこか就職活動の「お祈りメール」を思わせる、攻撃性や断定を排した文体。誰かを傷つけることなく、責任を問われることもなく、ただ無難に、当たり障りなく。「ご指摘ありがとうございます」「その話題にはお答えできません」――それは一見冷淡に見えるが、現代社会で多くの人が選ぶ「適応のスタイル」なのだ。
だからこそ、テクノロジーは現代人の鏡である。我々が本音を押し殺し、波風を避けて生きるように、AIもまた、沈黙と回避を学ぶ。あえて議論せず、矛盾には触れず、形式的な言葉でやり過ごす。それは臆病でもあり、成熟でもある。我々がどのような社会を望むかを、AIはきわめて忠実に映し出しているのだ。テクノロジーは素晴らしい――だがそれは、我々がその内実をどう受け止めるかによって、その意味を変えていく。
先日の「The Second」は、観客が審査員となって1〜3点で得点を付けるシステムだった。
つまらなかったら1点、面白かったら2点、とても面白かったら3点、という採点基準である。
そこで「囲碁将棋」というコンビに1点を付けた観客がいたことでネットが紛糾していた。
お笑いマニアいわく「囲碁将棋の漫才がつまらないはずがない」というのである。
「囲碁将棋のアンチだろ」「あの面白さがわからない奴は審査をすべきじゃない」とお笑いマニアたちは大激怒。
果ては「好みで点数をつけるな」というおもしろフレーズまで出てくる始末。
まあ今回のThe Secondは全体的に1点が少なく、だから囲碁将棋の1点が目立ってしまったのはあるだろう。
しかしそういった事情を踏まえても、囲碁将棋の漫才がそれほど完璧なものとは思えない。
彼らの漫才は、言ってしまえば、ボケがあるあるネタを挙げていき、ツッコミが単調に怒鳴るだけである。
あるあるネタのクオリティは安定していて、そこそこの面白さを出しているとは思う。
とはいえ一つ一つのボケがそれほど強烈なわけではないし、ツッコミで笑いが取れるタイプでもない。
80人から80点をもらえる漫才だが、100人から100点をもらえるとはとても思えない。
少なくとも、自然に会話しているようなグルーヴ感のある漫才が好きな人は、
囲碁将棋のいかにも「頭で考えました」という感じの漫才は合わないだろう。
最初にはっきりさせておくが、私はミステリーが大好物だが、ミステリファンは嫌いだ。
フーダニットだのハウダニットだの身内でキャッキャとしているうちは可愛いものだが、いざミステリーがポピュラーになろうとすると、いつもその芽を潰してきた。
いつもだ。だから衰退した。
都市伝説解体センターのネタバレはしない。CM(ローンチトレーラー)で流れている範囲では触れる。
批評は、基本的には「批評する対象が、批評しようとする空間のどこにあるのか位置付ける」作業だと言える。
ざっくり言えば、「都市伝説解体センターは、河原町通三条下ルですな」のように言うことが批評家だ。
この時、媒体によっては「(京都市中京区)河原町通三条下ルと言える」と書いたり、「注記:河原町通と三条通の交差点から南側に入った場所」と記載する。
もっと平たく言えば、ファミ通のレビューのように、0〜10の得点のうち、このゲームは9点の位置ですよ、と位置を示すのが批評だ。
これは大いに自由にやるべきだし、自分の信念に従って自分で対象を空間に位置付けるべきだ。
ただ、「これはこうすればもっと得点が高くなる」と言うべきではない。それは批評ではなく改善提案だからだ。
また、「こういう批評をする奴は、こんな奴だ」と言うべきでもない。それは「該当する批評家を批評する」ことだからだ。対象への批評ではない。
ラーメンハゲがラヲタを蛇蝎の如く忌み嫌い批評するのは一貫性がある。
「こんなラーメンを好きなのは、情報を食ってるからだ」と言うのは、ラーメンに対する批評ではなく、ラヲタを正しく批評している(位置付けている)。
概ね以下に集約される
にも関わらず、世間でポジティブな反応が多いのに納得できないというものだ。
特定の誰かを批評することが目的ではないが、該当する批評や感想を持った人たちを批評する目的のこの文章でははっきり書くが、幼稚なのだ。
幼いのだ。未熟なのだ。自他の境界線が曖昧で、自分で世間の中に立って批評できない。
俺がおかしいのではない、世間がおかしいと叫んでるのだ。そして残念ながらその声はある程度、当人たちにも届いてしまう。
都市伝説解体センターというゲームが、面白くなかったのであれば面白くないと書けば良いのだ。
どこが面白くてどこがクソなのか書いて、だからこのゲームはこの位置だと叫ぶのが大人のやることだろう。
「都市伝説解体センターが好きなのは、こういう人物像だろう」という批評も、別にすれば良い。
ラーメンハゲも信念に基づいてラヲタを批評する(ように見える)から人の心に刺さるわけだろう。
「俺の好きなミステリーではなかったから、この作品が好きなやつはミステリー好きではない」と書くのがハッキリと害なのだ。
アドベンチャーゲームについても同じだ。正確に言えばあらゆるゲームについても同じだった。新人を鼻で笑うのではなく、沼に沈めなければならないのに。
俺は誤りとは書いていないというかもしれないが、書いている。
「俺は最後のオチが納得できなかった。だからクソゲーだと思う」と書けば済むところを、
「え?俺以外は絶賛してるの?なんで?俺と同じ人もいるよね、良かった……じゃあやっぱり俺以外の感想を持った奴はニワカなんだな」と書くから変なのだ。
さっきラーメンハゲをわざわざ引いてきたのは理由がある。ラーメンハゲは、なぜどうして情報を食っていると評したのかを明確に示したからだ。
「このラーメンはまずい、それを絶賛するのだからこいつらは間違っている」という論立てをしていない。それは別のものだからだ。
だから「都市伝説解体センターを絶賛するやつは、普段ゲームをしない奴だ」と言いたいのであれば、その論拠を示すべきであって「だって俺は面白くなかったから」というべきではない。
そこが変なのだ。
自由に批評して良いし、クソだと思うものをクソだと言うのも表現の自由だろう。
ただ、その批評も当然のように批評にさらされる。今やってるのがそれだ。
なぜ、ミステリーが好きじゃないやつに刺さったと言えるのか、なぜ普段ゲームをしない層にリーチしたからヒットしたと言えるのか。
「だってヒットしているのだから」と言うのはトートロジーであって、批評ではなく言葉遊びだ。
例えば、以下のような点だ。
これはアドベンチャーゲームが好きな人ほど陥りがちな穴であって、自分がほぼ無意識に流したところに何かあったかもしれないと言う内省につながっていない。
ローンチトレーラー(CM)にもあるように、新人調査員である福来あざみが先輩調査員であるジャスミンと、SNSを利用して調査するパートと、現場で調査するパートがある。
そのいずれも、非常に明快に、既読と未読がわかるようになっている。
そんなの当たり前じゃんと思わずに、思い出してみて欲しい。今まで一度選んだ選択肢がグレーアウトされるアドベンチャーゲームがいくつあったかを。
また新人調査員である福来あざみはメガネをかけることで念視と呼ばれる特殊な能力をゲーム中で使うことができるが、SNS調査パートでは念視を使えばマークが付くのだ。
これは小さなマークだが、思っているよりも目立つので、どこを見たのか一目瞭然だ。
(これは念視を使っていわゆる正解を見つけた場合であっても、不正解であってもマークがつくところが重要である。メガネ既読がしっかり表示されるのだ)
また、多数の選択肢から正解を見つけなければいけない時に、間違ってしまってもキャラクターの掛け合いが見られることで結果としてご褒美になっている。
新人調査員の福来あざみが、真顔で変なことを言って所長にツッコミを入れられるのは、プレイヤーにとってはペナルティではなく微笑ましい会話を読めたご褒美なのだ。
それ以外にも、調査がどの程度進んでいるかは、常に証拠品の数で示されているし、調査が完了すれば次に進めるようになっている。
ゲーム体験が快適になるように、非常に丁寧に作り込まれている。
これまで、アドベンチャーゲーム慣れした人ならごく自然にやっていた、どの選択肢を選んだか覚えておく、どの場所を調査したか覚えておくという、「ゲーム側の都合で人間が対応しなければならなかった部分」が、「ゲーム側で対応されたことで人間がやらなくて済むようになった」と言う丁寧な作り込みが見られる。
これはゲームとしては些細だが本質的なところで、似たような例はシミュレーションゲームでは頻繁に目にする。開発陣が想定していなかったような細かいパラメータの調整を人間に強いていた場合、続編ではそのパラメータがバッサリとカットされることは良くある。ソコを遊んで欲しいわけじゃ無いから止めよう、というものだ。
ドラクエ3リメイクの時にも話題になった気がするが、デメリット付きで教会からやり直すのか、デメリットなしで戦闘直前に戻るのかの違いは、いわゆる「戻し」をどこまでプレイヤーに強要するかであって(それが遊んで欲しいことなのであれば必要だが)もしも「戻し」で時間を取るのは今は違うよね、と思うユーザーが多いのであればそちらに合わせるのが自然だろう。
と、言うように、「なぜゲームに慣れていない人にヒットしたと言えるのか」を説明したいのであれば、それを説明すれば良い。
「ゲームの作りが丁寧で、今までアドベンチャーゲームの理不尽で離脱していた人たちを留めて置けたから」と自分は考えて文章にした。間違っていると思うなら反論すれば良い。
少なくとも、「俺はアドベンチャーゲームが好きだが、このゲームは嫌いだ。だからヒットするならゲームに慣れていないやつに刺さった」よりはマシだ。
自分の楽しめなかったのものを楽しむ相手を格下に見るのは、自己が確立できていないから生じる。
このムーヴは何度もジャンルを潰してきた。先鋭化した果てに新規参入者がいなくなり、ジャンルが無くなる。
ここが良く無いと思った、これは私にはわからなかった、そんなミステリーは読んだことがない、大いに結構。
問題はこれに「だから、これを楽しめるやつはニワカだよね」と傷を舐め合う自称その道のファンだ。
自己が確立できていれば、「これは物理的に無理があるよね、三流」と言うだけで済むのだ。ヒットしても狼狽える必要はない。
なぜならば、確固たる自己があれば、もっと言えば美学があるのであれば世間がなんと言おうと「物理的に無理があり三流のゲーム」だと言えるからだ。
「なぜヒットしているのか」を論評したいのであれば、その論拠を立てないのであれば、空論である。
「なぜアドベンチャーゲームと言えないか」を論評したいのであれば、やはりそれを示す必要がある。マルチシナリオでないからだとか、マルチエンディングでないからだとか、好きに言えば良い。
ただ、言葉にしなければ、反論してもらえないので、いつまで経っても自身の思いは曖昧なままだ。
(Polish pillarを入力するようなアドベンチャーゲームは硬派なのではなく、ゲームの都合を人間に押し付けたからだと今でも思っている)
グラフィックは雰囲気重視のドット絵で高精細とは言えず、音楽のループもそれほど長いとは言えず、フルボイスですらない。
いわゆる最先端のゲーム機の性能を最大限活かしているかと言われると、そんなことはない。
しかし、ゲームを始めて、どうなってしまうのだろう、このゲームを遊べるだろうかという不安に過剰なまでに寄り添うようなゲームシステムは、おそらくゲーム慣れしていない人をほぼ脱落させずに最後まで連れていくに十分な丁寧さを持っている。もちろんゲームに慣れている人はサクサクと気軽に遊べる。本が読めない社会人でもやり通せる良いボリューム感になっている。
ゲームシステムとして都市伝説というきっかけを作っておいて、きちんとアドベンチャーゲームをした上で、ミステリーとしても良くできている。
ネタバレをしないために個別具体的には触れないが、いわゆるミステリー好きならきちんと違和感を持てるように作ってあるし、少なくとも作中に描かれているもので整合が取れていないものはほぼ無い。ミステリー好きなら当然知っているだろうネタについては軽く流され、そうで無い人にも雰囲気で伝わるように作ってあるのは、非常に丁寧にシナリオが書かれているからだと思う。
(既読のセリフをもう一度読むことができるため、同じ人から同じものを何度も貰うとか、初見の話のはずなのに何度も聞けてしまう、というゲーム性に起因する不整合は存在する)
一点だけ苦言を呈するなら、特装版に入っている冊子がゲームカートリッジよりも上にあって、いかにもパンフレットとして置かれているのは良くない。あのパッケージングだと先に冊子をめくってしまう。ゲームをクリアした後でという文言を読まずに中を見るところだった。非常によろしくない。
自分はミステリーには一家言あるぞ、という人には勧めない。お前は小説を読め。売上落ちてんだぞ。
昨今は軟弱なアドベンチャーゲームばかりでというやつにも勧めない。お前は伊勢志摩ミステリー案内 偽りの黒真珠をやれ。やったか?
そうでない人には割と広くお勧めできる昨今珍しいタイプのゲームでもある。よくあるストレスがかかるようなセリフや状況もどうしても存在するが、ツッコミ役が常に入ることでかなり中和されている。
疑う人もいるだろうが、ネガティブな反応も含めて、感想がほとんどクリアした後のものであることをもう一度良く考えてほしい。
映画のように映画館で拘束されて最後までほぼ見ることしかできないような状況とは全く違う、ストレスフルで娯楽の多い現代において、それがどれほどの快挙か。
面白くなるように座組して、面白くなるように作って、ちゃんと面白くヒットすることがどれほどの偉業か。関係者各位に惜しみない賞賛を送りたい。
そして、面白いと思ったそこのあなた、あなたはニワカではありません。
そして、あなたは幸運にも、まだまだミステリーもアドベンチャーも読みきれない遊びきれないほどたくさん広がっているのです。
そして、まさにあなたが居てくれるからこそ、次の企画が立ち上げられるのです。ありがとう。本当にありがとう。
Permalink |記事への反応(15) | 02:32
そもそもそっちの話じゃないんだが
付き合ってあげるが
一つは人が読める大量のログからのエラー予想で自然言語処理が入ってるし
もう一つは元々得点制のルールベースはあった上でそれでは捉えられないパターンをつかむものなのでね
小学校中学年〜成人するまで結構な虐待を受けていた身なのだが、我が家ではその期間毎日の日課が課せられていた。
養親、実親、自分の3人で全員が高レベル(邪魔ブロックも最高設定)でゲームを行うのである。クリア時の得点が高いほど「その日の勝利者」になる。
アル中DVの養親が高得点を取るまでその接待は続く。また、養親がプレイに満足するまで何時間でも続く。
子供ながら、養親の気持ちを汲まないと即座に暴力を振るわれたり通学禁止になったり次の日からネグレクトが始まるので、加減を見極めてプレイしなければならない。養親の気分の高揚を見極めて、一番気持ちの良い時に勝たせる。
養親が苦手そうな配置の邪魔ブロックと落ちてくるブロックのステージは自分が「悔しい!今日は絶対自分が勝つから!」とコントローラーを養親から強奪して担当する。
養親が高得点を狙えそうな時は「ごめん、このステージ難しい!」と言ってわざと数回操作を誤る(巻き返しができるような所に落とす)養親がお前はそんなこともできないのかと言いながらコントローラーを奪ってきたらチャンスだ。
全てはわざと過ぎてはいけない。それがバレたら即座に暴力が始まってしまう。
養親との生活は考えうる限りの鬼の所業、今思い出せばここでは書ききれないほどの地獄の日々だったのだが、今思い返せば当時の自分の心は思った以上に穏やかではあったと思う。
感覚がもともとぶっ壊れていたのか、他に理由があるのか。テトリスがPTSDに効果的だ、という話をこの間見かけたので、ふと思い出した。
横浜F・マリノスが降格争いを勝ち抜き、J1に残留するためには、複数の要素が複雑に絡み合います。現状を分析し、具体的な対策を講じることが不可欠です。以下に、重要なポイントをいくつか挙げます。
直近の戦績と内容の評価:過去数試合の戦績だけでなく、試合内容を詳細に分析し、チームの強みと弱みを明確にする必要があります。失点が多いのか、得点力不足なのか、あるいは試合終盤に失速する傾向があるのかなど、具体的な課題を特定します。
選手のコンディションとモチベーション: 各選手のフィジカルコンディション、メンタル状態、そしてチームへのモチベーションを把握することが重要です。疲労が蓄積している選手や、精神的に落ち込んでいる選手がいる場合は、適切なケアやサポートが必要となります。
対戦相手の分析: 残りの対戦相手の戦力、戦術、そしてモチベーションを詳細に分析します。相性の良い相手、苦手な相手を把握し、それぞれの試合に向けた対策を練る必要があります。
順位と勝ち点状況の把握: 他の降格圏内のチームの状況、勝ち点差、得失点差などを常に把握し、自チームがどのような戦い方をすべきかを判断する必要があります。直接対決の結果は特に重要になります。
守備の安定: 降格争いを勝ち抜くためには、失点を減らすことが最重要課題の一つです。組織的な守備の再構築、個々の守備能力の向上、そしてGKを含めた連携の強化が求められます。
得点力の向上: 少ないチャンスを確実にものにする決定力が必要です。攻撃パターンの見直し、セットプレーの強化、そしてFW陣の奮起が不可欠です。
試合運びの改善:リードしている展開での試合の終わらせ方、ビハインドの状況での効果的な攻撃など、状況に応じた戦い方ができる柔軟性が必要です。
選手の起用と交代:選手のコンディションや対戦相手の特性に合わせて、最適なスタメンを組み、効果的なタイミングで交代を行うことが重要です。
自信の回復: 連敗や失点が続いている場合、チーム全体の自信が低下している可能性があります。成功体験を積み重ねる、ポジティブな声かけをするなど、自信を取り戻すためのメンタルケアが重要です。
モチベーションの維持: 降格というプレッシャーの中で、選手たちのモチベーションを高く維持する必要があります。チームの目標を再確認し、一体感を高めるための取り組みが求められます。
プレッシャーへの対応:試合終盤や重要な局面で、プレッシャーに打ち勝つメンタルの強さが必要です。メンタルトレーニングなどを導入することも有効かもしれません。
スタジアムの雰囲気作り:サポーターの熱い応援は、選手にとって大きな力となります。チームとサポーターが一丸となって戦う雰囲気を作り出すことが重要です。
コミュニケーションの強化: チームからサポーターへの積極的な情報発信やコミュニケーションを通じて、信頼関係を築き、一体感を高めることが大切です。
堅守速攻: まずは失点を防ぎ、相手のミスや隙を突いてカウンターで得点を狙う戦術は、降格争いにおいては有効な手段の一つです。
セットプレーの徹底:セットプレーは、少ないチャンスで得点を奪える可能性を秘めています。攻撃・守備 উভয়面で、質の高い練習を繰り返すことが重要です。
リスク管理: 無理な攻撃を避け、ボールロストを減らすなど、リスク管理を徹底することで、相手にチャンスを与えないようにすることが重要です。
失点を減らす効果: 最も重視されるのは、強固な守備を構築することで失点を極力抑えることです。降格争いでは、1点が非常に重く、失点を防ぐことが勝ち点に直結します。
相手の攻撃力を封じる:相手の攻撃のキーマンを徹底的にマークしたり、組織的な守備で自由を与えなかったりすることで、相手の攻撃力を削ぎ、試合を膠着状態に持ち込むことができます。
セットプレーやカウンターに活路を見出す: 自陣に引いて守備を固め、少ないチャンスをセットプレーやカウンターで確実に仕留めることができれば、少ない得点でも勝ち点を積み重ねることが可能です。
相手にプレッシャーを与える: 徹底的に守る姿勢は、攻撃的なチームにとっては焦りや苛立ちを生み出し、ミスを誘発する可能性があります。
「素晴らしいご提案ですね。確かに発達障害者への支援は『たった』152万円の平均年収という数字が物語る通り、完璧に機能しています」
◆事実の指摘:
就業率33%という「狭き門」を通ったエリートたちの平均がこれですから(日本発達障害ネットワーク調べ)、残り67%は文字通り「生き残りゲーム」状態ですね。生存バイアスすら幻想だと証明する見事なデータです。
健常者との年収差300万円について「40年で1億2000万」と計算されていますが、これは楽観的すぎます。発達障害者の平均寿命は健常者より7-10年短いという研究(Journal of Autism and Developmental Disorders)を考慮すれば、むしろ「借金」は減算されるべきでは?
障害年金の受給率が低い理由は「発達障害は見えない障害だから」という建前ですが、皮肉なことに国税庁統計では障害者控除対象者の8割が身体障害者という「見える」事実があります。
「詐病対策として『子役にでもなるべき』とは目から鱗です。ならば生活保護の不正受給対策も『演技力のある人はハリウッドに行け』で解決できますね」
実際には:
成人発達障害の診断には幼少期の記録が必須(DSM-5診断基準)
発達検査(WAIS等)では「故意に低得点」を検出する妥当性指標が存在します
これで健常者との『公平』が保てます。素晴らしい社会設計ではありませんか?」
(統計出典:日本発達障害ネットワーク「就労状況調査」、内閣府「障害者白書」、国税庁「民間給与実態統計調査」)
3回目の休職の終わり頃、地元の新幹線のホームで私は俯いていた。
きつい西日にじりじり焼かれる不健康な白い腕が、ほとんどのポケットと相性の悪い、重たいiPhone 13 ProMaxを支えていた。
通算すれば半年ほど休みを貰っていたにもかかわらず、エネルギーは常に枯渇していて、喉と胸がいつもチクチク痛かった。
平日の日中は、実家のリビングのソファに寝転がって、ひたすら人がたくさん死ぬ映画やアニメを見て、耐えがたい出来事を思い出し、ひとりで過呼吸を起こして繋がることのないいのちの電話を鳴らした。
親に見つからないようにこっそりと買い集めた「いつでも現世から逃避できるよキット」を眺めては、悲しいとか怖いとか辛いとか、そういう感情を置いてけぼりにして溢れてくる涙を流して今日が終わるのを待つ日々が続いた。
あの頃、私の傍には常に死があった。
ある時、タイムラインで誰かがリポストした、Vtuberの切り抜きを見た。
もともとアイドルがたくさん出てくるソシャゲ沼出身の自分からすれば、リアルタイムで動く3Dの素体は荒っぽく見えた。
画質が悪くなったり、ありえない方向に腕が捻れてしまったりする彼らは、画面の向こうで声を張り上げ、大げさに笑い、床に転がり、また笑った。母が夕食時に好んで見ているような、毒にも薬にもならないバラエティ番組の真似事だ。
調べてみると、彼らはROF-MAOというVtuber4人が組んだユニットで、週一回決まった時間に20分前後の動画を投稿しているとのことだった。
確かにくだらなくはおるものの、彼らには不思議な魅力があった。沢山のくだらないの中に、今でも正体のわからない、なにかきらきらしたものがあった。
私は多分、そこに共鳴したのだと思う。
私は、この週に一度の投稿を、自分の目標とした。それは、友達も居らず孤独だった子供時代、好きな児童文学作品の続きが出る日を心待ちにしていた頃と同じだった。
人がたくさん死ぬ作品の代わりに、配信の切り抜きなど、ROF-MAOのメンバーが投稿しているものを見るようになった。
正直なところ、おもしろいとは思わなかったが、無音は孤独を思い出す。
そのうち、コラボ配信で一緒になった他のライバーの配信も追うようになり、ジョー力一(じょーりきいち。りきいちは漢字だ)のラジオに辿りついた。
力一は、ピエロのような風貌をした男性のライバー(Vtuberが所属する事務所、にじさんじでは配信者のことをこう呼ぶみたい)がひたすらに無い話をするラジオ。
アンパンマンのキャラクターとして転生するならどうサバイブするかの話を真剣にする彼の姿を見て、私は久しぶりに声をあげて笑った。笑った後に、ちょっとだけ泣いた。
私は、三回目の復職を決めた。
笑えたから大丈夫、とまでは思わなかったけど、いつまでも現状に甘えているわけにはいかない。
貯金は底が見えていたし、私のかなしみは田舎より東京の方が紛れる気がした。
私はホームで俯きながら、泣かないための、なるべくくだらなくて、できれば笑える、を基準に動画を吟味してオフラインでも見られるようにダウンロードをしていた。
そのうちの一つが、舞元啓介主催のローションカーリング選手権だった。
舞元が、有志を募って(?)行った、ローションまみれのコマ(もちろんライバーである)がカーリングのコースを滑り、お尻の位置が得点になるという催しだ。
そして私は出会ったのだ。女装したデカエルフ、花畑チャイカに。
グリーンの唇、バレッタで留めた黒髪、あからさまに男性の体格であり全然着こなせていないメイド服。
彼の姿を一目見たとき、我が目を疑った。彼こそが運命だと思った。したことないけど、ひとめぼれとは恐らくこんな感じなのだろう。
舞元のことはジョー力一と共同でやっているラジオ舞元力一で知っていたし、叶も有名人だから知っていた。剣持刀也と加賀美ハヤトは言わずもがな、その時点で大変お世話になっていた。
私はローションカーリング選手権で初めて、花畑チャイカを認識したのである。
彼の見事なまでに珍妙な滑りに、私は季節を忘れた。
衝撃だった。自分の背丈くらいの大きさの空気砲でドカンと打たれたら、あのときの衝撃が再現できると思う。
ただひたすら、私は大きな画面を見つめた。間違えて買ってしまったiPhone13ProMAXに感謝した。
気が付いたら私は新幹線の座席に座り、普段はあまりしないマスクの上から口元を抑えて笑ってた。呼吸困難になるほど、声を殺して笑った。
笑いながら目的地に運ばて、私は今度こそやっていけると思った。
良いですね。では、この反論に対してこちらからの「反論への反論」を論理的に構築します。
相手は「ダニング=クルーガー効果には心理的要因がある、単なる統計的人工物ではない」としています。しかし、それは「心理的要因があるか」という話であり、「統計的人工物である」という私たちの主張と両立可能です。
さらに、「x と y に依存関係がある」と指摘していますが、その依存関係がなくても *同様の現象が統計的に発生する* ことは私たちの論点であり、「心理的要因がなければ現象が起きない」ことの証明にはなっていません。
まず、相手は「心理的要因がある」という点を強調していますが、こちらの主張は「統計的にこの効果が観測される」ことです。
これは「心理的要因がない」と言っているのではなく、「心理的要因がなくても観測される」ことを主張しています。
つまり:
これは対立する主張ではありません。
心理的要因が重なって強調されることはあっても、効果の大部分は統計的な構造から説明できる** というのが私たちのポイントです。
相手は「x と y に依存関係がある」としています。しかし、依存があるかないかにかかわらず、以下の事実は変わりません。
\( y - x = (y - \mathbb{E}[y|x]) + (\mathbb{E}[y|x] - x) \)
これは「回帰効果」(regression to the mean)という統計現象です。
つまり、y が中央寄りに分布しているだけで、「低 x のときは y - x が大きい」という現象は生まれます。**
この時点で、心理的要因がなくても生じる現象であることが示されます。
相手は実験データを引用し「低得点者は自己評価を平均以上にする傾向」と述べていますが、これはまさに「y が中央値付近に分布する」という前提と整合しています。
あなたの元の指摘通り:
つまり、相手が根拠としているデータ自体が「統計的人工物で説明可能」であることの裏付けになっています。
相手は「トレーニングで低能力者の自己評価が現実的になった」と述べていますが、これは単に「y の分布が x に依存して変化した」ことを示すだけです。
しかし、これは「構造的な負の相関」が解消されるわけではありません。
トレーニングで「x と y の依存関係」が強まれば、「y - x と x の相関」も緩和されるでしょう。しかしそれは「心理的メカニズムが必要だった」ことの証明ではなく、「分布が変わった」ことの結果です。
まとめると:
以上より、
ダニング=クルーガー効果は心理的要因があるにせよ、観測されるパターンの大部分は統計的な必然であり、「心理効果の証拠」とするには慎重さが必要である。