コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
HUCU ◆B7lOIJDWuOqi
2018/12/10 17:03
これどうやる?「
配列変数[0,0]=数字
配列変数[0,1]=文字

コメント

アバター
はる 2018/12/10 17:19 ◆75Vh4SY8TdKS
文字ではなく文字列ですか……
それは難しいですね。
何文字までかの制限はありますか?
アバター
Soybeanman 2018/12/10 17:22 ◆SDLkyXUP6WqK
文字列の場合、
[0,0]にハイスコア、[0,1]に文字列の長さ、[0,2~]にASC()の数値、
他も同じようにやればいいと思います(語彙力皆無)
アバター
こういち 2018/12/10 17:54 ◆ou0jbJnEJ0Kb
逆に
全部文字列でやるとか。
100,name
50,name

みたいな。
書き込むときはformat$()
読み込むときはleft$()とval()使えば一応可能です。
アバター
Soybeanman 2018/12/10 18:37 ◆SDLkyXUP6WqK
ちなみにプチコンは実数、整数ともに32bitなので、1つの値に2つの文字を格納できます。
アバター
あまさとしおん 2018/12/10 20:23 ◆mzDKTVUAtwqE
実数型は倍精度(64bit)です。

可変長の文字列を格納する場合は
1.最初に文字数を記録して、その後に書く
2.文字数は記録しないで、決まった値(文字)が出たらそこで終わりと判断する
という2種類の方法があります。
どちらの場合でも1文字分を余分に消費することは不可避です。

ちなみに後者の方法のうち、終わりの印にNULL(0番の文字)を使うやり方を『ヌル終端文字列』と言ったり言わなかったりします。

なお、実数型に文字列を格納するのは困難が伴うためやめておきましょう
(実数部とか仮数部とか理解できるなら別として)
アバター
Soybeanman 2018/12/10 20:31 ◆SDLkyXUP6WqK
>>あまさとさん
64bitでしたか…無知を露呈してしまい赤面です(ノ>_<\)
アバター
あまさとしおん 2018/12/10 20:32 ◆mzDKTVUAtwqE
すでに出てる内容と被りますが
SmileBASICはどちらかというと型に厳しい仕様ですので、単一の配列変数にデータを格納するには、最低でも数値型・文字列型のいずれかに型を統一する必要があります。
(言語によっては平然と混ぜこぜできるんですが…)

そういうときにはCHR$()・ASC()などの型を変換する関数を用います。
アバター
HUCU 2018/12/10 20:54 ◆B7lOIJDWuOqi
文字列型配列ってどうセーブするの?
アバター
こういち 2018/12/10 21:10 ◆ou0jbJnEJ0Kb
SAVE "TXT:ファイル名",変数名
ただし文字列変数のみで、文字列配列は保存できません。
FORMAT$()などで1つの文字列変数にまとめる必要があります。
アバター
はる 2018/12/10 21:24 ◆75Vh4SY8TdKS
CSVやTSVにして文字列にして保存するのがいいかも。

スマブラSPです?(ツ並感)
http://youtu.be/raKcEnok-0E
アバター
ツララ 2018/12/10 23:58 ◆ArUdBYOYME1V
何で二次元配列なんです?
片方の添え字はユーザーID識別用です?
一つの変数に複数のデータを格納するならBGFILL命令で渡す引数みたいに
桁数を少なく稼げる16進数文字列に変換して桁を揃えて連結させちゃうのがいいんじゃないんです?

すっすっすー

取り出すときも桁数×番号で何文字目かを指定してMID$()でOKですし
数値配列を文字列でSAVEする処理って、自作関数で作ってる人結構多いですし。
多次元配列なら"ファイル名"+CHR$(添え字)+…で可能かと。

混ぜこぜできる言語って使用メモリのサイズが一番大きい型のに統一されていてメモリリークしないようにしてて
システム側で自動的に変換処理してくれてるだけな気がするんですけど
実際のところどうなんでしょうね?
アバター
HUCU 2018/12/11 0:08 ◆B7lOIJDWuOqi
誰?
アバター
うょリウム(元 SPDX) 2018/12/11 0:54 ◆UTOEg1c1vr.B
参考にならないと思いますが
僕のやり方をお教えします…。

名前は5文字までと制限します。
FOR I=0 TO 4
配列変数[0,I+1]=ASC(MID$(名前$,I,1))
NEXT
と、いうようにして一文字ずつ
数値化してセーブします。
割とわかりやすい方法だと思います。
アバター
はる 2018/12/11 6:34 ◆75Vh4SY8TdKS
自分だったらビットシフトして1要素に2文字入れます。
アバター
HUCU 2018/12/11 8:38 ◆B7lOIJDWuOqi
DATは諦めてTXTにします。
ハイスコアめっちゃ弄られそう。
アバター
はる 2018/12/11 15:46 ◆75Vh4SY8TdKS
その方がよさそうですね。
後、DATでも弄られると思います。
プログラム観れば大体データの形式が分かるので。
アバター
あまさとしおん 2018/12/11 16:04 ◆mzDKTVUAtwqE
DATでもエディタを作ってしまえば普通にいじれますもんね

暗号化or難読化したうえでハッシュやチェックデジットで確認するようにすれば、改ざんの難易度を上げることができます。
アバター
HUCU 2018/12/11 16:55 ◆B7lOIJDWuOqi
まあコンソル君のように簡単にコースを作れるゲームにしたいから…
アバター
おちゃめ 2018/12/12 3:15 ◆jH1opV6FnGyx
プチコン3号で文字と数値のセーブデータを1つにまとめたいならば個人的には文字に統一する方をおすすめしたいです。
数値を文字に変換するにはSTR$関数を使えばよいのですが、基本的に6桁以下の数値に丸められるため桁数の多い整数や小数には対応ができません。
対応するにはFORMAT$を使う必要がありますが、こちらも小数を文字列にする場合には実数型の有効桁を把握していないと難しいです。

というわけで、一番簡単なのは私の自作関数PSTR$を使うことです。
PSTR$はプチコン3号で表現可能なあらゆる値を誰でも簡単に誤差ゼロで文字列にすることができるためセーブデータの作成には最適です。


数値に統一したいというのであればASC関数を使って文字を1文字ずつ数値化する必要があります。セーブデータを上手く元に戻せるようにするには変換する文字列が何文字かとか、データの区切りコードを設定する必要があります。
ちなみにプチコン3号の文字列は基本的に1文字あたり16bitですが、整数型の変数は32bitなので変数1つあたり2文字格納可能です。

実数型は64bitなので4文字格納可能に思えますが、実数型のうちお手軽に格納できるのは仮数部の52bitなのです。符号や指数部分のbitを使いこなすには浮動小数点型の知識が必要となってきますが、私の自作関数FLAGを使えば誰でも簡単に実数型変数のすべてのbitをデータ格納用に使用が可能になります。
ただし、実数型でデータ可能に使用可能なのは最大62bitなので文字列を4文字格納するのは少々大変です。
したがって、数値で統一するならば整数型の方が簡単なのでおすすめです。

ちなみに数値化、文字列化については私のサイトのプチコン3号入門講座で詳しく書いているので参考にしてみてください。
http://ochameclub.web.fc2.com/petitcom3/lecture/input.htm#2


というわけで、自分がやりやすいと思ったやり方で作ってみてください。
そういう処理を自力で作ることよりも作品を完成させる方が重要であればMIKIさんの自作関数VFILERを使うのがもっとも簡単です。
この自作関数には私のPSTR$も使用されているので数値、文字列が混じっていてもすべて誤差なく自動的に文字列として1つのファイルにまとめてセーブやロードが可能になります。
アバター
はる 2018/12/12 15:50 ◆75Vh4SY8TdKS
文字に統一するならCHR$()派です。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -