Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2013, 03:07   #1
Rozalina
Пользователь
 
Аватар для Rozalina
 
Регистрация: 08.04.2013
Сообщений: 11
По умолчанию Игра про хрюшек в Visual Studio

нам задали написать код для настольной игры "Pass the Pigs" в Visual Basic
суть игры: кидаешь 2х хрюшек и в зависимости от того как они лягут начисляются очки.
мне нужна помощь с кодом, я совсем новичек и это мой первый класс по программированию, буду рада любым советам
если кто пожелает помочь то напишу все подробно.
Спасибо

Последний раз редактировалось Rozalina; 24.04.2013 в 04:39.
Rozalina вне форума Ответить с цитированием
Старый 24.04.2013, 04:23   #2
Rozalina
Пользователь
 
Аватар для Rozalina
 
Регистрация: 08.04.2013
Сообщений: 11
По умолчанию

ну наверно сразу напишу
правила простые играют 2 игрока, выигрывает тот кто первый наберет 100 очков или больше.
игрок может кидать хрюшек сколько хочет раз, очки за каждый бросок суммируются, но могут сгореть если выпадет "Pig-Out"(сгорают очки за ход) и ход переходить к следующему игроку или первый игрок может передать ход сам тогда очки набранные за ход сохраняются, хотя они тоже могут сгореть если выпадет "Oinker"
я написала код чтобы картинки и очки за бросок выводились в интерфейс , но не знаю как передавать ход.
это правила игры http://passpigs.tripod.com/rules.html

Последний раз редактировалось Rozalina; 24.04.2013 в 04:35.
Rozalina вне форума Ответить с цитированием
Старый 24.04.2013, 04:36   #3
Rozalina
Пользователь
 
Аватар для Rozalina
 
Регистрация: 08.04.2013
Сообщений: 11
По умолчанию

это мой код
Код:
Private Sub btnRoll_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRoll.Click
        Dim Roll(1) As Integer
        Dim intRoll1 As Integer
        Dim intRoll2 As Integer
        Dim intTotalscore As Integer
        Dim intRollScore As Integer
        Dim intTurnScore As Integer

        intTurnScore = 0
        intTotalscore = 0


        For intX As Integer = 0 To 1
            Roll(intX) = Int(Rnd() * 100) + 1
        Next intX
        For intX As Integer = 0 To 1
            If Roll(intX) >= 0 AndAlso Roll(intX) <= 34 Then
                If intX = 0 Then
                    PictureBox1.Image = Image.FromFile("Pink.png")
                    intRoll1 = 1
                Else

                    PictureBox2.Image = Image.FromFile("Pink.png")
                    intRoll2 = 1
                End If
            ElseIf Roll(intX) >= 35 AndAlso Roll(intX) <= 64 Then
                If intX = 0 Then
                    PictureBox1.Image = Image.FromFile("Dot.png")
                    intRoll1 = 2
                Else
                    PictureBox2.Image = Image.FromFile("Dot.png")
                    intRoll2 = 2
                End If
            ElseIf Roll(intX) >= 65 AndAlso Roll(intX) <= 84 Then
                If intX = 0 Then
                    PictureBox1.Image = Image.FromFile("Razorback.png")
                    intRoll1 = 3
                Else
                    PictureBox2.Image = Image.FromFile("Razorback.png")
                    intRoll2 = 3
                End If

            ElseIf Roll(intX) >= 85 AndAlso Roll(intX) <= 94 Then
                If intX = 0 Then
                    PictureBox1.Image = Image.FromFile("Trotter.png")
                    intRoll1 = 4
                Else
                    PictureBox2.Image = Image.FromFile("Trotter.png")
                    intRoll2 = 4
                End If

            ElseIf Roll(intX) >= 95 AndAlso Roll(intX) <= 98 Then
                If intX = 0 Then
                    PictureBox1.Image = Image.FromFile("Snouter.png")
                    intRoll1 = 5
                Else
                    PictureBox2.Image = Image.FromFile("Snouter.png")
                    intRoll2 = 5
                End If

            Else
                If intX = 0 Then
                    PictureBox1.Image = Image.FromFile("Leaning Jowler.png")
                    intRoll1 = 6
                Else
                    PictureBox2.Image = Image.FromFile("Leaning Jowler.png")
                    intRoll2 = 6
                End If

            End If
        Next intX


        If intRoll1 = 1 AndAlso intRoll2 = 1 OrElse intRoll1 = 2 AndAlso intRoll2 = 2 Then
            intRollScore = 1
        ElseIf intRoll1 = 1 AndAlso intRoll2 = 3 OrElse intRoll1 = 1 AndAlso intRoll2 = 4 OrElse intRoll1 = 2 AndAlso intRoll2 = 3 OrElse
            intRoll1 = 2 AndAlso intRoll2 = 4 OrElse intRoll1 = 3 AndAlso intRoll2 = 1 OrElse intRoll1 = 4 AndAlso intRoll2 = 1 OrElse intRoll1 = 3 AndAlso
            intRoll2 = 2 OrElse intRoll1 = 4 AndAlso intRoll2 = 2 Then
            intRollScore = 5
        ElseIf intRoll1 = 1 AndAlso intRoll2 = 5 OrElse intRoll1 = 5 AndAlso intRoll2 = 1 OrElse intRoll1 = 2 AndAlso intRoll2 = 5 OrElse
            intRoll1 = 5 AndAlso intRoll2 = 2 OrElse intRoll1 = 3 AndAlso intRoll2 = 4 OrElse intRoll1 = 4 AndAlso intRoll2 = 3 Then
            intRollScore = 10
        ElseIf intRoll1 = 1 AndAlso intRoll2 = 6 OrElse intRoll1 = 6 AndAlso intRoll2 = 1 OrElse intRoll1 = 2 AndAlso
            intRoll2 = 6 OrElse intRoll1 = 6 AndAlso intRoll2 = 2 OrElse intRoll1 = 3 AndAlso intRoll2 = 5 OrElse
            intRoll1 = 5 AndAlso intRoll2 = 3 OrElse intRoll1 = 4 AndAlso intRoll2 = 5 OrElse intRoll1 = 5 AndAlso intRoll2 = 4 Then
            intRollScore = 15
        ElseIf intRoll1 = 3 AndAlso intRoll2 = 3 OrElse intRoll1 = 4 AndAlso intRoll2 = 4 OrElse intRoll1 = 4 AndAlso
            intRoll2 = 6 OrElse intRoll1 = 6 AndAlso intRoll2 = 4 OrElse intRoll1 = 3 AndAlso intRoll2 = 6 OrElse intRoll1 = 6 AndAlso intRoll2 = 3 Then
            intRollScore = 20
        ElseIf intRoll1 = 5 AndAlso intRoll2 = 6 OrElse intRoll1 = 6 AndAlso intRoll2 = 5 Then
            intRollScore = 25
        ElseIf intRoll1 = 5 AndAlso intRoll2 = 5 Then
            intRollScore = 40
        ElseIf intRoll1 = 6 AndAlso intRoll2 = 6 Then
            intRollScore = 60
        Else
            intRollScore = 0
        End If

        
        If intRollScore = 0 Then
            intTurnScore = 0
            btnRoll.Enabled = False
        Else
            intTurnScore = +intRollScore

        End If
        lblRollScore.Text = intRollScore.ToString("N0")
        lblTurnScore.Text = intTurnScore.ToString("N0")
    End Sub

    Private Sub btnExit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExit.Click
        Me.Close()
    End Sub
End Class

Последний раз редактировалось Stilet; 24.04.2013 в 07:28.
Rozalina вне форума Ответить с цитированием
Старый 24.04.2013, 17:26   #4
Rozalina
Пользователь
 
Аватар для Rozalina
 
Регистрация: 08.04.2013
Сообщений: 11
По умолчанию

а мне никто не хочет помогать
Rozalina вне форума Ответить с цитированием
Старый 24.04.2013, 17:42   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
а мне никто не хочет помогать
Видимо потому, что не так много людей пишут на Visual Basic .NET.

Я бы советовал вынести код вычисления intRollScore в отдельную функцию, принимающую только intRoll1 и intRoll2. Также стоит сделать функцию, принимающую PictureBox и возвращающую Integer - функцию "осуществления броска"; она вызывается два раза - один раз с аргументом PictureBox1 и возвращаемый результата записывается в intRoll1, второй раз с аргументом PictureBox2 и результат записывается в intRoll2.
После чего стоит убедиться, что всё работает точно так же, как и сейчас (такое преобразование кода, которое не меняет его наблюдаемого поведения, называется рефакторингом).

Затем (если я правильно понимаю правила игры) можно ввести понятие "текущего игрока". Нажатие на кнопку "передать ход" меняет текущего игрока, нажатие на кнопку "сделать бросок" вызывает только одну функцию "осуществления броска", соответствующую текущему игроку.
Abstraction вне форума Ответить с цитированием
Старый 24.04.2013, 17:49   #6
was3110
Форумчанин
 
Аватар для was3110
 
Регистрация: 25.04.2010
Сообщений: 254
По умолчанию

Как передается ход?
поскольку игроков всего два, то достаточно ввести одну логическую переменную модуля и переключать ее при каждом ходе. Значение этой переменной использовать в условиях... (кому начислять очки и т.д.)
помогать студентам - моя вторая профессия
was3110 вне форума Ответить с цитированием
Старый 24.04.2013, 17:50   #7
Rozalina
Пользователь
 
Аватар для Rozalina
 
Регистрация: 08.04.2013
Сообщений: 11
По умолчанию

спасибо за ответ
я думала чтоб вынести в отдельную функцию, правда для вычисления intTurnScore, что то не получилось, попробую как вы советуете
пошла осмысливать))
Rozalina вне форума Ответить с цитированием
Старый 24.04.2013, 22:38   #8
Rozalina
Пользователь
 
Аватар для Rozalina
 
Регистрация: 08.04.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от was3110 Посмотреть сообщение
Как передается ход?
поскольку игроков всего два, то достаточно ввести одну логическую переменную модуля и переключать ее при каждом ходе. Значение этой переменной использовать в условиях... (кому начислять очки и т.д.)
что то вроде этого?
Код:
Private intTurn As Integer
intTurn=+1
If intTurn Mod 2 = 1 
 то игрок 1
Else
игрок 2
а где счетчик написать?
Rozalina вне форума Ответить с цитированием
Старый 25.04.2013, 07:15   #9
was3110
Форумчанин
 
Аватар для was3110
 
Регистрация: 25.04.2010
Сообщений: 254
По умолчанию

Private intTurn As Boolean // описание в разделе модуля, выше всех процедур

//в процедуре очередного хода
intTurn=Not (intTurn)
If intTurn то игрок 1
Else игрок 2
помогать студентам - моя вторая профессия
was3110 вне форума Ответить с цитированием
Старый 28.04.2013, 22:12   #10
Rozalina
Пользователь
 
Аватар для Rozalina
 
Регистрация: 08.04.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от was3110 Посмотреть сообщение
Private intTurn As Boolean // описание в разделе модуля, выше всех процедур

//в процедуре очередного хода
intTurn=Not (intTurn)
If intTurn то игрок 1
Else игрок 2
спасибо
Rozalina вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра "Лабиринт",Visual Studio 2008,C++ Shamanch1K Фриланс 5 03.03.2011 10:56
Expression Studio и Visual Studio 2010 ждать ли русские версии? Casper-SC Свободное общение 31 25.05.2010 14:31
Visual Studio Standard 2008 против Visual Studio Express 2008. Стоит ли покупать? Casper-SC Софт 4 31.12.2009 11:46
VISUAL STUDIO 2008 defaul language - как переключить в VISUAL STUDIO 2008 язык программирования, использ Эйнж Общие вопросы C/C++ 0 27.12.2009 20:39
про Visual Studio 2005,2008 MeGaTpoH Visual C++ 22 07.02.2009 16:19