TRPGまとめ読んでたら作りたくなってきた
なおJSは実務未経験
テキストRPGをHTMLとJSで作ってみようと思うんだが
1名前は開発中のものです。
2020/07/09(木) 18:10:53.88ID:C2sLSK4a2名前は開発中のものです。
2020/07/09(木) 18:14:37.90ID:C2sLSK4a プレイヤーの変数は名前とHPと攻撃力
配列に戦闘とイベントをランダムで入れてその配列を進めていく
配列に戦闘とイベントをランダムで入れてその配列を進めていく
3名前は開発中のものです。
2020/07/09(木) 18:26:05.78ID:C2sLSK4a とりあえずver0.01作った
4名前は開発中のものです。
2020/07/09(木) 18:27:03.38ID:C2sLSK4a <ぼでぃ>
<スパン>HP:</スパン><スパン id="HP"></スパン>
<スパン>攻撃力:</スパン><スパン id="ATTACK"></スパン>
<スパン>フロア:</スパン><スパン id="FLOOR"></スパン>
<スクリプト>
let HP = 10;
let ATTACK = 1;
let FLOOR = 0;
let PROGRESS=[];
const status = () =>{
document.querySelector("#HP").textContent = HP;
document.querySelector("#ATTACK").textContent = ATTACK;
document.querySelector("#FLOOR").textContent = FLOOR + 1;
}
status();
</スクリプト>
</ぼでぃ>
<スパン>HP:</スパン><スパン id="HP"></スパン>
<スパン>攻撃力:</スパン><スパン id="ATTACK"></スパン>
<スパン>フロア:</スパン><スパン id="FLOOR"></スパン>
<スクリプト>
let HP = 10;
let ATTACK = 1;
let FLOOR = 0;
let PROGRESS=[];
const status = () =>{
document.querySelector("#HP").textContent = HP;
document.querySelector("#ATTACK").textContent = ATTACK;
document.querySelector("#FLOOR").textContent = FLOOR + 1;
}
status();
</スクリプト>
</ぼでぃ>
5名前は開発中のものです。
2020/07/09(木) 18:31:55.39ID:C2sLSK4a 戦闘シーケンスどうやって作るか
とりあえずモンスターのHPと攻撃力設定しておく
交互に攻撃してHPゼロになったら戦闘シーケンス終了
装備とかクリティカルヒットとか回避はあとあと考えるか
攻撃はとりあえずプレイヤー先攻がデフォ
とりあえずモンスターのHPと攻撃力設定しておく
交互に攻撃してHPゼロになったら戦闘シーケンス終了
装備とかクリティカルヒットとか回避はあとあと考えるか
攻撃はとりあえずプレイヤー先攻がデフォ
6名前は開発中のものです。
2020/07/09(木) 19:08:28.94ID:C2sLSK4a const indicate = (text) =>{ document.querySelector("#INDICATE").innerText += text+"\n" }
let PLAYER=[NAME,HP,AP];
let MONSTERS = [["ゴブリン",3,1]];
const getAnyMonster = (MONSTERS) =>{ return MONSTERS[0] }
const battle = (PLAYER,MONSTER) =>{
const attack = () =>{
let PLAYER_HP = PLAYER[1];
const PLAYER_AP = PLAYER[2];
let MONSTER_HP = MONSTER[1];
const MONSTER_AP = MONSTER[2];
while (
Math.sign(PLAYER_HP) === 1 &&
Math.sign(MONSTER_HP) === 1
) {
console.table(PLAYER_HP,PLAYER_AP,MONSTER_HP,MONSTER_AP)
PLAYER_HP = PLAYER_HP - MONSTER_AP;
indicate(`${PLAYER[0]}のHP`+PLAYER_HP);
MONSTER_HP = MONSTER_HP - PLAYER_AP;
indicate(`${MONSTER[0]}のHP`+MONSTER_HP);
}
indicate(`戦闘は終了した`);
}
attack();
}
battle(PLAYER,getAnyMonster(MONSTERS));
let PLAYER=[NAME,HP,AP];
let MONSTERS = [["ゴブリン",3,1]];
const getAnyMonster = (MONSTERS) =>{ return MONSTERS[0] }
const battle = (PLAYER,MONSTER) =>{
const attack = () =>{
let PLAYER_HP = PLAYER[1];
const PLAYER_AP = PLAYER[2];
let MONSTER_HP = MONSTER[1];
const MONSTER_AP = MONSTER[2];
while (
Math.sign(PLAYER_HP) === 1 &&
Math.sign(MONSTER_HP) === 1
) {
console.table(PLAYER_HP,PLAYER_AP,MONSTER_HP,MONSTER_AP)
PLAYER_HP = PLAYER_HP - MONSTER_AP;
indicate(`${PLAYER[0]}のHP`+PLAYER_HP);
MONSTER_HP = MONSTER_HP - PLAYER_AP;
indicate(`${MONSTER[0]}のHP`+MONSTER_HP);
}
indicate(`戦闘は終了した`);
}
attack();
}
battle(PLAYER,getAnyMonster(MONSTERS));
7名前は開発中のものです。
2020/07/09(木) 19:23:27.12ID:C2sLSK4a8名前は開発中のものです。
2020/07/09(木) 19:24:09.77ID:C2sLSK4a でモンスターの配列をディープコピー
let MONSTERS = [["ゴブリン",3,1]];
const getAnyMonster = (MONSTERS) =>{
const EntityMONSTER = R.clone(MONSTERS);
return EntityMONSTER[0];
}
let MONSTERS = [["ゴブリン",3,1]];
const getAnyMonster = (MONSTERS) =>{
const EntityMONSTER = R.clone(MONSTERS);
return EntityMONSTER[0];
}
9名前は開発中のものです。
2020/07/09(木) 19:26:28.62ID:C2sLSK4a 戦闘を何度も繰り返したいときはこんな感じ?
const battle = (PLAYER,MONSTER) =>{
const attack = () =>{
while (
Math.sign(PLAYER[1]) === 1 &&
Math.sign(MONSTER[1]) === 1
) {
console.table(PLAYER[1],PLAYER[2],MONSTER[1],MONSTER[2])
PLAYER[1] = PLAYER[1] - MONSTER[2];
indicate(`${PLAYER[0]}のHP`+PLAYER[1]);
MONSTER[1] = MONSTER[1] - PLAYER[2];
indicate(`${MONSTER[0]}のHP`+MONSTER[1]);
}
indicate(`戦闘は終了した`);
}
attack();
}
PROGRESS=[battle, battle, battle, battle, battle, battle, battle];
PROGRESS.forEach(SEQUENCE=>{
SEQUENCE(PLAYER,getAnyMonster(MONSTERS));
})
const battle = (PLAYER,MONSTER) =>{
const attack = () =>{
while (
Math.sign(PLAYER[1]) === 1 &&
Math.sign(MONSTER[1]) === 1
) {
console.table(PLAYER[1],PLAYER[2],MONSTER[1],MONSTER[2])
PLAYER[1] = PLAYER[1] - MONSTER[2];
indicate(`${PLAYER[0]}のHP`+PLAYER[1]);
MONSTER[1] = MONSTER[1] - PLAYER[2];
indicate(`${MONSTER[0]}のHP`+MONSTER[1]);
}
indicate(`戦闘は終了した`);
}
attack();
}
PROGRESS=[battle, battle, battle, battle, battle, battle, battle];
PROGRESS.forEach(SEQUENCE=>{
SEQUENCE(PLAYER,getAnyMonster(MONSTERS));
})
10名前は開発中のものです。
2020/07/09(木) 19:27:00.30ID:C2sLSK4a データ構造はこんなもん
let NAME = "Hiroyuki";
let HP = 11;
let AP = 2;
let FLOOR = 0;
let PROGRESS=[];
let NAME = "Hiroyuki";
let HP = 11;
let AP = 2;
let FLOOR = 0;
let PROGRESS=[];
11名前は開発中のものです。
2020/07/09(木) 19:35:48.27ID:C2sLSK4a モンスター複数にしてランダムでモンスター出るようにした
let PLAYER=[NAME,HP,AP];
let MONSTERS = [["ゴブリン",3,1],["骸骨剣士",5,2],["ドワーフ",6,1]];
const shuffleArray = array => {
for (let i = array.length - 1; i > 0; i--) {
let r = Math.floor(Math.random() * (i + 1));
let tmp = array[i];
array[i] = array[r];
array[r] = tmp;
}
return array
}
const getAnyMonster = (MONSTERS) =>{
const EntityMONSTER = R.clone(MONSTERS);
return shuffleArray(EntityMONSTER)[0];
}
let PLAYER=[NAME,HP,AP];
let MONSTERS = [["ゴブリン",3,1],["骸骨剣士",5,2],["ドワーフ",6,1]];
const shuffleArray = array => {
for (let i = array.length - 1; i > 0; i--) {
let r = Math.floor(Math.random() * (i + 1));
let tmp = array[i];
array[i] = array[r];
array[r] = tmp;
}
return array
}
const getAnyMonster = (MONSTERS) =>{
const EntityMONSTER = R.clone(MONSTERS);
return shuffleArray(EntityMONSTER)[0];
}
12名前は開発中のものです。
2020/07/09(木) 19:41:06.61ID:C2sLSK4a モンスター複数っていうかモンスターの種類が複数で出現は1体ずつ
あと死亡状態確認の関数も定義した
const deathCheck = () =>{ if(Math.sign(PLAYER[1]) !== 1){ indicate(`${PLAYER[0]}は死亡した`) } }
あと死亡状態確認の関数も定義した
const deathCheck = () =>{ if(Math.sign(PLAYER[1]) !== 1){ indicate(`${PLAYER[0]}は死亡した`) } }
13名前は開発中のものです。
2020/07/09(木) 19:52:24.97ID:C2sLSK4a 匿名でhtmlファイルの共有簡単にできるやつなんか無いのか
とりあえず検索してすぐ出たやつで上のこれ共有しとく
ただのHTMLとJSだからセットアップ無しでそのまま動く
https://volafile.org/r/1bq7592g8
とりあえず検索してすぐ出たやつで上のこれ共有しとく
ただのHTMLとJSだからセットアップ無しでそのまま動く
https://volafile.org/r/1bq7592g8
14名前は開発中のものです。
2020/07/09(木) 19:57:45.35ID:C2sLSK4a あと戦闘以外のイベント作りたい
とりあえずHPかAPを増減するだけのイベントだけ設定するか
戦闘もイベントも結果が選択によって変わるのと確率の要素入れたい
とりあえずまずイベントだけ作ってPROGRESSに入れてみるか
とりあえずHPかAPを増減するだけのイベントだけ設定するか
戦闘もイベントも結果が選択によって変わるのと確率の要素入れたい
とりあえずまずイベントだけ作ってPROGRESSに入れてみるか
15名前は開発中のものです。
2020/07/09(木) 20:20:38.39ID:C2sLSK4a デバッグめんどくさいからシード値か何かでランダムの部分固定したい
イベント追加した
イベントの結果を2つ以上にして結果をランダムにするのと
イベントを実行するの実装するか
const THINGS = [
["HPが1増えた", ()=>{PLAYER[1]=PLAYER[1]+1}],
["HPが5減った", ()=>{PLAYER[1]=PLAYER[1]-5}]
];
const getAnyHappening = () =>{
const EntityTHINGS = R.clone(THINGS);
return shuffleArray(EntityTHINGS)[0];
}
const happening = (THING) =>{
indicate(THING[0]);
THING[1]();
deathCheck();
}
PROGRESS=[happening, battle, battle, happening, battle, battle, battle];
PROGRESS.forEach(SEQUENCE=>{
if(SEQUENCE===battle){SEQUENCE(PLAYER,getAnyMonster(MONSTERS))};
if(SEQUENCE===happening){SEQUENCE(getAnyHappening())};
})
イベント追加した
イベントの結果を2つ以上にして結果をランダムにするのと
イベントを実行するの実装するか
const THINGS = [
["HPが1増えた", ()=>{PLAYER[1]=PLAYER[1]+1}],
["HPが5減った", ()=>{PLAYER[1]=PLAYER[1]-5}]
];
const getAnyHappening = () =>{
const EntityTHINGS = R.clone(THINGS);
return shuffleArray(EntityTHINGS)[0];
}
const happening = (THING) =>{
indicate(THING[0]);
THING[1]();
deathCheck();
}
PROGRESS=[happening, battle, battle, happening, battle, battle, battle];
PROGRESS.forEach(SEQUENCE=>{
if(SEQUENCE===battle){SEQUENCE(PLAYER,getAnyMonster(MONSTERS))};
if(SEQUENCE===happening){SEQUENCE(getAnyHappening())};
})
2020/07/12(日) 20:25:51.01ID:rCxmJFqB
おい誰か反応してやれよ
17くまじょ
2020/07/13(月) 09:50:39.52ID:/7c2Q8iI 俺もそう思うが
興味ない
興味ない
18くまじょ
2020/07/13(月) 10:00:43.90ID:ZHvjE/iT 最近のjsはconstとか使えるのか
すごいなあ
今スマホなのでレス見ながらレスできないので不便
=>ってのはラムダ式とか無名関数ってのかな
なれてないのでどうも分かりにくい
すごいなあ
今スマホなのでレス見ながらレスできないので不便
=>ってのはラムダ式とか無名関数ってのかな
なれてないのでどうも分かりにくい
2020/07/22(水) 22:41:50.45ID:wBHkT/Gr
とりあえずgithubにコードあげとけば?
2020/08/02(日) 05:11:07.88ID:xA8cEPYg
>>13
codepen.ioとかjsfiddle
codepen.ioとかjsfiddle
2020/09/12(土) 03:34:53.36ID:ezbp5FoJ
挫折した
22名前は開発中のものです。
2020/10/12(月) 10:33:40.81ID:8HwwmF4l >>18
=>を使う関数はアロー関数と呼ばれてて、主な違いは、
・短く書ける
(const test1 = x =>x**2+3; みたいな)
・thisが上書きされない
・argumentsが定義されていない
詳しくはMDNで調べるといいと思う
=>を使う関数はアロー関数と呼ばれてて、主な違いは、
・短く書ける
(const test1 = x =>x**2+3; みたいな)
・thisが上書きされない
・argumentsが定義されていない
詳しくはMDNで調べるといいと思う
2023/07/03(月) 20:21:27.20ID:UCmJE3+L
( )y-~~( ´)y-~~( ´-)y-~~(´ー`)y━~~∑( ゚Д゚)y━~~スゲー!!
2023/08/19(土) 12:00:28.01ID:87EPDeDn
プハァー ( ̄┏Д┓ ̄)y─┛~~
2023/10/19(木) 00:18:00.90ID:RR2g51y6
・・・運命なんかどうでもいい・・・だが、あんたはここで倒さなきゃならないらしいな
レスを投稿する
ニュース
- 【野球】大谷翔平、WBC出場を正式表明! 「日本を代表して再びプレー嬉しく思う」 侍ジャパンで世界一連覇狙う★2 [冬月記者★]
- 🇺🇸🇨🇳米中関係は「極めて強固」とトランプ氏… ★4 [BFU★]
- 🇺🇸🇨🇳米中関係は「極めて強固」とトランプ氏… ★3 [BFU★]
- 日米首脳、電話で緊密な連携確認 台湾答弁協議の有無明言せず… [BFU★]
- きょう日米電話首脳会談で調整…トランプ大統領が中国・習主席との電話会談受け高市首相に説明か 台湾問題の認識は… [ぐれ★]
- 「ホストに貢ぎたい」と海外で売春する日本人女性 2カ月で2千万円稼ぐケースも [1ゲットロボ★]
- 高市早苗、トランプに電話会談でガチギレされた模様wwwwwwwwwwwww会見で半泣きだったという情報も [271912485]
- 【高市悲報】習近平「先の日中戦争戦勝国として仲良くやろや🤗」トランプ「せやな」世界が日本から孤立していく😨 [359965264]
- 高市、国連の全ての加盟国に「私悪くないもん」という趣旨の迷惑メールを送付 [931948549]
- 【あっ…】トランプと習近平、ガッツリ握手。高市早苗、ガチで終了。 [153490809]
- 小野田大臣「山上はただのテロリスト」政府によってテロリスト公認 [245325974]
- トランプ、高市早苗に電話会談で説教へ「台湾の中国への復帰が国際秩序」「アメリカは重要性を理解している」 [329329848]
