### Author Topic: [Lua] Mancala  (Read 12858 times)

0 Members and 1 Guest are viewing this topic.

#### epic7

• Chopin!
• LV11 Super Veteran (Next: 3000)
• Posts: 2200
• Rating: +135/-8
• I like robots
##### Re: [Lua] Mancala
« Reply #30 on: January 12, 2012, 04:09:16 pm »
My intent wasn't to overwrite some things in the table. I think what you have is right.
I changed it to multiply a by 9 rather than 3, but still I get an error.

And nick, does that mean that something like
blah={}
blah[1]=1347
won't work?

#### Nick

• LV9 Veteran (Next: 1337)
• Posts: 1166
• Rating: +161/-3
• You just got omnom'd
##### Re: [Lua] Mancala
« Reply #31 on: January 12, 2012, 04:16:00 pm »
yep, correct..

for that you have to do table.insert(blah,1,1347)

#### epic7

• Chopin!
• LV11 Super Veteran (Next: 3000)
• Posts: 2200
• Rating: +135/-8
• I like robots
##### Re: [Lua] Mancala
« Reply #32 on: January 12, 2012, 04:25:47 pm »
I made a test program without table insert and it still worked.

Also, it gets through writing to coord, and the error isn't until it reads from coord.

#### cyanophycean314

• LV6 Super Member (Next: 500)
• Posts: 363
• Rating: +43/-1
• It's You!
##### Re: [Lua] Mancala
« Reply #33 on: January 12, 2012, 07:36:02 pm »
blah = {}
blah[1] = 1234

That code with work. I use it in my Hangman program.

I would try just removing the on.create function and just initializing all the variables in front of the rest of the program. I don't know if it'll work, but it doesn't hurt to try.
« Last Edit: January 12, 2012, 07:36:23 pm by cyanophycean314 »

#### 3rik

• LV3 Member (Next: 100)
• Posts: 92
• Rating: +8/-0
• My TI-84+ SE
##### Re: [Lua] Mancala
« Reply #34 on: January 13, 2012, 12:11:20 am »
Looked through the code a bit more and edited a couple things
Code: [Select]
function on.create() coord = {} for a=1, 14 do for b=1, 3 do if a~=7 and a~=14 then coord[a*9+b*3-11]=a --Changed all the 3s in front of the as to 9s also changed the 5, 4, and 3 to 11, 10, and 9 so that it would still start at coord[1] coord[a*9+b*3-10]=math.random(0,16) coord[a*9+b*3-9]=math.random(0,14) else coord[a*9+b*3-11]=a end end endendfunction on.paint(gc) for a=1, 42 do if coord[a*3-2]~=7 and coord[a*3-2]~=14 then if coord[a*3-2]>7 then gc:fillArc((coord[a*3-2]-7)*38+coord[a*3-1],coord[a*3]+49,10,10,0,360) --subtracted 7 from coord[a*3-2] to line up the pieces else gc:fillArc(coord[a*3-2]*38+coord[a*3-1],coord[a*3]+141,10,10,0,360) end end endend
Using this code, I got the screenshot below. I made a couple extra tweaks to the numbers so that the pieces would line up.

As for adding things to tables, as long as the table has been initialized with a table constructor, any valid key can be paired with any valid value.

Code: [Select]
example = {}example[1] = 1example[1337] = 3.141592example["The Game"] = on.paintexample[on.create] = "Never Gonna Give You Up"example[true] = falseexample.Omnimaga = {1, 2, 3, 4} --Same as example["Omnimaga"] = {1, 2, 3, 4}
Be wary though, #example ~= 1337 until example[2] through example[1336] have non-nil values
Userbars

#### cyanophycean314

• LV6 Super Member (Next: 500)
• Posts: 363
• Rating: +43/-1
• It's You!
##### Re: [Lua] Mancala
« Reply #35 on: January 13, 2012, 04:52:17 pm »
That was the pieces generating code! That looks pretty nice, I don't know about on.create, but personally I never use it.

#### someone

• LV3 Member (Next: 100)
• Posts: 49
• Rating: +9/-0
##### Re: [Lua] Mancala
« Reply #36 on: January 13, 2012, 06:55:21 pm »
@3rik
Why is the order of the variables before the letters? In Math you always see that constants go before variables, so that's a little confusing for me...

I prefer to make the code more readable, so IMO this is better:
Code: [Select]
function on.create()  local array=0  coord = {}  for a=1, 14 do     for b=1, 3 do      array = a*9+b*3-11      if a~=7 and a~=14 then         coord[array]=a        coord[array+1]=math.random(0,16)         coord[array+2]=math.random(0,14)       else         coord[array]=a      end     end   endendfunction on.paint(gc)  local array=0  for a=1, 42 do    array = a*3-2    if coord[array]~=7 and coord[array]~=14 then       if coord[array]>7 then        paintSeeds(gc,(coord[array]-7)*38+coord[array+1],coord[array+2]+ 49,10,10,0,360)      else         paintSeeds(gc,(coord[array]-0)*38+coord[array+1],coord[array+2]+141,10,10,0,360)       end    end  endendfunction paintSeeds(GC, x, y, width, height, startAngle, angle)  GC:setColorRGB(0, 0, 0)    --change colors as pleased  GC:drawArc(x-1, y-1, width+1, height+1, startAngle, angle)  GC:setColorRGB(128,128,128)  --change colors as pleased  GC:fillArc(x, y, width, height, startAngle, angle)end
I've never played this game, so I want to see it soon

#### epic7

• Chopin!
• LV11 Super Veteran (Next: 3000)
• Posts: 2200
• Rating: +135/-8
• I like robots
##### Re: [Lua] Mancala
« Reply #37 on: January 13, 2012, 08:31:09 pm »
I still get the same error with 3ric's edits

Even though the a*9 was a something I did really need to add

It says

Line 43 is
Code: [Select]
if coord[a*3-2]~=7 and coord[a*3-2]~=14 then Unless the "43:" means something else...

(entire code if anybody can spot anything)
« Last Edit: January 13, 2012, 08:33:23 pm by epic7 »

#### cyanophycean314

• LV6 Super Member (Next: 500)
• Posts: 363
• Rating: +43/-1
• It's You!
##### Re: [Lua] Mancala
« Reply #38 on: January 13, 2012, 09:23:52 pm »
As soon as I removed the on.create, it worked for me, screenie:

Just try putting all the information in on.create and move it outside. Please just try it...
« Last Edit: January 13, 2012, 09:24:23 pm by cyanophycean314 »

#### epic7

• Chopin!
• LV11 Super Veteran (Next: 3000)
• Posts: 2200
• Rating: +135/-8
• I like robots
##### Re: [Lua] Mancala
« Reply #39 on: January 13, 2012, 09:28:00 pm »
Oh it works

Thanks!

Now the coordinate range needs a bit of adjusting
Edit: Now they're aligned!

Also on the enter key function it says "stack overflow" What does that mean?"
Edit: I know now and what the problem is

And also, is there an easy way to add something to the end of the table and count the number of things in a table?
« Last Edit: January 13, 2012, 09:56:43 pm by epic7 »

#### 3rik

• LV3 Member (Next: 100)
• Posts: 92
• Rating: +8/-0
• My TI-84+ SE
##### Re: [Lua] Mancala
« Reply #40 on: January 13, 2012, 11:04:01 pm »
@someone I'd agree that that code looks neater. I was just being lazy and I only made the minimum amount of changes from epic7's code.

@ epic7 and cyanophycean314 I see that you're testing the program in oclua. By the time you paste the code in the program, the event on.create() has already been called so coord was never initialized.
Userbars

#### epic7

• Chopin!
• LV11 Super Veteran (Next: 3000)
• Posts: 2200
• Rating: +135/-8
• I like robots
##### Re: [Lua] Mancala
« Reply #41 on: January 13, 2012, 11:17:24 pm »
Oh, is on create called once oclua opens up, not the pasted code?
* epic7 goes to fix an error that he calls "function ping-pong"

#### 3rik

• LV3 Member (Next: 100)
• Posts: 92
• Rating: +8/-0
• My TI-84+ SE
##### Re: [Lua] Mancala
« Reply #42 on: January 13, 2012, 11:51:11 pm »
And also, is there an easy way to add something to the end of the table and count the number of things in a table?

There are a few ways of determining the length of a table.

The most obvious way is using the operator #. It basically starts at 1 and keeps adding 1 until it reaches a nil value. If there are any holes in your table this will give a smaller value.

Another way to get a length is to use table.maxn(). It returns the key with the highest value. In my previous example #example == 1 but table.maxn(example) == 1337. This can also handle decimal numbers in the keys.

One way to count all the elements in a table would be to use a function like this:
Code: [Select]
function length(example) local index = 0 for _, __ in pairs(example) index = index + 1 end return indexend
This will count every element in the table (except nil values, of course). I'll bet this way will be quite slow as the number of elements increases.

If you wanted to add signal to show the end you could do something like this:
Code: [Select]
stuffs = {1, 3, 5, 3, nil, "end"}function length2(example) local index = 1 while example[index] ~= "end" do index = index + 1 end return index - 1endlength2(stuffs) would return 5. However, in order to place the "end" into the table, you would have had to know where to put it and if you add or take away any elements you would have to adjust where "end" goes.
« Last Edit: January 13, 2012, 11:52:14 pm by 3rik »
Userbars

#### hoffa

• LV6 Super Member (Next: 500)
• Posts: 322
• Rating: +131/-13
##### Re: [Lua] Mancala
« Reply #43 on: January 14, 2012, 05:10:33 am »
And also, is there an easy way to add something to the end of the table and count the number of things in a table?
Yeah, table.insert() and the # operator.