Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Продолжение 2-х летнего проекта(Графика-Игра) Добавлено: 17.02.08 20:42  

Автор вопроса:  Nikolai | ICQ: 455504541 
Я думаю многим хочеться научиться чему-то где применяеться графика. 2 года назад я начинал на VBNet 2003 но потом продолжить не смог но смысл самого програмирования у меня есть (ZX-Spectrum давно это было)
Теперь хочу научиться на VBNet 2005. Короче начинался проект как игра чтоб там была графика (Спасибо Нижнему Новгороду за помощь)
Вот код:
Imports System.Windows.Forms
Public Enum ScreenOrientation
    Angle0
    Angle90
    Angle180
    Angle270
End Enum

Public Class frmShar
    Inherits System.Windows.Forms.Form
    Private MyKey As Keys
    Private Delta As Integer = 3 ' Величина сдвига картинки (скорость движения)
    Public MyGif As Bitmap = New Bitmap("SharStop.gif") ' Анимированный Gif
    Public MyGif2 As Bitmap = New Bitmap("SharL.gif")
    Public MyGif3 As Bitmap = New Bitmap("SharR.gif")
    Private Animating As Boolean = False ' Стартовый флаг
    Private Orientation As ScreenOrientation = ScreenOrientation.Angle0 ' Направление движения картинки
    Private GifRectangle As New Rectangle ' Прямоугольник для вывода анимации


#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        Me.SetStyle(ControlStyles.DoubleBuffer, True)
        Me.UpdateStyles()


        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.
    'Do not modify it using the code editor.
    Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(frmShar))
        Me.PictureBox1 = New System.Windows.Forms.PictureBox
        Me.TextBox1 = New System.Windows.Forms.TextBox
        Me.SuspendLayout()
        '
        'PictureBox1
        '
        Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image)
        Me.PictureBox1.Location = New System.Drawing.Point(240, 168)
        Me.PictureBox1.Name = "PictureBox1"
        Me.PictureBox1.Size = New System.Drawing.Size(200, 24)
        Me.PictureBox1.TabIndex = 0
        Me.PictureBox1.TabStop = False
        '
        'TextBox1
        '
        Me.TextBox1.Location = New System.Drawing.Point(540, 272)
        Me.TextBox1.Name = "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(60, 20)
        Me.TextBox1.TabIndex = 1
        Me.TextBox1.Text = "TextBox1"
        '
        'frmShar
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.BackgroundImage = CType(resources.GetObject("$this.BackgroundImage"), System.Drawing.Image)
        Me.ClientSize = New System.Drawing.Size(856, 582)
        Me.Controls.Add(Me.TextBox1)
        Me.Controls.Add(Me.PictureBox1)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
        Me.Location = New System.Drawing.Point(20, 20)
        Me.Name = "frmShar"
        Me.Text = "Sharik"
        Me.ResumeLayout(False)

    End Sub

#End Region
    Dim n As Integer
    Dim q As Integer
   
    Private Sub frmGDI_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Enabled = False
        'Задаем начальные координаты и размеры прямоугольника для вывода анимации
        With GifRectangle
            .X = 400
            .Y = 30
            .Width = MyGif.Width
            .Height = MyGif.Height
        End With
        n = 0
    End Sub
    Public Sub StartAnimate()
        If Not Animating Then
            'Запускаем анимацию только 1 раз
            ImageAnimator.Animate(MyGif, New EventHandler(AddressOf Me.NewAnimatedFrame))
            'Устанавливаем флаг
            Animating = True
        End If
    End Sub
    Private Sub NewAnimatedFrame(ByVal o As Object, ByVal e As EventArgs)
        'Инициируем перерисовку экрана в заданной области
        Me.Invalidate(GifRectangle)
    End Sub
    Private Function CheckFormSize(ByVal Pos As Point) As Point
        Dim W, H As Integer
        Select Case Orientation
            Case ScreenOrientation.Angle0, ScreenOrientation.Angle180
                W = GifRectangle.Width
                H = GifRectangle.Height
            Case Else
                W = GifRectangle.Height
                H = GifRectangle.Width
        End Select
        If Pos.X + W > Me.ClientSize.Width Then
            Pos.X = Me.ClientSize.Width - W
        ElseIf Pos.X < 0 Then
            Pos.X = 0
        ElseIf Pos.Y + H > Me.ClientSize.Height Then
            Pos.Y = Me.ClientSize.Height - H
        ElseIf Pos.Y < 0 Then
            Pos.Y = 0
        End If
        Return Pos
    End Function
    Private Sub frmShar_DoubleClick1(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.DoubleClick
        Me.Close()
    End Sub
    Private Sub frmShar_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        'If q <> 2 Then
        ' q = q + 1
        ' GoTo Conec
        ' Else
            'Запоминаем позицию картинки
            Dim Pos As Point = GifRectangle.Location
            'Запоминаем регион,который занимает картинка
            Dim Result As New Region(GifRectangle)
            'Определяем, какая из клавиш была нажата и
            'сдвигаем картинку в нужную сторону на величину Delta
            Select Case e.KeyCode
                Case Keys.Left
                    Pos.X -= Delta
                'ImageAnimator.StopAnimate(MyGif, New EventHandler(AddressOf Me.NewAnimatedFrame))
                ' MyGif = New Bitmap("SharL.gif")
                'Animating = False
                If MyKey <> Keys.Left Then
                    ImageAnimator.StopAnimate(MyGif, New EventHandler(AddressOf Me.NewAnimatedFrame))
                    MyGif = New Bitmap("SharL.gif")
                    Animating = False
                    MyKey = Keys.Left
                End If

            Case Keys.Right
                Pos.X += Delta
                'ImageAnimator.StopAnimate(MyGif, New EventHandler(AddressOf Me.NewAnimatedFrame))
                'MyGif = New Bitmap("SharR.gif")
                'Animating = False
                If MyKey <> Keys.Right Then
                    ImageAnimator.StopAnimate(MyGif, New EventHandler(AddressOf Me.NewAnimatedFrame))
                    MyGif = New Bitmap("SharR.gif")
                    Animating = False
                    MyKey = Keys.Right
                End If
        End Select
        'Проверяем позицию картинки относительно границ формы
        GifRectangle.Location = CheckFormSize(Pos)
        'Перерисовываем область экрана с картинкой (с учетом движения)
        Me.Invalidate(GifRectangle)
        'Вычисляем регион,который составляет разницу между тем где была картинка ДО сдвига
        'и нынешним её положением.Затем перерисовыем эту область. Если этого не сделать, то
        'при движении картинки будет тянуться след равный величине Delta
        Result.Exclude(GifRectangle)
        Me.Invalidate(Result)
        'q = 0
        'GoTo con
        'Conec:
        ' End If
        'con:
    End Sub
    Private Sub frmShar_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
       
        TextBox1.Text = n
        'Запускаем Анимацию
        StartAnimate()
        'Меняем кадр анимации
        ImageAnimator.UpdateFrames()
        'Создаем новую картинку из текущего кадра
        Dim Frame As New Bitmap(Me.MyGif)
        'Рисуем новый кадр на экране в заданном месте
        e.Graphics.DrawImage(Frame, GifRectangle)
        'Убиваем ненужный объект
        Frame.Dispose()
    End Sub

    Private Sub frmShar_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
        ImageAnimator.StopAnimate(MyGif, New EventHandler(AddressOf Me.NewAnimatedFrame))
        MyGif = New Bitmap("SharStop.gif")
        Animating = False
    End Sub
    Private Sub l()
        Select Case n

            Case 1
                Dim MyGif As Bitmap = New Bitmap("SharL.gif")
            Case 2
                Dim MyGif As Bitmap = New Bitmap("SharR.gif")
            Case 0
                Dim MyGif As Bitmap = New Bitmap("SharStop.gif")
        End Select
    End Sub
End Class

Здесь при загрузке появляеться шар под ним PictureBox1 в ввиде прямоугольника при нажатии влево шарик катиться в лево, так же вправо или просто стоит
Задача: надо чтоб шарик как докатиться до конца PictureBox1 должен упасть вниз. Потом ещё много чего с этим шариком будет если проект (причём это учебный проект и ребят не надо говорить что мы должны его сделать за тебя если я умел я бы не просил да и другим думаю интересно ) продолжит своё существование.

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #1 Добавлено: 17.02.08 21:14
Вобщем нормальной игры без DX у тебя не получится.
Ищи инфу по DirectX

Ответить

Номер ответа: 2
Автор ответа:
 Wolf4D



Вопросов: 20
Ответов: 131
 Web-сайт: www.madnesstudio.ru
 Профиль | | #2
Добавлено: 17.02.08 21:37
Я, конечно, не хвастаюсь, да и язык программирования немного другой, но попробуй посмотреть вот эту мою разработку:
http://vbnet.ru/samples/download.aspx?id=832
Может, что и пригодится ;)

Ответить

Номер ответа: 3
Автор ответа:
 Nikolai



ICQ: 455504541 

Вопросов: 6
Ответов: 8
 Профиль | | #3 Добавлено: 17.02.08 21:47
Ребят я ведь хочу немного научиться програмировать, а интересную и красивую игру можно сделать не зависимо на коком ты языке её создаёшь, но всё таки как сделать чтоб шар упал. Спасибо.

Ответить

Номер ответа: 4
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #4
Добавлено: 17.02.08 22:27
У тебя есть все размеры. При аннимации проверяй, не достиг ли шар конца ракетки. Если достиг, меняй направление движения.
Для начала вполне сойдет.
И DX для игры такого плана, не обязателен.

Ответить

Номер ответа: 5
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #5 Добавлено: 17.02.08 22:29
DX - это не язык программирования. Это своего рода Фреймворк для работы с 2х или 3х мерной графикой. DirectX можно и нужно использовать в VB.NET 2005 для создания игр.

Ответить

Номер ответа: 6
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #6
Добавлено: 17.02.08 23:10
BUMM
Вообще говоря DX работает не только с графикой:)
С графикой работает его часть - D3D. Ив более ранних версиях DDraw.
И вообще говоря, это не своего рода фреймворк, а низкоуровневые интерфейсы, позволяющие миновать тормознутый GDI.
Но все это меркнет и тускнеет, учитывая то что игра не требовательна к графике. Из чего следует, что в данном случае он не нужен.
DirectX можно и нужно использовать в VB.NET 2005 для создания игр.

Насчет можно никто не сомневается. Насчет нужно - вопрос задачи. А самое интересное - это создание игр на VB.NET 2005 :)

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 17.02.08 23:56
Этот код не похож на код, написаный в Visual Studio 2005

Скорее проект, импортированый из Visual Studio 2003

Ответить

Номер ответа: 8
Автор ответа:
 Nikolai



ICQ: 455504541 

Вопросов: 6
Ответов: 8
 Профиль | | #8 Добавлено: 18.02.08 18:09
Да сделан он был Visual Studio 2003 а щас я перешёл на 2005 я понимаю что здесь форум и идут обсуждения но кто-нибудь мне поможет мне надо знать что в этом месте есть picturebox или нет
если есть то сделать то-то если нет например упасть.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам