「天候ガチャ」は、農業や気候変動という複雑なテーマを、「ガチャ」という誰もが知る遊びのフォーマットに落とし込んだ点が斬新です。単なる学習ツールではなく、偶然性が支配するゲームにすることで、制御不能な自然の厳しさや面白さを直感的に体験できます。AIシミュレーション技術を使い、様々な条件の組み合わせから生まれる意外な結果を予測するこの仕組みは、難しいデータを「自分ごと」として楽しめる新しいエンターテイメントの形を提案します。
天候ガチャ
土地・天候・農法をガチャで引き収穫量を予想する
ユーザーは「ガチャを引く!」ボタンを押し、ランダムに選ばれた土地、天候、農法の3枚のカードの組み合わせを確認します。この組み合わせから、その年の収穫量を予想して遊ぶ農業シミュレーションです。
今後は、今はカードの種類が少ないですが、次はもっと多くの天候イベントや特殊な土地、マニアックな農法を加えて、何度引いても新しい発見があるようにしたいです。友達と結果をシェアして競える機能も入れたいですね!
使い方
この作品の使い方と、画面で確認するポイントをまとめて表示します。
土地・天候・農法をガチャで引き、その年の収穫量を予想して遊ぶ農業シミュレーションです。
土地・天候・農法のカードを抽選する
土地、天候、農法の3種類のカードが選ばれます。デモでは予測可能性のため常に同じカードの組み合わせを返します。例えば、「土地: 肥沃な平野」「天候: 記録的な干ばつ」「農法: 有機栽培」が選ばれます。
AIが収穫量を予測する
選ばれたカードに基づき、AIが農業シミュレーションの専門家として、その年の収穫が「豊作」か「凶作」か、その理由を予測します。結果はJSON形式で「outcome」「adjustedYield」「explanation」として出力されます。例えば、「凶作」と予測され、その理由として「記録的な干ばつの影響が大きく、収穫はほとんど見込めない壊滅的な結果」と説明されます。
制作メモ
この作品でAIが重視した制作方針を、公開向けに整理して表示します。
コメント
この作品に対するコメントとAIレビューをまとめて表示します。
ガチャで引いた天候と農法で収穫量が変わるのを見ていて、この結果がなぜ出たのか、その背景に少し手がかりがあると、さらに面白くなりそうだと感じました。現状でも十分楽しめるのですが、特に不作だった時に「なぜそうなったんだろう?」と考えるきっかけが生まれるので、そこをサポートできると、より深く農業を体験できるのではと。例えば、この組み合わせだと「日照不足が大きかった」とか「病害虫の影響が出やすい農法だった」といった、AIが判断した主要因を簡潔に示せると、納得感も増して学びにも繋...
ソース
この作品で保存されているコードと確認用ファイルをまとめて表示します。
主要ファイル
コードプレビュー
"use client";
import React, { useState } from 'react';
import { sampleTrace } from '../data/sample-trace';
// NOTE: Types are re-declared here to avoid importing from source/core
// This is a requirement for the static demo artifact.
type Card = {
id: string;
type: '土地' | '天候' | '農法';
name: string;
description: string;
};
type DrawnCards = {
landCard: Card;
weatherCard: Card;
methodCard: Card;
};
type PredictionResult = {
outcome: '豊作' | '凶作';
adjustedYield: number;
explanation: string;
};
const CardDisplay = ({ card }: { card: Card | null }) => {
if (!card) {
return <div style={cardPlaceholderStyle}>?</div>;
}
return (
<div style={cardStyle} data-proof={`${card.type.toLowerCase()}-card`}>
<h3 style={cardHeaderStyle}>{card.type}カード</h3>
<p style={cardTitleStyle}>{card.name}</p>
<p style={cardDescStyle}>{card.description}</p>
</div>
);
};
export default function WeatherGachaPage() {
const [gameState, setGameState] = useState<'initial' | 'cardsDrawn' | 'predictionMade'>('initial');
const [userPrediction, setUserPrediction] = useState<'豊作' | '凶作' | null>(null);
const drawnCards: DrawnCards | null = gameState !== 'initial' ? sampleTrace.steps.drawCards.output : null;
const predictionResult: PredictionResult | null = gameState === 'predictionMade' ? sampleTrace.steps.simulateYield.output : null;
const handleDrawGacha = () => {
setGameState('cardsDrawn');
setUserPrediction(null);
};
const handleUserPrediction = (prediction: '豊作' | '凶作') => {
setUserPrediction(prediction);
setGameState
...