Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [VB6] Luvun pyöristäminen suurempaan tasaan

Sivun loppuun

rautamiekka [05.09.2008 01:52:41]

#

Kellään tietoa VB6-tuetusta pyöristyskeinosta desimaalinumero seuraavaan suurempaan tasalukuun ?

Esim. 1.00990909001011 -> 2

petrinm [05.09.2008 07:45:17]

#

Tarkoitat yksinkertaisesti kokonaisluku pyöristystä ja se hoituukin yksinkertaisesti int funktiolla:

MsgBox Int(1.00990909001011)

tgunner [05.09.2008 07:50:47]

#

Eikös Int vain leikkaa desimaaliosan pois? Näin ainakin C:ssä, ja niin putkan opaskin tuntuu väittävän.

VB-opas kirjoitti:

Luvun muuttaminen kokonaisluvuksi niin, että pyöristys menee oikein, tapahtuu Round-funktiolla. Funktion toisena parametrina voi olla desimaalien määrä. Esimerkiksi Round(15.7) = 16 ja Round(1.2345, 2) = 1.23.

Lisää pyöristettävään lukuu 0.5 ja käytä Round-funktiota.

Jaska [05.09.2008 07:52:36]

#

Muistaakseni VB:ssä Int(number) pyöristää alaspäin, jolloin Int(number) + 1 pyöristää ylöspäin.

Antti Laaksonen [05.09.2008 09:34:29]

#

Toimisiko tämä?

-Int(-luku)

Vertailua:

luku      Round(luku+0.5)   Int(luku)+1       -Int(-luku)       ----------------------------------------------------------------
2         2                 3                 2
2.1       3                 3                 3
2.3       3                 3                 3
2.5       3                 3                 3
2.7       3                 3                 3
2.9       3                 3                 3
3         4                 4                 3
3.1       4                 4                 4
3.3       4                 4                 4
3.5       4                 4                 4

Kaavojen toiminnassa on siis eroja, kun luku on valmiiksi tasaluku.

rautamiekka [05.09.2008 14:43:55]

#

En ymmärrä mitä teen väärin. List1:seen tulostuu aina vain sama litannia

10 --> 11 Kill !1! Guards of HP22
11 --> 12 Kill !1! Guards of HP22
12 --> 13 Kill !1! Guards of HP22
13 --> 14 Kill !1! Guards of HP22
14 --> 15 Kill !1! Guards of HP22
15 --> 16 Kill !1! Guards of HP22
16 --> 17 Kill !1! Guards of HP22
17 --> 18 Kill !1! Guards of HP22
18 --> 19 Kill !1! Guards of HP22
19 --> 20 Kill !1! Guards of HP22

-aivan- sama mitä funktiota käytän. Olen vääntänyt tätä koodia jo yön plus tämän aamun ILMAN TULOSTA ! :@ Huomatkaa erikoismerkattu !1!, ylhäältä alas sen pitäisi olla tyyliin 1 3 5 7 9 11 13 15 17 19 EIKÄ MIKÄÄN KIROTTU 1.

'JULISTUKSET
Option Explicit
Const Level1XP = 0
Const Level2XP = 83
Const Level3XP = 174
Const Level4XP = 276
Const Level5XP = 388
Const Level6XP = 512
Const Level7XP = 650
Const Level8XP = 801
Const Level9XP = 969
Const Level10XP = 1154
Const Level11XP = 1358
Const Level12XP = 1584
Const Level13XP = 1833
Const Level14XP = 2107
Const Level15XP = 2411
Const Level16XP = 2746
Const Level17XP = 3115
Const Level18XP = 3523
Const Level19XP = 3973
Const Level20XP = 4470
Const Level21XP = 5018
Const Level22XP = 5624
Const Level23XP = 6291
Const Level24XP = 7028
Const Level25XP = 7842
Const Level26XP = 8740
Const Level27XP = 9730
Const Level28XP = 10824
Const Level29XP = 12031
Const Level30XP = 13363
Const Level31XP = 14833
Const Level32XP = 16456
Const Level33XP = 18247
Const Level34XP = 20224
Const Level35XP = 22406
Const Level36XP = 24815
Const Level37XP = 27473
Const Level38XP = 30408
Const Level39XP = 33648
Const Level40XP = 37224
Const Level41XP = 41171
Const Level42XP = 45529
Const Level43XP = 50339
Const Level44XP = 55649
Const Level45XP = 61512
Const Level46XP = 67983
Const Level47XP = 75127
Const Level48XP = 83014
Const Level49XP = 91721
Const Level50XP = 101333
Const Level51XP = 111945
Const Level52XP = 123660
Const Level53XP = 136594
Const Level54XP = 150872
Const Level55XP = 166636
Const Level56XP = 184040
Const Level57XP = 203254
Const Level58XP = 224466
Const Level59XP = 247886
Const Level60XP = 273742
Const Level61XP = 302288
Const Level62XP = 333804
Const Level63XP = 368599
Const Level64XP = 407015
Const Level65XP = 449428
Const Level66XP = 496254
Const Level67XP = 547953
Const Level68XP = 605032
Const Level69XP = 668051
Const Level70XP = 737627
Const Level71XP = 814445
Const Level72XP = 899257
Const Level73XP = 992895
Const Level74XP = 1096278
Const Level75XP = 1210421
Const Level76XP = 1336443
Const Level77XP = 1475581
Const Level78XP = 1629200
Const Level79XP = 1798808
Const Level80XP = 1986068
Const Level81XP = 2192818
Const Level82XP = 2421087
Const Level83XP = 2673114
Const Level84XP = 2951373
Const Level85XP = 3258594
Const Level86XP = 3597792
Const Level87XP = 3972294
Const Level88XP = 4385776
Const Level89XP = 4842295
Const Level90XP = 5346332
Const Level91XP = 5902831
Const Level92XP = 6517253
Const Level93XP = 7195629
Const Level94XP = 7944614
Const Level95XP = 8771558
Const Level96XP = 9684577
Const Level97XP = 10692629
Const Level98XP = 11805606
Const Level99XP = 13034431

Const GuardHP = 22

Public varCalc

Public CurLVL As Integer
'/JULISTUKSET

Private Sub Command1_Click()
    Select Case Val(txtCurrentXP.Text)
        Case Val(Level1XP) To Val(Level2XP - 1): CurLVL = 1
        Case Val(Level2XP) To Val(Level3XP - 1): CurLVL = 2
        Case Val(Level3XP) To Val(Level4XP - 1): CurLVL = 3
        Case Val(Level4XP) To Val(Level5XP - 1): CurLVL = 4
        Case Val(Level5XP) To Val(Level6XP - 1): CurLVL = 5
        Case Val(Level6XP) To Val(Level7XP - 1): CurLVL = 6
        Case Val(Level7XP) To Val(Level8XP - 1): CurLVL = 7
        Case Val(Level8XP) To Val(Level9XP - 1): CurLVL = 8
        Case Val(Level9XP) To Val(Level10XP - 1): CurLVL = 9
        Case Val(Level10XP) To Val(Level11XP - 1): CurLVL = 10
        Case Val(Level11XP) To Val(Level12XP - 1): CurLVL = 11
        Case Val(Level12XP) To Val(Level13XP - 1): CurLVL = 12
        Case Val(Level13XP) To Val(Level14XP - 1): CurLVL = 13
        Case Val(Level14XP) To Val(Level15XP - 1): CurLVL = 14
        Case Val(Level15XP) To Val(Level16XP - 1): CurLVL = 15
        Case Val(Level16XP) To Val(Level17XP - 1): CurLVL = 16
        Case Val(Level17XP) To Val(Level18XP - 1): CurLVL = 17
        Case Val(Level18XP) To Val(Level19XP - 1): CurLVL = 18
        Case Val(Level19XP) To Val(Level20XP - 1): CurLVL = 19
        Case Val(Level20XP) To Val(Level21XP - 1): CurLVL = 20
        Case Val(Level21XP) To Val(Level22XP - 1): CurLVL = 21
        Case Val(Level22XP) To Val(Level23XP - 1): CurLVL = 22
        Case Val(Level23XP) To Val(Level24XP - 1): CurLVL = 23
        Case Val(Level24XP) To Val(Level25XP - 1): CurLVL = 24
        Case Val(Level25XP) To Val(Level26XP - 1): CurLVL = 25
        Case Val(Level26XP) To Val(Level27XP - 1): CurLVL = 26
        Case Val(Level27XP) To Val(Level28XP - 1): CurLVL = 27
        Case Val(Level28XP) To Val(Level29XP - 1): CurLVL = 28
        Case Val(Level30XP) To Val(Level30XP - 1): CurLVL = 29
        Case Val(Level31XP) To Val(Level31XP - 1): CurLVL = 30
        Case Val(Level32XP) To Val(Level32XP - 1): CurLVL = 31
        Case Val(Level32XP) To Val(Level33XP - 1): CurLVL = 32
        Case Val(Level33XP) To Val(Level34XP - 1): CurLVL = 33
        Case Val(Level34XP) To Val(Level35XP - 1): CurLVL = 34
        Case Val(Level35XP) To Val(Level36XP - 1): CurLVL = 35
        Case Val(Level36XP) To Val(Level37XP - 1): CurLVL = 36
        Case Val(Level37XP) To Val(Level38XP - 1): CurLVL = 37
        Case Val(Level38XP) To Val(Level39XP - 1): CurLVL = 38
        Case Val(Level39XP) To Val(Level40XP - 1): CurLVL = 39
        Case Val(Level40XP) To Val(Level41XP - 1): CurLVL = 40
        Case Val(Level41XP) To Val(Level42XP - 1): CurLVL = 41
        Case Val(Level42XP) To Val(Level43XP - 1): CurLVL = 42
        Case Val(Level43XP) To Val(Level44XP - 1): CurLVL = 43
        Case Val(Level44XP) To Val(Level45XP - 1): CurLVL = 44
        Case Val(Level45XP) To Val(Level46XP - 1): CurLVL = 45
        Case Val(Level46XP) To Val(Level47XP - 1): CurLVL = 46
        Case Val(Level47XP) To Val(Level48XP - 1): CurLVL = 47
        Case Val(Level48XP) To Val(Level49XP - 1): CurLVL = 48
        Case Val(Level49XP) To Val(Level50XP - 1): CurLVL = 49
        Case Val(Level50XP) To Val(Level51XP - 1): CurLVL = 50
        Case Val(Level51XP) To Val(Level52XP - 1): CurLVL = 51
        Case Val(Level52XP) To Val(Level53XP - 1): CurLVL = 52
        Case Val(Level53XP) To Val(Level54XP - 1): CurLVL = 53
        Case Val(Level54XP) To Val(Level55XP - 1): CurLVL = 54
        Case Val(Level55XP) To Val(Level56XP - 1): CurLVL = 55
        Case Val(Level56XP) To Val(Level57XP - 1): CurLVL = 56
        Case Val(Level57XP) To Val(Level58XP - 1): CurLVL = 57
        Case Val(Level58XP) To Val(Level59XP - 1): CurLVL = 58
        Case Val(Level59XP) To Val(Level60XP - 1): CurLVL = 59
        Case Val(Level60XP) To Val(Level61XP - 1): CurLVL = 60
        Case Val(Level61XP) To Val(Level62XP - 1): CurLVL = 61
        Case Val(Level62XP) To Val(Level63XP - 1): CurLVL = 62
        Case Val(Level63XP) To Val(Level64XP - 1): CurLVL = 63
        Case Val(Level64XP) To Val(Level65XP - 1): CurLVL = 64
        Case Val(Level65XP) To Val(Level66XP - 1): CurLVL = 65
        Case Val(Level66XP) To Val(Level67XP - 1): CurLVL = 66
        Case Val(Level67XP) To Val(Level68XP - 1): CurLVL = 67
        Case Val(Level68XP) To Val(Level69XP - 1): CurLVL = 68
        Case Val(Level69XP) To Val(Level70XP - 1): CurLVL = 69
        Case Val(Level70XP) To Val(Level71XP - 1): CurLVL = 70
        Case Val(Level71XP) To Val(Level72XP - 1): CurLVL = 71
        Case Val(Level72XP) To Val(Level73XP - 1): CurLVL = 72
        Case Val(Level73XP) To Val(Level74XP - 1): CurLVL = 73
        Case Val(Level74XP) To Val(Level75XP - 1): CurLVL = 74
        Case Val(Level75XP) To Val(Level76XP - 1): CurLVL = 75
        Case Val(Level76XP) To Val(Level77XP - 1): CurLVL = 76
        Case Val(Level77XP) To Val(Level78XP - 1): CurLVL = 77
        Case Val(Level78XP) To Val(Level79XP - 1): CurLVL = 78
        Case Val(Level79XP) To Val(Level80XP - 1): CurLVL = 79
        Case Val(Level80XP) To Val(Level81XP - 1): CurLVL = 80
        Case Val(Level81XP) To Val(Level82XP - 1): CurLVL = 81
        Case Val(Level82XP) To Val(Level83XP - 1): CurLVL = 82
        Case Val(Level83XP) To Val(Level84XP - 1): CurLVL = 83
        Case Val(Level84XP) To Val(Level85XP - 1): CurLVL = 84
        Case Val(Level85XP) To Val(Level86XP - 1): CurLVL = 85
        Case Val(Level86XP) To Val(Level87XP - 1): CurLVL = 86
        Case Val(Level87XP) To Val(Level88XP - 1): CurLVL = 87
        Case Val(Level88XP) To Val(Level89XP - 1): CurLVL = 88
        Case Val(Level89XP) To Val(Level90XP - 1): CurLVL = 89
        Case Val(Level90XP) To Val(Level91XP - 1): CurLVL = 90
        Case Val(Level91XP) To Val(Level92XP - 1): CurLVL = 91
        Case Val(Level92XP) To Val(Level93XP - 1): CurLVL = 92
        Case Val(Level93XP) To Val(Level94XP - 1): CurLVL = 93
        Case Val(Level94XP) To Val(Level95XP - 1): CurLVL = 94
        Case Val(Level95XP) To Val(Level96XP - 1): CurLVL = 95
        Case Val(Level96XP) To Val(Level97XP - 1): CurLVL = 96
        Case Val(Level97XP) To Val(Level98XP - 1): CurLVL = 97
        Case Val(Level98XP) To Val(Level99XP - 1): CurLVL = 98
        Case Val(Level99XP) To Val(Level99XP + 86965568): CurLVL = 99
    End Select

    List1.Clear

    Do While Not CurLVL >= txtTargetLVL.Text
        varCalc = ((Val(txtTargetLVL.Text) - CurLVL) / (4 * GuardHP))
        List1.AddItem CurLVL & " --> " & (CurLVL + 1) & "   " & "Kill " & (Int(varCalc) + 1) & " Guards of 22HP"
        CurLVL = CurLVL + 1
    Loop
End Sub

Private Sub txtcurrentxp_Change()
    Select Case Val(txtCurrentXP.Text)
        Case Val(Level1XP) To Val(Level2XP - 1): lblCurrentLVL.Caption = "[ lvl1 ]"
        Case Val(Level2XP) To Val(Level3XP - 1): lblCurrentLVL.Caption = "[ lvl2 ]"
        Case Val(Level3XP) To Val(Level4XP - 1): lblCurrentLVL.Caption = "[ lvl3 ]"
        Case Val(Level4XP) To Val(Level5XP - 1): lblCurrentLVL.Caption = "[ lvl4 ]"
        Case Val(Level5XP) To Val(Level6XP - 1): lblCurrentLVL.Caption = "[ lvl5 ]"
        Case Val(Level6XP) To Val(Level7XP - 1): lblCurrentLVL.Caption = "[ lvl6 ]"
        Case Val(Level7XP) To Val(Level8XP - 1): lblCurrentLVL.Caption = "[ lvl7 ]"
        Case Val(Level8XP) To Val(Level9XP - 1): lblCurrentLVL.Caption = "[ lvl8 ]"
        Case Val(Level9XP) To Val(Level10XP - 1): lblCurrentLVL.Caption = "[ lvl9 ]"
        Case Val(Level10XP) To Val(Level11XP - 1): lblCurrentLVL.Caption = "[ lvl10 ]"
        Case Val(Level11XP) To Val(Level12XP - 1): lblCurrentLVL.Caption = "[ lvl11 ]"
        Case Val(Level12XP) To Val(Level13XP - 1): lblCurrentLVL.Caption = "[ lvl12 ]"
        Case Val(Level13XP) To Val(Level14XP - 1): lblCurrentLVL.Caption = "[ lvl13 ]"
        Case Val(Level14XP) To Val(Level15XP - 1): lblCurrentLVL.Caption = "[ lvl14 ]"
        Case Val(Level15XP) To Val(Level16XP - 1): lblCurrentLVL.Caption = "[ lvl15 ]"
        Case Val(Level16XP) To Val(Level17XP - 1): lblCurrentLVL.Caption = "[ lvl16 ]"
        Case Val(Level17XP) To Val(Level18XP - 1): lblCurrentLVL.Caption = "[ lvl17 ]"
        Case Val(Level18XP) To Val(Level19XP - 1): lblCurrentLVL.Caption = "[ lvl18 ]"
        Case Val(Level19XP) To Val(Level20XP - 1): lblCurrentLVL.Caption = "[ lvl19 ]"
        Case Val(Level20XP) To Val(Level21XP - 1): lblCurrentLVL.Caption = "[ lvl20 ]"
        Case Val(Level21XP) To Val(Level22XP - 1): lblCurrentLVL.Caption = "[ lvl21 ]"
        Case Val(Level22XP) To Val(Level23XP - 1): lblCurrentLVL.Caption = "[ lvl22 ]"
        Case Val(Level23XP) To Val(Level24XP - 1): lblCurrentLVL.Caption = "[ lvl23 ]"
        Case Val(Level24XP) To Val(Level25XP - 1): lblCurrentLVL.Caption = "[ lvl24 ]"
        Case Val(Level25XP) To Val(Level26XP - 1): lblCurrentLVL.Caption = "[ lvl25 ]"
        Case Val(Level26XP) To Val(Level27XP - 1): lblCurrentLVL.Caption = "[ lvl26 ]"
        Case Val(Level27XP) To Val(Level28XP - 1): lblCurrentLVL.Caption = "[ lvl27 ]"
        Case Val(Level28XP) To Val(Level29XP - 1): lblCurrentLVL.Caption = "[ lvl28 ]"
        Case Val(Level30XP) To Val(Level30XP - 1): lblCurrentLVL.Caption = "[ lvl29 ]"
        Case Val(Level31XP) To Val(Level31XP - 1): lblCurrentLVL.Caption = "[ lvl30 ]"
        Case Val(Level32XP) To Val(Level32XP - 1): lblCurrentLVL.Caption = "[ lvl31 ]"
        Case Val(Level32XP) To Val(Level33XP - 1): lblCurrentLVL.Caption = "[ lvl32 ]"
        Case Val(Level33XP) To Val(Level34XP - 1): lblCurrentLVL.Caption = "[ lvl33 ]"
        Case Val(Level34XP) To Val(Level35XP - 1): lblCurrentLVL.Caption = "[ lvl34 ]"
        Case Val(Level35XP) To Val(Level36XP - 1): lblCurrentLVL.Caption = "[ lvl35 ]"
        Case Val(Level36XP) To Val(Level37XP - 1): lblCurrentLVL.Caption = "[ lvl36 ]"
        Case Val(Level37XP) To Val(Level38XP - 1): lblCurrentLVL.Caption = "[ lvl37 ]"
        Case Val(Level38XP) To Val(Level39XP - 1): lblCurrentLVL.Caption = "[ lvl38 ]"
        Case Val(Level39XP) To Val(Level40XP - 1): lblCurrentLVL.Caption = "[ lvl39 ]"
        Case Val(Level40XP) To Val(Level41XP - 1): lblCurrentLVL.Caption = "[ lvl40 ]"
        Case Val(Level41XP) To Val(Level42XP - 1): lblCurrentLVL.Caption = "[ lvl41 ]"
        Case Val(Level42XP) To Val(Level43XP - 1): lblCurrentLVL.Caption = "[ lvl42 ]"
        Case Val(Level43XP) To Val(Level44XP - 1): lblCurrentLVL.Caption = "[ lvl43 ]"
        Case Val(Level44XP) To Val(Level45XP - 1): lblCurrentLVL.Caption = "[ lvl44 ]"
        Case Val(Level45XP) To Val(Level46XP - 1): lblCurrentLVL.Caption = "[ lvl45 ]"
        Case Val(Level46XP) To Val(Level47XP - 1): lblCurrentLVL.Caption = "[ lvl46 ]"
        Case Val(Level47XP) To Val(Level48XP - 1): lblCurrentLVL.Caption = "[ lvl47 ]"
        Case Val(Level48XP) To Val(Level49XP - 1): lblCurrentLVL.Caption = "[ lvl48 ]"
        Case Val(Level49XP) To Val(Level50XP - 1): lblCurrentLVL.Caption = "[ lvl49 ]"
        Case Val(Level50XP) To Val(Level51XP - 1): lblCurrentLVL.Caption = "[ lvl50 ]"
        Case Val(Level51XP) To Val(Level52XP - 1): lblCurrentLVL.Caption = "[ lvl51 ]"
        Case Val(Level52XP) To Val(Level53XP - 1): lblCurrentLVL.Caption = "[ lvl52 ]"
        Case Val(Level53XP) To Val(Level54XP - 1): lblCurrentLVL.Caption = "[ lvl53 ]"
        Case Val(Level54XP) To Val(Level55XP - 1): lblCurrentLVL.Caption = "[ lvl54 ]"
        Case Val(Level55XP) To Val(Level56XP - 1): lblCurrentLVL.Caption = "[ lvl55 ]"
        Case Val(Level56XP) To Val(Level57XP - 1): lblCurrentLVL.Caption = "[ lvl56 ]"
        Case Val(Level57XP) To Val(Level58XP - 1): lblCurrentLVL.Caption = "[ lvl57 ]"
        Case Val(Level58XP) To Val(Level59XP - 1): lblCurrentLVL.Caption = "[ lvl58 ]"
        Case Val(Level59XP) To Val(Level60XP - 1): lblCurrentLVL.Caption = "[ lvl59 ]"
        Case Val(Level60XP) To Val(Level61XP - 1): lblCurrentLVL.Caption = "[ lvl60 ]"
        Case Val(Level61XP) To Val(Level62XP - 1): lblCurrentLVL.Caption = "[ lvl61 ]"
        Case Val(Level62XP) To Val(Level63XP - 1): lblCurrentLVL.Caption = "[ lvl62 ]"
        Case Val(Level63XP) To Val(Level64XP - 1): lblCurrentLVL.Caption = "[ lvl63 ]"
        Case Val(Level64XP) To Val(Level65XP - 1): lblCurrentLVL.Caption = "[ lvl64 ]"
        Case Val(Level65XP) To Val(Level66XP - 1): lblCurrentLVL.Caption = "[ lvl65 ]"
        Case Val(Level66XP) To Val(Level67XP - 1): lblCurrentLVL.Caption = "[ lvl66 ]"
        Case Val(Level67XP) To Val(Level68XP - 1): lblCurrentLVL.Caption = "[ lvl67 ]"
        Case Val(Level68XP) To Val(Level69XP - 1): lblCurrentLVL.Caption = "[ lvl68 ]"
        Case Val(Level69XP) To Val(Level70XP - 1): lblCurrentLVL.Caption = "[ lvl69 ]"
        Case Val(Level70XP) To Val(Level71XP - 1): lblCurrentLVL.Caption = "[ lvl70 ]"
        Case Val(Level71XP) To Val(Level72XP - 1): lblCurrentLVL.Caption = "[ lvl71 ]"
        Case Val(Level72XP) To Val(Level73XP - 1): lblCurrentLVL.Caption = "[ lvl72 ]"
        Case Val(Level73XP) To Val(Level74XP - 1): lblCurrentLVL.Caption = "[ lvl73 ]"
        Case Val(Level74XP) To Val(Level75XP - 1): lblCurrentLVL.Caption = "[ lvl74 ]"
        Case Val(Level75XP) To Val(Level76XP - 1): lblCurrentLVL.Caption = "[ lvl75 ]"
        Case Val(Level76XP) To Val(Level77XP - 1): lblCurrentLVL.Caption = "[ lvl76 ]"
        Case Val(Level77XP) To Val(Level78XP - 1): lblCurrentLVL.Caption = "[ lvl77 ]"
        Case Val(Level78XP) To Val(Level79XP - 1): lblCurrentLVL.Caption = "[ lvl78 ]"
        Case Val(Level79XP) To Val(Level80XP - 1): lblCurrentLVL.Caption = "[ lvl79 ]"
        Case Val(Level80XP) To Val(Level81XP - 1): lblCurrentLVL.Caption = "[ lvl80 ]"
        Case Val(Level81XP) To Val(Level82XP - 1): lblCurrentLVL.Caption = "[ lvl81 ]"
        Case Val(Level82XP) To Val(Level83XP - 1): lblCurrentLVL.Caption = "[ lvl82 ]"
        Case Val(Level83XP) To Val(Level84XP - 1): lblCurrentLVL.Caption = "[ lvl83 ]"
        Case Val(Level84XP) To Val(Level85XP - 1): lblCurrentLVL.Caption = "[ lvl84 ]"
        Case Val(Level85XP) To Val(Level86XP - 1): lblCurrentLVL.Caption = "[ lvl85 ]"
        Case Val(Level86XP) To Val(Level87XP - 1): lblCurrentLVL.Caption = "[ lvl86 ]"
        Case Val(Level87XP) To Val(Level88XP - 1): lblCurrentLVL.Caption = "[ lvl87 ]"
        Case Val(Level88XP) To Val(Level89XP - 1): lblCurrentLVL.Caption = "[ lvl88 ]"
        Case Val(Level89XP) To Val(Level90XP - 1): lblCurrentLVL.Caption = "[ lvl89 ]"
        Case Val(Level90XP) To Val(Level91XP - 1): lblCurrentLVL.Caption = "[ lvl90 ]"
        Case Val(Level91XP) To Val(Level92XP - 1): lblCurrentLVL.Caption = "[ lvl91 ]"
        Case Val(Level92XP) To Val(Level93XP - 1): lblCurrentLVL.Caption = "[ lvl92 ]"
        Case Val(Level93XP) To Val(Level94XP - 1): lblCurrentLVL.Caption = "[ lvl93 ]"
        Case Val(Level94XP) To Val(Level95XP - 1): lblCurrentLVL.Caption = "[ lvl94 ]"
        Case Val(Level95XP) To Val(Level96XP - 1): lblCurrentLVL.Caption = "[ lvl95 ]"
        Case Val(Level96XP) To Val(Level97XP - 1): lblCurrentLVL.Caption = "[ lvl96 ]"
        Case Val(Level97XP) To Val(Level98XP - 1): lblCurrentLVL.Caption = "[ lvl97 ]"
        Case Val(Level98XP) To Val(Level99XP - 1): lblCurrentLVL.Caption = "[ lvl98 ]"
        Case Val(Level99XP) To Val(Level99XP + 86965568): lblCurrentLVL.Caption = "[ lvl99 ]"
    End Select
End Sub

Grez [05.09.2008 14:57:18]

#

Ööh. Jos tämä nyt ei ole trolli, niin pari vinkkiä:

1) Kannattaa opetella käyttämään tietorakenteita, vaikka ihan aluksi taulukoita (Array)
2) Ei kannata käyttää dailywtf:n koodeja opiskelumateriaalina

Mutta jos kuitenkin mietitään mitä olet käskenyt sen koodisi tehdä, niin käsittääkseni halusit siis seuraavan tulostuksen:

14 --> 15 Kill 9 Guards of HP22

Oletan että txtTargetLVL on 20, GuardHP = 22

        varCalc = ((Val(txtTargetLVL.Text) - CurLVL) / (4 * GuardHP))

varCalc = (20 - 14) / (4 * 22) = 6 / 88 = 3 / 44 = n. 0,07

Joten luonnollisesti (Int(varCalc) + 1) = 0+1 = 1

Metabolix [05.09.2008 16:25:52]

#

Vinkki koodaukseen: vältä turhaa toistoa.
Vinkki pelin koodaukseen: älä turhaan käytä energiaa 99 levelin naputteluun, jos peli ei toimi vielä kolmellakaan oikein.

' Hakee levelin alimman XP:n
Public Function GetLevelXP(Level As Integer)
  GetLevelXP = ... ' Itse tekisin ennemmin kivan lausekkeen, mutta käytä Iffiä, jos siltä tuntuu. >_>
End Function

' Hakee levelin, kun XP tiedetään
Public Function GetLevelByXP(XP As Integer)
  Dim Level As Integer
  Level = 1
  Do While GetLevelXP(Level + 1) <= XP
    Level = Level + 1
  Loop
  GetLevelByXP = Level
End Function

' Irtovinkki:
CurrentLVL = GetLevelByXP(Val(txtCurrXP.Text))
lblCurrentLVL.Caption = "[ " & CurrentLVL & " ]"

Edit: Jaa, eipä ollut VB:n kommenttimerkki enää muistissa... :)

Grez [05.09.2008 16:39:01]

#

Metabolix kirjoitti:

älä turhaan käytä energiaa 99 levelin naputteluun, jos peli ei toimi vielä kolmellakaan oikein.

Ylipäätään on mielestäni aika outoa laittaa 99 tasoa magic numbereita, kun luultavasti tuossa on taustalla jokin kaava. Eli voisi hyvin alussa vaikka laskea ne taulukkoon loopissa. Mutta jos nyt on pakko olla juuri tietyt numerot, niin edelleen taulukkoon että niitä voi käsitellä parilla rivillä eikä tuollaisilla sadan rivin case-lauseilla.

rautamiekka [05.09.2008 17:54:54]

#

Ilomielin käyttäisin muita keinoja kuin tuossa koodissani käy ilmi jos yleensäkään osaisin monimutkaisempia, täytyyhän ohjelma saada simppelisti toimimaan ensin ;) Toisaalta tämä kyseessä oleva koodi on laskinohjelma. Anyway, oli ohjelma mikä vain, vinkit ovat aina tervetulleita :)

Sovellan noita vinkkejä pikimmiten. Kiitän jo etuajassa.

vesimies [05.09.2008 20:16:35]

#

Kannattaa varmaan laittaa suoraan numerotyyppisinä nuo vakiot:

Const Level11XP As Long = 1358

ja Select Casessa ilman Val-funktiota:

Case Level11XP To Level12XP - 1: '...

En tiedä auttaako itse ongelmaan mutta tulee ainakin vähän selkeämpi.

rautamiekka [05.09.2008 20:23:10]

#

vesimies kirjoitti:

Kannattaa varmaan laittaa suoraan numerotyyppisinä nuo vakiot:

Const Level11XP As Long = 1358

ja Select Casessa ilman Val-funktiota:

Case Level11XP To Level12XP - 1: '...

En tiedä auttaako itse ongelmaan mutta tulee ainakin vähän selkeämpi.

Jos olen ymmärtänyt oikein, Val on pakollinen jos numeron sisältävä paikka määrittää numeron tekstinä (Text1.Text = "100", huomaa kaninkorvat) mutta jotenkin toimivuus oli korkeampi kun joka paikassa viitattaessa numerotietopaikkaan käytin Val.

Grey [05.09.2008 20:44:13]

#

IF Exps => Lvl * X * Lvl THEN Lvl = Lvl + 1

Jossa X tilalle mikä tahansa haluttu lukema. Ei purkkaa, ei jokaisen kokemusmäärän määritystä erikseen ja lisäksi. Ei tasorajoitusta, kuin muuttujan maksimikoko mikä sisältää kokemuksen. Alla esimerkkejä X:n ollessa 83:

1 = 83
2 = 332
3 = 747
4 = 1328
5 = 2075
6 = 2988
7 = 4067
8 = 5312
9 = 6723
10 = 8300
11 = 10043
12 = 11952
13 = 14027
14 = 16268
15 = 18675
16 = 21248
17 = 23987
18 = 26892
19 = 29963
20 = 33200
21 = 36603
22 = 40172
23 = 43907
24 = 47808
25 = 51875
26 = 56108
27 = 60507
28 = 65072
29 = 69803
30 = 74700
31 = 79763
32 = 84992
33 = 90387
34 = 95948
35 = 101675
36 = 107568
37 = 113627
38 = 119852
39 = 126243
40 = 132800
41 = 139523
42 = 146412
43 = 153467
44 = 160688
45 = 168075
46 = 175628
47 = 183347
48 = 191232
49 = 199283
50 = 207500
51 = 215883
52 = 224432
53 = 233147
54 = 242028
55 = 251075
56 = 260288
57 = 269667
58 = 279212
59 = 288923
60 = 298800
61 = 308843
62 = 319052
63 = 329427
64 = 339968
65 = 350675
66 = 361548
67 = 372587
68 = 383792
69 = 395163
70 = 406700
71 = 418403
72 = 430272
73 = 442307
74 = 454508
75 = 466875
76 = 479408
77 = 492107
78 = 504972
79 = 518003
80 = 531200
81 = 544563
82 = 558092
83 = 571787
84 = 585648
85 = 599675
86 = 613868
87 = 628227
88 = 642752
89 = 657443
90 = 672300
91 = 687323
92 = 702512
93 = 717867
94 = 733388
95 = 749075
96 = 764928
97 = 780947
98 = 797132
99 = 813483

Jos tahtoo säätää tarkemmin, niin sitten muutama muuttuja lisää. Simppeliä ja opettavaista..

-Grey-

vesimies [07.09.2008 11:44:00]

#

Hei, ettei ongelma vaan olisi kiusallinen pilkku-piste-dualismi!

Auttaako tällainen yhtään:

Dim strPisteellä As String
Dim dblDesimLuku As Double
Dim lngYlösPyör As Long

strPisteellä = Replace(txtCurrentXP.Text, ",", ".")
dblDesimLuku = Val(strPisteellä)
lngYlösPyör = -Int(-dblDesimLuku) ' Antin hieno ja siisti kaava :)

Select Case lngYlösPyör
    ' Vakiot tässä edelleen Long-tyyppisiä:
    Case Level1XP To Level2XP - 1: CurLVL = 1
    Case Level2XP To Level3XP - 1: CurLVL = 2
    Case Level3XP To Level4XP - 1: CurLVL = 3
    '...
End Select
'...

Grez [07.09.2008 12:24:43]

#

vesimies kirjoitti:

Hei, ettei ongelma vaan olisi kiusallinen pilkku-piste-dualismi!

Vika ei ole tuossa, vaan siinä minkä jo aikaisemmin mainitsinkin.

Itse lähtisin kuitenki siitä, että käyttöliittymässä käytetään käyttäjän valitsemaan Windows-localea, jolloin ei tarvitse tehdä mitään omia replace-virityksiä, jotka eivät kuitenkaan tulisi toimimaan kaikissa tapauksissa.

Eli jos halutaan, että ohjelman käynnistyessä ruudulla on oletusarvo, niin se asetetaan siihen sovelluskoodista:

txtCurrentXP.Text = CStr(15.8)

Ja kun arvo tarvitsee lukea

If Not IsNumeric(txtCurrentXP.Text) Then
  MsgBox("Syötetty XP ei kelpaa. Arvon tulee olla numero")
  On Error Resume Next
  txtCurrentXP.SetFocus
  On Error Goto 0
End If
dblDesimLuku = CDbl(txtCurrentXP.Text)

Näin toteutettuna käyttäjä saa omista asetuksistaan riippuen esim. 15.8, 15,8, 15;8 tms näytölle ja ohjelma hyväksyy syötteen samassa muodossa.

Joku voisi tietysti sanoa että tuo vesimiehan tapa on "parempi", koska se hyväksyy syötteen "missä vaan" muodossa. Mutta miettikääpä mitä tapahtuu kun jenkki syöttää siihen 1,200 (eli 1200)...

rautamiekka [10.09.2008 22:24:43]

#

vesimies kirjoitti:

Kannattaa varmaan laittaa suoraan numerotyyppisinä nuo vakiot:

Const Level11XP As Long = 1358

Tuohon lisäys kun tuli luettua noista kokonaisluvuista ...

Byte voi sisältää luvun haitarilla 0 <-> 255
Integer voi sisältää luvun haitarilla -32768 <-> 32767
Long voi sisältää luvun haitarilla -2147483648 <-> 2147483647

, jolloin tekeekö mitään (merkittävää) muutosta jos laitan Byte-muuttujaan mahtuvat Level*XP:t As Byte kaikkien laittamisen As Long sijasta ?

Grez [10.09.2008 23:16:03]

#

Jos olet ihan varma, että ne mahtuu kaikki Integeriin, niin voit määritellä

Dim LevelXP(1 To 199) as Integer

199 erillisen constantin käyttäminen on täysin älytöntä. Tuskinpa on paljon haittaa vaikka määrittelisit tuon edellä mainitsemani taulukon Longinakaan.

Sen sijaan kahden eri tyypin käyttäminen muutaman tavun säästämiseksi on järjetöntä.

rautamiekka [11.09.2008 16:58:28]

#

Grez kirjoitti:

Jos olet ihan varma, että ne mahtuu kaikki Integeriin, niin voit määritellä

Dim LevelXP(1 To 199) as Integer

199 erillisen constantin käyttäminen on täysin älytöntä. Tuskinpa on paljon haittaa vaikka määrittelisit tuon edellä mainitsemani taulukon Longinakaan.

Sen sijaan kahden eri tyypin käyttäminen muutaman tavun säästämiseksi on järjetöntä.

Miten sitten määritän koko taulun viittaamatta ja tallentamatta jokaiseen soluun erikseen ? En ole vieläkään käsittänyt millä kaavalla pystyisi erehtymättömästi laskemaan nämä luvut kuin noissa Const'eissa seisoo.

Grez [11.09.2008 17:13:49]

#

Heh, niitä olikin vain 99.. Luin tuon Level99 muodossa Leve199. Jälleen yksi hyvä syy miksi taulukko on parempi.

Joo, en minäkään keksi ihan tarkkaa. Sellaisen, jossa pahimmillaan heittää välillä 44 (2421087 vs 2421131) ja suurin osa on tasan sama tai parin verran eri saan kyllä keksittyä helposti.

Mielestäni VB6:ssa ei ole suoraan mahdollista alustaa taulukkomuuttujaa, joten jos nyt haluat ne väkisin tunkea koodiin, niin jotenkin tähän tyyliin.

Dim LevelXP(1 To 99) As Long
Dim t As Variant, i As Integer
t = Array(0, 83, 174, 276, 388, 512, 650, 801, 969, 1154, 1358, 1584, 1833, 2107, 2411, 2746, 3115, 3523, 3973, 4470, 5018, 5624, _
        6291, 7028, 7842, 8740, 9730, 10824, 12031, 13363, 14833, 16456, 18247, 20224, 22406, 24815, 27473, 30408, 33648, 37224, _
        41171, 45529, 50339, 55649, 61512, 67983, 75127, 83014, 91721, 101333, 111945, 123660, 136594, 150872, 166636, 184040, _
        203254, 224466, 247886, 273742, 302288, 333804, 368599, 407015, 449428, 496254, 547953, 605032, 668051, 737627, 814445, _
        899257, 992895, 1096278, 1210421, 1336443, 1475581, 1629200, 1798808, 1986068, 2192818, 2421087, 2673114, 2951373, _
        3258594, 3597792, 3972294, 4385776, 4842295, 5346332, 5902831, 6517253, 7195629, 7944614, 8771558, 9684577, 10692629, _
        11805606, 13034431)
For i = 1 To 99
    LevelXP(i) = t(i - 1)
Next

Merri [11.09.2008 18:26:29]

#

Onko tarpeeksi lähellä?

Private Sub Command1_Click()
    Dim lngA As Long, dblTotal As Double, dblXP As Double, dblVal As Double
    dblXP = 83
    dblVal = 1.10406321 '( ... + (CDbl(VScroll1.Value) * 0.00000000001))
    List2.Clear
    For lngA = 2 To 99
        dblTotal = dblTotal + Int(dblXP)
        List2.AddItem lngA & vbTab & Int(dblXP) & vbTab & RightB$("0000000" & dblTotal, 16), 0
        dblXP = dblXP * dblVal
    Next lngA
    Me.Caption = dblVal
End Sub

Tuossa on vielä joku muukin muuttuja mukana suoran kertolaskun lisäksi, mutta sen selvittäminen meneekin jo hieman vaikeammaksi. Tällä hetkellähän aluksi kumulatiivisesti kasvavat kokemuspisteet jäävät liian alhaisiksi, mutta sitten loppupäästä kokemuspisteet ovat jo liian isoja.

Merri [11.09.2008 22:38:23]

#

Siin on teille kaava: http://www.truthscape.com/html/ts_TheRuneScapeSkillLevelFormulaandXPLevelTable.htm - jollakulla on ollut vielä vähemmän elämää kuin minulla!

Option Explicit

Dim RuneXP(1 To 99) As Long

Private Sub Generate_RuneXP()
    Dim lngA As Long, dblTotal As Double
    For lngA = 1 To 98
        dblTotal = dblTotal + (lngA + 300 * (2 ^ (lngA / 7)))
        RuneXP(lngA + 1) = dblTotal / 4
    Next lngA
End Sub

Private Sub Form_Load()
    Dim lngA As Long
    Generate_RuneXP
    For lngA = 1 To 99
        List1.AddItem RuneXP(lngA)
    Next lngA
End Sub

Ei ihan vielä kohdallaan, joku toinen saa hienovirittää täysin kohdilleen.


Muoks!
Ongelma lukujen täsmäämättömyydessä taitaa viedä juurensa pyörityssääntöihin, jotka kertautuvat mitä isommaksi luvut pääsevät. VB6 pyöristää lukuja pankkiirin pyöristyksellä, jossa joka toinen 0,5 pyöristetään ylös ja joka toinen alas. PHP taas pyöristää luvut perinteisellä tyylillä eli 0,5 aina ylöspäin. Joten aina kun pyöristys osuu kohdille missä vaan osassa lukua jossakin vaiheessa, niin siitä sitten alkaa kierre.

JussiR [12.09.2008 11:15:28]

#

Funktio pyöristää luvun halutulle tarkkuudelle.

Round(luku[,desimaalit])

Funktio palauttaa luvun pyöristettynä niin, että desimaalien lukumäärä on desimaalit. Jos desimaaleja ei ole annettu (tai ne ovat 0), luku pyöristetään kokonaisluvuksi.

Esimerkki:

MsgBox Round(5.94573) '6
MsgBox Round(5.94573, 2) '5.95
MsgBox Round(5.94573, 4) '5.9457

Grez [12.09.2008 12:09:52]

#

Merri kirjoitti:

VB6 pyöristää lukuja pankkiirin pyöristyksellä, jossa joka toinen 0,5 pyöristetään ylös ja joka toinen alas.

Tuskin kuitenkaan tässä nimenomaisessa tapauksessa aiheuttaa mitään ongelmaa, kun pitää pyöristää alaspäin ja muutenkin luvut ovat melko päättymättömiä desimaaleja, jolloin juuri tasan .5 ei oikeastaan esiinny.

Eksaktimmin tuon pankkiirin pyöristyssäännön voisi ilmaista niin, että .5 pyöristetään aina kohti parillista lukua.

Oikeasti vika on siinä, että se summattava systeemi pitää pyöristää alaspäin ja sitten kaikkien summien tulos jaetaan 4:lla ja jälleen pyöristetään alaspäin. Siis juuri niinkuin kaavassa lukee. Tuo sivun tekijä vaan hölisee sekavia kun se laskee eri tasojen 3 desimaalin tarkkuisia arvoja yhteen tuossa selostuksessa.

Eli tämä laskee oikein:

Private Sub Generate_RuneXP()
    Dim i As Long, Total As Double
    For i = 1 To 98
        Total = Total + Int(i + 300 * (2 ^ (i / 7)))
        RuneXP(i + 1) = Total \ 4
    Next
End Sub

Tuota VB6:n pyöristämistä voisi hieman täsmentään. Siis Round-funktio käyttää pankkiirin pyöristystä, samoin liukuluvun sijoittaminen kokonaislukumuuttujaan. Muitakin pyöristystapoja on, esim. int, joka pyöristää alaspäin. Matemaattinen pyöristys saadaan int(luku + 0.5)

Merri [12.09.2008 19:36:20]

#

Jep, katsoin lävitse selostuksen kautta, kaavojen lukeminen kun ei ole alaani. Kertakaikkisen sekavaa laittaa ne desimaalit sinne mukaan.

Total-muuttujakin voi sitten olla Long, turhaa sitä on heittää liukuluvuksi, vaikka tietty kun kyseessä on vain kertaalleen suoritettava koodinpätkä niin sillä ei ihan niin väliä ole.

Grez [12.09.2008 20:27:01]

#

Joo, jäi doubleksi vahingossa, kun tein itsekin ensin tuon selostuksen mukaisena.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta