This is an archived, read-only copy of the United-TI subforum , including posts and topic from May 2003 to April 2012. If you would like to discuss any of the topics in this forum, you can visit Cemetech's TI-BASIC subforum. Some of these topics may also be directly-linked to active Cemetech topics. If you are a Cemetech member with a linked United-TI account, you can link United-TI topics here with your current Cemetech topics.

This forum is locked: you cannot post, reply to, or edit topics. TI-Basic => TI-BASIC
United-TI Archives -> TI-Basic
 
    » Goto page 1, 2  Next
» View previous topic :: View next topic  
Author Message
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 01 Jun 2009 11:14:53 pm    Post subject:

Ok so i am making an **Astroids game ** and its an the home screen. iv got the flight "engine" working and the laser but i cant figure out how to make 5 astroids float around until they get shot heres my code
I have read all the topics i could but i couldnt find what i needed


Code:
4/->/X
8/->/Y
"^"/->/Str1
Repeat A=100// this is just to keep the game going
getkey/->/K
If K=0
Q/->/K
X+(k-34)-(K=25)/->/X
Y+(K=26)-(K=24)/->/Y
ClrHome
If K=24
"<"/->/Str1
If K=25
"^"/->/Str1
If K=26
">"/->/Str1
If K=34
"V"/->/Str1
If K!=21 and K!=31
K/->/Q
If X=0:8/->/X
If X=8:1/->/X
If Y=0:16/->/y
If Y=17:1/->/Y
Output(X,Y,Str1
If K=21:Then
If Q=25:Then
X/->/B
For(A,B,1,-1)
Output(A,Y," ' // apstorphe
End
End
If Q=34:Then
X/->/B
For(A,B,8)
Output(A,Y," ' // apstorphe
End
End
If Q=24:Then
Y/->/B
For(A,B,1,-1)
Output(X,A,"-
End
End
If Q=26:Then
Y/->/B
For(A,B,16)
Output(X,A,"-
End
End
End
If K=31:Then
randint(1,8/->/X
randint(1,16/->/Y
End
End

Any optimazition welcome thanks in advanced


Last edited by Guest on 01 Jun 2009 11:18:46 pm; edited 1 time in total
Back to top
tr1p1ea


Elite


Joined: 03 Aug 2003
Posts: 870

Posted: 02 Jun 2009 01:24:11 am    Post subject:

Have you thought about using a list to keep track of your asteroids X,Y's etc?
Back to top
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 02 Jun 2009 01:28:54 am    Post subject:

Sort of i am not all that great with list yet. i thought about using variables but that would take up 2 much room. how would you make the astroids float like they do in the game. i could use randint to start the positions and L1 for X and L2 gor Y but how would you add or subtract based on the direction they are going.
Back to top
Weregoose
Authentic INTJ


Super Elite (Last Title)


Joined: 25 Nov 2004
Posts: 3976

Posted: 02 Jun 2009 01:32:48 am    Post subject:

Here's one you might try, since those For( loops are so similar:

If Q=24 or Q=26
Then
Y→B
For(A,B,1+15(Q=26),1-2(Q=24
Output(X,A,"-
End
End

(But then, I'm not sure if we have to store to B on that one.)

The first line can be tempered further. Imagine that 24 and 26 are the only two numbers that'll leave a "one" after they are reduced by 25. One of those values will be negative, and the other will be positive:

If Q-25=-1 or Q-25=1

To fix that, we can take the absolute value of both sides (on both equations):

If abs(Q-25)=abs(-1) or abs(Q-25)=abs(1)

Simplify:

If abs(Q-25)=1 or abs(Q-25)=1

Since we are now basically testing something against itself with or, we can remove the redundancy:

If abs(Q-25)=1

Finally, bringing the 1 to the other side of the equation allows us to drop an ending parenthesis:

If 1=abs(Q-25

This is the exact same test as If Q=24 or Q=26!


Last edited by Guest on 11 Jul 2010 04:03:01 pm; edited 1 time in total
Back to top
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 02 Jun 2009 01:44:47 am    Post subject:

Omfg I had to read that like 4 times to get is

If 1=abs(Q-25
Then
Y→B
For(A,B,1+15(Q=26),1-2(Q=24
Output(X,A,"-
End
End

Replaces all this


If Q=24:Then
Y/->/B
For(A,B,1,-1)
Output(X,A,"-
End
End
If Q=26:Then
Y/->/B
For(A,B,16)
Output(X,A,"-
End
End

so could you do

If 1=abs(Q-26
Then
X→B
For(A,B,1+7(Q=34),1-2(Q=25
Output(Y,A,"'
End
End

ok so this is not doing what its supposed to its giving me a domain err what did i do wrong i think its right here


Last edited by Guest on 02 Jun 2009 02:02:12 am; edited 1 time in total
Back to top
Weregoose
Authentic INTJ


Super Elite (Last Title)


Joined: 25 Nov 2004
Posts: 3976

Posted: 02 Jun 2009 09:28:01 am    Post subject:

If not post make sense of ounce, note please its drawing was in night's middle after day not short.

You swapped A and Y in the output. The combining of the loops was done brilliantly, but there's the small matter of getting the first condition to work the way it should... Starting off with If Q=25 or Q=34, we want to find a number that will produce the same result (ignoring sign, positive or negative) whether it was subtracted from 25 or from 34. The target number in any case will always turn out to be the midpoint between the two values, or the average.

Looking at 1=abs(Q-25)—the one I wrote—the 1 on the left-hand side of the equation is the absolute distance between either of 24 or 26, and their average (which is 25). abs(24-25) equals 1, and abs(26-25) equals 1. 24 and 26 are the only two numbers where subtracting 25 and taking the absolute value is going to equal 1 – this is why 1 needs to be the number that we compare with in the optimized form!

For 25 and 34, the number will be different. Subtracting the average (29.5) from either one of these numbers will give the same answer between them, but it won't be 1 like it was last time. As both abs(25-29.5) and abs(34-29.5) equal 4.5, the "optimized" form should be If 4.5=abs(Q-29.5). But, if we were trying to save space with this, then the decimals have ruined it already: the original form was smaller. We can manage to salvage a byte by multiplying both sides by 2 to get 9=2abs(Q-29.5, but there is nothing that we can do about the 29.5 inside in the function.

Well, there is .1>fPart(Q[font="verdana"]³√(3
, but that allows for the [PRGM] and [+] keys to pass. Probably not a good idea for this program.

Last edited by Guest on 11 Jul 2010 03:32:54 pm; edited 1 time in total
Back to top
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 02 Jun 2009 02:36:16 pm    Post subject:

Thank you Weregoose it was relly late but after fixing that first conditonial and changing Y and A it looks good and works great it saved about 30 byts
Her is the cod ewith the replaced loops


Code:
4/->/X
8/->/Y
"^"/->/Str1
Repeat A=100// this is just to keep the game going
getkey/->/K
If K=0
Q/->/K
X+(k-34)-(K=25)/->/X
Y+(K=26)-(K=24)/->/Y
ClrHome
If K=24
"<"/->/Str1
If K=25
"^"/->/Str1
If K=26
">"/->/Str1
If K=34
"V"/->/Str1
If K!=21 and K!=31
K/->/Q
If X=0:8/->/X
If X=8:1/->/X
If Y=0:16/->/y
If Y=17:1/->/Y
Output(X,Y,Str1
If K=21:Then
If 1=abs(Q-25
Then
Y→B
For(A,B,1+15(Q=26),1-2(Q=24
Output(X,A,"-
End
End
If 9=2abs(Q-29.5
Then
X→B
For(A,B,1+7(Q=34),1-2(Q=25
Output(A,Y,"'
End
End
End
If K=31:Then
randint(1,8/->/X
randint(1,16/->/Y
End
End


ok so 2 more questions how do you fill a list with random numbers. and second how do you add or subtrat from each one based on which way its going up, down, right, and left
Back to top
ztrumpet


Active Member


Joined: 06 May 2009
Posts: 555

Posted: 02 Jun 2009 03:10:16 pm    Post subject:

dxfan101010 wrote:
ok so 2 more questions how do you fill a list with random numbers. and second how do you add or subtrat from each one based on which way its going up, down, right, and left

1) To fill List 1 (length of L) with random intigers from A to B:

For(C,1,L
randInt(A,B->L1(C
End

However, this can be faster if you don't use randInt(. For example to fill List 1 with 10 random integers from 1 to 16:

For(A,1,10
1+int(16rand->L1(A
End

2)I don't know what you mean. To add element 3 of List 1 by one simply do:

1+L1(3->L1(3

I don't think this is what you mean, but it's helpful to know.
Back to top
cssc


Newbie


Joined: 04 Jan 2008
Posts: 36

Posted: 02 Jun 2009 03:40:35 pm    Post subject:

A better way to fill a list with random numbers A through B. C is how many numbers you want

randInt(A,B,C ->L1
Back to top
woodswolf


Advanced Newbie


Joined: 26 Feb 2009
Posts: 53

Posted: 02 Jun 2009 04:00:35 pm    Post subject:

Randint is slightly faster from experience

When considering randInt(A,B,C
rand can do exactly the same
A+int(Brand(C

however, after 15 seconds the randint part says MEMORY ERROR when C = 999
and rand says MEMORY ERROR after 17 seconds when C = 999
Back to top
ztrumpet


Active Member


Joined: 06 May 2009
Posts: 555

Posted: 02 Jun 2009 04:02:07 pm    Post subject:

@cssc
Duh!
I forgot...

@woodswolf
Wow, Let me find DarkerLine's command info for on rand.
Edit: Here they are: http://www.unitedti.org/index.php?showtopic=6883


Kinda like Weregoose said:
It's best to do 1=abs(K-25 but what if you have three or more numbers?
Do this: max(K={24,25,26,34 (Numbers here are an example)
This is also better when the difference between two numbers is odd. ( max(K={21,22 is smaller than .5=abs(K-21.5 )


Last edited by Guest on 02 Jun 2009 04:14:16 pm; edited 1 time in total
Back to top
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 02 Jun 2009 05:59:03 pm    Post subject:

cssc wrote:
A better way to fill a list with random numbers A through B. C is how many numbers you want

randInt(A,B,C ->L1

thank you this is what i was looking for i was going to use randint 5 times but i knew there was a better way i NEVER THOUGHT there was a 3rd argument for randint

ztrumpet wrote:
2)I don't know what you mean. To add element 3 of List 1 by one simply do:

1+L1(3->L1(3

I don't think this is what you mean, but it's helpful to know.


i know how this works but would i have to do that for each of the five list elemets for x and for y or is there a faster way?

Just so you know i am going to have 5 astroids 3 going up or down and 2 going left or right the astroids are going to be either O's or thetas.


Thank you guys for all the help.


Last edited by Guest on 02 Jun 2009 06:02:09 pm; edited 1 time in total
Back to top
ztrumpet


Active Member


Joined: 06 May 2009
Posts: 555

Posted: 02 Jun 2009 06:01:01 pm    Post subject:

You could do L1+1->L1. It adds everything in L1 by one.
Back to top
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 02 Jun 2009 06:05:53 pm    Post subject:

so could i do a for loop like
For(X,1,3)
1+L1(X/->/L1(X
End

this would add 1 to the first three elements of list one right
Back to top
ztrumpet


Active Member


Joined: 06 May 2009
Posts: 555

Posted: 02 Jun 2009 06:07:45 pm    Post subject:

Yes. You might want to use two lists so you could use L1+1 and L2-1. This would be quicker and smaller.
Back to top
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 02 Jun 2009 06:16:02 pm    Post subject:

Ok thats kinda what i was thinking ill work on the astroids part after dinner and deadliest warrior thank you for all the help again.
Back to top
ztrumpet


Active Member


Joined: 06 May 2009
Posts: 555

Posted: 02 Jun 2009 06:17:42 pm    Post subject:

Ur Welcome.
Are you are going to post the finished game here? (I know your not finished yet, but...)
Back to top
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 02 Jun 2009 06:19:57 pm    Post subject:

Yes when i finish or when i need more help ill post the new code up here. but my link port is broken so it will just be hand typed code.
Back to top
ztrumpet


Active Member


Joined: 06 May 2009
Posts: 555

Posted: 02 Jun 2009 06:21:47 pm    Post subject:

Cool. It sounds like a fun game. Smile
Back to top
dxfan101010


Member


Joined: 31 Mar 2008
Posts: 194

Posted: 02 Jun 2009 06:26:07 pm    Post subject:

Yeah iv had fun making it it took me like 3 days to get the laser loop to fire in onl one direction but it will probley take me a while to finish because i have camp and then i am going to alaska but ill work on it as much as i can
Back to top
Display posts from previous:   
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
    » Goto page 1, 2  Next
» View previous topic :: View next topic  
Page 1 of 2 » All times are UTC - 5 Hours

 

Advertisement