私のおもちゃ箱-プログラミングテキスト


プログラミング何でも掲示板(過去分)
私のおもちゃ箱
 −−プログラミングテキスト−−
<> フローチャート
<> ハードウェア
<> C言語 (C language)
<> Visual Basic 2005
<> Visual Basic 6.0
<> COMETU & CASLU
<> JavaScript
<> HSP 3.0
<> Windows Xp
  Word2000, Excel2000,PowerPoint2002
<> ホームページ作成

過去ログ
メニューに戻る


HSP3.0 アイテム設置の重複を防ぐ  かめおう - 2010/02/19(Fri) 14:14 No.287
こんにちは おとといHSPを始めたかめおうと申します。
このサイトにはものすごくお世話になっています。

早速ですが質問です。
いま、アイテム(大きさ32*32)を1つ、箱(大きさはアイテムと同じ)を5つを位置(4,4)から(56,56)までのマップの中にランダムで設置しようと考えています。
その結果、次のような位置設定が完成しました。

dim box_x, 5
dim box_y, 5
item_x = 0 : item_y = 0

foreach boxy 
box_y(cnt)= 32*(rnd(13-1+1)+1)
box_x(cnt) = 32*(rnd(13-1+1)+1)
loop

item_x=32*(rnd(13-1+1)+1)
item_y=32*(rnd(13-1+1)+1)

32*32の四角を1マスとする13*13方眼の設定です。

ここで質問なのですがここで、箱とアイテムが重ならないように設置するようにプログラムするには、このプログラムに何を付け加えればいいですか?
よろしくお願いします。



Re: HSP3.0 アイテム設置...  Hiroshi - 2010/02/21(Sun) 01:49 No.288
ようこそ、かめおう さん
まず、アイテムの座標を決めます。
次に5つの箱の座標を決めます。そのとき、箱の座標がアイテムと重なっていないかを
判定します。重なっていたらもう一度座標を決めなおします。
この手順でアイテムと箱の重なりを防げると思います。試してみてください。
それでは、またいつでもどうぞ。

HSPスロットについて  かずくん - 2009/10/25(Sun) 19:28 No.285
はじめまして、プログラミングど素人のかずくんと申します

このサイトを参考にさせていただきHSPでスロットを作っているのですが
回転開始の処理を追加するのあたりからなかなかうまくいきません

試しに完成例のプログラムの画像を差し替えてみましたがやはり
同じ不具合が発生します

なぜかリールがうまく表示されないのです

リール画像と本体画像のサイズがサンプルと違うからでしょうか?

いろいろ試してみたのですがうまくいかないのでアドバイスお願いします

Re: HSPスロットについて  Hiroshi - 2009/10/26(Mon) 04:25 No.286

ようこそ、かずくん さん
> 試しに完成例のプログラムの画像を差し替えてみましたがやはり
> 同じ不具合が発生します
> なぜかリールがうまく表示されないのです
> リール画像と本体画像のサイズがサンプルと違うからでしょうか?
どのようにうまく表示されないのでしょうか。"サイズが違う"とありますが、
リール画像がずれて表示されるのでしょうか?それとも全然表示されないのでしょうか?
プログラムは、本体、リールとも説明されているサイズを前提に計算をしながら
表示させています。サイズの違う画像でする場合は、その画像サイズに合わせて計算を
してやらないとずれて、あるいは全く表示されないなどの現象が起こります。
とりあえず同じサイズの画像で試してみてください。
それでは、またいつでもどうぞ。

VB2008のコンポーネント追加  おくの - 2009/06/24(Wed) 08:48 No.282

こんにちは、初めて投稿させていただきます。
タイトルに書いた事で質問させてください。
VB6では問題なかったコンポーネントの追加が、VB2008では旨く行かなくて困っています。
フラッシュを表示するためのコントロールを追加したのですが、ツールバーにはそれが入っているのに、フォームに貼り付けようとすると「コンポーネントが正しく登録されていません」となって使うことができません。
色々調べてみたのですが、どうにも出来ないでいます。
もし、分かるようなら教えてください。
宜しくお願いします。

Re: VB2008のコンポーネン...  Hiroshi - 2009/06/25(Thu) 01:09 No.283

ようこそ、おくの さん
次のようにして、やってみました。問題なくフォームに貼り付けられました。

メニューバーの[ツール(T)]から[ツールボックス アイテムの選択(X)...]を選択。
開いたダイアログの[COMコンポーネント]タブで、リストから
「Shockwave Flash Object」にチェックを入れて、[OK]ボタンをクリック。
ツールボックスの[すべての Windows フォーム]の最後に、Shockwave Flash Objectが
追加されます。

フォームにダブルクリックで貼り付けて、実行してみました。エラーもなく実行できました。
データがないので、というより何もコードを書いていませんので何も起こりませんが。
このコントロールの使い方はよくわかりません。ネットで調べてみてください。
それでは、またいつでもどうぞ。


簡単なゲームを…  まゆ - 2009/01/16(Fri) 23:20 No.270

 はじめまして。ホームページ拝見させていただきました。
実は学校の卒業課題でVB2005を使い、なにかゲームを作らなければいけません。しかし私はコンピュータがとても苦手で悪あがきしましたが、出来そうもありません…
とても簡単なゲームの作り方を教えていただけないでしょうか…(;O;)

Re: 簡単なゲームを…  Hiroshi - 2009/01/16(Fri) 23:28 No.272

ようこそ、まゆ さん
悪あがき ?、ねばり強く考えてみることは大切だと思いますよ。
VB2005のゲームプログラムは1つだけですが、私のサイトの次のページにテキストがあります。
http://masudahp.web.fc2.com/vb2005/kiso/
 §8 シューティング・ゲーム(1)
 §9 シューティング・ゲーム(2)
 §13 シューティング・ゲーム(3)
参考にしていただくなら、VB6ですが次のページにテキストがあります。
http://masudahp.web.fc2.com/vb6/
それでは、またいつでもどうぞ。

Re: 簡単なゲームを…  まゆ - 2009/01/17(Sat) 22:12 No.274

返信ありがとうございますm(__)mさんざん悪あがきしてみたのですが、さすがに期限がせまり困ってしまい…((+_+))
VB6のテキストのゲームはVB2005ではできますか?(汗
質問ばかりすみません。

Re: 簡単なゲームを…  Hiroshi - 2009/01/18(Sun) 14:19 No.276

ようこそ、まゆ さん
基本的には、どの言語でも作ることはできます。言語によって得意・不得意はありますが。
VB6からVB2005へは、かなり大きな変更がありますので、そこそこの知識がないと難しいと思います。
VB2005のテキストの分を元にしてやってみてはどうですか。まだまだ改良の余地はあると思いますし。
それでは、またいつでもどうぞ。

Re: 簡単なゲームを…  Hiroshi - 2009/01/18(Sun) 15:18 No.277

マイクロソフトに次のようなサイトがあります。

プログラミング☆簡単レシピ
http://www.microsoft.com/japan/athome/magazine/hed/navi/recipe/default.aspx

プログラミング チャレンジ スクエア
http://www.microsoft.com/japan/msdn/student/challenge/default.aspx

参考までに。それでは、またいつでもどうぞ。

Re: 簡単なゲームを…  まゆ - 2009/01/18(Sun) 16:22 No.278

Hiroshiさんご親切にありがとうございました。数当てゲームにしようと思います。自宅ではできないのがきついですが…頑張ります(;O;)!本当に感謝です。


VB2005にて電卓を作る  kota - 2009/01/11(Sun) 20:54 No.263

こちらでははじめまして。
先ほど質問のメールを送ったkotaです。
よろしくお願いします。

やはり質問はこちらのようですね。
私の不注意で申し訳ありません。

改めて質問をさせていただきたいのですが
VB2005にてキーボードからも入力できる電卓を
作りたいと思っています。

イメージ的にはこちらのサイトの
「VB6-アプリケーション作成の基礎」内の電卓です。
でも私の環境ではコントロール配列が使えなく
行き詰まってしまいました。

VB2005の環境で作るとしたらどんなプログラムになるのでしょうか。

どうかよろしくお願いします。

Re: VB2005にて電卓を作る  Hiroshi - 2009/01/12(Mon) 02:18 No.264

ようこそ、kota さん
コントロールを配列で扱う方法ということで、Visual Basic デベロッパー センターで探してみました。
http://msdn.microsoft.com/ja-jp/vbasic/default.aspx
キーワードは、「コントロールを動的に作成する」です。次のようなページがありました。
http://msdn.microsoft.com/ja-jp/library/cc708938.aspx
プロジェクトを作成して、次のコードを入力します。少し変更しています。フォームには何も配置しません。実行すると
ボタンが4つ配置されたウィンドウが開きます。

Public Class Form1
____Private myButtons() As Button
____Private setControl As Control

____Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
________myButtons = New Button(3) {}
________SuspendLayout() 'コントロールのレイアウトロジックを一時中断。コントロールの作成時に発生するイベントを一時的に発生しない。
________Dim buttonText() As String = New String(3) {"ListBox", "ComboBox", "TextBox", "RichTextBox"}
________Dim i As Integer
________'コントロール作成
________For i = 0 To myButtons.Length - 1
____________myButtons(i) = New Button
____________With myButtons(i)
________________.Name = "Button" & i.ToString
________________.Text = buttonText(i)
________________.TabIndex = i
________________.Location = New Point(12, 12 + 25 * i)
____________End With
____________AddHandler myButtons(i).Click, AddressOf myButton_Click 'イベントハンドラの関連付け
________Next
________Controls.AddRange(Me.myButtons) 'コントロールをフォームに追加
________ResumeLayout(False) 'コントロールのレイアウトロジックを再開
____End Sub

____Private Sub myButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
________SuspendLayout()
________If setControl IsNot Nothing Then
____________Controls.Remove(setControl)
________End If
________Select Case CType(sender, Button).TabIndex 'オブジェクトの判定
____________Case 0
________________setControl = New ListBox
____________Case 1
________________setControl = New ComboBox
____________Case 2
________________setControl = New TextBox
____________Case 3
________________setControl = New RichTextBox
________End Select
________setControl.Location = New Point(100, 12)
________Controls.Add(setControl)
________ResumeLayout(False)
____End Sub
End Class

これで、数字のボタンをVB6のコントロール配列と同じように扱うことができると思います。いろいろと試してみてください。
私もいずれ作ろうとは思っていますが・・・。
それと、質問はこの掲示板でもメールでもどちらでもかまいません。
それでは、またいつでもどうぞ。

Re: VB2005にて電卓を作る  kota - 2009/01/12(Mon) 06:38 No.265

詳しく教えていただきありがとうございます。

お返事いただいてから現在までいろいろ試していますが
始めて数カ月の私にはなかなか難しく…!

あとでメール(TOPのフォーム)からもう一度質問させていただいてもいいでしょうか?
不出来な生徒で申し訳ありません…。

Re: VB2005にて電卓を作る  Hiroshi - 2009/01/13(Tue) 01:25 No.266

ようこそ、kota さん
デザインウィンドウですべてのボタンを配置しての処理のようですね。数字ボタンの処理は、ほとんど同じですから、メソッドにしましょう。

____'9ボタン【Sendkeys.Sendでキー送信】
____Private Sub kyu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
____Handles kyu.Click
________Suuji("9")
____End Sub

____Private Sub Suuji(suu as string)
________ans.Focus()

________'ans.Textが0ならば1を設定
________If ans.Text = "0" Then
____________ans.Text = suu
____________'演算子ボタンが押された後の一行目の処理
________ElseIf zen = ans.Text Then
____________ans.Text = suu
________Else
____________'演算が終了した後の一行目の処理
____________If enz = "5" Then______'演算子初期化
________________enz = ""
________________ans.Text = suu
____________Else
________________ans.Text = ans.Text & suu__ 'ans.Textに入力済みの数値と連結
____________End If
________End If
____End Sub
Suujiメソッドは共通です。ほかの数字のボタンは引数の数字が変わるだけです。
演算子も同じようにまとめます。
____'/ボタン【Sendkeys.Sendでキー送信】
____Private Sub sura_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
____Handles sura.Click
________Enzanshi("/")
____End Sub

____Private Sub Enzan(enzanshi as String)
________ans.Focus()

________If IsNumeric(ans.Text) = True Then

____________If ans.Text = "0" Then
________________ans.Text = "計算できません"
____________Else
________________zen = ans.Text
________________If enzanshi = "+" Then
____________________enz = "0"
________________ElseIf enzanshi = "-" Then
____________________enz = "1"
________________ElseIf enzanshi = "*" Then
____________________enz = "2"
________________ElseIf enzanshi = "/" Then
____________________enz = "3"
________________End If
________________sta = "0"
____________End If
________End If
____End Sub
Enzanメソッドは共通です。ほかの演算のボタンは引数の文字が変わるだけです。
このような形で々でしょうか。

ほかに、SuujiやEnzanメソッドを作らずに済ますこともできます。
____Private Sub iti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
____Handles iti.Click, ni.Click, san.Click, yon.Click, _
____go.Click, roku.Click, nana.Click, hati.Click, kyu.Click
このように、Handlesの後にイベントを追加すればすべての数字ボタンの処理をこのiti_Clickメソッドに書くことができます。
ボタンの判定は、CType(sender, Button).Textでボタンに表示した文字が得られますので、それで判定するといいでしょう。
それでは、またいつでもどうぞ。

Re: VB2005にて電卓を作る  kota - 2009/01/14(Wed) 08:34 No.267

具体的にありがとうございます。
なるほど短く見やすくなりました!

あともうひとつ問題があって
キーボードからの入力時演算子を押すとスペースが入力されて
計算が出来なくなってしまいます。
キーボードから演算子が入力された事を無効としないで
スペースを入力しないようにするにはどうしたら良いでしょうか。

何度も申し訳ありません。
よろしくお願いします。

Re: VB2005にて電卓を作る  Hiroshi - 2009/01/15(Thu) 11:11 No.268

キーボードからの入力データをどこで受け取っているかわからないので、答えにくいのですが、
私ならこうする、という方法を示します。
・ans.Textが編集できない(フォーカスされない)ように、ReadOnlyプロパティをTrueにします。
・キーボードからのイベントを最初にフォームで処理できるようにKeyPreviewプロパティをTrueにします。
・Form1.KeyPressイベントのメソッドでキーボードに関する処理をします。
 例)If e.KeyChar >= "0" And e.KeyChar <= "9" Then
     Suuji(e.KeyChar)
   End If
おそらく、これで対応できると思うのですが、試してみてください。
それでは、またいつでもどうぞ。

Re: VB2005にて電卓を作る  kota - 2009/01/16(Fri) 20:25 No.269

いつもありがとうございます。

今回私が作りかけている物にはKeyPressイベントを使っていないのですが
私が作っているような作り方では完成できないでしょうか。

ここに貼るとますます長くなってしまうので
コードのコピーを昼間メールにて送信させていただきました。

何度も申し訳ありません。
よろしくお願いします。

Re: VB2005にて電卓を作る  Hiroshi - 2009/01/16(Fri) 23:22 No.271

プログラムコードを見ただけでは、どこでキーボードからのデータを受け取って判定しているのかわかりません。
ということで、答えようもありません。
メールの添付ファイルとして、プロジェクトごと送付願います。
それではまた。

Re: VB2005にて電卓を作る  kota - 2009/01/18(Sun) 11:15 No.275

完成しました!
思う物が出来ました。

何度も丁寧に教えていただき本当にありがとうございました。

HSPのSTGについて  伊空 - 2008/11/27(Thu) 10:15 No.247

初めまして、伊空といいます。
ここのHPを見ながら参考にしてSTGを作ろうとがんばっているのですが、BOSSを出現させようとして悩んでいます。
画像の差し替えを使えばザコ敵の動きや数などをいじれるのですが、ボスの画像に差し替えだけだと、ボスもザコ敵みたいにワラワラ出てきてしまいます。

ボスのHPの設定や出現方法などでアドバイス出来る箇所、こうしてはどうですか?みたいな助言があればうれしいです。

突然の質問で申し訳ないですがよろしくお願いします。

Re: HSPのSTGについて  Hiroshi - 2008/11/28(Fri) 01:52 No.248

ようこそ、伊空 さん

まず、ボスキャラを出すタイミングを考える必要があります。簡単なのは、得点がXXX点になったら
という形だと思います。
次に、どのようなボスキャラにするのか、ということです。例えば、大きさは通常の敵のXXX倍で
玉がXXX発当たったら爆破する、攻撃は強烈である、最初はバリアがありXXX発当たると消える、
などなどです。
ボスの処理は通常の敵機とは別に作成した方がいいでしょう。得点がXXX点になったら通常の敵機の
出現を止めます。そして、ボスの処理へ移動します。処理は敵機を1つにし、移動の仕方も変える
必要がありますが、基本的には通常の敵機の処理と同じでいいと思います。
衝突判定の処理もボス用に作ります。通常の敵機は玉が当たったときに爆破して消えますが、ボスは
当たった回数を数えて、当たった回数がXXX回になったら爆破して消します。
ボスが消えた後は、また通常の敵機が出るるようにします。

ボス用の処理を追加することで、いろいろな性格のボスを出すことができると思います。
文字だけの説明でわかりにくいかもしれませんが、ゲームの進行(こうなって、ああなって、そして
こうなっていく)を頭でイメージしながら進行にあわせたプログラムを考えていけばいいと思い
ます。複雑な動作であつてもプログラムでは一つ一つ動いてる訳ですから。しかし、これが難しい
のですよね。たくさんプログラムを作って経験をしていってください。私も、テキストにするまでに
山のような失敗作ができます。

それでは、またいつでもどうぞ。

Re: HSPのSTGについて  Hiroshi - 2008/11/29(Sat) 03:17 No.249

追加です。実際に作ってみました。次のページに掲載します。

http://masudahp.web.fc2.com/hsp3/game/hspg251.html

詳しい説明はありませんが、参考にしてみてください。

Re: HSPのSTGについて  伊空 - 2008/12/04(Thu) 11:48 No.253

Hiroshiさんありがとうございます。
とても詳しくてプログラミングに慣れていない自分でもボスを出現させることが出来ました。
これからまた改良を加えて新たな敵や新しいボスなどを出現させていければな、と思います

どうもありがとうございました。
また行き詰ったりしたら頼るかもしれませんがよろしくお願いします。

Re: HSPのSTGについて  伊空 - 2009/01/02(Fri) 01:55 No.261

以前もお世話になった伊空です。
背景のスクロールや自機のアニメーションなどはうまく処理できたのですが、
アイテムや行動パターンの違う敵を同時に出す、といった処理がうまくいきません。

どんな風にすれば上手く行くでしょうか?
出来ればアイテムはストック出来るようにしたいのでアドバイスなど出来ればお願いします。

Re: HSPのSTGについて  Hiroshi - 2009/01/04(Sun) 09:28 No.262

ようこそ、伊空 さん

アイテムも行動パターンの違う敵もボスキャラと同じような考え方でいいと思います。
行動パターンごとにteki2_jobのような処理を用意します。あわせて、当たり判定も。
アイテムの場合は、自機と当たったときに得られるような処理を追加します。ストック
しておく変数(配列)も用意しておきます。
ボスキャラの時は、変数bossfで処理を変えまししたが、今回は、敵機の状態を記憶する
配列を利用すればいいと思います。
たとえば、2つの処理を追加で用意したとします。当たり判定はatari1と同じとします。
現状では、
 dim tkb, teki ;敵機の状態 0=あり、-1=なし
でしたが、0以上で敵機ありとします。
 tkb(x)=0:行動パターン1 → teki_job → atari1
 tkb(x)=1:行動パターン2 → teki3_job → atari1
 tkb(x)=2:行動パターン3 → teki4_job → atari1
 tkb(x)=3:アイテム → teki5_job → atari5
この配列tkbの値で異なる移動処理へ移動すればできるのでは、と思います。
ほかにも方法はあると思いますが、いろいろ考えて試してみてください。

追加、追加で作成していくと訳がわからなくなることもありますので、変数の役割や
処理(サブルーチン)のまとめ方を整理することも必要かもしれませんね。
それでは、またいつでもどうぞ。


質問は…?CPAとCPLの違い  Hiroshi - 2008/12/20(Sat) 21:59 No.258

しばらく見ることができませんでした。確か、質問が投稿されていたと思います。
記憶だけで回答です。CPAとCPLの質問だったと思います。
CASLの仕様書には2つの値の大小関係でフラグが設定されるとあります。
引き算によって…は、便宜的なものです。私もそのように説明することがありました。
比較する2つの値が同じ符号であれば、引き算の結果として考えていいのですが、
符号が違う場合、扱える数に範囲があるので必ずしも引き算の結果とは一致しません。
できるだけ仕様書通りに判定を考えるようにした方がいいと思います。


Re: 質問は…?  しほる - 2008/12/30(Tue) 00:42 No.259

Hiroshiさん、ご丁寧に有難うございます。
先日、質問を投稿致しましたが 当方の掲示板への投稿が連投している結果になっているため
気が引けてしまい、質問を削除しました。

他の方々の質問を拝見しますと、有意義な高次元の投稿をされていて
当方の稚拙な質問で過去欄が1つずつ消えてゆくのは何分申し訳ない気持ちです。

また、「実際にキーを叩いてシュミレータでじっくり考える」という作業が不足していることに気付きました
文面だけでは実にならず、シュミレータを動かすことが理解を深めるのですね。

先日の質問を簡潔に申しますと、CPAが、32767-(-1)の時にFRはどうなるのか という事に悩んでおりました
CPA(-32768〜32767) CPL(0〜65535) なので
算術であふれた場合は? 論理であふれた場合は? どうなるのでしょうか。

シュミレータの結果、
CPAなので値は(GR1等)1つ前行から変化しませんが
FR=000 正 と表示されるので 32768でも正なの…? 、と晴れない気持ちです。

(簡潔になるよう"CPAの32768について"と絞りましたが、ソースを質問欄に載せた方が良かったでしょうか?
その時は、また、宜しく御願いします)

Re: 質問は…?  Hiroshi - 2008/12/30(Tue) 10:00 No.260

ようこそ、しほる さん
>当方の稚拙な質問で過去欄が1つずつ消えてゆくのは何分申し訳ない気持ちです。
お気づかい無用です。タイトルの下に[過去ログ]というリンクがありますが、こちらに残っていますので。

>シュミレータを動かすことが理解を深めるのですね。
そうですね。実際にやってみることが大事だと思います。

>算術であふれた場合は? 論理であふれた場合は? どうなるのでしょうか。
比較命令では、引き算をしません。ですから「あふれ」は起こりません。No.258にも書きましたが、
引き算でフラグの状態を考えるのは便宜的なものと考えてください。

>ソースを質問欄に載せた方が良かったでしょうか?
そうですね。より具体的な質問の方がいいです。ソースがあれば、私も実際に動かしてみることができますし。
大きな、あるいは複数のソースの場合は、連絡用フォーム(トップページにリンクがあります)で連絡いただければ
メールアドレスをお知らせしますので、メールで送っていただくこともできます。

それでは、またいつでもどうぞ。

過去ログ
メニューに戻る




inserted by FC2 system