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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0222
まふif文の条件を複数にする仕方がわかりません><;3解決


まふ

リンク

2015/2/22(Sun) 22:51:10|NO.67491

今ビジュアルノベル系のゲームを作っておりまして、指定された行のときに女の子の表情差分を変えるようなプログラムを組んでいます。
表示する行をcとしているのですが、このようすると、buffer 130の差分が3行目以降ずっと表示されっぱなしになります。
これはもしかしてもっとif文を増やすしかないのでしょうか。
if文は増やしてもいいのですが、できれば表情差分の数だけにしたいのです。

ご教授お願いいたします。






*novel c=c+1 redraw 0 if( c=3 and 5){ //ここです。 o=130 }else:if(c=0 and 1 and 2 and 4){//ここも o=131 } noteget a,c pos (ginfo_winx-1280)/2,(ginfo_winy-720)/2 gcopy 22,0,0,1280,720 gmode 4,,,200 pos (ginfo_winx-1280)/2,(ginfo_winy-200) gcopy 4,0,0,1280,200 pos 480,100 gmode 4,,,255 color 0,0,255 gcopy o,0,0,250,400 gmode 4,,,250 pos(ginfo_winx-1280),(ginfo_winy-230) gcopy 28,0,0,80,30 pos(ginfo_winx-1280),(ginfo_winy-230) noteget b,c+100 mes b pos (ginfo_winx-1260),(ginfo_winy-170) color $00,$00,$00 font "MS ゴシック",28,0 text r strrep a,"\\n","\n" emes a if(c=21){ gsel 0 gmode 4,,,255 color 255,0,0 pos 800,80 gcopy 70,0,0,300,590 pos 850,180 gcopy 71,0,0,200,320 } redraw 1 if(c=43):goto *zitaku repeat stick key if(key & $10):break await 20 loop goto *novel stop



この記事に返信する


kanahiron

リンク

2015/2/22(Sun) 23:31:16|NO.67493


if( c=3 or c=5){ //ここです。 o=130 }else:if(c=0 or c=1 or c=2 or c=4){//ここも o=131 }
質問の回答だけならこうなります

以下解説

if( c=3 and 5){ //ここです。 o=130 }else:if(c=0 and 1 and 2 and 4){//ここも o=131 }
これだと3以外通ることはありません
そもそも、ifは真と偽で判定しています
人にはわかりにくいですが、つまり0は偽(実行されない)、0以外は真(実行される)です

if -1:dialog
としてもdialogが出ます つまりif -1は真ということになります
プログラムにおいて&(and)や|(or)は普段の意味とは異なります
論理演算やビット演算といいますが、知らなければ以下のリンクを。知って損はありません
http://hsp.tv/play/pforum.php?mode=pastwch&num=3344

質問の式ですが

if c = 3 & 5
というのは、

c=3の場合
if 真 & 5→if 真(実行される)

c!=3の場合(cが3でない場合)
if 負 & 5→if 偽(実行されない)
となります

if c = 3 | c = 5 とかけば、 c=3の場合 if 真 | 偽→if 真 c=5の場合(cが3でない場合) if 偽 | 真→if 真 c != 3、c!=5(cが3でも5でもない場合) if 偽 | 偽→if 偽
です



まふ

リンク

2015/2/23(Mon) 02:40:09|NO.67494

できました!
解説付きで、演算子の勉強もさせていただき、本当にありがとうございました!



GENKI

リンク

2015/2/24(Tue) 00:16:11|NO.67498

もう解決していますが蛇足を少々。
ビット演算の説明をされているのでお分かりなのだろうと思いますが、ここまでちゃんと説明しているだけに気になります。

> c=3の場合
> if 真 & 5→if 真(実行される)
>
> c!=3の場合(cが3でない場合)
> if 負 & 5→if 偽(実行されない)
> となります

説明不足で誤解を招きそうなので過程を補足します。

c=3の場合
if c = 3 & 5
→if 1 & 5
→if 1
→if 真
→実行される

c!=3の場合(cが3でない場合)
if c = 3 & 5
→if 0 & 5
→if 0
→if 偽
→実行されない


mes (c = 3 & 5)
などとすると式の結果を手軽に確認できます。

ちなみに、もし「if c = 3 & 4」だったらこうなります。
c=3の場合
if c = 3 & 4
→if 1 & 4
→if 0
→if 偽
→実行されない

ビット演算の資料
http://wiki.hsp.moe/HSP%E8%AC%9B%E5%BA%A7%EF%BC%8F%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97.html
http://wiki.hsp.moe/%E5%B0%8F%E3%83%AF%E3%82%B6%EF%BC%8F%E3%83%93%E3%83%83%E3%83%88%E6%93%8D%E4%BD%9C.html



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