ประเภท Vb6 ไม่ตรงกันกับตัวสร้างตัวเลขสุ่ม

ฉันต้องการสร้างตัวเลขสุ่มระหว่าง 1 ถึง 20 สำหรับเกมที่ฉันกำลังสร้าง และด้วยเหตุผลบางอย่างโค้ดนี้จึงหยุดทำงานและทำให้ฉันมีข้อผิดพลาดประเภทไม่ตรงกัน ฉันได้ลองใช้ตัวสร้างอื่นในเกมแล้ว แต่ฉันได้รับข้อผิดพลาดเดียวกัน

Public Counter1 As Integer ' Counters for each reel
Public ArrayImgMid1 As Integer ' Store number to iterate over image arrays
Public ReelPic1 As Variant ' Array of images for each reel
Public Reel1Spin As Long ' Spins for each reel
Public ImgBeth, ImgWallow, ImgDan, ImgChris, ImgCatBug As StdPicture ' Images for reels

Private Sub CmdSpin_Click()

'Enable all timers to imitate spinning
TimerReel1.Enabled = True
TimerReel1.Interval = 100

' Disable spin button
CmdSpin.Enabled = False

' Set all counters to 0
Counter1 = 0

' Generate random number for the first reel to spin
Reel1Num = (CLng(Rnd * 20) + 1) ' This is highlighted when I press debug

person Ashwood    schedule 10.05.2013    source แหล่งที่มา


คำตอบ (1)


เขียนแบบนี้:

Dim Reel1Num As Long

Reel1Num = (CLng(Rnd * 20) + 1)

อย่าใช้ Integer ใน VB6 - มันแทนจำนวนเต็มแบบเซ็นชื่อ 16 บิต และมีประสิทธิภาพน้อยกว่า Long เล็กน้อย ซึ่งเป็นจำนวนเต็มแบบเซ็นชื่อ 32 บิตจริงๆ ด้วยวิธีนี้ คุณจะไม่ถูกจำกัดด้วยประเภทข้อมูล 16 บิต

สาเหตุที่โค้ดของคุณใช้งานไม่ได้เนื่องจากฟังก์ชัน Int() ไม่ได้แปลงประเภทข้อมูลของค่าเป็นประเภท Integer โดยจะปัดเศษค่าที่ระบุให้เป็นค่าจำนวนเต็ม แต่ยังคงรักษาประเภทข้อมูลไว้

หากต้องการแปลงค่าเป็นประเภทข้อมูลใดประเภทหนึ่ง ให้ใช้ฟังก์ชัน CInt(), CLng() ฯลฯ แต่อย่างที่บอกไปแล้ว ให้หลีกเลี่ยงการใช้ Integer เว้นแต่ว่าคุณต้องการมันโดยเฉพาะ - Long จะดีกว่าในกรณีส่วนใหญ่

แก้ไข:

หลังจากที่คุณโพสต์โค้ดของคุณ ฉันไม่เห็นคำจำกัดความของตัวแปร Reel1Num - มันถูกกำหนดไว้ที่ไหน มันคือ Reel1Spin? หากเป็นกรณีนี้ ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งานตัวเลือก Require variable declaration ใน Tools->Options - โดยค่าเริ่มต้นจะปิดไว้ หากคุณไม่ได้สวมก็เป็นวิธีที่ง่ายมากในการยิงตัวเองเข้าที่เท้า

ไม่เกี่ยวข้องกับข้อผิดพลาดของคุณ แต่วัตถุรูปภาพส่วนใหญ่ของคุณถูกกำหนดไม่ถูกต้อง - ใน VB6 จะต้องระบุประเภทของตัวแปรสำหรับตัวแปรทุกตัว ไม่ใช่หนึ่งครั้งต่อบรรทัด ดังนั้นในบรรทัดนี้:

Public ImgBeth, ImgWallow, ImgDan, ImgChris, ImgCatBug As StdPicture

คุณสร้างวัตถุ 1 StdPicture จริงๆ เท่านั้น ส่วนวัตถุอื่นๆ ทั้งหมดจะเป็นตัวแปร วิธีที่ถูกต้องคือ:

Public ImgBeth As StdPicture, ImgWallow As StdPicture, ImgDan As StdPicture, _
    ImgChris As StdPicture, ImgCatBug As StdPicture

นอกเหนือจากนี้ ฉันไม่เห็นสิ่งผิดปกติในโค้ดของคุณ - ฉันไม่ได้ติดตั้ง VB6 ไว้ในคอมพิวเตอร์ โปรดทราบว่า VB6 มีวิธีที่เก๋ไก๋ในการจัดการกับประเภทที่ไม่ตรงกัน และในบางกรณี บรรทัดที่ไฮไลต์อาจไม่ใช่เส้นที่ทำให้เกิดข้อผิดพลาดจริง สิ่งนี้เคยทำให้ฉันคลั่งไคล้

person xxbbcc    schedule 10.05.2013
comment
ขอบคุณสำหรับคำตอบ แต่ก็ยังใช้งานไม่ได้ ต้องเกี่ยวข้องกับโค้ดที่เหลือของฉัน แต่ไม่สามารถเข้าใจได้ - person Ashwood; 12.05.2013
comment
@Lilvlskid ทำไมคุณไม่โพสต์รหัสของคุณมากกว่านี้ล่ะ? เราอาจจะช่วยคุณได้ - person xxbbcc; 12.05.2013
comment
@xxbbcc ขอบคุณสำหรับการตอบกลับพร้อมคำแนะนำที่เป็นประโยชน์สำหรับการอ้างอิงในอนาคต ฉันได้เริ่มเกมเวอร์ชันอื่นแล้ว และด้วยเหตุผลบางประการฟังก์ชันสุ่มจึงใช้งานได้ ฉันจะ +1 ถ้าฉันมีชื่อเสียง - person Ashwood; 12.05.2013