2015-08-24 4 views
2

Для школьного проекта нам было предложено создать «образовательную игру», и я подумал об этой идее, но я смущен тем, как ее кодировать в Visual Basic. Для моей игры есть 10 объектов, которые перемещаются слева направо от игрового экрана по одному с установленными интервалами, и игроку приходится решать одно случайно сформированное уравнение для каждого объекта до того, как он достигнет конца игрового экрана. Как я буду программировать это?Создание простой игры для школьного проекта VB

Это код, который я пытался до сих пор, имея изменение уровня один раз в snakecount = 0

Public Class frmGame 
Dim SnakeCount As Integer 
Dim Score As Integer 
Dim Lives As Integer 
Dim Level As Integer 
Dim Objects(9) As Integer 
Private Sub frmGame_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    While Level = 1 
     Objects(0) = Rnd() + Rnd() 
     Objects(1) = Rnd() - Rnd() 
     Objects(2) = Rnd() - Rnd() 
     Objects(3) = Rnd() * Rnd() 
     Objects(4) = Rnd() + Rnd() 
     Objects(5) = Rnd() * Rnd() 
     Objects(6) = Rnd() + Rnd() 
     Objects(7) = Rnd() - Rnd() 
     Objects(8) = Rnd() + Rnd() 
     Objects(9) = Rnd() * Rnd() 
    End While 
End Sub 

Наибольшую трудность у меня в данный момент присвоения случайных чисел для каждого элемента массив и отображение их как уравнения для пользователя, чтобы увидеть, а затем решить

Любая помощь или консультация с благодарностью! :)

+1

Этот вопрос слишком широк. попытайтесь сузить его до одной трудности. –

+1

Самая большая трудность, с которой я сталкиваюсь в данный момент, - назначить случайные целые числа каждому элементу массива и отобразить их как уравнение для пользователя, чтобы увидеть, а затем решить –

+0

, что лучше. есть ли у вас код, которым вы можете поделиться? –

ответ

2

Чтобы создать (псевдо) случайные целые числа, вы не должны полагаться на Rnd(), чтобы выполнить эту работу, скорее используйте функциональность в System.Random, так как в противном случае шаблоны станут видимыми (и без установки семени вы всегда получите такая же последовательность чисел).

Пример создания псевдослучайных чисел может быть найден here.
В основном, чтобы получить случайное число в диапазоне от Min (включительно) до Max (эксклюзив) вы можете использовать следующие функции:

Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer ' by making Generator static, we preserve the same instance ' ' (i.e., do not create new instances with the same seed over and over) ' ' between calls ' Static Generator As System.Random = New System.Random() Return Generator.Next(Min, Max) End Function


Редактировать в ответ на комментарий:
Чтобы создать случайные уравнения, вы можете сделать что-то вроде

Function randomEquation() As Tuple(Of Integer, String) 
    Dim op As Integer = GetRandom(0, 3) 
    Dim a As Integer = GetRandom(1, 10) 'Set range to your liking 
    Dim b As Integer = GetRandom(1, 10) 

    Select Case op 
     Case 0 
      Return New Tuple(Of Integer, String)(a + b, a & " + " & b) 
     Case 1 
      Return New Tuple(Of Integer, String)(a - b, a & " - " & b) 
     Case 2 
      Return New Tuple(Of Integer, String)(a * b, a & " * " & b) 
     Case Else 
      Throw New NotImplementedException("The value " & op & " is not assigned to an operator.") 
    End Select 
End Function 

В результате получается кортеж, содержащий значение вашего уравнения и самого уравнения (в виде строки), вы можете использовать строку, чтобы отобразить ее пользователю пальца ноги, например Label1.Text = randomEquation().Item2.

+1

Я этого не знал, спасибо! : D Оттуда, как я мог бы затем установить значение каждого элемента моего массива объектов в уравнение двух из этих случайных чисел? –

+0

Как и раньше, но вместо использования 'Objects (0) = Rnd() + Rnd()', используйте 'Objects (0) = GetRandom (Min, Max) + GetRandom (Min, Max)'. – Drarig29

+0

Ах, я вижу, большое спасибо за ваше время, еще один вопрос. Как я уже упоминал ранее для каждого объекта, будет отображаться уравнение, чтобы пользователь мог его решить. Как получить одинаковые значения для каждого объекта, который будет отображаться на этикетке? –

Смежные вопросы