It appears you have not yet registered with DEVPPL. To register please click here... (it's fast, easy and free!)

Forum

Log In Sponsors
Board index Programming Visual Basic Forum

Peter Answers Offline

Moderator: dafunkymunky

Peter Answers Offline

Postby sanjon on Sun Dec 05, 2010 6:29 pm

Hello,

I'm kind of a newbie when it comes to visual basic, but as one of my first projects I decided to make a program just like peter answers. I just want your feedback on what should be improved and maybe a few tips on how to make it run better. You can download it here: http://vbtutor.orgfree.com/2011/10/jona ... r-answers/
Please tell me how it is because I had many people downloading it but none of them gave me feedback. Thanks a lot!!
Last edited by sanjon on Thu Dec 15, 2011 1:09 pm, edited 4 times in total.
sanjon
 
Posts: 40
Joined: Sun Dec 05, 2010 6:20 pm

Re: Peter Answers Offline

Postby HotNoob on Sun Dec 05, 2010 7:15 pm

use a switch statement instead of these if else statements.
Code: Select all
If (Conversions.ToDouble(Me.tempanswer) = 81) Then
            Me.answer = (Me.answer & "Q")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 87) Then
            Me.answer = (Me.answer & "W")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 69) Then
            Me.answer = (Me.answer & "E")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 82) Then
            Me.answer = (Me.answer & "R")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 84) Then
            Me.answer = (Me.answer & "T")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 90) Then
            Me.answer = (Me.answer & "Z")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 85) Then
            Me.answer = (Me.answer & "U")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 73) Then
            Me.answer = (Me.answer & "I")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 79) Then
            Me.answer = (Me.answer & "O")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 80) Then
            Me.answer = (Me.answer & "P")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 65) Then
            Me.answer = (Me.answer & "A")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 83) Then
            Me.answer = (Me.answer & "S")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 68) Then
            Me.answer = (Me.answer & "D")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 70) Then
            Me.answer = (Me.answer & "F")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 71) Then
            Me.answer = (Me.answer & "G")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 72) Then
            Me.answer = (Me.answer & "H")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 74) Then
            Me.answer = (Me.answer & "J")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 75) Then
            Me.answer = (Me.answer & "K")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 76) Then
            Me.answer = (Me.answer & "L")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 89) Then
            Me.answer = (Me.answer & "Y")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 88) Then
            Me.answer = (Me.answer & "X")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 67) Then
            Me.answer = (Me.answer & "C")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 86) Then
            Me.answer = (Me.answer & "V")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 66) Then
            Me.answer = (Me.answer & "B")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 78) Then
            Me.answer = (Me.answer & "N")
        ElseIf (Conversions.ToDouble(Me.tempanswer) = 77) Then
            Me.answer = (Me.answer & "M")
        End If
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 49) Then
        Me.answer = (Me.answer & "1")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 50) Then
        Me.answer = (Me.answer & "2")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 51) Then
        Me.answer = (Me.answer & "3")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 52) Then
        Me.answer = (Me.answer & "4")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 53) Then
        Me.answer = (Me.answer & "5")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 54) Then
        Me.answer = (Me.answer & "6")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 55) Then
        Me.answer = (Me.answer & "7")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 56) Then
        Me.answer = (Me.answer & "8")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 57) Then
        Me.answer = (Me.answer & "9")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 48) Then
        Me.answer = (Me.answer & "0")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 81) Then
        Me.answer = (Me.answer & "q")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 87) Then
        Me.answer = (Me.answer & "w")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 69) Then
        Me.answer = (Me.answer & "e")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 82) Then
        Me.answer = (Me.answer & "r")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 84) Then
        Me.answer = (Me.answer & "t")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 90) Then
        Me.answer = (Me.answer & "z")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 85) Then
        Me.answer = (Me.answer & "u")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 73) Then
        Me.answer = (Me.answer & "i")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 79) Then
        Me.answer = (Me.answer & "o")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 80) Then
        Me.answer = (Me.answer & "p")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 65) Then
        Me.answer = (Me.answer & "a")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 83) Then
        Me.answer = (Me.answer & "s")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 68) Then
        Me.answer = (Me.answer & "d")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 70) Then
        Me.answer = (Me.answer & "f")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 71) Then
        Me.answer = (Me.answer & "g")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 72) Then
        Me.answer = (Me.answer & "h")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 74) Then
        Me.answer = (Me.answer & "j")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 75) Then
        Me.answer = (Me.answer & "k")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 76) Then
        Me.answer = (Me.answer & "l")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 89) Then
        Me.answer = (Me.answer & "y")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 88) Then
        Me.answer = (Me.answer & "x")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 67) Then
        Me.answer = (Me.answer & "c")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 86) Then
        Me.answer = (Me.answer & "v")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 66) Then
        Me.answer = (Me.answer & "b")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 78) Then
        Me.answer = (Me.answer & "n")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 77) Then
        Me.answer = (Me.answer & "m")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 188) Then
        Me.answer = (Me.answer & ",")
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 190) Then
        Me.secondperiod = True
        Me.startanswer = False
        Me.finishanswer = True
    ElseIf (Conversions.ToDouble(Me.tempanswer) = 32) Then
        Me.answer = (Me.answer & " ")
    End If


and it's quite buggy.
the whole... Enter "Jonas, please answer:" bugs alot.

and i donno what your doing here:
Code: Select all
  If (Me.finishanswer AndAlso Not (Conversions.ToDouble(Me.tempanswer) = 8)) Then
        Me.keysafterperiod += 1
    End If
    If ((Conversions.ToDouble(Me.tempanswer) = 8) And Me.startanswer) Then
        If (Me.TextBox1.TextLength >= 1) Then
            Me.peternumber = (Me.peternumber - 2)
        End If
        Me.TextBox2.Text = Me.answer
        If (Me.TextBox2.TextLength >= 1) Then
            Me.TextBox2.Select((Me.TextBox2.TextLength - 1), 1)
            Me.TextBox2.Cut
            Me.answer = Me.TextBox2.Text
        End If
    ElseIf (((Conversions.ToDouble(Me.tempanswer) = 8) And Me.secondperiod) And (Me.keysafterperiod = 0)) Then
        Me.musicplayer.Play
        MessageBox.Show("Fatal Error!! Resetting.", "Error")
        Me.reset
    ElseIf ((Me.finishanswer And Me.secondperiod) And (Conversions.ToDouble(Me.tempanswer) = 8)) Then
        Me.keysafterperiod -= 1
    End If
    If Me.startanswer Then
        If (Me.peternumber = 0) Then
            Me.TextBox1.Text = ""
        ElseIf (Me.peternumber = 1) Then
            Me.TextBox1.Text = "J"
        ElseIf (Me.peternumber = 2) Then
            Me.TextBox1.Text = "Jo"
        ElseIf (Me.peternumber = 3) Then
            Me.TextBox1.Text = "Jon"
        ElseIf (Me.peternumber = 4) Then
            Me.TextBox1.Text = "Jona"
        ElseIf (Me.peternumber = 5) Then
            Me.TextBox1.Text = "Jonas"
        ElseIf (Me.peternumber = 6) Then
            Me.TextBox1.Text = "Jonas,"
        ElseIf (Me.peternumber = 7) Then
            Me.TextBox1.Text = "Jonas, "
        ElseIf (Me.peternumber = 8) Then
            Me.TextBox1.Text = "Jonas, p"
        ElseIf (Me.peternumber = 9) Then
            Me.TextBox1.Text = "Jonas, pl"
        ElseIf (Me.peternumber = 10) Then
            Me.TextBox1.Text = "Jonas, ple"
        ElseIf (Me.peternumber = 11) Then
            Me.TextBox1.Text = "Jonas, plea"
        ElseIf (Me.peternumber = 12) Then
            Me.TextBox1.Text = "Jonas, pleas"
        ElseIf (Me.peternumber = 13) Then
            Me.TextBox1.Text = "Jonas, please"
        ElseIf (Me.peternumber = 14) Then
            Me.TextBox1.Text = "Jonas, please "
        ElseIf (Me.peternumber = 15) Then
            Me.TextBox1.Text = "Jonas, please a"
        ElseIf (Me.peternumber = &H10) Then
            Me.TextBox1.Text = "Jonas, please an"
        ElseIf (Me.peternumber = &H11) Then
            Me.TextBox1.Text = "Jonas, please ans"
        ElseIf (Me.peternumber = &H12) Then
            Me.TextBox1.Text = "Jonas, please answ"
        ElseIf (Me.peternumber = &H13) Then
            Me.TextBox1.Text = "Jonas, please answe"
        ElseIf (Me.peternumber = 20) Then
            Me.TextBox1.Text = "Jonas, please answer"
        ElseIf (Me.peternumber = &H15) Then
            Me.musicplayer.Play
            MessageBox.Show("Fatal Error!! Resetting.", "Error")
            Me.reset
        End If
        e.Handled = True
        Me.AnswerSub
    ElseIf Me.startanswer2 Then
        Me.TextBox1.Text = "J"
        Me.peternumber = 2
        e.Handled = True
    End If
    If (Me.TextBox1.Text = "") Then
        Me.reset
    End If


why don't you just say...
if(Me.TextBox1.text.ToLower() == "Jonas, please answer:")

sorry if i got that wrong ^^
i dont program in VB.

btw, srry i hacked ur program lol.
HotNoob
100+ Club
 
Posts: 169
Joined: Sun May 02, 2010 1:38 am

Re: Peter Answers Offline

Postby HotNoob on Sun Dec 05, 2010 7:16 pm

Also, your converting the number like a million times, which is really bad.

you should put the value of Conversions.ToDouble(Me.tempanswer) into a variable, and then check the variable.
HotNoob
100+ Club
 
Posts: 169
Joined: Sun May 02, 2010 1:38 am

Re: Peter Answers Offline

Postby sanjon on Mon Dec 06, 2010 1:58 pm

Thanks a lot for your feedback! I am not entirely sure what you mean but I will figure it out :) BTW How did you get the code? Is there a program for taking apart VB applications?

The reason why the "Jonas, please answer:" is so buggy is because if I change the text box's "text" value, the cursor always goes to the beginning of the text box. I solved this problem using this code:

Code: Select all
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        Me.TextBox1.Focus()
        Me.TextBox1.Select(Me.TextBox1.Text.Length, 1)
End Sub


I know that it's not the best code to use :). Can you please tell me a better way? All help is appreciated. All I need is some code that makes the cursor stay to the right of the text in the text box at all time...
Last edited by sanjon on Mon Dec 06, 2010 2:30 pm, edited 1 time in total.
sanjon
 
Posts: 40
Joined: Sun Dec 05, 2010 6:20 pm

Re: Peter Answers Offline

Postby sanjon on Mon Dec 06, 2010 2:05 pm

And can you please explain your second post more? I am really new to VB. Sorry if this is a stupid question :)
sanjon
 
Posts: 40
Joined: Sun Dec 05, 2010 6:20 pm

Re: Peter Answers Offline

Postby sanjon on Mon Dec 06, 2010 3:55 pm

I worked some more on my program and got rid of some lines...

I replaced
Code: Select all
If shift = True Then
            If tempanswer = Keys.Q Then
                answer = answer & "Q"
            ElseIf tempanswer = Keys.W Then
                answer = answer & "W"
            ElseIf tempanswer = Keys.E Then
                answer = answer & "E"
            ElseIf tempanswer = Keys.R Then
                answer = answer & "R"
            ElseIf tempanswer = Keys.T Then
                answer = answer & "T"
            ElseIf tempanswer = Keys.Z Then
                answer = answer & "Z"
            ElseIf tempanswer = Keys.U Then
                answer = answer & "U"
            ElseIf tempanswer = Keys.I Then
                answer = answer & "I"
            ElseIf tempanswer = Keys.O Then
                answer = answer & "O"
            ElseIf tempanswer = Keys.P Then
                answer = answer & "P"
            ElseIf tempanswer = Keys.A Then
                answer = answer & "A"
            ElseIf tempanswer = Keys.S Then
                answer = answer & "S"
            ElseIf tempanswer = Keys.D Then
                answer = answer & "D"
            ElseIf tempanswer = Keys.F Then
                answer = answer & "F"
            ElseIf tempanswer = Keys.G Then
                answer = answer & "G"
            ElseIf tempanswer = Keys.H Then
                answer = answer & "H"
            ElseIf tempanswer = Keys.J Then
                answer = answer & "J"
            ElseIf tempanswer = Keys.K Then
                answer = answer & "K"
            ElseIf tempanswer = Keys.L Then
                answer = answer & "L"
            ElseIf tempanswer = Keys.Y Then
                answer = answer & "Y"
            ElseIf tempanswer = Keys.X Then
                answer = answer & "X"
            ElseIf tempanswer = Keys.C Then
                answer = answer & "C"
            ElseIf tempanswer = Keys.V Then
                answer = answer & "V"
            ElseIf tempanswer = Keys.B Then
                answer = answer & "B"
            ElseIf tempanswer = Keys.N Then
                answer = answer & "N"
            ElseIf tempanswer = Keys.M Then
                answer = answer & "M"
            End If
        Else
            If tempanswer = Keys.D1 Then
                answer = answer & "1"
            ElseIf tempanswer = Keys.D2 Then
                answer = answer & "2"
            ElseIf tempanswer = Keys.D3 Then
                answer = answer & "3"
            ElseIf tempanswer = Keys.D4 Then
                answer = answer & "4"
            ElseIf tempanswer = Keys.D5 Then
                answer = answer & "5"
            ElseIf tempanswer = Keys.D6 Then
                answer = answer & "6"
            ElseIf tempanswer = Keys.D7 Then
                answer = answer & "7"
            ElseIf tempanswer = Keys.D8 Then
                answer = answer & "8"
            ElseIf tempanswer = Keys.D9 Then
                answer = answer & "9"
            ElseIf tempanswer = Keys.D0 Then
                answer = answer & "0"
            ElseIf tempanswer = Keys.Q Then
                answer = answer & "q"
            ElseIf tempanswer = Keys.W Then
                answer = answer & "w"
            ElseIf tempanswer = Keys.E Then
                answer = answer & "e"
            ElseIf tempanswer = Keys.R Then
                answer = answer & "r"
            ElseIf tempanswer = Keys.T Then
                answer = answer & "t"
            ElseIf tempanswer = Keys.Z Then
                answer = answer & "z"
            ElseIf tempanswer = Keys.U Then
                answer = answer & "u"
            ElseIf tempanswer = Keys.I Then
                answer = answer & "i"
            ElseIf tempanswer = Keys.O Then
                answer = answer & "o"
            ElseIf tempanswer = Keys.P Then
                answer = answer & "p"
            ElseIf tempanswer = Keys.A Then
                answer = answer & "a"
            ElseIf tempanswer = Keys.S Then
                answer = answer & "s"
            ElseIf tempanswer = Keys.D Then
                answer = answer & "d"
            ElseIf tempanswer = Keys.F Then
                answer = answer & "f"
            ElseIf tempanswer = Keys.G Then
                answer = answer & "g"
            ElseIf tempanswer = Keys.H Then
                answer = answer & "h"
            ElseIf tempanswer = Keys.J Then
                answer = answer & "j"
            ElseIf tempanswer = Keys.K Then
                answer = answer & "k"
            ElseIf tempanswer = Keys.L Then
                answer = answer & "l"
            ElseIf tempanswer = Keys.Y Then
                answer = answer & "y"
            ElseIf tempanswer = Keys.X Then
                answer = answer & "x"
            ElseIf tempanswer = Keys.C Then
                answer = answer & "c"
            ElseIf tempanswer = Keys.V Then
                answer = answer & "v"
            ElseIf tempanswer = Keys.B Then
                answer = answer & "b"
            ElseIf tempanswer = Keys.N Then
                answer = answer & "n"
            ElseIf tempanswer = Keys.M Then


With
Code: Select all
Dim letter As String = ChrW(tempanswer)
        If shift = True Then
            Select Case tempanswer
                Case 65 To 90
                    answer = answer & letter
            End Select
        Else
            Select Case tempanswer
                Case 65 To 90
                    answer = answer & letter.ToLower
                Case 49 To 57
                    answer = answer & letter
                Case Keys.Oemcomma
                    answer = answer & ","
                Case Keys.OemPeriod
                    secondperiod = True
                    startanswer = False
                    finishanswer = True
                    Exit Sub
                Case Keys.Space
                    answer = answer & " "
            End Select
        End If


I feel so proud of myself :) And thanks for the tip to use switch (I think you meant "Select Case")
sanjon
 
Posts: 40
Joined: Sun Dec 05, 2010 6:20 pm

Re: Peter Answers Offline

Postby HotNoob on Mon Dec 06, 2010 7:59 pm

yeah...
i dont actually program with VB so im probably getting half of these terms wrong :P

in most languages its called a switch statement, but im clueless as to what its called in vb cause the syntax is so foreign to me :P
HotNoob
100+ Club
 
Posts: 169
Joined: Sun May 02, 2010 1:38 am

Re: Peter Answers Offline

Postby HotNoob on Mon Dec 06, 2010 8:04 pm

As for my second post, the whole "Conversions.ToDouble(Me.tempanswer)" issue.

everytime you tell it to check the value of it, in an if statement.

it calls the "Me" object.
then the tempanswer variable,
then the Conversions class
and then it calls the ToDouble method,
and finally it converts the number to a double.

So to fix that, you'd store the results of the conversion in a variable.

Code: Select all
Dim tempDouble As Double;
tempDouble = Conversions.ToDouble(Me.tempanswer);


Then you'd apply the if statements or switch/case statements to that variable.

That way everytime you compare it, it calls the tempDouble variable, instead of the whole,
"it calls the "Me" object.
then the tempanswer variable,
then the Conversions class
and then it calls the ToDouble method,
and finally it converts the number to a double."
HotNoob
100+ Club
 
Posts: 169
Joined: Sun May 02, 2010 1:38 am

Re: Peter Answers Offline

Postby sanjon on Tue Dec 07, 2010 1:27 pm

OK. I get what you mean now. The only reason I was confused was because I never used "ToDouble" :) I don't even know what it does... Maybe when you took apart my application it changed some of the code. But I know what you meant. Thanks for helping me. My code is only about half the size now. But can you please help me with one problem? Whenever I change the textbox1.text property, the cursor is at the beginning of the text box. To fix this, I made a timer that puts the cursor at the end of the text box every time it ticks. Like you said, this makes the program quite buggy. Any suggestions on how to keep the cursor to the right of the text? Thanks.
sanjon
 
Posts: 40
Joined: Sun Dec 05, 2010 6:20 pm

Re: Peter Answers Offline

Postby HotNoob on Tue Dec 07, 2010 4:10 pm

when the key is pressed down or when you change the value of it, simply put the marker at the end; i don't think that you need a timer just for that.
HotNoob
100+ Club
 
Posts: 169
Joined: Sun May 02, 2010 1:38 am

Next

Who is online

Users browsing this forum: No registered users and 1 guest