|
|
|
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]
↓
真ん中の赤の周囲のエリアの数値を比較して
高い方の色に次のターン時に変更する。
この場合は赤色を次のターン時に緑色に変える
上下左右のエリアの数値の比較
外周は比較対象外にする
・・・判りづらかったらごめんなさいです。
|
|
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!の最新バージョンでウィルスが入ってないか確認済みですが
念のため、ダウンロードしたらチェックして頂けると嬉しいです。
|
|
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さんのプログラムを参考にする前のプログラム
を上げました!いま、そのプログラムの方を参考にして
組んでるところです。
|
|
2008/3/29(Sat) 14:20:14|NO.14680
> ファン活動の一環なので大丈夫です〜
> いま、そのプログラムの方を参考にして組んでるところです
どうやら早ちとりのようですね、失礼しました。(^^;
開発頑張って下さい〜
|
|
2008/3/29(Sat) 16:02:24|NO.14682
<<「あるセル(ます)について、
乱数で上下左右のセルのうちひとつを選んで
セルの色を選ばれたセルと同じにする」
…という処理を全部のセルに対してする>>
という方法でも、テイル氏の目指すところの領土の移り変わりは表現できる…のでしょうか。
|
|
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要素を使って各国のパネルと
強さを、さらに色を変える変数も変えようと思ったのですが発想が
まずかったのか動かないまま不発に終わりました(汗
過去にやった座標と色変数を直接指定して変更する方法でも
良かったのですが膨大な量を書き込まなくてはいけなくなる
ので断念した経歴があります。そこでスマートに変数を入れ
替えて判定するプログラムを作ろうと思ったわけなのですが・・・。
どちらにしてもかなり勉強不足です。お手数お掛けして申し訳ないです(´・ω・`)
|
|
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
| |
|
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
テイル氏のイメージしているのはこういうものでしょうか?
| |
|
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
プログラムソースの方も公開しようかなぁ・・・と思っています。
|
|
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行全部表示され新しい文章が
書き込まれる際に古い内容が
削除されて記事全体が前に行く
イベント発生で画像の表示、音楽変更、強弱変更や
ゲーム速度の変更の実験は成功しているのですが
肝心のチャット部分(お知らせ部分)完成できなくて
困っています(汗
|
|
2008/4/5(Sat) 11:29:16|NO.14880
アップローダにパスワードがかかってないでしょうか?
|
|
2008/4/5(Sat) 11:55:32|NO.14881
>アップローダにパスワードがかかってないでしょうか?
記入漏れがありました(汗)パスは「0000」です
|
|
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 以降だけです。
行単位の編集はやはりメモリノートが便利です。
|
|
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
国の名前を分かりやすく、ウェイトを増やしてよく見てみましょう。
●滅んだ順に表示されていない
●滅んでから表示されるまでにしばらくかかっている
のがわかりますか?
|
|
2008/4/5(Sat) 13:10:41|NO.14887
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
|
|
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
|
|
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
| |
|
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更新
|
|
2008/4/13(Sun) 18:33:56|NO.15078
> NO.15076
○〜
|
|
2008/4/25(Fri) 07:52:55|NO.15368
|
|
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
・画質の向上!!
|
|
2008/5/1(Thu) 11:46:09|NO.15554
無茶すんな(笑
手頃なフリースペースを借りて、そこに置け。
|
|