• Dear Cerberus X User!

    As we prepare to transition the forum ownership from Mike to Phil (TripleHead GmbH), we need your explicit consent to transfer your user data in accordance with our amended Terms and Rules in order to be compliant with data protection laws.

    Important: If you accept the amended Terms and Rules, you agree to the transfer of your user data to the future forum owner!

    Please read the new Terms and Rules below, check the box to agree, and click "Accept" to continue enjoying your Cerberus X Forum experience. The deadline for consent is April 5, 2024.

    Do not accept the amended Terms and Rules if you do not wish your personal data to be transferred to the future forum owner!

    Accepting ensures:

    - Continued access to your account with a short break for the actual transfer.

    - Retention of your data under the same terms.

    Without consent:

    - You don't have further access to your forum user account.

    - Your account and personal data will be deleted after April 5, 2024.

    - Public posts remain, but usernames indicating real identity will be anonymized. If you disagree with a fictitious name you have the option to contact us so we can find a name that is acceptable to you.

    We hope to keep you in our community and see you on the forum soon!

    All the best

    Your Cerberus X Team

make 2 lists or objects?

oddchild

New member
Joined
Jul 18, 2017
Messages
24
Hi everyone,



I have been working on a game that teaches letters for Syrian Refugee children. turkmani.org/hariflar/

I'd like to make it so that each letter is repeated 3 times so that the player has to learn each letter. This way if they answer a letter correctly three times, it won't get asked again. What would be the best way to do this?

If they click on the correct answer, should I add it to a list of answered correctly list? Then if they get it right twice, remove from list one to list two, and finally to list three. Then when a question is asked it could check list three to see if that letter needs to be asked?

I have not used lists before, so I am not sure how I should do this.

Otherwise I could make each letter an object, though that sounds like it would just make things more complicated.

Thanks
 
I'm doing something similiar right now . What I do is I initiate an array, where each number represents one letter.
I then pick a random number (which I quickly re-pick if it happens to be zero) and that particular letter in the array gets counted down as long as it its higher than zero. If it's zero i don't touch it I use it as a flag.

This also allows some letters to be more common which is a thing that I use quiet a lot but even
if you do not need that feature it's a good way of doing it I think.
 
Last edited:
The current version wasn't storing anything but a score. Once the score gets past 8 then the questions are asked from a different set of letters.

question = rnd(score -8, score)

this way questions are not all over the place and move up.
 
Th
I'm doing something similiar right now . What I do is I initiate an array, where each number represents one letter.
I then pick a random number (which I quickly re-pick if it happens to be zero) and that particular letter in the array gets counted down as long as it its higher than zero. If it's zero i don't touch it I use it as a flag.

This also allows some letters to be more common which is a thing that I use quiet a lot but even
if you do not need that feature it's a good way of doing it I think.
that is a great idea.. I just have no idea of how to implement that.

I also have each letter representing a number. Then they are correlated to a matching mp3 for the sound and matching image file.
 
right now, I have the four letters as four buttons. Then I generate a different letter for each button making sure that they are not equal to the other buttons.



rndnum = Rnd (level - 7 ,level)
button.ImagePointer(rndnum + mode + ".png")

rndnum2 = Rnd (level - 7, level)

While rndnum2 = rndnum
rndnum2 = Rnd (level - 7, level)
Wend


button2.ImagePointer(rndnum2 + mode + ".png")



rndnum3 = Rnd (level - 7, level)

While rndnum3 = rndnum Or rndnum3 = rndnum2

rndnum3 = Rnd (level - 7, level)

wend

button3.ImagePointer(rndnum3 + mode + ".png")


rndnum4 = Rnd (level - 7, level)


While rndnum4 = rndnum Or rndnum4 = rndnum3 Or rndnum4 = rndnum2



rndnum4 = Rnd (level - 7, level)



Wend



button4.ImagePointer(rndnum4 + mode + ".png")
 
Use StringMap<Int> instead of a list for correct answers.
The map key would be used to hold the letter and the value will hold the number of times for a correct answer.
All you do then is check to see if the map contains the key, get that keys value to check against.
 
The current version wasn't storing anything but a score. Once the score gets past 8 then the questions are asked from a different set of letters.

question = rnd(score -8, score)

this way questions are not all over the place and move up.
I simplified my code to show you an example how I do it. Just change the number of unique symbols from 10 to a thousand or whatever you need for your alphabet.

Here I want 10 symbols to appear 3 times each. So I create a sequnce that i can use later and just "eat it up from any direction", one by one, without being afraid it will give me something that I do not want.

Code:
Import mojo2

Function Main ()
    New Game
    Return 0
End 

Class Game Extends App

    Field letters:Int[]
    Field letterpool:Int[]
    Field picked:Int = 0
    Field canvas:Canvas

    Method OnCreate ()
  
        canvas=New Canvas
      
        ' Init statistics of each letter.
        letters=New Int[10]
        For Local i:Int = 0 To 9
            letters[i] = 3
        Next
      
        ' Prepare a pool of random letters.
        Local total:Int = 10 * 3
        letterpool=New Int[total]
      
         ' Pick random letter and make sure that we don't overuse anyone of them.
        Local counter:Int = 0
        Repeat
            picked = Int(Rnd(10)) ' pick integer 0 - 9
               ' If letter is available then add the letter to the sequence pool.
            If letters[picked] > 0
                letters[picked] = letters[picked] - 1
                letterpool[counter] = picked
                counter = counter + 1
            Endif
        Until counter = total ' The sequence pool now has 3 of each letter.
    End

    Method OnRender : Int()
        canvas.Clear
      
      
        ' Example to scroll through the letterpool we created that is containing a sequence of 10 unique letters, each one is used exactly 3 times. The length of it is therefore 30 (index 0-29).
        picked = MouseX() ' read mouse or touch
        If picked < 0 Then picked = 0 ' keep value to positive numbers
        picked = picked Mod 30 ' keep value to max of 29
        ' Show the value
        canvas.DrawText "Lookin inside seq at pos "+ String(picked) + " and it contains the letter id : " + String(letterpool[picked]) ,100,100


        canvas.Flush
        Return 0   
    End
  
End
 
Last edited:
A changed it to use a alphabet consisting of 1000 unique letters.
I still want exactly 3 of each so the sequence it spits out becomes 3000 items long.
It's a simple way but it works for me.

Code:
Import mojo2

Function Main ()
    New Game
    Return 0
End   

Class Game Extends App

    Field letters:Int[]
    Field letterpool:Int[]
    Field picked:Int = 0
    Field canvas:Canvas

    Method OnCreate ()
    
        canvas=New Canvas
        
        ' Init statistics of each letter.
        letters=New Int[1000]
        For Local i:Int = 0 To 999
            letters[i] = 3
        Next
        
        ' Prepare a pool of random letters.
        Local total:Int = 1000 * 3
        letterpool=New Int[total]
        
         ' Pick random letter and make sure that we don't overuse anyone of them.
        Local counter:Int = 0
        Repeat
            picked = Int(Rnd(1000)) ' pick integer 0 - 9
               ' If letter is available then add the letter to the sequence pool.
            If letters[picked] > 0
                letters[picked] = letters[picked] - 1
                letterpool[counter] = picked
                counter = counter + 1
            Endif
        Until counter = total ' The sequence pool now has 3 of each letter.
    End

    Method OnRender : Int()
        canvas.Clear
        
        ' Example to scroll through the letterpool we created that is containing a sequence of 1000 unique letters, each one is used exactly 3 times. The length of it is therefore 3000 (index 0-2999).
        picked = MouseX() ' read mouse or touch
        If picked < 0 Then picked = 0 ' keep value to positive numbers
        picked = picked Mod 3000 ' keep value to max of 2999
        canvas.DrawText "Lookin inside seq at pos "+ String(picked) + " and it contains the letter id : " + String(letterpool[picked]) ,100,100

        canvas.Flush
        Return 0     
    End
    
End
 
So for it to work with only 31 letters I would change the 1000 to 31?


Thanks for helping me out. I am currently visiting Iraq, I don't exactly have any programing friends out here.
 
You got it, I made one here to get you up to speed. I'm not sure if this is what you are after but it will do the job nicely!

Code:
Import mojo2

Function Main ()
    New Game
    Return 0
End   

Class Game Extends App

    Field letters:Int[]
    Field letterpool:Int[]
    Field picked:Int = 0
    Field canvas:Canvas

    Method OnCreate ()
    
        canvas=New Canvas
        
        ' Init statistics of each letter.
        letters=New Int[31]
        For Local i:Int = 0 To 30
            letters[i] = 3
        Next
        
        ' Prepare a pool of random letters.
        Local total:Int = 31 * 3
        letterpool=New Int[total]
        
         ' Pick random letter and make sure that we don't overuse anyone of them.
        Local counter:Int = 0
        Repeat
            picked = Int(Rnd(31)) ' pick integer 0 - 9
               ' If letter is available then add the letter to the sequence pool.
            If letters[picked] > 0
                letters[picked] = letters[picked] - 1
                letterpool[counter] = picked
                counter = counter + 1
            Endif
        Until counter = total ' The sequence pool now has 3 of each letter.
        ' Print counter
    End

    Method OnRender : Int()
        canvas.Clear
        
        ' Example to scroll through the letterpool we created that is containing a sequence of 31 unique letters, each one is used exactly 3 times. The length of it is therefore 31*3 (93 items, 0-92)
        
        ' Now you have a seq of 93 items that you can use in the game/course one by one. Sorry I don't have time to make a better testcode
but it's all working.

        picked = MouseX()
        If picked < 0 Then picked = 0
        picked = picked Mod 31
        canvas.DrawText "Lookin inside seq at pos "+ String(picked) + " and it contains the letter id : " + String(letterpool[picked]) ,100,100

        canvas.Flush
        Return 0     
    End
    
End
 
I got lost in the example.. I am thinking what about just an array?

letters[31]

for example when someone gets the letter "b" right it would just add a point to that number in the array.
letters[2] = letters[2] + 1

print "the letter b has " + letters[2] + " points"


I got it work now. now, the game shows each letter 3 times (if correct.) i had to make the game end at 90 even though it should have been able to make it to 93, (31 letters).
 
"I'd like to make it so that each letter is repeated 3 times so that the player has to learn each letter. This way if they answer a letter correctly three times, it won't get asked again. What would be the best way to do this?"

If that's all you need to do, a simple way might be to use a string, for example "AAABBBCCCDDD..."

Choose a random letter rnd(length of string), remove that letter from the string (by slicing) and repeat until the string contains no characters.
 
Back
Top Bottom