トピック
nobu divine-creator

タッチ入力された文字を任意の場所に表示するには?

プレイ日記で書いた暗号作成&解読ソフトのリニューアル版で、タッチ入力された文字を任意の場所に表示したいのですが、どのような方法にすれば良いのでしょうか? タッチされた擬似キーボードの文字を別の文字に変換することはできますけど、それを任意の場所に表示する方法は分かりません…orz。 入力される文字数はユーザーによって変わるので、端まで行ったら自動的に改行もしなければなりません! ただのLOCATEだけでは無理なことは分かりますが、どうすれば思い通りの表示方法にできますでしょうか?
4そうだね
プレイ済み
返信[1]
親投稿
ΖΕΧ ZEX256
INKEY$で1文字ずつ入力して、任意の文字に変換して LOCATEした位置に表示すればできそうだけど。 どうですか
1そうだね
プレイ済み
返信[2]
親投稿
ΖΕΧ ZEX256
この例ではLOCATEしてないけど
0そうだね
プレイ済み
返信[3]
親投稿
say sayer.exe
入力 記憶 出力 これを分けて考えてみたらどうでしょう? タッチ=入力→記憶 記憶→出力 と言う感じで 仮想コード的に書くと t$=tc()'tc()はタッチ入力関数と思ってください st$=st$+t$'エスケープ文字はこの際無視 locate x,y:? st$ と言う感じ?
1そうだね
プレイ済み
返信[4]
親投稿
say sayer.exe
現状の疑問点は x,y だと思いますが如何に?
1そうだね
プレイ済み
返信[5]
親投稿
nobu divine-creator
それぞれの回答をありがとうございます♪ それらを拝見してすぐには内容を理解できていませんが、sayさんが仰る通り、LOCATEのxとyをどうするか?というのがポイントであると思っています。 私の旧作をプレイ済みの方なら、ご存知だと思われますが、一文字ずつ別の文字を割り当てて、暗号を作ったり解読したりするシステムになっています。 ただ、今回違っているのは、INPUTでの入力ではなく、擬似キーボードによるタッチ入力になっていることです! なので、タッチした文字を別の文字に変えて表示する際に、LOCATE x,yをどのような形式にすれば良いか?ということが問題となりました…。 それぞれの式を実際に入力してみれば、どんな結果になるのか?見えますけど、式を拝見しただけでは何故そういう式になるのか?全く分かりません…orz。それがプログラミングに向いている人と向いていない人の違いなのだと感じます…。
1そうだね
プレイ済み
返信[6]
親投稿
ペンコ penkogoma
思い通りの表示方法ってなんですか?
0そうだね
プレイ済み
返信[7]
親投稿
普通に文字を表示したい場所にLOCATEしてから表示するんじゃだめなのかな?
0そうだね
プレイ済み
返信[8]
親投稿
nobu divine-creator
普通なら、例えば x=2:y=2:a$=="a" LOCATE x,y:?"a$"とすれば、2,2の位置にaが表示されますよね? そして、xが1つずつ増えていって、指定した位置になったらyが1増えるようにすれば、表示位置については良い…というイメージは分かりますが、その設定の仕方がよく分かっていません…(´・ω・`)。 1つずつ増えるのは、うえこうさんが使っているINCで良いと思いますけど、今回の場合それをどう使えば良いのか?がよく分からない状態です。 思い通りの表示方法というのは、 1.ユーザーが擬似キーボードの文字を自由に選んでタッチする。 2.(それを設定した文字に変換する。) 3.(それを設定した位置に表示する。) 4.ユーザーがENTERキーをタッチするまで、1~3を繰り返す。 …という感じで、1と4の設定方法は分かっています♪ 問題は変換した文字を表示する位置の設定です!
0そうだね
プレイ済み
返信[9]
親投稿
ペンコ penkogoma
シンプルなLOCATEを使う改行の方法です。 1、XとYに初期位置を入れる。 2、タッチするごとに1文字表示してX+1する。 3、IF文でXが最大値まできたらXを初期位置にし、Y+1する。 4、「2と3」をENTERを押すまで繰り返す。
1そうだね
プレイ済み
返信[10]
親投稿
nobu divine-creator
たぶん、今回の表示方法としては、うえこうさんの例のような形式が、INCを使っているので都合が良さそうですが、それをそのまま入力してRUNしたら何も起こらない状態で、それだけでは機能しない…ということですか? 別の命令と組み合わせることで、目的の表示ができるということですか?
0そうだね
プレイ済み
返信[11]
親投稿
nobu divine-creator
実は、回答があってから、「こうすれば良いのかな?」と考えていたのが、ペンコかいさんが書いてくださった方法に近い感じでした♪ やはり、最初の位置は決まっているので、初期位置を設定→タッチしたら一文字表示→折り返したい位置まで来たら位置を変更させる…というのが、シンプルで初心者向けの方法みたいですね♪ 他の難しい方法は、まだ私には無理なので、その方法でやってみようと思います!
1そうだね
プレイ済み
返信[12]
親投稿
ペンコ penkogoma
それは良かったです♪ 頑張ってください! ちなみに、うえこうさんの例は「DEF」について勉強すれば使えます。 ちょっと難しい分、覚えると便利なので余裕があれば いつかマスターすることをオススメします!
0そうだね
プレイ済み
返信[13]
親投稿
初心者向けとか関係なしにペンコさんのやり方はスタンダードだと思いますよ。 それに別にINCを使えば良いというわけでもないし同処理をするかはケースバイケースです。まあ1足すならINCで良いですがINCじゃなきゃいけないわけじゃないというか、INCを使う方が高度と思ってるなら?ちょっと違うイメージかなーって思ったので。 要するにコンソールが自動でやっている出力を自前でやるだけなので、その為に必要な処理を書くイメージです。なので「xが1つずつ増えていって、指定した位置になったらyが1増えるようにすれば、表示位置については良い…というイメージ」と言われているように、それをそのままプログラムにするだけな感じです。 まあなんとなくイメージをプログラムにするのが苦手なような印象は受けるので、そこでつまづいているのかもしれませんけどねー…。頑張ってください!
1そうだね
プレイ済み
返信[14]
親投稿
nobu divine-creator
「初心者向けの方法」というのは、「プログラミングが苦手な人でも理解しやすく、使いやすい方法」という意味で、全く同じ処理でもINCを使うほうが分かりづらい…という感じです。(高度というか、少し複雑に感じてしまうという状態です。) イメージをプログラムにするのが苦手…というのが正にその通りで、それがプログラミングに向いているかどうかの基準なんじゃないか?と感じています! 向いている人のプログラム例を見て、すぐにその意味を理解できる人は、同じく向いている人で、理解できない人が向いていない人となります! 私が常々プログラマーに向いていないなぁ…と感じるのは、そういう理由からです…(´・ω・`)。 たぶん、同じことを他の人がしたら、完成までの期間が短いのだろう…と、いつも思っています。
1そうだね
プレイ済み
返信[15]
親投稿
nobu divine-creator
ちなみに、INPUTを使えば簡単なのに、何でわざわざ擬似キーボードなんかを使うんだ?…と思った人へ それは、擬似キーボードでなければならない理由があるからです♪(ニヤリ!)
1そうだね
プレイ済み
返信[16]
親投稿
なるほどー。INCの方が字面的に固いですしね、笑 僕は1の加減算ならC言語などのN++とかN--とかの方が好きなんですが、INCだと逆のDECもそうですが一見で分かりにくい気がしています。 疑似キーボードに関しては、nobuさんの理由はまだわからないですが標準のINPUTは文字数制限が出来なかったりあまり多機能じゃなくて使いづらいなぁーって思う事は多いですね〜。 あとはイメージをプログラムにするのは慣れも大きいですよ〜。あとは苦手意識を持ちすぎないで、ゆっくり理解しようと努力してみることも大事です。まあかといって考えてばかりで作らないとそれはそれで机上の空論になっちゃうのでほどほどのバランスが大事なんですけどねー…
0そうだね
プレイ済み
返信[17]
親投稿
nobu divine-creator
このトピックで質問し始めた時には、まだ擬似キーボードの切り替えやタッチ入力プログラムを入力する前だったのですが、それから段々と進めて、ようやく文字をタッチ入力して表示ができるようになってきました♪ ところが、いくつか問題が発生していまして、それらについての追加質問をしなければならなくなりました…(´・ω・`)。 まず、擬似キーボードの切り替えができるようにはなったのですけど、切り替えが遅い…というか、なかなか切り替わらない場合がありまして、それをどうすれば良いか?で迷っています…。 タッチの時間設定は、TM==1にしているのですが、それは問題ないですか? アルファベット←→カタカナ←→ひらがな←→アルファベットへの切り替えは、GOTOラベルで行っていますが、それも問題ないですか? 擬似キーボードは1枚のBG画面に描かれているので、BGのロードに時間がかかっているというわけではありません!
0そうだね
プレイ済み
返信[18]
親投稿
ペンコ penkogoma
前から思っていたのですが、内容があっちこっちへ行っていて、非常に内容が読み取りづらいですね。正直、毎回5回くらい読み直してます。 雑談系の話だったらまったく問題ないのですが(笑 こういった内容説明が重要な質問の場合、単刀直入に質問だけを最初にしたほうが答えやすいですよ。起承転結ではなく、「結」起承転っていうやつです。 結論から書くというのは、レポートを書くときの重要テクニックでもあります。 ちなみに質問への回答ですが、 「擬似キーボードの切り替え」のプログラムを見てみないとわからないですねぇ。 「擬似キーボードの切り替え」のプログラムを見せるか説明してほしいで~す!
0そうだね
プレイ済み
返信[19]
親投稿
nobu divine-creator
済みません…。内容があっちこっちへ行く理由は、プログラムの何処に問題があるのか?予想できないため、関係がありそうな事を複数書き並べているせいです…。 自分で予想ができれば、質問しなくても解決できると思いますけど、何が原因か特定できないため、ゴチャゴチャした情報になってしまい、申し訳ないです…m(_ _)m。 それで、とりあえずキーボードの画像がコレで、タッチした範囲によって判定をしています! タッチ範囲の指定が間違っているという訳ではないと思いますが、もう一度確認してみます。
0そうだね
プレイ済み
返信[20]
親投稿
nobu divine-creator
また、いろいろ試してみて気付いたのですが、タッチしてすぐに切り替わらない場合が決まっているようなので、そこに何か問題があるのかもしれません! 1.アルファベットモードでSHIFTを押した時(すぐに小文字モードにならず、何度か押していると切り替わる。) 2.カナモードでひらがなorカタカナへ切り替える時(すぐに切り替わらず、何度か押していると切り替わる。) それ以外の切り替えは上手くいっているようなので、それらの部分に問題があるのかもしれません! もう少し、自分で再確認と研究をしてみます。
0そうだね
プレイ済み
返信[21]
親投稿
nobu divine-creator
キーボードの切り替え問題については解決できました♪ 1回SHIFTを押すと大文字から小文字になりますが、もう1回押されれば小文字から大文字に戻ります。 タッチの時間をTM==1にしていれば、何回も押されたことにはならないだろう…と思っていましたが、1回のタッチで複数回押された感じになっていたようです…orz。 なので、WAIT 10を追加したら、問題なく切り替わるようになりました♪ 以前に作ったソフトでも、「タッチする位置が同じだと、次のタッチ判定も連続して選んだことになる」という現象があったことを思い出しました! その時も、WAIT 10で止めることで解決していたのですが、今回は状況が違うと思って気付くのが遅れました…(´・ω・`)。
0そうだね
プレイ済み
返信[22]
親投稿
nobu divine-creator
でも、まだ別の問題が残っていまして、「BS(BACK SPACE)キーをタッチした時に、前の一文字を消す」という仕様にしたいのですが、「直前の一文字だけを消す」にはどうしたら良いのでしょうか? 背景が緑なので、緑色の空白をX軸-1に置けば見た目消えたようにできますが、それだと見えなくなっているだけで実際に消えているわけではないし、連続して押しても文字を消せるようにはならないので、直前に表示した一文字をきちんと消したいのです! CLSでは全部の文字を消してしまうから、それは使えないし、どうすれば一文字ずつ消すことができるのでしょうか?
0そうだね
プレイ済み
返信[23]
親投稿
nobu divine-creator
PRINTというか?で表示しているのだけれど、それを入力してみたらシンタックスエラーになりました…orz。 PRINT CHR(0)を入力すると、本来はどうなる予定だったの? もしかしたら、擬似キーボードでの入力だから違っている?
0そうだね
プレイ済み
返信[24]
親投稿
nobu divine-creator
あれ?確かに一文字消せるけど、私が元々やっていた方法と同じで、消えた文字も一文字分使っているから、SPACEキーで間を空けたのと同じ状態になっていますね…(´・ω・`)。 もしかして、X軸-1にしているせい? それとも、普通のBSキーと全く同じように文字を消す方法は無い?
0そうだね
プレイ済み
返信[25]
親投稿
nobu divine-creator
X-2にすると二文字前が消えるだけで、入力した文字が消えるわけじゃないんだよね…orz。 見えなくなっているから消えたようになっているだけで、入力された文字が隠れて残っているから、その後に入力した文字は見えなくした文字の後に続く状態になります…! だから、入力ミスすると、その分だけ間が空いてしまうことに…OTL。
0そうだね
プレイ済み
返信[26]
親投稿
nobu divine-creator
そうか!文字を消した後で、X-1すれば良かったんですね♪(何で気付かなかったんだろう…?) 本物のBSキーもそういう感じで動いているのかな?
0そうだね
プレイ済み
返信[27]
親投稿
nobu divine-creator
ようやく、このソフトの完成が目前となりました♪ ただ、1つだけ迷っていることがあります! ENTERキーで途中改行をした直後にBSキーで消すと、続きが右端の位置になってしまい、BSキーを連続して押さないと改行した位置まで戻せません…orz。 その理由は、左端の位置でBSキーを押した時に、右端に戻るように設定しているからなのですが、ENTERキーを押して途中改行した位置に戻るように設定することも可能でしょうか? これは不便なだけなので、そのままでも問題ない仕様ですけど、簡単に修正できるのなら、より良い仕様に変えたいと思っています♪ それにしても、本物のBSキーって凄いですね! ただ一文字前を消すだけでなく、改行にも対応して消すことができるんですから、単純そうでなかなか難しいです…。
0そうだね
プレイ済み
返信[28]
親投稿
単純にやろうと思ったら改行した時にその行の位置を配列変数か何かに保存しておいて、戻る時にそれを参照して戻せばいいんじゃないかな? 全部の行を用意してもそんな数にもならないしねー
0そうだね
プレイ済み
返信[29]
親投稿
nobu divine-creator
うぐっ!配列変数……まだ、きちんと使いこなせていない方法ですね…(´・ω・`)。 確かに、行数は少ないです! 上の行に入力された文字を表示して、 下の行に変換された文字を表示して、 その下の行を一行空けて、次の行にしているので、 改行するとY軸を+3するようにしています。 文字の色を変えているから、すぐ下の行でも見づらくはないのですが、なるべく見やすいようにしているので、そういう並びにしています♪ 問題は、配列変数の保存と参照して戻すという方法が分からないことですね…。見本となる例が見られれば、なんとか分かるかもしれませんが、言葉による説明だけだと、まだどうしたら良いか?分かりません…orz。
0そうだね
プレイ済み
返信[30]
親投稿
nobu divine-creator
まだ、完全にできたわけではないのですが、とりあえずあと少しの不具合を修整できれば完成なので、一旦この投稿は終わりにします。 本来なら、完成して公開キーをお知らせして終了のほうが望ましいのですけど、別のトピックを投稿したいため、予定より早く終了することにしました。
1そうだね
プレイ済み