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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0328
テイル判定について38解決


テイル

リンク

2008/3/28(Fri) 14:03:05|NO.14656

作成中のゲームの概要
各国がエリア(領土)の奪い合いをし、全て制覇するまで
自動的に戦い続ける

参考URL
http://www.nicovideo.jp/watch/sm820860

Lifeゲームの改造版を作っているのですが、どうもエリア判定が
上手くいかなくて困っています、周囲のパネルの強さをランダム
に振り分けて強かった方のパネルの色に変えるという記述をして
いるのですが上手くいきません・・・どなたかご助力お願いでき
ませんでしょうか。



andomize buffer 1 picload "haikei1.JPG" buffer 2 picload "1.jpg" pos 0,0 :screen 0,800,600 gmode 2 *GETSET gmode 2 gosub *SETMAP *MAINLOOP redraw 0 pos 0,0:gcopy 1,0,0,800,600 gosub *MAPING gosub *MAPWar redraw 1 title ""+A A+=1 wait 15 goto *MAINLOOP *MAPWar ;■■■   ■■■ ■□■ □□□ ;■□■ → ■■■ ■□■ →■■■ ;■■■   ■■■ ■■■ ■■■ ;*1.1マスを中心に攻め込まれるかどうかの判定をする ;*2.全マスを判定 ;top=rnd(100) ;inside=rnd(100) if MAP(cnt,RCNT)=0:AA=100 if MAP(cnt,RCNT)=1:BB=rnd(100) if MAP(cnt,RCNT)=2:CC=rnd(100) if MAP(cnt,RCNT)=3:DD=rnd(100) if MAP(cnt,RCNT)=4:EE=rnd(100) if MAP(cnt,RCNT)=5:FF=rnd(100) if MAP(cnt,RCNT)=6:GG=rnd(70) HH=rnd(100);L KK=rnd(60);I ;DCNT=0 RCNT=0 LH=0 LLH=0 LLLH=0 LLLLH=0 DH=0 dim RS,7,0 RS(0,0)=LC,NC,CC,GC,HC dim AS,7,0 AS(0,0)=1,2,3,4,5,6 ;ASCount ASC+=1 ;AS(ASC) repeat 26 RCNT=cnt repeat 26 ; (*AS=国家間攻撃判定システム:各国を入れ替えて攻防判定) ;Top (RS=抑制システム:1ターンにつき1回のみ侵攻判定) if LH=0:{ if MAP(cnt,RCNT)=1{ if MAP(cnt,RCNT+1)=6{ if HH > KK :MAP(cnt,RCNT+1)=1 LH=3 } } } if LH=0:{ if MAP(cnt,RCNT)=1{ if MAP(cnt,RCNT-1)=6{ if HH > KK :MAP(cnt,RCNT-1)=1 LLH=3 } } } if LH=0:{ if MAP(cnt,RCNT)=1{ if MAP(cnt-1,RCNT)=6{ if HH > KK :MAP(cnt-1,RCNT)=1 LLLH=3 } } } if LH=0:{ if MAP(cnt,RCNT)=1{ if MAP(cnt+1,RCNT)=6{ if HH > KK :MAP(cnt+1,RCNT)=1 LLLLH=3 } } } if DH=0 if MAP(cnt,RCNT)=6{ if MAP(cnt,RCNT-1)=1{ if HH < KK :MAP(cnt,RCNT-1)=6{ DH=3 } } } loop loop return ;[MAPデータ書き込み] *MAPING repeat 26 RCNT=cnt repeat 26 if MAP(cnt,RCNT)=0{ pos cnt*16,RCNT*16:;gcopy 2,0,0,15,15;黒 } if MAP(cnt,RCNT)=1{ pos cnt*16,RCNT*16:gcopy 2,15,0,15,15;青 } if MAP(cnt,RCNT)=2{ pos cnt*16,RCNT*16:gcopy 2,30,0,15,15;赤 } if MAP(cnt,RCNT)=3{ pos cnt*16,RCNT*16:gcopy 2,45,0,15,15;緑 } if MAP(cnt,RCNT)=4{ pos cnt*16,RCNT*16:gcopy 2,60,0,15,15;紫 } if MAP(cnt,RCNT)=5{ pos cnt*16,RCNT*16:gcopy 2,75,0,15,15;黄 } if MAP(cnt,RCNT)=6{ pos cnt*16,RCNT*16:gcopy 2,90,0,15,15;灰 } loop loop return ;[MAPデータ読み込み] *SETMAP dim MAP,26,27 ; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 MAP(0,1) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,2) =0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 MAP(0,3) =0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 MAP(0,4) =0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,5,5,5,0,0,0,0,0 MAP(0,5) =0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,5,5,5,0,0,0,0 MAP(0,6) =0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,5,5,5,0,5,0,0 MAP(0,7) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,5,5,5,5,5,5,5,0,0 MAP(0,8) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,5,0,5,5,5,5,0,0,0 MAP(0,9) =0,0,0,0,2,2,0,0,0,0,0,0,0,0,1,0,0,5,0,0,5,5,0,0,0,0 MAP(0,10)=0,0,0,2,2,2,2,2,0,0,0,0,0,6,6,6,0,5,0,0,0,0,0,0,0,0 MAP(0,11)=0,0,0,2,2,2,2,2,0,0,0,0,6,6,6,6,6,6,0,0,0,0,0,0,0,0 MAP(0,12)=0,0,2,2,2,2,2,2,2,2,2,2,6,6,6,6,6,6,6,0,0,0,0,0,0,0 MAP(0,13)=0,0,0,2,2,2,2,2,0,0,0,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0 MAP(0,14)=0,0,0,2,0,0,2,0,0,0,0,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0 MAP(0,15)=0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,6,6,6,0,0,0,0,0,0,0,0 MAP(0,16)=0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,6,6,4,4,4,0,0,0,0,0,0 MAP(0,17)=0,0,0,0,0,0,0,0,3,3,0,0,3,0,0,0,0,0,0,4,4,0,0,0,0,0 MAP(0,18)=0,0,0,0,0,0,3,3,3,3,0,0,3,0,0,0,0,0,0,4,4,4,4,0,0,0 MAP(0,19)=0,0,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,4,4,4,4,4,4,0,0,0 MAP(0,20)=0,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0,4,4,4,4,4,0,0,0,0 MAP(0,21)=0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,4,4,0,4,4,4,0,0,0 MAP(0,22)=0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0 MAP(0,23)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,24)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,25)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,26)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 return



この記事に返信する


テイル

リンク

2008/3/28(Fri) 14:19:13|NO.14657

目指している処理

エリアの   ランダムに強さを決定
 青青青     [01][27][24]
 青赤赤  ⇔  [07][35][28]
 緑緑赤    [98][38][99]

      ↓
 真ん中の赤の周囲のエリアの数値を比較して
 高い方の色に次のターン時に変更する。
 この場合は赤色を次のターン時に緑色に変える
 
 上下左右のエリアの数値の比較
 外周は比較対象外にする
 
・・・判りづらかったらごめんなさいです。



naznyark

リンク

2008/3/29(Sat) 03:25:03|NO.14675

テイルさんがのせたソースコードはそのままでは実行することができないうえに
(画像ファイルがありませんから)、
一部の変数名が暗号的すぎて何用の変数だかわからないので
他人が手を加えることができるものではありません。


参考用に簡単なライフゲームっぽいもののサンプルを載せておきます。
(クリックするたびに1ターン進みます。)
ポイントは個々のマスの生存判定中はマップ状態を変更せず、
全マスの生存判定終了後にまとめてマップ状態を変更することです。

randomize onclick gosub *on_click gosub *set *main gosub *setpower redraw 0 color 255, 255, 255 : boxf gosub *draw redraw 1 f = 0 repeat wait 3 if ( f ) { break } loop gosub *war goto *main *on_click f = 1 return *setpower // パワー設定 repeat 3 : i = cnt repeat 3 : j = cnt pow( j, i ) = rnd( 100 ) loop loop return *war // 判定 repeat 3 : i = cnt repeat 3 : j = cnt // 最もパワーの大きい方向を探す c = 0 p = 0 // 左を調べる if ( j - 1 >= 0 ) { if ( pow( j - 1, i ) > p ) { p = pow( j - 1, i ) c = map( j - 1, i ) } } // 上を調べる if ( i - 1 >= 0 ) { if ( pow( j, i - 1 ) > p ) { p = pow( j, i - 1 ) c = map( j, i - 1 ) } } // 右を調べる if ( j + 1 < 3 ) { if ( pow( j + 1, i ) > p ) { p = pow( j + 1, i ) c = map( j + 1, i ) } } // 下を調べる if ( i + 1 < 3 ) { if ( pow( j, i + 1 ) > p ) { p = pow( j, i + 1 ) c = map( j, i + 1 ) } } // 最もパワーが大きかった方向の色に変更 newmap( j, i ) = c loop loop // マップ状態の変更 repeat 3 : i = cnt repeat 3 : j = cnt map( j, i ) = newmap( j, i ) loop loop return *draw // 描画 color 0, 0, 0 repeat 3 : i = cnt repeat 3 : j = cnt pos j * 96, i * 16 mes "C:" + map( j, i ) + " P:" + pow( j, i ) loop loop return *set // マップ初期化 dim map, 3, 3 dim newmap, 3, 3 dim pow, 3, 3 repeat 3 : i = cnt repeat 3 : j = cnt map( j, i ) = rnd( 5 ) + 1 loop loop return



テイル

リンク

2008/3/29(Sat) 07:45:49|NO.14676

>naznyarkさん
>テイルさんがのせたソースコードはそのままでは実行することができないうえに
>(画像ファイルがありませんから)、
>一部の変数名が暗号的すぎて何用の変数だかわからないので
>他人が手を加えることができるものではありません。

手間をかけさせてしまった上に、内容不足すみませんでした(汗
ソースコードと画像ファイルの入ったZIPファイルをUPローダに
上げましたので、もしよろしかったら見て頂けると幸いです。

http://www6.uploader.jp/dl/maroufennriru4/maroufennriru4_uljp00003.zip.html

avast!の最新バージョンでウィルスが入ってないか確認済みですが
念のため、ダウンロードしたらチェックして頂けると嬉しいです。



uhouho

リンク

2008/3/29(Sat) 12:31:45|NO.14678

>画像ファイル
…何か、
Copyright(C)2005-2008 SQUARE ENIX …と見えるのですが(汗

naznyarkさんのサンプルは参考にされましたか?



テイル

リンク

2008/3/29(Sat) 14:07:13|NO.14679

>…何か、
>Copyright(C)2005-2008 SQUARE ENIX …と見えるのですが(汗
ファン活動の一環なので大丈夫です〜(GMさんが大丈夫らしいといっていましたので

>naznyarkさんのサンプルは参考にされましたか?
naznyarkさんのプログラムを参考にする前のプログラム
を上げました!いま、そのプログラムの方を参考にして
組んでるところです。



uhouho

リンク

2008/3/29(Sat) 14:20:14|NO.14680

> ファン活動の一環なので大丈夫です〜
> いま、そのプログラムの方を参考にして組んでるところです
どうやら早ちとりのようですね、失礼しました。(^^;
開発頑張って下さい〜



Megane

リンク

2008/3/29(Sat) 16:02:24|NO.14682

<<「あるセル(ます)について、
乱数で上下左右のセルのうちひとつを選んで
セルの色を選ばれたセルと同じにする」
…という処理を全部のセルに対してする>>


という方法でも、テイル氏の目指すところの領土の移り変わりは表現できる…のでしょうか。



naznyark

リンク

2008/3/30(Sun) 02:11:56|NO.14690

ダウンロードしてプログラムを実行してみましたが、
テイルさんがこのプログラムのどういう動作を問題としているのかが
わからないので的確な回答はできません。


とりあえず if 文の書式を正しく理解していないのでは?
と思われる部分が見られるので、そこを修正して
各陣営(青と灰)が1ターンに1マスずつしか侵攻できないようにしたものを
載せておきます。

*MAPWar の部分を以下のように修正してください。

*MAPWar HH=rnd(100);青マスの強さ KK=rnd(60);灰色マスの強さ ;DCNT=0 RCNT=0 LH=0 LLH=0 LLLH=0 LLLLH=0 DH=0 repeat 26 RCNT=cnt repeat 26 if ( LH == 0 ) & ( LLH == 0 ) & ( LLLH == 0 ) & ( LLLLH == 0 ) { ;青マス>灰色マス侵攻(下判定) if MAP(cnt,RCNT)=1 { if MAP(cnt,RCNT+1)=6 { if HH > KK { MAP(cnt,RCNT+1)=1 LH=3 } } } } if ( LH == 0 ) & ( LLH == 0 ) & ( LLLH == 0 ) & ( LLLLH == 0 ) { ;青マス>灰色マス侵攻(上判定) if MAP(cnt,RCNT)=1 { if MAP(cnt,RCNT-1)=6 { if HH > KK { MAP(cnt,RCNT-1)=1 LLH=3 } } } } if ( LH == 0 ) & ( LLH == 0 ) & ( LLLH == 0 ) & ( LLLLH == 0 ) { ;青マス>灰色マス侵攻(左判定) if MAP(cnt,RCNT)=1 { if MAP(cnt-1,RCNT)=6 { if HH > KK { MAP(cnt-1,RCNT)=1 LLLH=3 } } } } if ( LH == 0 ) & ( LLH == 0 ) & ( LLLH == 0 ) & ( LLLLH == 0 ) { ;青マス>灰色マス侵攻(右判定) if MAP(cnt,RCNT)=1 { if MAP(cnt+1,RCNT)=6 { if HH > KK { MAP(cnt+1,RCNT)=1 LLLLH=3 } } } } if DH=0 { ;灰色マス>青色マス侵攻(上判定) if MAP(cnt,RCNT)=6 { if MAP(cnt,RCNT-1)=1 { if HH < KK { MAP(cnt,RCNT-1)=6 DH=3 } } } } loop loop return



テイル

リンク

2008/3/31(Mon) 10:12:33|NO.14722

ご返答下さった方ありがとうございます!
プログラムの方なのですが、まだまだ開発に
時間がかかっているところです。Upするには
結構時間がかかるかも知れないです(汗

>テイルさんがこのプログラムのどういう動作を問題としているのかが
>わからないので的確な回答はできません。
度重なる説明不足で申し訳ありません。問題にしている点なのですが
幾つかあります。(下記)

1.1つの判定プログラムで(上下左右の4つをまとめて1つ)
 5つの国+真ん中の大陸の軍団の攻防判定をするということが
 出来なくて困っていたこと
2.想定していた判定と実際に動作する判定がかなり異なっており
 どうすれば想定したものになるのかがわからなくて困っていたこと


2の判定について
想定していたもの

[1][1][3]   [1][2][2]   [2][2][3]
[1][2][2] → [2][1][3] → [3][2][1]
[3][1][2]   [3][1][2]   [3][3][3]

上記の図の左下の3ように孤立しても、各マスの強さ判定で強ければ
生き残ったり勢力を強くしたり移動しながら生きながらえたりという
かなり自由に動き回る(運が(数値が)よければ)スクリプトを作ろ
うと思ったのですが・・・自分が作ったのでは一気に生き残るか負けるか
の2択にしかならないので困っていました。



テイル

リンク

2008/3/31(Mon) 10:17:16|NO.14723

補足なのですが
>1.1つの判定プログラムで(上下左右の4つをまとめて1つ)
> 5つの国+真ん中の大陸の軍団の攻防判定をするということが
> 出来なくて困っていたこと

当初、1つの判定プログラム郡に各国のパネルと強さを入れ替えて
判定するのを目指していました。dim要素を使って各国のパネルと
強さを、さらに色を変える変数も変えようと思ったのですが発想が
まずかったのか動かないまま不発に終わりました(汗

過去にやった座標と色変数を直接指定して変更する方法でも
良かったのですが膨大な量を書き込まなくてはいけなくなる
ので断念した経歴があります。そこでスマートに変数を入れ
替えて判定するプログラムを作ろうと思ったわけなのですが・・・。

どちらにしてもかなり勉強不足です。お手数お掛けして申し訳ないです(´・ω・`)



uhouho

リンク

2008/3/31(Mon) 20:05:15|NO.14736

とりあえず、NO.14657の処理のスクリプトを作ってみました。

*MAPWarを改造し、
*BATTLE(戦闘処理の中身のサブルーチン)を加えています。


*MAPWar RCNT=0 ;マップの強さを決定 dim MAP_Power,26,27;国の強さを保存 dim MAP_Result,26,27;結果を一時的に保存 repeat 26 RCNT=cnt repeat 26 MAP_Result(cnt,RCNT)=MAP(cnt,RCNT) loop loop ; repeat 26 RCNT=cnt repeat 26 if MAP(cnt,RCNT)=0{;国が無いなら脱ループ MAP_Power(cnt,RCNT)=-1 } if MAP(cnt,RCNT)=1{;青国の強さを決定 MAP_Power(cnt,RCNT)=rnd(100) } if MAP(cnt,RCNT)=2{;赤国の強さを決定 MAP_Power(cnt,RCNT)=rnd(95) } if MAP(cnt,RCNT)=3{;緑国の強さを決定 MAP_Power(cnt,RCNT)=rnd(90) } if MAP(cnt,RCNT)=4{;紫国の強さを決定 MAP_Power(cnt,RCNT)=rnd(80) } if MAP(cnt,RCNT)=5{;黄国の強さを決定 MAP_Power(cnt,RCNT)=rnd(70) } if MAP(cnt,RCNT)=5{;灰(国?)の強さを決定 MAP_Power(cnt,RCNT)=rnd(60) } loop loop ;戦闘(?)処理 repeat 26 RCNT=cnt repeat 26 LCNT=cnt if MAP(LCNT,RCNT)=0:continue;国が無いなら脱ループ gosub *BATTLE loop loop ;戦闘結果を元のマップに代入 repeat 26 RCNT=cnt repeat 26 MAP(cnt,RCNT)=MAP_Result(cnt,RCNT) loop loop return ;- *BATTLE;戦闘処理の中身 ;↑判定 Max_Power=MAP_Power(LCNT,RCNT) if RCNT!0{ if MAP_Power(LCNT,RCNT-1)>Max_Power{ MAP_Result(LCNT,RCNT)=MAP(LCNT,RCNT-1) Max_Power=MAP_Power(LCNT,RCNT-1) } } ;→判定 if LCNT!25{ if MAP_Power(LCNT+1,RCNT)>Max_Power{ MAP_Result(LCNT,RCNT)=MAP(LCNT+1,RCNT) Max_Power=MAP_Power(LCNT+1,RCNT) } } ;↓判定 if RCNT!26{ if MAP_Power(LCNT,RCNT+1)>Max_Power{ MAP_Result(LCNT,RCNT)=MAP(LCNT,RCNT+1) Max_Power=MAP_Power(LCNT,RCNT+1) } } ;←判定 if LCNT!0{ if MAP_Power(LCNT-1,RCNT)>Max_Power{ MAP_Result(LCNT,RCNT)=MAP(LCNT-1,RCNT) Max_Power=MAP_Power(LCNT-1,RCNT) } } return



Megane

リンク

2008/3/31(Mon) 22:03:09|NO.14739


#define xsiz 10 #define ysiz 10 #define fsiz 32 ;ますサイズ randomize dim f , xsiz,ysiz ;フィールド dim ff , xsiz,ysiz ;フィールド(結果を記憶) dim s , xsiz,ysiz ;強さ screen 2,fsiz*5,fsiz color 63,63,63 : boxf 0,0,fsiz-1,fsiz-1 color 191,63,63 : boxf fsiz,0,2*fsiz-1,fsiz-1 color 63,191,63 : boxf 2*fsiz,0,3*fsiz-1,fsiz-1 color 63,63,191 : boxf 3*fsiz,0,4*fsiz-1,fsiz-1 color 191,191,63 : boxf 4*fsiz,0,5*fsiz-1,fsiz-1 screen 0,fsiz*xsiz,fsiz*ysiz f(0,0) = 0,0,0,0,0,0,0,0,0,0 f(0,1) = 0,1,1,0,2,2,2,2,2,0 f(0,2) = 0,1,1,0,2,2,2,2,2,0 f(0,3) = 0,1,1,1,2,2,0,3,0,0 f(0,4) = 0,0,1,1,2,0,0,3,3,0 f(0,5) = 0,0,1,1,4,0,0,3,3,0 f(0,6) = 0,0,0,0,4,4,3,3,3,0 f(0,7) = 0,0,0,0,4,4,4,3,3,0 f(0,8) = 0,0,4,4,4,4,4,0,0,0 f(0,9) = 0,0,0,0,0,0,0,0,0,0 *mainloop ;強さを決め、描画 color 255,255,255 repeat ysiz y=cnt repeat xsiz x=cnt pos x*fsiz,y*fsiz : gcopy 2 , f(x,y)*fsiz,0 , fsiz,fsiz if f(x,y) : s(x,y)=rnd(100) : else : s(x,y)=-1 pos x*fsiz+4,y*fsiz+4 : mes s(x,y) loop loop tn++ : title "左クリックで次のターン ターン"+tn repeat wait 30 : stick k,256 : if k&256 : break loop ;比較(左上右下中の順) repeat ysiz-2 , 1 y = cnt repeat xsiz-2 , 1 x = cnt if f(x,y){ ff(x,y)=f(x-1,y) : a=s(x-1,y) if s(x,y-1)>a : ff(x,y)=f(x,y-1) : a=s(x,y-1) if s(x+1,y)>a : ff(x,y)=f(x+1,y) : a=s(x+1,y) if s(x,y+1)>a : ff(x,y)=f(x,y+1) : a=s(x,y+1) if s(x,y)>a : ff(x,y)=f(x,y) }else { ff(x,y)=0} loop loop ;配列fにコピー memcpy f , ff , 4*xsiz*ysiz goto *mainloop

テイル氏のイメージしているのはこういうものでしょうか?



uhouho

リンク

2008/3/31(Mon) 22:34:44|NO.14740

NO.14736の訂正:

if MAP(cnt,RCNT)=5{;灰(国?)の強さを決定


if MAP(cnt,RCNT)=6{;灰(国?)の強さを決定
にして下さい。
強さを変えた時、やけに黄国が負けると思ったw



テイル

リンク

2008/4/1(Tue) 21:10:23|NO.14762

>uhouhoさん
修正内容ありがとうございます!私もそのスクリプトを動かした時に
挙動がちょっと変わっていたのでなんでだろう?と調べたら
if MAP(cnt,RCNT)=5{;灰(国?)の強さを決定が被っていたのに
気がつき修正しました。早めに掲示板に書き込めばよかったです(汗

私の作ったプログラムの間違いを教えてくださったばかりか
非常に作りこまれたプログラムを書いてくださっり本当に感謝しております!
ありがとうございましたm(_ _)m

>Meganeさん
はい、確かにこのイメージです。
それにしてもこんなに凄いプログラムが書けるなんて
羨ましい限りです・・・。

ところでちょっとお聞きしたいのですが、今作っているこのプログラムを
一般公開したいのですが、その際にスペシャルサンクスのところでお二方の
ネームを乗せてもよろしいでしょうか?あと、このソースをお借りして
プログラムを動かしているのですが公開してもよろしいでしょうか?
ご返答お願いいたしますm(_ _)m

プログラムソースの方も公開しようかなぁ・・・と思っています。



uhouho

リンク

2008/4/1(Tue) 21:30:50|NO.14763

お役に立てたようで、なによりです(^^)
> スペシャルサンクス
> 公開
僕は全く構いませんよ〜



テイル

リンク

2008/4/3(Thu) 18:58:05|NO.14808

あと少しの改良で完成しそうです。沢山のご指導ありがとうございましたm(_ _)m



テイル

リンク

2008/4/5(Sat) 09:54:37|NO.14878

前回に作ったプログラムに「***国が滅んだら、チャット風にお知らせする」
と言った機能を付けようと思い、プログラムを組んでいるのですがなかなか
上手くいきません。何度も質問をしてすみませんがよろしくお願いいたしますm(_ _)m


想定している事
・8行程度のスペースに、『イベント』『国が滅亡』『システム変更』
 等があった場合、チャット風に画面に表示する

例)
+――――――――――――――――――――+
|>青国が滅亡しました          |
|>黄色国で謀反が起きました!      |
|>ゲーム速度が変更されました      |
|   以下5行分のスペース       |
+――――――――――――――――――――+

・文章を8行が埋まるまで下に表示していく
 8行が埋まったら一番上にある古い文章から
 削除していき、新しい文章を下に表示する
 (一番上の分を消して2〜8行目の文章を
  ひとつ上に移動して新しい分を書き加える)

公開中の中で最新版のプログラム
http://www6.uploader.jp/dl/maroufennriru4/maroufennriru4_uljp00004.zip.html

;開発具合:公開中プログラム<当ソース title"fez_life_ver2.3.hsp" randomize buffer 1 picload "haikei2.JPG" buffer 2 picload "1.jpg" buffer 7 picload "123.jpg" buffer 8 picload "456.jpg" mmload "m103.wma",3,1 mmload "m107.wma",4,1 mmload "m12.wma",5,1 mmload "m13.wma",6,1 mmload "m19.wma",9,1 pos 0,0 :screen 0,800,600 gmode 2 ;goto *GETSET HIT=1 cls 4 mmplay 9 *Aloop redraw 0 color 0,0,0:boxf 0,0,800,600 stick sticKY,10 if sticKY&2 :y-=30:Hit-=1: if sticKY&8 :y+=30:Hit+=1: if sticKY&32 :cls 4:goto *Confirmation if Hit<1:Hit=5 if Hit>5:Hit=1 if y<0:y=120 if y>120:y=0 pos 250,131+y:gcopy 7,0,0,300,25 color 255,255,255 font "",30,16 pos 250,70:mes "Where is your position country?" pos 250,130:if Hit=1:color 255,212,0:mes"Lelesord":pos 60,100:gcopy 8,000,000,150,150:else:color 255,255,255:mes"Lelesord" pos 250,160:if Hit=2:color 255,212,0:mes"Netzawar":pos 60,100:gcopy 8,148,000,150,150:else:color 255,255,255:mes"Netzawar" pos 250,190:if Hit=3:color 255,212,0:mes"Cesedria":pos 60,100:gcopy 8,280,000,148,150:else:color 255,255,255:mes"Cesedria" pos 250,220:if Hit=4:color 255,212,0:mes"Geburand":pos 60,100:gcopy 8,135,170,150,160:else:color 255,255,255:mes"Geburand" pos 250,250:if Hit=5:color 255,212,0:mes"Hordaine":pos 60,100:gcopy 8,000,170,150,160:else:color 255,255,255:mes"Hordaine" wait 5 redraw 1 goto *Aloop stop *Confirmation redraw 0 color 0,0,0:boxf 0,0,800,600 color 255,255,255 font "",30,16 stick sticKY2 if sticKY2&2 :y2-=30 if sticKY2&8 :y2+=30 if sticKY2&32 :if XTIM>5:if y2=0:goto *GETSET:else:goto *Aloop if y2<0:y2=30 if y2>30:y2=0 pos 250,191+y2:gcopy 7,0,0,300,25 pos 250,160:mes "Is it correct by this choice?" pos 250,190:mes "Yes" pos 250,220:mes "No" redraw 1 XTIM+=3 wait 5 goto *Confirmation *GETSET sysfont gmode 2 gosub *SETMAP *MAINLOOP redraw 0 pos 0,0:gcopy 1,0,0,800,600 gosub *MAPING;MAP更新 gosub *MAPWar;MAP侵防判定 title "fez_life_ver2.3.hsp" pos 450,100 color 0,0,0 mes""+A mes""+B mes""+C mes""+D mes""+E mes""+F mes""+DDD color 0,0,0 :boxf 450,230,652,310 color 0,0,255 :boxf 450,230,450+A,242:if A=0:color 255,0,0:pos 460,230:font "",12,:mes "滅亡":if AA=0:gosub *Count:AA=1 color 255,0,0 :boxf 450,243,450+B,256:if B=0:color 255,0,0:pos 460,244:font "",12,:mes "滅亡":if BB=0:gosub *Count:BB=1 color 0,255,0 :boxf 450,257,450+C,269:if C=0:color 255,0,0:pos 460,258:font "",12,:mes "滅亡":if CC=0:gosub *Count:CC=1 color 255,0,128 :boxf 450,270,450+D,282:if D=0:color 255,0,0:pos 460,271:font "",12,:mes "滅亡":if DD=0:gosub *Count:DD=1 color 255,212,0 :boxf 450,283,450+E,295:if E=0:color 255,0,0:pos 460,285:font "",12,:mes "滅亡":if EE=0:gosub *Count:EE=1 color 128,128,128:boxf 450,296,450+F,308:if F=0:color 255,0,0:pos 460,299:font "",12,:mes "滅亡":if FF=0:gosub *Count:FF=1 if det>4:if Hit=1:if AA=0:win=1 if det>4:if Hit=2:if BB=0:win=1 if det>4:if Hit=3:if CC=0:win=1 if det>4:if Hit=4:if DD=0:win=1 if det>4:if Hit=5:if EE=0:win=1 if det<3:if FFF=0:mmplay 3:FFF=1 if det>2 and det<5:if FFFF=0:mmplay 4:FFFF=1 if det>4:if FFFFF=0:if win=1:mmplay 5:FFFFF=1:else:mmplay 6:FFFFF=1 pos ,450:color 0,0,0:mes ""+det A=0 B=0 C=0 D=0 E=0 F=0 pos ,444 if AA=1:pos 10,::font"",14:color 255,255,0:mes"エル国が滅亡しました":A1=1 if BB=1:pos 10,::font"",14:color 255,255,0:mes"ネツ国が滅亡しました":B1=1 if CC=1:pos 10,::font"",14:color 255,255,0:mes"カセ国が滅亡しました":C1=1 if DD=1:pos 10,::font"",14:color 255,255,0:mes"ゲブ国が滅亡しました":D1=1 if EE=1:pos 10,::font"",14:color 255,255,0:mes"ホル国が滅亡しました":E1=1 redraw 1 ;A+=1 wait 1 goto *MAINLOOP *Count det+=1 posX+20 return *MAPWar RCNT=0 ;マップの強さを決定 dim MAP_Power,26,27;国の強さを保存 dim MAP_Result,26,27;結果を一時的に保存 repeat 26 RCNT=cnt repeat 26 MAP_Result(cnt,RCNT)=MAP(cnt,RCNT) loop loop ; repeat 26 RCNT=cnt repeat 26 if MAP(cnt,RCNT)=0{;国が無いなら脱ループ MAP_Power(cnt,RCNT)=-1 } if MAP(cnt,RCNT)=1{;青国の強さを決定 MAP_Power(cnt,RCNT)=rnd(140) } if MAP(cnt,RCNT)=2{;赤国の強さを決定 MAP_Power(cnt,RCNT)=rnd(100) } if MAP(cnt,RCNT)=3{;緑国の強さを決定 MAP_Power(cnt,RCNT)=rnd(100) } if MAP(cnt,RCNT)=4{;紫国の強さを決定 MAP_Power(cnt,RCNT)=rnd(100) } if MAP(cnt,RCNT)=5{;黄国の強さを決定 MAP_Power(cnt,RCNT)=rnd(100) } if MAP(cnt,RCNT)=6{;灰(国?)の強さを決定 MAP_Power(cnt,RCNT)=rnd(95) } loop loop ;戦闘(?)処理 repeat 26 RCNT=cnt repeat 26 LCNT=cnt if MAP(LCNT,RCNT)=0:continue;国が無いなら脱ループ gosub *BATTLE loop loop ;戦闘結果を元のマップに代入 repeat 26 RCNT=cnt repeat 26 MAP(cnt,RCNT)=MAP_Result(cnt,RCNT) if YOKUSEI=0:if MAP(cnt,RCNT)=1:A+=1 ;国土数表示 if YOKUSEI=0:if MAP(cnt,RCNT)=2:B+=1 ;国土数表示 if YOKUSEI=0:if MAP(cnt,RCNT)=3:C+=1 ;国土数表示 if YOKUSEI=0:if MAP(cnt,RCNT)=4:D+=1 ;国土数表示 if YOKUSEI=0:if MAP(cnt,RCNT)=5:E+=1 ;国土数表示 if YOKUSEI=0:if MAP(cnt,RCNT)=6:F+=1 ;国土数表示 loop loop return ;- *BATTLE;戦闘処理の中身 ;↑判定 Max_Power=MAP_Power(LCNT,RCNT) if RCNT!0{ if MAP_Power(LCNT,RCNT-1)>Max_Power{ MAP_Result(LCNT,RCNT)=MAP(LCNT,RCNT-1) Max_Power=MAP_Power(LCNT,RCNT-1) } } ;→判定 if LCNT!25{ if MAP_Power(LCNT+1,RCNT)>Max_Power{ MAP_Result(LCNT,RCNT)=MAP(LCNT+1,RCNT) Max_Power=MAP_Power(LCNT+1,RCNT) } } ;↓判定 if RCNT!26{ if MAP_Power(LCNT,RCNT+1)>Max_Power{ MAP_Result(LCNT,RCNT)=MAP(LCNT,RCNT+1) Max_Power=MAP_Power(LCNT,RCNT+1) } } ;←判定 if LCNT!0{ if MAP_Power(LCNT-1,RCNT)>Max_Power{ MAP_Result(LCNT,RCNT)=MAP(LCNT-1,RCNT) Max_Power=MAP_Power(LCNT-1,RCNT) } } return ;[MAPデータ書き込み] *MAPING repeat 26 RCNT=cnt repeat 26 if MAP(cnt,RCNT)=0{ pos cnt*16,RCNT*16:;gcopy 2,0,0,15,15;黒マス } if MAP(cnt,RCNT)=1{ pos cnt*16,RCNT*16:gcopy 2,15,0,15,15;青 } if MAP(cnt,RCNT)=2{ pos cnt*16,RCNT*16:gcopy 2,30,0,15,15;赤 } if MAP(cnt,RCNT)=3{ pos cnt*16,RCNT*16:gcopy 2,45,0,15,15;緑 } if MAP(cnt,RCNT)=4{ pos cnt*16,RCNT*16:gcopy 2,60,0,15,15;紫 } if MAP(cnt,RCNT)=5{ pos cnt*16,RCNT*16:gcopy 2,75,0,15,15;黄 } if MAP(cnt,RCNT)=6{ pos cnt*16,RCNT*16:gcopy 2,90,0,15,15;灰 } loop loop return ;[MAPデータ読み込み] *SETMAP dim MAP,26,27 ; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 MAP(0,1) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,2) =0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 MAP(0,3) =0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 MAP(0,4) =0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,0,0,0,0,0 MAP(0,5) =0,0,0,0,0,2,0,0,0,0,0,1,1,0,1,1,0,0,0,5,5,5,0,0,0,0 MAP(0,6) =0,0,0,0,0,2,0,0,0,0,0,1,1,0,1,1,0,0,0,5,5,5,0,5,0,0 MAP(0,7) =0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,5,5,5,5,5,5,5,0,0 MAP(0,8) =0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,5,0,5,5,5,5,0,0,0 MAP(0,9) =0,0,0,0,2,2,0,0,0,0,0,0,0,0,1,0,0,5,0,0,5,5,0,0,0,0 MAP(0,10)=0,0,0,2,2,2,2,2,0,0,0,0,0,6,6,6,0,5,0,5,5,0,0,0,0,0 MAP(0,11)=0,0,0,2,2,2,2,2,0,0,0,0,6,6,6,6,6,6,0,0,5,0,0,0,0,0 MAP(0,12)=0,0,2,2,2,2,2,2,2,2,2,2,6,6,6,6,6,6,6,0,4,0,0,0,0,0 MAP(0,13)=0,0,0,2,2,2,2,2,0,0,0,6,6,6,6,6,6,6,6,0,4,0,0,0,0,0 MAP(0,14)=0,0,0,2,0,0,2,0,0,0,0,6,6,6,6,6,6,6,0,0,4,0,0,0,0,0 MAP(0,15)=0,0,0,0,0,0,2,0,0,0,0,0,6,6,0,6,6,6,0,4,4,0,0,0,0,0 MAP(0,16)=0,0,0,0,0,0,2,3,3,0,0,0,6,0,0,6,6,4,4,4,0,0,0,0,0,0 MAP(0,17)=0,0,0,0,0,0,0,0,3,3,0,0,3,0,0,0,0,0,0,4,4,0,0,0,0,0 MAP(0,18)=0,0,0,0,0,0,3,3,3,3,0,0,3,0,0,0,0,0,0,4,4,4,4,0,0,0 MAP(0,19)=0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,0,0,0 MAP(0,20)=0,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0,4,4,4,4,4,0,0,0,0 MAP(0,21)=0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,4,4,0,4,4,4,0,0,0 MAP(0,22)=0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0 MAP(0,23)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,24)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,25)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,26)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 return



テイル

リンク

2008/4/5(Sat) 10:01:18|NO.14879

書き忘れた部分があるので追記で・・・
・滅んだ順に文を表示することはできましたが
 下に行くほど新しい文ではなく、古い文が下に
 行ってしまう。

想定の動作             現在のプログラム
>青国が滅亡しました        >青国が滅亡しました
   ↓                 ↓
>青国が滅亡しました        >黄色国で謀反が発生しました!
>黄色国で謀反が発生しました!   >青国が滅亡しました

古い記事が一番上に表示され     古い生地順に下に行ってしまう
8行全部表示され新しい文章が
書き込まれる際に古い内容が
削除されて記事全体が前に行く

イベント発生で画像の表示、音楽変更、強弱変更や
ゲーム速度の変更の実験は成功しているのですが
肝心のチャット部分(お知らせ部分)完成できなくて
困っています(汗



Megane

リンク

2008/4/5(Sat) 11:29:16|NO.14880

アップローダにパスワードがかかってないでしょうか?



テイル

リンク

2008/4/5(Sat) 11:55:32|NO.14881

>アップローダにパスワードがかかってないでしょうか?
記入漏れがありました(汗)パスは「0000」です



SYAM

リンク

2008/4/5(Sat) 13:06:56|NO.14885

簡単にするためメッセージ全部を mes 命令でベタっと書いてますが、参考になるでしょうか?

sdim logbuf,1024 repeat 50 newlog=strf("これは%d行目",cnt+1) if cnt>45:newlog+="\n2行出しても大丈夫かテスト" gosub *ADD_LOG redraw 0 color 0,0,0:pos 0,0:boxf color 0,255,0:pos 0,0: mes logbuf redraw 1 wait 10 loop stop *ADD_LOG notesel logbuf logbuf+=newlog+"\n" while notemax>8 notedel 0 wend return

読むべき箇所は *ADD_LOG 以降だけです。
行単位の編集はやはりメモリノートが便利です。



Megane

リンク

2008/4/5(Sat) 13:09:23|NO.14886

拝見しました。まず他人が見ても分かりやすい変数の名前をつけていただきたいこと、
最初の選択画面のような、疑問点に関係ない部分はコメントアウトするなりしていただきたいことをお願いしますが、


まず、

if AA=1:pos 10,::font"",14:color 255,255,0:mes"青A国が滅亡しました":A1=1 if BB=1:pos 10,::font"",14:color 255,255,0:mes"赤B国が滅亡しました":B1=1 if CC=1:pos 10,::font"",14:color 255,255,0:mes"緑C国が滅亡しました":C1=1 if DD=1:pos 10,::font"",14:color 255,255,0:mes"紫D国が滅亡しました":D1=1 if EE=1:pos 10,::font"",14:color 255,255,0:mes"黄E国が滅亡しました":E1=1 if AA=1:pos 10,::font"",14:color 255,255,0:mes"エル国が滅亡しました":A1=1 if BB=1:pos 10,::font"",14:color 255,255,0:mes"ネツ国が滅亡しました":B1=1 if CC=1:pos 10,::font"",14:color 255,255,0:mes"カセ国が滅亡しました":C1=1 if DD=1:pos 10,::font"",14:color 255,255,0:mes"ゲブ国が滅亡しました":D1=1 if EE=1:pos 10,::font"",14:color 255,255,0:mes"ホル国が滅亡しました":E1=1 redraw 1 ;A+=1 wait 30 goto *MAINLOOP

国の名前を分かりやすく、ウェイトを増やしてよく見てみましょう。
●滅んだ順に表示されていない
●滅んでから表示されるまでにしばらくかかっている

のがわかりますか?



Megane

リンク

2008/4/5(Sat) 13:10:41|NO.14887

SYAM氏の発言があったので続きはしばらく控えます。



SYAM

リンク

2008/4/5(Sat) 13:47:32|NO.14893

すみません、例だけ書いちゃいましたorz
これだと元のスクリプトの何が悪いかはわかりませんね。
※Meganeさん、失礼しました…。

メッセージは 必要なときに必要な分だけ書く…って考えると、順番や書く場所を制御するのがとても厄介です。
メッセージ置き場でも用意しておきそこに追加して、溢れたら古いのを消してから、まとめて全部書くほうが、ラクですし融通が利きます。
そうすると、たとえば途中で表示領域を移動したり、隠したりすることも容易になります。

ただちょっと工夫しないと、次のスクリプトみたいなコトができません。
いささか乱暴な内容ですが、最後に例示しておきます。


sdim logbuf,1024 repeat 50 newlog = ""+cnt\3 newlog += strf("これは%d行目",cnt+1) if cnt>45:newlog += "\n"+cnt\3+"2行出しても大丈夫かテスト" gosub *ADD_LOG redraw 0 : gosub *DRAW_LOG : redraw 1 a=0:while a==0:stick a:wait 1:wend loop stop *ADD_LOG notesel logbuf logbuf+=newlog+"\n" while notemax>8 notedel 0 wend return *DRAW_LOG color 0,0,0:pos 0,0:boxf notesel logbuf repeat notemax noteget lbuf,cnt dim c,3:c(int(strmid(lbuf,0,1)))=255:color c(0),c(1),c(2) mes strmid(lbuf,1,1024) loop return



uhouho

リンク

2008/4/5(Sat) 18:14:55|NO.14899

おお、完成に近づいてる用ですね〜
完成したらニコ動に公開するのですかな?

今の質問に関するアドバイスなりは他の方が書いてるので、
ちょっと自分の以前のスクリプトに関する注意点を…

今はたまたま影響無さそうですが、
配列の要素分のループのとこが間違っていました。

repeat 26 RCNT=cnt repeat 26 ;〜なんたらかんたら〜 loop loop
という表現が幾つもありますが、

dim MAP,26,27
なので、

repeat 27;←ここが違う RCNT=cnt repeat 26 ;〜なんたらかんたら〜 loop loop
が正しいです。

実験:

dim MAP,26,27 ; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 MAP(0,1) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,2) =0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 MAP(0,3) =0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 MAP(0,4) =0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,0,0,0,0,0 MAP(0,5) =0,0,0,0,0,2,0,0,0,0,0,1,1,0,1,1,0,0,0,5,5,5,0,0,0,0 MAP(0,6) =0,0,0,0,0,2,0,0,0,0,0,1,1,0,1,1,0,0,0,5,5,5,0,5,0,0 MAP(0,7) =0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,5,5,5,5,5,5,5,0,0 MAP(0,8) =0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,5,0,5,5,5,5,0,0,0 MAP(0,9) =0,0,0,0,2,2,0,0,0,0,0,0,0,0,1,0,0,5,0,0,5,5,0,0,0,0 MAP(0,10)=0,0,0,2,2,2,2,2,0,0,0,0,0,6,6,6,0,5,0,5,5,0,0,0,0,0 MAP(0,11)=0,0,0,2,2,2,2,2,0,0,0,0,6,6,6,6,6,6,0,0,5,0,0,0,0,0 MAP(0,12)=0,0,2,2,2,2,2,2,2,2,2,2,6,6,6,6,6,6,6,0,4,0,0,0,0,0 MAP(0,13)=0,0,0,2,2,2,2,2,0,0,0,6,6,6,6,6,6,6,6,0,4,0,0,0,0,0 MAP(0,14)=0,0,0,2,0,0,2,0,0,0,0,6,6,6,6,6,6,6,0,0,4,0,0,0,0,0 MAP(0,15)=0,0,0,0,0,0,2,0,0,0,0,0,6,6,0,6,6,6,0,4,4,0,0,0,0,0 MAP(0,16)=0,0,0,0,0,0,2,3,3,0,0,0,6,0,0,6,6,4,4,4,0,0,0,0,0,0 MAP(0,17)=0,0,0,0,0,0,0,0,3,3,0,0,3,0,0,0,0,0,0,4,4,0,0,0,0,0 MAP(0,18)=0,0,0,0,0,0,3,3,3,3,0,0,3,0,0,0,0,0,0,4,4,4,4,0,0,0 MAP(0,19)=0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,0,0,0 MAP(0,20)=0,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0,4,4,4,4,4,0,0,0,0 MAP(0,21)=0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,4,4,0,4,4,4,0,0,0 MAP(0,22)=0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0 MAP(0,23)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,24)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,25)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,26)=1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2;←ここを変えると… ; dim MAP_Result,26,27;結果を一時的に保存 repeat 26;←ここが違っていたので…(本当は27) RCNT=cnt repeat 26 MAP_Result(cnt,RCNT)=MAP(cnt,RCNT) loop loop ; test1="MAP(0,26)=" test2="MAP_Result(0,26)=" repeat 26 test1+= MAP(cnt,26) test2+= MAP_Result(cnt,26) if cnt!25:test1+=",":test2+= "," loop ; mes ""+test1 mes ""+test2 mes"↑MAP_resultに正しくバックアップできてない"
上と同じようなミスが幾つかあるので、気を付けて下さい(^^;

ちなみに…

repeat 27 RCNT=cnt repeat 26 MAP_Result(cnt,RCNT)=MAP(cnt,RCNT) loop loop
の作業は、

memcpy MAP_Result,MAP, 4*26*27
の一行で済みそうw
Meganeさんのソース読んでて気づいた(汗



テイル

リンク

2008/4/7(Mon) 21:47:45|NO.14955

>SYAMさん
サンプルプログラムありがとうございます!今の自分ではかなり
判らない部分が多いのでいろいろ弄ったり調べたりしながら
頑張ります!

>Meganeさん
申し訳ないです。変数の方は暫定的に作って上手くいったら変数を
変えていくつもりだったのですが、そのままの状態でした。すぐに
変更し用と思います(汗

2つ目のほうのプログラムはかなり高度な内容なので
しばらく時間かかりそうです><

>国の名前を分かりやすく、ウェイトを増やしてよく見てみましょう。
>●滅んだ順に表示されていない
>●滅んでから表示されるまでにしばらくかかっている

滅んだ順に並んでいないについては、何度もプログラムを組んで
チェックしたときに確認済みだったのですが、それを解決する方法が
なかなか思い浮かばなくて苦戦していますOTZ
滅んでから表示までしばらくかかっているについては
まだ未確認なので再度動作チェックしてきます!

>uhouhoさん
修正しました><!



テイル

リンク

2008/4/7(Mon) 23:40:26|NO.14969

あちこち弄ってたら判んなくなって来ました(汗


*Kloop ;GGG+=1 newlog=strf("これは%d行目",cnt);整数または実数値を適切な書式で文字列に変換した文字列を返します if A=0:newlog+="エル国が滅亡しました" if B=0:newlog+="ネツ国が滅亡しました" if C=0:newlog+="カセ国が滅亡しました" if D=0:newlog+="ゲブ国が滅亡しました" if E=0:newlog+="ゲブ国が滅亡しました" gosub *ADD_LOG redraw 0;チラツキ防止 ;color 0,0,0:pos 0,0:boxf;背景 ;color 0,255,0:pos 0,0: mes logbuf;消すと文字が表示されない pos 20,444:color 255,255,0:mes""+ logbuf redraw 1 wait 10 return *ADD_LOG notesel logbuf;p1で指定した変数をメモリノートパッド命令のバッファに設定される logbuf+=newlog+"\n";表示した文を下方に表示(全部かnewlog消すと表示されず、"\n"を消すと文が横に表示される) while notemax>7;択されているメモリノートパッド全体の行数を示すシステム変数 notedel 0 wend return *Count gosub *Kloop det+=1 posX+20 return




テイル

リンク

2008/4/7(Mon) 23:44:00|NO.14970

下記のこれなら上手くいくのですが・・・。

sdim logbuf,1024 *Aloop AA+=1 newlog=strf("これは%d行目",AA);整数または実数値を適切な書式で文字列に変換した文字列を返します if AA>1 and AA<3:newlog+="エル" if AA>2 and AA<4:newlog+="ネツ" if AA>3 and AA<5:newlog+="ゲブ" if AA>4 and AA<6:newlog+="カセ" if AA>5 and AA<7:newlog+="ホル" gosub *ADD_LOG redraw 0;チラツキ防止 color 0,0,0:pos 0,0:boxf;背景 ;color 0,255,0:pos 0,0: mes logbuf;消すと文字が表示されない pos 100,100:color 0,255,0:mes""+ logbuf redraw 1 wait 10 if AA<7:goto *Aloop stop *ADD_LOG notesel logbuf;p1で指定した変数をメモリノートパッド命令のバッファに設定される logbuf+=newlog+"\n";表示した文を下方に表示(全部かnewlog消すと表示されず、"\n"を消すと文が横に表示される) while notemax>8;択されているメモリノートパッド全体の行数を示すシステム変数 notedel 0 wend return



uhouho

リンク

2008/4/8(Tue) 15:26:35|NO.14988

こういう事でしょうか?

notesel logbuf;入れ物を準備 ; A=1:B=1:C=1:D=1:E=1;どの国も生きてる状態 ; repeat 200;200ターンまで戦ったとする ;〜例〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 if cnt=6:A=0;6ターン目でエル国が滅びた場合 if cnt=34:B=0;34ターン目でネツ国が滅びた場合 if cnt=55:C=0;55ターン目でゲブ国とカセ国が同時に滅びた場合 if cnt=55:D=0; if cnt=162:E=0;162ターン目でホル国が滅びた場合 ;〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 ; title "第"+ cnt + "ターン";確認用 ;---------------------------------------------------------------------------- newlog="";←ここにはlogbufに、新たに追加する行を入れる if (A=0)&(A_Check=0):newlog+=">エル国が滅亡しました\n":A_Check=1 if (B=0)&(B_Check=0):newlog+=">ネツ国が滅亡しました\n":B_Check=1 if (C=0)&(C_Check=0):newlog+=">ゲブ国が滅亡しました\n":C_Check=1 if (D=0)&(D_Check=0):newlog+=">カセ国が滅亡しました\n":D_Check=1 if (E=0)&(E_Check=0):newlog+=">ホル国が滅亡しました\n":E_Check=1 ;↑A_Check,B_Check,…などが無いと、 ; 滅びた後も毎ターンメッセージが表示されてしまう ; ;その他のイベントの追加例 if (cnt\10)=0:newlog+=">"+cnt+"ターン経過しました\n";10ターン毎に知らせる ;---------------------------------------------------------------------------- gosub *ADD_LOG ;---------------------------------------------------------------------------- redraw 0;チラツキ防止 pos 0,0:color 0,0,0:boxf 0,0,640,480 pos 20,300:color 255,255,0:mes""+ logbuf redraw 1 wait 10 loop stop *ADD_LOG logbuf+=newlog while notemax>8 notedel 0 wend return



テイル

リンク

2008/4/9(Wed) 22:49:22|NO.15031

>uhouhoさん
です!それを目指して頑張っているのですが・・・

↓勝手に加工して申し訳ないのですが・・・組み込むために少しだけ加工しました(汗


sysfont notesel logbuf;入れ物を準備 ; ;A=1:B=1:C=1:D=1:E=1;どの国も生きてる状態 ; ;〜例〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 ;〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 ; ;title "第"+ count_ttl + "ターン";確認用 ;---------------------------------------------------------------------------- newlog="";←ここにはlogbufに、新たに追加する行を入れる if (AA=1)&(A_Check=0):newlog+=">エル国が滅亡しました\n":A_Check=1 if (BB=1)&(B_Check=0):newlog+=">ネツ国が滅亡しました\n":B_Check=1 if (CC=1)&(C_Check=0):newlog+=">カセ国が滅亡しました\n":C_Check=1 if (DD=1)&(D_Check=0):newlog+=">ゲブ国が滅亡しました\n":D_Check=1 if (EE=1)&(E_Check=0):newlog+=">ホル国が滅亡しました\n":E_Check=1 if (FF=1)&(E_Check=0):newlog+=">Mob軍が滅亡しました\n":E_Check=1 if det>4:if AA=0 and BB=1 and CC=1 and DD=1 and EE=1 :newlog+=">エル国の勝利です!":stop_sain=1 if det>4:if AA=1 and BB=0 and CC=1 and DD=1 and EE=1 :newlog+=">ネツ国の勝利です!":stop_sain=1 if det>4:if AA=1 and BB=1 and CC=0 and DD=1 and EE=1 :newlog+=">カセ国の勝利です!":stop_sain=1 if det>4:if AA=1 and BB=1 and CC=1 and DD=0 and EE=1 :newlog+=">ゲブ国の勝利です!":stop_sain=1 if det>4:if AA=1 and BB=1 and CC=1 and DD=1 and EE=0 :newlog+=">ホル国の勝利です!":stop_sain=1 ;↑A_Check,B_Check,…などが無いと、 ; 滅びた後も毎ターンメッセージが表示されてしまう ; ;その他のイベントの追加例 ;if (count_ttl\10)=0:newlog+=">"+count_ttl+"ターン経過しました\n";10ターン毎に知らせる ;---------------------------------------------------------------------------- gosub *ADD_LOG ;---------------------------------------------------------------------------- redraw 0;チラツキ防止 ;pos 0,0:color 0,0,0:boxf 0,0,640,480 pos 20,444:color 255,255,0:mes""+ logbuf redraw 1 wait 1 redraw 1 if stop_sain=1:stop ;A+=1 wait 1 goto *MAINLOOP *ADD_LOG logbuf+=newlog while notemax>7 notedel 0 wend return



uhouho

リンク

2008/4/10(Thu) 17:52:57|NO.15051

> それを目指して頑張っているのですが・・・
DLした最新版にNO.14878とNO.15031を適用した感じ、
チャット(?)機能はとりあえず動いている様に見えますが…
今テイルさんが悩まれているのは、
> ●滅んでから表示されるまでにしばらくかかっている
この問題の方でしょうか?
注目すべきは…

gosub *MAPING;MAP更新 gosub *MAPWar;MAP侵防判定
ココです。
*MAPING → マップを描いているサブルーチン。
*MAPWar → 戦闘処理をしているサブルーチン。
今はマップを描いてから戦闘処理をしているので、
最新の戦闘処理の結果を描くのが、ワンテンポ遅れている訳です。

よって、正しく戦闘処理の結果を描くには…?

(ちなみに今まで影響がさほど無かった訳は、
大陸が一国に統一された後も、メインループを繰り返していたからです。)



テイル

リンク

2008/4/13(Sun) 15:51:07|NO.15076


*MAINLOOP redraw 0 count_ttl+=1 count_ttl2+=1 pos 0,0:gcopy 1,0,0,800,600 gmode 3,,,120 pos 20,30:gcopy 10,0,0,323,30 gmode gosub *Event gosub *MAPWar;MAP侵防判定 gosub *MAPING;MAP更新



uhouho

リンク

2008/4/13(Sun) 18:33:56|NO.15078

> NO.15076
○〜



テイル

リンク

2008/4/25(Fri) 07:52:55|NO.15368

最新版Fez_Life_game3.3βをアップしました。
http://www6.uploader.jp/dl/maroufennriru4/maroufennriru4_uljp00007.zip.html

ニコニコ動画動画UP用2.85β(2.0シリーズ=イベント無し 3.0シリーズ=イベントあり)
http://www.nicovideo.jp/watch/sm3025098



uhouho

リンク

2008/4/25(Fri) 22:12:55|NO.15388

完成&ニコUPおめでとうございます!!
動画拝見致しました〜

開発に自分も多少関わったと思うと何となく感動ですw
まぁ…FEzについては全く解りませんが(^^;
結構有名なオンラインゲームのようですね。



テイル

リンク

2008/4/26(Sat) 11:24:04|NO.15405

>完成&ニコUPおめでとうございます!!
>動画拝見致しました〜

>開発に自分も多少関わったと思うと何となく感動ですw
>まぁ…FEzについては全く解りませんが(^^;
>結構有名なオンラインゲームのようですね。

ありがとうございます!おかげさまで公開にまで辿り着くことが出来ました!
まだまだ改善余地があるので頑張って更新して行こうと思っています。
本当にありがとうございましたm(_ _)m

追伸(今後の更新予定)
・MAPを26*26 →130*130に変更しようかなぁ・・・と
・イベントを追加したものをUP
・画質の向上!!



f

リンク

2008/5/1(Thu) 11:46:09|NO.15554

無茶すんな(笑

手頃なフリースペースを借りて、そこに置け。



テイル

リンク

2008/5/1(Thu) 17:13:04|NO.15568

FEZ_Life_Game_Ver3.5をUpしました!
http://www6.uploader.jp/dl/maroufennriru4/maroufennriru4_uljp00008.zip.html

いくつか問題が起きて困っているのですが・・・。
1.MAPデータを拡張したことで戦争がかなりの間終わらない
2.MAPデータを拡張したらゲームの実行スピードが遅くなってしまったこと

2の問題が1の原因にもなっているわけですが…どうしたらいいのでしょうか。



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