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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0408
HSP_wakabaソースのチェックをお願いします。9解決


HSP_wakaba

リンク

2012/4/8(Sun) 18:51:32|NO.45959

はじめまして。

以前にも同じソースでご質問されていた方がいらっしゃいましたが、
その問題を克服した上で質問させてください。

以下のソースを実行しますと、まずデッキ編集画面になり、
その編集後バトル画面になるのですが、
「出す」ボタンを押してもカードがフィールドにセットされないのです。
また「終わり」ボタンを押しても応答がありません。
自分なりにここまで辿り着いたのですが、行き詰ってしまいました。
どうかご教授のほど、よろしくお願いします。


#define Game_Name "カードゲーム サンプル" ;<<<<<-- 初期設定 -->>>>> randomize sdim C_Data,5000 sdim Book,5000 sdim Dek,1000 sdim M_Dek,1000 sdim E_Dek,1000 sdim M_Hand,500 sdim E_Dek,500 sdim E_Hand,500 dim M_Mana,3 dim E_Mana,3 ;<<<<<-- カード情報読み取り -->>>>> bload "Card_game/Card_Data.txt",C_Data notesel C_Data C_Max=notemax sdim C_Name,20,C_Max dim C_Power,C_Max dim C_Cost,3,C_Max dim C_Type,C_Max dim C_Effect,C_Max repeat C_Max noteget get,cnt size=0 getstr C_Name.cnt,get,size,',':size=strsize getstr data,get,size,',':data=int(data):C_Cost.0.cnt=data:size+=strsize getstr data,get,size,',':data=int(data):C_Cost.1.cnt=data:size+=strsize getstr data,get,size,',':data=int(data):C_Cost.2.cnt=data:size+=strsize getstr data,get,size,',':data=int(data):C_Power.cnt=data:size+=strsize getstr data,get,size,',':data=int(data):C_Type.cnt=data:size+=strsize getstr data,get,size,',':data=int(data):C_Effect.cnt=data loop ;<<<<<-- 変数 -->>>>> Book={" 000-湖 000-湖 000-湖 001-砂 001-砂 001-砂 002-林 002-林 002-林 003-海 003-海 004-山 004-山 005-森 005-森 006-水戦士 006-水戦士 007-炎戦士 007-炎戦士 008-緑戦士 008-緑戦士 009-水の導師 009-水の導師 010-炎の騎士 010-炎の騎士 011-緑の勇者 011-緑の勇者 012-青魔術 012-青魔術 013-赤魔術 013-赤魔術 014-黒魔術 014-黒魔術 "} title Game_Name screen 0,640,480 *dek_make cls objsize 300,110 pos 10,20:mes "<所持カード>" listbox sel1,100,Book pos 330,20:mes "<デッキ>" listbox sel2,100,Dek pos 20,300:objsize 600,48 button ">",*right button "<",*left button "試合開始",*battle stop *right if sel1=-1:goto *dek_make notesel Book noteget get,sel1 notedel sel1 notesel Dek noteadd get,0 objprm 0,Book objprm 1,Dek stop *left if sel2=-1:goto *dek_make notesel Dek noteget get,sel2 notedel sel2 notesel Book noteadd get,0 objprm 0,Book objprm 1,Dek stop *battle cls ;<<<<<-- 戦闘変数初期化 -->>>>> M_Dek=Dek E_Dek="0\n0\n0\n0\n0\n0\n1\n1\n1\n1\n1\n3\n4\n6\n6\n7\n7\n9\n12\n12\n13\n13" M_Lp=10 : E_Lp=10 M_Field=-1 : E_Field=-1 M_Mana=0,0,0 : E_Mana=0,0,0 M_Hand="" : E_Hand="" ;<<<<<-- 試合開始(カードドロー) -->>>>> repeat 3 gosub *M_Card_Draw gosub *E_Card_Draw loop ;<<<<<-- メインループ -->>>>> *main_loop dialog "あなたのターン" gosub *M_Card_Draw gosub *map_draw gosub *M_Main if M_Lp<1:dialog "ライフが0あなたの負け":goto *dek_make if E_Lp<1:dialog "ライフが0あなたの勝ち":goto *dek_make dialog "敵のターン" gosub *E_Card_Draw gosub *map_draw gosub *E_Main if M_Lp<1:dialog "ライフが0あなたの負け":goto *dek_make if E_Lp<1:dialog "ライフが0あなたの勝ち":goto *dek_make goto *main_loop ;<<<<<-- プレイヤーのメインフェイズ -->>>>> *M_Main pos 20,360 : objsize 600,24 combox sel1,,M_Hand if M_Field!-1 : button gosub "攻撃",*M_Atack button gosub "出す",*M_Set button gosub "終わり",*M_End stop *M_Atack //直接攻撃 if E_Field=-1{ E_Lp-=C_Power.M_Field dialog "直接攻撃" return } //敵との戦闘 if C_Power.M_Field<C_Power.E_Field:dialog C_Name.E_Field+"の勝利":M_Field=-1:return if C_Power.M_Field>C_Power.E_Field:dialog C_Name.M_Field+"の勝利":E_Field=-1:return dialog "相打ち":M_Field=-1:E_Field=-1 return *M_set if sel1=-1:goto *M_Main notesel M_Hand noteget data,sel1 data=int(data) //選択したカードが土地以外の場合のマナチェック repeat 3 if (C_Type.data!0)&(M_Mana.cnt<C_Cost.cnt.data):dialog "マナがたりません":goto *M_Main loop notedel sel1 //土地の場合マナの増加 if C_Type.data=0{ repeat 3 M_Mana.cnt+=C_Cost.cnt.data loop } //その他の場合マナの減少 if C_Type.data!0{ repeat 3 M_Mana.cnt-=C_Cost.cnt.data loop } //兵士の場合場に出る if C_Type.data=1:M_Field=data //効果がある場合効果発動 gosub *M_Effect return *M_end //ターンエンド return *M_Effect //プレイヤー側カードによる効果 if C_Effect.data=1:dialog "特殊能力:2点の自己ダメージ!",,C_Name.data:M_Lp-=2 if (C_Effect.data=2)&(E_Field!0):dialog "特殊能力:敵の破壊",,C_Name.data:E_Field=-1 if C_Effect.data=3:dialog "特殊能力:3点のライフ回復",,C_Name.data:M_LP+=3 if C_Effect.data=4:dialog "特殊能力:敵に5点のダメージ",,C_Name.data:E_LP-=5 if C_Effect.data=5:dialog "特殊能力:8点のライフ回復",,C_Name.data:M_LP+=8 return *M_Card_Draw //プレイヤーのドロー notesel M_Dek max=notemax if max=0:dialog "あなたの山札が0枚\n負け":end ran=rnd(max) noteget get,ran notedel ran notesel M_Hand noteadd get return ;<<<<<-- 敵のメインフェイズ -->>>>> *E_Main //戦闘するか考える if E_Field!-1{ if M_Field=-1 : goto *E_Atack if C_Power.E_Field>=C_Power.M_Field : goto *E_Atack } //配置を考える notesel E_Hand max=notemax if max=0:return repeat max noteget data,cnt data=int(data) //土地の場合 if c_type.data=0{ notedel cnt dialog C_Name.data+"を配置" repeat 3 E_Mana.cnt+=C_Cost.cnt.data loop gosub *E_Effect break } //その他の場合 if c_type.data!0{ flag=0 : repeat 3 if E_Mana.cnt<C_Cost.cnt.data : flag=1 : break loop if flag=1 : continue notedel cnt dialog C_Name.data+"を配置" repeat 3 E_Mana.cnt-=C_Cost.cnt.data loop //兵士カードだった場合場に出る if C_Type.data=1 : E_Field=data gosub *E_Effect break } loop return *E_Atack //直接攻撃 if M_Field=-1{ M_Lp-=C_Power.E_Field dialog "直接攻撃" return } //敵との戦闘 if C_Power.M_Field<C_Power.E_Field:dialog C_Name.E_Field+"の勝利":M_Field=-1:return if C_Power.M_Field>C_Power.E_Field:dialog C_Name.M_Field+"の勝利":E_Field=-1:return dialog "相打ち":M_Field=-1:E_Field=-1 return *E_Effect //敵カードによる効果 if C_Effect.data=1:dialog "特殊能力:2点の自己ダメージ!",,C_Name.data:E_Lp-=2 if (C_Effect.data=2)&(E_Field!0):dialog "特殊能力:敵の破壊",,C_Name.data:M_Field=-1 if C_Effect.data=3:dialog "特殊能力:3点のライフ回復",,C_Name.data:E_LP+=3 if C_Effect.data=4:dialog "特殊能力:敵に5点のダメージ",,C_Name.data:M_LP-=5 if C_Effect.data=5:dialog "特殊能力:8点のライフ回復",,C_Name.data:E_LP+=8 return *E_Card_Draw //敵のドロー notesel E_Dek max=notemax if max=0:dialog "敵の山札が0枚\n勝ち":end ran=rnd(max) noteget data,ran notedel ran notesel E_Hand noteadd data return ;<<<<<-- 画面絵画 -->>>>> *map_draw cls pos 10,10 mes "LP "+M_LP+" / "+E_LP //プレイヤー側の兵士表示 if M_Field!-1{ pos 100,150 mes C_Name.M_Field+"("+C_Power.M_Field+")" } //敵側の兵士表示 if E_Field!-1{ pos 100,100 mes C_Name.E_Field+"("+C_Power.E_Field+")" } //プレイヤー側のマナ表示 s_x=0 : repeat 3 if cnt=0 : color 0,0,255 if cnt=1 : color 255,0,0 if cnt=2 : color 0,255,0 repeat M_Mana.cnt pos ((cnt+s_x)*30)+10,280 mes "口" loop : s_x+=M_Mana.cnt loop //敵側のマナ表示 s_x=0 : repeat 3 if cnt=0 : color 0,0,255 if cnt=1 : color 255,0,0 if cnt=2 : color 0,255,0 repeat E_Mana.cnt pos ((cnt+s_x)*30)+10,50 mes "口" loop : s_x+=E_Mana.cnt loop return

長文になりました。
申し訳ありません。



この記事に返信する


cats

リンク

2012/4/8(Sun) 19:30:42|NO.45962

ゲームが終わらないのは終わるボタンのラベルにリターン命令が書かれているからです。
4行目に *Start と書いて213行目の return を goto *Start に変えてください。
ゲームの終了はできます。
あと101行目と102行目のあいだに

if get="" :goto *dek_make
を付け加えてください。
これがないとデッキに空白が入るバグが起きます。
付け加えた後の112行目と113行目の間にも同じ文を入れてください。
これも無いと所持カードに空白が入ってしまいます。
あとここは分からないのですがカードを4枚以上持っていないと
「あなたの山札が0枚」という表示がでます。



KA

リンク

2012/4/8(Sun) 21:13:30|NO.45965

長々とスクリプトを貼り付けるのは仕方が無いとして、我々に
は貴方がどんなデータを使っているのか分からないし、何処ま
で正常なのか分からない。少なくとも私はファイルエラーで止
まってしまう。

自分なりに考えてはいるようですが、正常な部分は書かずに分
からない部分だけ載せて下さい。これじゃ「全部分かりません
」と言っているような物です。不必要な部分を削って行けば、
解決する事も多いです。

それから、どう動くのが正常なのかは作った人にしか分かりま
せん。一見おかしい動作が、意図した動作だったりします、今
回の場合もカードのデータが無いので、正常な動きが分かりま
せん。



HSP_wakaba

リンク

2012/4/8(Sun) 22:02:09|NO.45967

cats 様

ご回答ありがとうございます。
ご指示通りにしたところ「終わり」が出来るようになりました。
ただ、やはり「出す」ことは無理なようです。

>カードを4枚以上持っていないと
これは、最初にカード三枚ドロー、
そして自分のターンに一枚ドローするからではないでしょうか。

ひとつは解決出来ました。
感謝です。



HSP_wakaba

リンク

2012/4/8(Sun) 22:12:29|NO.45969

KA 様

お叱りの言葉ごもっともです。
ソースを長々と載せたのは、ひとつでも多くの情報を提供しようという思いからでした。
でも、それが返って過ちとなってしまい申し訳ありませんでした。
反省しています。

以下は張り忘れていた「Card_Data.txt」の内容です。

湖,1,0,0,0,0,0, 砂,0,1,0,0,0,0, 林,0,0,1,0,0,0, 海,2,0,0,0,0,1, 山,0,2,0,0,0,1, 森,0,0,2,0,0,1, 水戦士,2,0,0,2,1,3, 炎戦士,0,2,0,4,1,1, 緑戦士,0,0,2,3,1,0, 水の導師,3,0,0,4,1,5, 炎の騎士,0,3,0,4,1,4, 緑の勇者,0,0,3,4,1,2, 青魔術,1,0,0,0,2,5, 赤魔術,0,1,0,0,2,4, 黒魔術,0,0,1,0,2,2,

「Card_game」フォルダの記述は私の環境の都合ですので削除してください。
また長文を失礼しました。
本当にすみませんでした。



KA

リンク

2012/4/10(Tue) 10:57:06|NO.45995

データを作ったが変数初期化エラーが数カ所発生。
仕方が無いので自前で対処したが、本当にチェックしているか疑問。
何とか動作はしたが「どう動けば正常なのか」が分からない。

最後の動きがおかしいというのは、「途中もおかしい」事がほとんど
です、最初からチェックしましょう。

逆に途中まで自信があるのなら、ダラダラ載せる事は無いでしょう。



HSP_wakaba

リンク

2012/4/11(Wed) 06:48:23|NO.46021

KA 様

ご確認ありがとうございます。
私の環境では「変数初期化エラー」は発生していません。
それに自信がないからこうしてお願いに上がっているのです。

初心者が悪いのでしたら謝罪いたします。
申し訳ありませんでした。



KA

リンク

2012/4/11(Wed) 07:31:58|NO.46023

エラーは環境の違いなのかな?

初心者が悪いと言っているのでは無くて、どう動けば正常なのか
が分からない、どこまで当てになるのか分からないのです。

長いスクリプトを載せて「自信が無いのでチェックして下さい」と
言われても、手の付けようがないでしょう。

全体では無く部分部分から、理解して下さい。



mamo

リンク

2012/4/11(Wed) 11:06:22|NO.46026

「出す」をクリックして表示されるのはどこ?



HSP_wakaba

リンク

2012/4/12(Thu) 08:47:30|NO.46046

cats様
KA様
mamo様

様々なご回答ありがとうございました。
問題は自力で解決しました。
お騒がせいたしましたことをお詫び申し上げます。
すみませんでした。



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