HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0331
shimaaminフラグと乱数について10解決


shimaamin

リンク

2009/3/31(Tue) 21:23:04|NO.24278

クイズ形式のゲームを作ろうと思ったのですが、うまくいきません。

条件として、
LV1〜3までのレベルを指定してから、20問出題。
また、その20問は100問の中からランダムに取得及び、出題順もランダム。

ランダムだったので乱数を使ってその乱数から、フラグに飛ばして
出題させて、20問はループさせれば大丈夫かなと思ったのですが、
うまくいきません。

前後からみると、
randomize
hen=rnd(2)
if hen=0 : goto*lv1_1
if hen=1 : goto*lv1_2
stop
ここがおかしそうなのですが、どこがおかしいのかよくわかりません。
どなたか、ご教授お願いします。



この記事に返信する


ORZ

リンク

2009/3/31(Tue) 21:37:44|NO.24279

乱数を代入して比較しているだけなので、まったく問題のないソースです。
僕にもどこがおかしいかわかりません。



check

リンク

2009/3/31(Tue) 21:54:36|NO.24280

日本語でおk

ソースのどこがおかしいかがわかれば大体はデバッグできるはず。
ここがおかしそうって決め付けられては困る。
あまり長くないのなら、ソースを見せてみ。



GENKI

リンク

2009/3/31(Tue) 22:23:36|NO.24281

まず無駄を省いた最小構成のスクリプトを書いてみてください。
問題数は2〜3問程度、取り除いても問題の動作に関係ない部分は全て削除、おかしな動作が再現できることが条件。

ここまで出来たら順番に1行1行処理を追いかけて行ってみてください。必要ならメモを取りながら。
ここまですればアレ?と気づきやすくなるはずです。
でも、もしそれでも気づくことが出来なければこのスレッドで最小構成のスクリプトを見せてくれると解決の手伝いが出来るともいます。

提示されたスクリプトは、そこだけで問題というより、そのほか前後や全体との関係で問題が起きているような気がします。


> うまくいきません。

これでは何がどんなふうにうまくいっていないのか何も分かりません。
どんなふうな動作になるはずが、こんなふうに動作してしまう。という感じで説明していただけるとわかりやすいと思います。
またこうやってちゃんと文章化することで、何が問題なのか明確になることで解決の糸口にもなることがあります。



shimaamin

リンク

2009/3/31(Tue) 23:07:36|NO.24282

みなさん、ご丁寧にありがとうございます。
失礼しました。とりあえず、あげさせていただきます。

title "漢字読みテスト" ;タイトルバー文字

mes"基礎的な漢字読みテスト"
mes" "

button "メニューへ",*menyu
button "終了",*owari

stop

*owari
end

*menyu
cls
mes "レベルを決めてください"
mes " "
mes "LV1は、(小学生)漢字検定 10級から5級レベル"
mes "LV2は、(中学生)漢字検定 3,4級レベル"
mes "LV3は、(高校生)漢字検定 準2,2級レベル"
mes "の漢字の読みとなっています。"
mes " "

button "LV1",*lv1

stop

*lv1
cls
mes "それでは始めます。"
mes "回答は入力ボックスにひらがなで入力してください。"
mes "また、問題は20問出題されます。"
mes " "
button "START",*lv0_1
stop

*lv0_1
randomize
rnd(2) = hen
if hen=0 : goto*lv1_1
if hen=1 : goto*lv1_2
stop

*lv1_1
cls
mes "森林、何と読むでしょうか"
input moji
moji=x
if x=しんりん : goto *seikai
mes "不正解"
stop

*lv1_2
cls
mes "森林、何と読むでしょうか"
input moji
moji=x
if x=しんりん : goto *seikai
mes "不正解"
stop

*seikai
cls
mes "正解"
stop

といった具合です、実行してみましたがやはりエラーがでます。



ORZ

リンク

2009/3/31(Tue) 23:15:45|NO.24283

エラー行までバッチリ出てきたわけですが、39行目の
rnd(2) = hen

ココを300回ほど読み直してみましょう。
あと、エラーメッセージは日本語で書かれているはずなのでそちらも読み直しましょう。



check

リンク

2009/3/31(Tue) 23:20:32|NO.24284

ソースはプレタグで囲もうな。

そして、君はエラーメッセージを読もうという気はないのか?
まあ、このメッセージからではわかりにくいかもしれんが。

原因は39行目の rnd(2) = henだ
HSPで変数に代入を行いたい場合、
代入を行いたい変数 = 代入する数
という風に記述しなくてはならない。
それが逆になっているからエラーが出ているんだ。



check

リンク

2009/3/31(Tue) 23:23:07|NO.24285

あと、 gosub と objprm っていう命令を覚えれば幸せに慣れるかもしれないよ。



shimaamin

リンク

2009/3/31(Tue) 23:35:45|NO.24286

ソースを囲むスミマセン、初めて聞いたのでという言い訳は嫌なのですが、
もしまたお世話になるときは気をつけるようにするので、許してください。
すみませんでした。

また、エラーメッセージの件ですが、それと一緒に出るもう一つのウィンドウに
目が行ってしまい、適当にOKを押すという習慣がひびいてしまいました。
この癖はかなりやっかいそうなので、しっかりと直します。
初歩的なところで本当にすみませんでした。

なるほど、=でつながっていたのでてっきり、どちらでも大丈夫だと誤解してしまったようです。
ちゃんと決まりがあることを肝にめいじておきます。
本当にありがとうございました。

しかし、これで実行すると、正解とでてそこで終わってしまっています。
checkさんのがヒントのような気がするのですが、時間が時間なので今日はやめます。
gosubとobjprmについてはまた後日調べて、実行してみます。
助言ありがとうございます。 

返答していただいたみなさん、本当にありがとうございました。
大きく前進できた気がします。



GENKI

リンク

2009/3/31(Tue) 23:50:22|NO.24287

スクリプトを投稿するときは、この掲示板の「使い方」にあるように、preタグを使用することをお勧めします。
いろいろとメリットがありますので…。



さて先ずはHSPスクリプトエディタから、
 メニュー:ヘルプ → HSPマニュアル目次
  # 初心者のためのHSP入門 (beginner/start.htm)
を読んでみてください。
基本的で重要なことがわかりやすく説明されていますので参考になると思います。


実行すると、はじめに「error 41」が出ましたよね?
「line ○○」というのがあったと思いますが、この数字の行に問題が発生しています。
F1キーでマニュアルを呼び出すなどしてよーく調べてみてください。

エラー番号の意味は、
 プログラミングマニュアル1・基本仕様ガイド (hspprog.htm)
  # エラーメッセージ
もしくは、
http://quasiquote.org/hspwiki/HSP3%E3%81%AEFAQ%3a%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E6%84%8F%E5%91%B3%E3%81%A8%E5%AF%BE%E5%87%A6%E6%B3%95%E3%81%8C%E5%88%86%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84
を参照ください。


> if x=しんりん : goto *seikai

この記述では、「しんりん」は文字列ではなく、変数「しんりん」として扱われます。
これについては「プログラミングマニュアル1・基本仕様ガイド (hspprog.htm) 」の変数に関する項目に説明があります。
ちなみに、変数「しんりん」には何も代入されていないので中身は 0 です。


オブジェクト命令について。
inputやbutton命令は、オブジェクトを「配置(設置・置く)」命令です。それ以外は何もしません。
オブジェクトに対する操作をするのを「待つ」命令はstopかwait、awaitです。
オブジェクトを使ったソフトを作る場合にはおおむね決まったパターンのようなものがあります。
こちらを参考にしてみてください。
http://hspdev-wiki.net/?HSP%B9%D6%BA%C2%2F%B4%F0%CB%DC%C5%AA%A4%CA%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%A4%CE%A5%D1%A5%BF%A1%BC%A5%F3#w51f08e7


最後に…
これ書いてる順番は適当ではないです。
重要なので順番飛ばさないことを押す進めします。
そして、

> どんなふうな動作になるはずが、こんなふうに動作してしまう。という
> 感じで説明していただけるとわかりやすいと思います。
> またこうやってちゃんと文章化することで、何が問題なのか明確になる
> ことで解決の糸口にもなることがあります。

ここ重要。



shimaamin

リンク

2009/4/1(Wed) 22:34:21|NO.24326

返信遅れてすみません。
GENKIさん、詳細説明とご指摘ありがとうございます。

初歩的なところですみませんでした。
もう一度、基礎固めをしてみようと思います。

返答していただいたみなさん、本当にありがとうございました。

また今回の教訓を生かしそれでも、
何かいきずまった時に助言をいただけるととても助かります。

今後ともよろしくお願いします。



ONION software Copyright 1997-2021(c) All rights reserved.