ゲームの効率的な作り方について への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 チョコボ  (小学生) 投稿日時 2009/4/22 08:44:28
名前を間違えました。すいません。
たぶん、でフォルトさんは他の言語では相当にデキルんですよね?
バレーボールゲームは、かなり難しいです。
個人的にはプヨプヨとか、テトリスより上のランクですよ。
vbに関しては、かなり、まだまだ始めたばかりですよね?
テニスか卓球にした方がいいように思いますが。
投稿者 チョコボ  (小学生) 投稿日時 2009/4/22 08:14:24
タイマーイベントも全部コツコツ掲載してみてください。

投稿者 チョコボ  (小学生) 投稿日時 2009/4/22 08:06:49
ん~ラキシスさんのプログラムを検証しょうとしてますけど。
JPGのネットファイルはGIFになってますが^^
投稿者 チョコボ  (小学生) 投稿日時 2009/4/22 02:39:38
タイマーコンポーネントが6個あるのは?とか
部分的なんで検証できないけど^^
でも動いてるですよね?
ちょっと、ぼくも作ろうかなぁ^^
投稿者 ラキシス  () 投稿日時 2009/4/20 21:43:07
単純にまとめるとこんな感じかな。
Dim g As Graphics
Dim gb As Graphics
Dim bitmap As Image
Dim flag As Boolean = True
Dim x = 450, y = 0
Dim dx = 0, dy = 100
Dim olddx, olddy As Integer

Dim maru As New Bitmap("maru.gif")   'ボウル(影が右から左にある) 
Dim maru2 As New Bitmap("maru2.gif"'ボウル(影が左から右にある) 
Dim netto As New bitmap("netto.gif"'ネット 
Dim n1, n2, n3, n4, n5, n6 As Integer

Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
    g = PictureBox1.CreateGraphics
    gb = PictureBox1.CreateGraphics
    gb.DrawImage(netto, x, y, netto.Width, 450)

    Timer1.Enabled = True
    Timer2.Enabled = False
    Timer3.Enabled = False
    Timer4.Enabled = False
    Timer5.Enabled = False

    Randomize()
    n1 = Int(Rnd() * 3)

    If n1 = 0 Then
        Timer6.Interval = 30
    ElseIf n1 = 1 Then
        Timer1.Interval = 80
    ElseIf n1 = 2 Then
        Timer1.Interval = 40
    End If

End Sub

Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Timer1.Tick
    g.FillRectangle(Brushes.White, olddx, olddy, maru.Width, maru.Height)
    g.FillRectangle(Brushes.White, olddx, olddy, maru2.Width, maru2.Height)
    gb = PictureBox1.CreateGraphics
    gb.DrawImage(netto, x, y, netto.Width, 450)

    olddx = dx
    olddy = dy

    If dx < 600 Then
        dx = dx + 15
        dy = dy
    Else
        dx = dx + 10
        dy = dy + 10
    End If

    If dy > 350 Then
        Timer1.Enabled = False
        SoundFileName = """kk.wav"""
        mciSendString("Play " & SoundFileName, vbNull, 0, 0) 'BGMを鳴らす 
        'BGMが鳴ったら得点 
    End If

    flag = Not flag 'ボールを回転させる 

    If flag = True Then
        Dim destRect As New Rectangle(dx, dy, maru.Width, maru.Height)
        Dim srcRect As New Rectangle(0, 0, maru.Width, maru.Height)

        g.DrawImage(maru, destRect, srcRect, GraphicsUnit.Pixel)
    Else
        Dim destRect As New Rectangle(dx, dy, maru2.Width, maru2.Height)
        Dim srcRect As New Rectangle(0, 0, maru2.Width, maru2.Height)

        g.DrawImage(maru2, destRect, srcRect, GraphicsUnit.Pixel)
    End If
End Sub
投稿者 チョコボ  (小学生) 投稿日時 2009/4/10 03:29:33
ありゃ、なんかシーンとしちゃいましたが。。
皮肉とかではなくて、本当に難しいんですよ。
例えば、サーブを打つルーチンにしても...
方程式で落下地点を制御するのか、データリードによる落下地点場所のルートを20種類用意するとか、
これでも2つの方法があるわけですけど。
フロチャート的には1番最初に作るルーチンですね。
次がコム側、あるいは対戦プレイヤー側のレシーブ及びトス等のルーチンです。
6人居ますからねぇ、バレーボールわ。
このルーチンは難しいね^^
投稿者 デジタルチョコボ  (小学生) 投稿日時 2009/4/9 02:53:53
挑戦自体はすごいですよ。
バレーボールやサッカーゲームは、ものすごく難しいものです。
トスボタンとか、アタックボタン等とか
あと、手のどの部分にボールが当たるとジャストミートするのか。とか。
これは、難しい~
サーブルーチンくらいしか、僕はつくれそうにないけど。
レシーブとかむずかしいなぁ~^^
投稿者 (削除されました)  () 投稿日時 2009/4/8 19:08:15
(削除されました)
投稿者 (削除されました)  () 投稿日時 2009/4/8 15:58:05
(削除されました)
投稿者 チョコボ  (小学生) 投稿日時 2009/4/8 05:26:32
すごいなぁ~
ほんとにつくったんですか^^
トスとかレシーブとかボールと手の接触範囲数とかあるんでしょうか?
魔球スマッシュとか・・
sin,
cos
で。
暇でしたら、ちょっと書いてみてください。(^~^)
ぼくも作りたいなぁ。
投稿者 葉月  (社会人) 投稿日時 2009/4/7 06:09:02

単純にまとめました。

Case 0

Timer1.Enabled = True
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False

Case 1

Timer1.Enabled = True
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False

Case 2

Timer1.Enabled = True
Timer2.Enabled = False
Timer3.Enabled = False
Timer4.Enabled = False
Timer5.Enabled = False


Case0-2は、.Interval の値だけしか違いませんね。
関数でまとめられます。


If dx < 600 Then
'省略  
ElseIf dx >= 600 Then
'省略  
End If


省略の中は、dxとdyの値が違うだけです。
ここも引数を与えるだけで、関数化できます。

ここのスレッドも一読しておくといいかもしれません。
http://rucio.groupsite.jp/commu/ThreadDetail.aspx?ThreadId=9048

投稿者 (削除されました)  () 投稿日時 2009/4/7 05:33:30
(削除されました)
投稿者 (削除されました)  () 投稿日時 2009/4/7 04:17:51
(削除されました)
投稿者 (削除されました)  () 投稿日時 2009/4/7 04:12:58
(削除されました)