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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0307
うぬるぅ自作ゲームを作ろうとしてるがうまくできないので質問。9解決


うぬるぅ

リンク

2011/3/7(Mon) 19:16:15|NO.37479

いきなりですが質問させていただきます。
りんごの画像があって
でてくるところはランダムだー  
         ・・・ってやりたいのですが、どうしても左端からでてしまいます。


あと、『変数 林檎y1>200』になったときにまたリンゴが出てくるようにしたいのですが
一回しか出てきません(´・ω;`)どうすればいいでしょうか


screen 0,400,200 現在のステージ=1 *たぶん重要な変数調整 自機x=200 タイム=1500*現在のステージ *今宵のステージ ステージ=現在のステージ *main repeat await x=0 : y=0 : りんご=rnd(10) redraw 2 randomize if タイム=0:gosub *ゲームオーバー color 255,255,255:boxf : color pos 0,0:picload "背景.bmp",1 pos 自機x,150:picload "かご.gif",1 pos 0,0:font "S2G殴り書き",20:color 255,0,0:mes "ステージ "+ステージ pos 150,0:font "S2G殴り書き",20:color 255,0,255:mes "残り時間 "+タイム if 自機x>0 :getkey x,37 if 自機x<368:getkey y,39 if x=1:自機x-3 if y=1:自機x+3 if りんご=rnd(10):gosub *sub if 一号室=1:pos 林檎x1,林檎y1:picload "りんご1.gif",1 if 二号室=1:pos 林檎x2,林檎y2:picload "りんご2.gif",1 if 三号室=1:pos 林檎x3,林檎y3:picload "りんご3.gif",1 if 林檎y1>200:一号室=0 if 林檎y2>200:二号室=0 if 林檎y3>200:三号室=0 redraw 1 タイム-1 林檎y1+1 林檎y2+2 林檎y3+3 wait 1 loop *ゲームオーバー dialog "ゲームオーバー、やりなおしますか?",2,"(^q^)" if stat=6:goto *たぶん重要な変数調整 if stat=7:end *sub if 一号室=0:goto *一号室入室 if 二号室=0:goto *二号室入室 if 三号室=0:goto *三号室入室 return *一号室入室 randomize 林檎1y=rnd(80) 林檎1x=rnd(401) 一号室=1 return *二号室入室 randomize 林檎2y=rnd(80) 林檎2x=rnd(401) 二号室=1 return *三号室入室 randomize 林檎3y=rnd(80) 林檎3x=rnd(401) 三号室=1 return

PS.タイトルが『自作ゲームを作ろうとしてるがうまくできないので質問。』ってなってるのは
あれです、そう、この先も質問するかも知れないからです。



この記事に返信する


てれてれ

リンク

2011/3/7(Mon) 19:23:03|NO.37480

変数名が途中で
林檎x1から林檎1x
林檎y1から林檎1y
林檎x2から林檎2x
林檎y2から林檎2y
林檎x3から林檎3x
林檎y3から林檎3y
に切り替わってるからです。



うぬるぅ

リンク

2011/3/7(Mon) 19:48:28|NO.37481

てれてれさんありがとうございます!

そんな初歩的なことを見逃してしまったとは・・・orz



hexa.hemi

リンク

2011/3/7(Mon) 20:06:25|NO.37482

はみ出てしまうのは林檎1x〜林檎3xに乱数をセットしている部分でrnd(401)にしていて
リンゴの画像の幅をスクリーンの幅から引いていないのが原因です。



うぬるぅ

リンク

2011/3/7(Mon) 20:12:26|NO.37483

リンゴが途中でワープする・・だと・・!?

リンゴが現れる→落ちていく→変な場所にワープする!?
リンゴをワープさせなくするためには
どうすればいいのでしょうか><



screen 0,400,200 現在のステージ=1 *たぶん重要な変数調整 自機x=200 タイム=1500*現在のステージ *今宵のステージ ステージ=現在のステージ *main repeat await x=0 : y=0 : りんご=rnd(10) redraw 2 randomize if タイム=0:gosub *ゲームオーバー color 255,255,255:boxf : color pos 0,0:picload "背景.bmp",1 pos 自機x,150:picload "かご.gif",1 pos 0,0:font "",20:color 255,0,0:mes "ステージ "+ステージ //フォントはいつかきめるw pos 150,0:font "",20:color 255,0,255:mes "残り時間 "+タイム //フヒヒwwサーセンww if 自機x>0 :getkey x,37 if 自機x<368:getkey y,39 if x=1:自機x-3 if y=1:自機x+3 if りんご=5:gosub *sub if 一号室=1:pos 林檎x1,林檎y1:picload "りんご1.gif",1 if 二号室=1:pos 林檎x2,林檎y2:picload "りんご2.gif",1 if 三号室=1:pos 林檎x3,林檎y3:picload "りんご3.gif",1 if 林檎y1>200:一号室=0 if 林檎y2>200:二号室=0 if 林檎y3>200:三号室=0 redraw タイム-1 林檎y1+1 林檎y2+2 林檎y3+3 wait 1 loop *ゲームオーバー dialog "ゲームオーバー、やりなおしますか?",2,"あなたは負け犬" if stat=6:goto *たぶん重要な変数調整 if stat=7:end *sub if 一号室=0:goto *一号室入室 if 二号室=0:goto *二号室入室 if 三号室=0:goto *三号室入室 return *一号室入室 randomize 林檎y1=0 林檎x1=rnd(401) 一号室=1 return *二号室入室 randomize 林檎y2=0 林檎x1=rnd(401) 二号室=1 return *三号室入室 randomize 林檎y3=0 林檎x3=rnd(401) 三号室=1 return



うぬるぅ

リンク

2011/3/7(Mon) 20:14:19|NO.37484

hexa.hemiさんありがとうございます!

最初の質問の原因が気になりすぎて
気づきませんでした!



ORZ

リンク

2011/3/7(Mon) 20:57:35|NO.37485

このようにソースはインデントすると見やすいので『必ず』やること。

screen 0,400,200 現在のステージ=1 *たぶん重要な変数調整 自機x=200 タイム=1500*現在のステージ *今宵のステージ ステージ=現在のステージ *main repeat await x=0 : y=0 : りんご=rnd(10) redraw 2 randomize if タイム=0:gosub *ゲームオーバー color 255,255,255:boxf : color pos 0,0:picload "背景.bmp",1 pos 自機x,150:picload "かご.gif",1 pos 0,0:font "",20:color 255,0,0:mes "ステージ "+ステージ //フォントはいつかきめるw pos 150,0:font "",20:color 255,0,255:mes "残り時間 "+タイム //フヒヒwwサーセンww if 自機x>0 :getkey x,37 if 自機x<368:getkey y,39 if x=1:自機x-3 if y=1:自機x+3 if りんご=5:gosub *sub if 一号室=1:pos 林檎x1,林檎y1:picload "りんご1.gif",1 if 二号室=1:pos 林檎x2,林檎y2:picload "りんご2.gif",1 if 三号室=1:pos 林檎x3,林檎y3:picload "りんご3.gif",1 if 林檎y1>200:一号室=0 if 林檎y2>200:二号室=0 if 林檎y3>200:三号室=0 redraw タイム-1 林檎y1+1 林檎y2+2 林檎y3+3 wait 1 loop *ゲームオーバー dialog "ゲームオーバー、やりなおしますか?",2,"あなたは負け犬" if stat=6:goto *たぶん重要な変数調整 if stat=7:end *sub if 一号室=0:goto *一号室入室 if 二号室=0:goto *二号室入室 if 三号室=0:goto *三号室入室 return *一号室入室 randomize 林檎y1=0 林檎x1=rnd(401) 一号室=1 return *二号室入室 randomize 林檎y2=0 林檎x1=rnd(401) 二号室=1 return *三号室入室 randomize 林檎y3=0 林檎x3=rnd(401) 三号室=1 return

ループの中で何回もrandomizeを呼ぶ意味は基本的にないので、スクリプトの頭で一回呼べばよし。
*gosubした先で*gotoしてそこでreturnなんつー流れは通常ないので改めるべし。
repeat〜loop間を抜けるには必ずbreakしてやる必要があるが、これではゲームオーバーになったとき
*gosubでゲームオーバーの処理をした後returnもbreakもせずに頭に戻って別のrepeatを始めてしまう。
gosubやrepeatのヘルプとサンプルを3万回ほど見直した後、きちんと流れの把握から始めんさい。



うぬるぅ

リンク

2011/3/12(Sat) 16:49:44|NO.37550

ORZさんありがとうございます!とてもスプリクトが見やすくなりました!



Ve

リンク

2011/3/12(Sat) 19:31:59|NO.37552


*main    repeat〜loop *ゲームオーバー

を変更して


*main goto *main ゲームオーバー

にすると良いよ。



うぬるぅ

リンク

2011/3/27(Sun) 13:52:09|NO.37912

・・・すべての質問が解決しますた・・・



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