• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 15:06
CEST 21:06
KST 04:06
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
HomeStory Cup 27 - Info & Preview18Classic wins Code S Season 2 (2025)16Code S RO4 & Finals Preview: herO, Rogue, Classic, GuMiho0TL Team Map Contest #5: Presented by Monster Energy6Code S RO8 Preview: herO, Zoun, Bunny, Classic7
Community News
Weekly Cups (June 23-29): Reynor in world title form?12FEL Cracov 2025 (July 27) - $8000 live event15Esports World Cup 2025 - Final Player Roster14Weekly Cups (June 16-22): Clem strikes back1Weekly Cups (June 9-15): herO doubles on GSL week4
StarCraft 2
General
Weekly Cups (June 23-29): Reynor in world title form? StarCraft Mass Recall: SC1 campaigns on SC2 thread The SCII GOAT: A statistical Evaluation How does the number of casters affect your enjoyment of esports? Esports World Cup 2025 - Final Player Roster
Tourneys
FEL Cracov 2025 (July 27) - $8000 live event HomeStory Cup 27 (June 27-29) WardiTV Mondays SOOPer7s Showmatches 2025 $200 Biweekly - StarCraft Evolution League #1
Strategy
How did i lose this ZvP, whats the proper response Simple Questions Simple Answers [G] Darkgrid Layout
Custom Maps
[UMS] Zillion Zerglings
External Content
Mutation # 480 Moths to the Flame Mutation # 479 Worn Out Welcome Mutation # 478 Instant Karma Mutation # 477 Slow and Steady
Brood War
General
ASL20 Preliminary Maps BGH Auto Balance -> http://bghmmr.eu/ BW General Discussion StarCraft & BroodWar Campaign Speedrun Quest Unit and Spell Similarities
Tourneys
[Megathread] Daily Proleagues [BSL20] GosuLeague RO16 - Tue & Wed 20:00+CET The Casual Games of the Week Thread [BSL20] ProLeague LB Final - Saturday 20:00 CET
Strategy
Simple Questions, Simple Answers I am doing this better than progamers do.
Other Games
General Games
Stormgate/Frost Giant Megathread Nintendo Switch Thread Path of Exile What do you want from future RTS games? Beyond All Reason
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Heroes of StarCraft mini-set
TL Mafia
TL Mafia Community Thread Vanilla Mini Mafia
Community
General
US Politics Mega-thread Stop Killing Games - European Citizens Initiative Things Aren’t Peaceful in Palestine Trading/Investing Thread Russo-Ukrainian War Thread
Fan Clubs
SKT1 Classic Fan Club! Maru Fan Club
Media & Entertainment
Anime Discussion Thread [Manga] One Piece [\m/] Heavy Metal Thread Korean Music Discussion
Sports
2024 - 2025 Football Thread Formula 1 Discussion NBA General Discussion TeamLiquid Health and Fitness Initiative For 2023 NHL Playoffs 2024
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread
TL Community
The Automated Ban List
Blogs
from making sc maps to makin…
Husyelt
Blog #2
tankgirl
Game Sound vs. Music: The Im…
TrAiDoS
StarCraft improvement
iopq
Heero Yuy & the Tax…
KrillinFromwales
Trip to the Zoo
micronesia
Customize Sidebar...

Website Feedback

Closed Threads



Active: 553 users

The Big Programming Thread - Page 791

Forum Index > General Forum
Post a Reply
Prev 1 789 790 791 792 793 1031 Next
Thread Rules
1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution.
2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20)
3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible.
4. Use [code] tags to format code blocks.
RoomOfMush
Profile Joined March 2015
1296 Posts
Last Edited: 2016-11-03 20:31:23
November 03 2016 20:31 GMT
#15801
Yes, that is correct. The most basic binary search trees work like that. Of course you could come up with more complex tree implementations like AVL-trees and such.
findingthelimit
Profile Joined May 2012
Hong Kong219 Posts
November 03 2016 20:34 GMT
#15802
can anyone provide me some advice with learning android? I'm not interested in every aspect of it, but I do have a couple apps that I'd like to build. I've read the google developers guide, but I'm not sure whether that's the best way to approach learning. I'm thinking of checking out some repositories of existing apps, and understanding the lifecycle and working from there, but I struggle to know what the "standard" way of doing various things are. I know java, I can learn xml on my own, but I've never really built apps before, and only familiarized myself with basic MVC in college.

I found out just this morning that MVP, the architecture google seems to advocate, is actually somewhat outdated, and MVVM and redux (i have no idea what this is) has become more mainstream.
mantequilla
Profile Blog Joined June 2012
Turkey779 Posts
Last Edited: 2016-11-03 21:18:09
November 03 2016 21:17 GMT
#15803
If you don't know android, and apps you plan to build are not enterprise grade complex apps, I'd say don't care much about stuff like MVVM and just learn the core things first, like activity lifecycle, ui layout, stuff that runs in background threads etc.

in my opinion things like MVVM starts to become important when you are so advanced and above the usual stuff it doesn't satisfy your needs anymore, otherwise it's premature over engineering. never no harm in learning though.
Age of Mythology forever!
findingthelimit
Profile Joined May 2012
Hong Kong219 Posts
November 03 2016 21:36 GMT
#15804
On November 04 2016 06:17 mantequilla wrote:
If you don't know android, and apps you plan to build are not enterprise grade complex apps, I'd say don't care much about stuff like MVVM and just learn the core things first, like activity lifecycle, ui layout, stuff that runs in background threads etc.

in my opinion things like MVVM starts to become important when you are so advanced and above the usual stuff it doesn't satisfy your needs anymore, otherwise it's premature over engineering. never no harm in learning though.


well, i want to build a blackjack game, to start with. In non-android terminology, i'll likely need a controller (activity?), where i keep track of the game, and a service class (what's the equivalent?), where i invoke methods like drawing a card, calculating the value of the card, etc., because i'd prefer not to have a bunch of code cluttering up the activity class. However, I'm not sure whether a service class exists in android, so i looked at conventional architecture for aos.

I blabbered a bunch of (non)sense so you can have a grasp on what kind of beginner i am - do you have any advice as to where i should look to further my knowledge?

thanks for your help!
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
Last Edited: 2016-11-03 21:50:49
November 03 2016 21:50 GMT
#15805
ah yikes hard problem here near the end of my review

we have:


public class LinkedList<T extends Comparable<T>> {

private class Node {
private T data;
private Node next;

private Node(T data) {
this.data = data;
next = null;
}

}

private Node head;


public LinkedList() {
head = null;
}
}


The review wants me to:

// Define a constructor that takes a TreeSet<T> as a parameter
// and initializes a linked list with the elements in
// the set. The new list must be sorted in increasing lexicographic order.

We've never done anything like this
I am guessing I should use recursion

so my constructor might look like this:


LinkedList(TreeSet<T> tset) {
if(tset != null){
head = new Node(tset.first());
tsetToLinkedList(head, tset.first() );
}
}


and then I would make a helper method that looks like .... eh...


private void tsetToLinkedList(Node node, T tsetNode, TreeSet<T> tset) {
if(tset.higher(tsetNode) != null) {
node.next = new Node(tset.higher(tsetNode));
tsetToLinkedList(node.next, tset.higher(tsetNode), tset);
}
}


how does that look?
I'll test it if I need or get no feedback but that kind of sounds like a pain, lol
Blisse
Profile Blog Joined July 2010
Canada3710 Posts
Last Edited: 2016-11-03 21:59:01
November 03 2016 21:53 GMT
#15806
I usually just Google for open-source projects related to what I'm doing, figure out how the state works for what I want to do, and then copy their implementation in what way I prefer doing.

I complained about this a lot of pages back but there's no actual "standard" way of doing things in Android. It's all whatever you learned and feel is better. For example some people use a global event bus, while the people I worked with created local event buses. Some people use callbacks instead of event buses. Some people use a single activity with views. Some people use a single activity and swap fragments. Some people use multiple activities. You try it, see if you like it, then you change or learn a newer thing.

Following fads is kinda a waste since they change all the time (re: http://zserge.com/blog/android-mvp-mvvm-redux-history.html). Should just make stuff work if you want to make stuff work, and follow the fads to learn new stuff if that's your jam.


All around useful Android tools though:

Gson
Retrofit
Event Bus
Picasso
Dagger
ButterKnife


On November 04 2016 06:36 findingthelimit wrote:
Show nested quote +
On November 04 2016 06:17 mantequilla wrote:
If you don't know android, and apps you plan to build are not enterprise grade complex apps, I'd say don't care much about stuff like MVVM and just learn the core things first, like activity lifecycle, ui layout, stuff that runs in background threads etc.

in my opinion things like MVVM starts to become important when you are so advanced and above the usual stuff it doesn't satisfy your needs anymore, otherwise it's premature over engineering. never no harm in learning though.


well, i want to build a blackjack game, to start with. In non-android terminology, i'll likely need a controller (activity?), where i keep track of the game, and a service class (what's the equivalent?), where i invoke methods like drawing a card, calculating the value of the card, etc., because i'd prefer not to have a bunch of code cluttering up the activity class. However, I'm not sure whether a service class exists in android, so i looked at conventional architecture for aos.

I blabbered a bunch of (non)sense so you can have a grasp on what kind of beginner i am - do you have any advice as to where i should look to further my knowledge?

thanks for your help!


okay that helps tell us where you are. well a Service in Android is a specific thing, more like long-running background thread. I think what you're referring to as a service is just a class that provides a set of actions. In which case just make a class that the Activity initializes and calls to get the deck and calls onClick with.
There is no one like you in the universe.
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
November 03 2016 22:02 GMT
#15807
On November 04 2016 06:50 travis wrote:
Lexicographic

TreeSet doc
iterator()
Returns an iterator over the elements in this set in ascending order.

Lexicographical order just means smallest to largest. You have an iterator that provides the items in this order. You don't need recursion for that at all.
If you have a good reason to disagree with the above, please tell me. Thank you.
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
November 03 2016 22:05 GMT
#15808
ok so if I do a for each to make each linked list node out of the treeset nodes, then how do I actually connect those nodes to form my linked list?
RoomOfMush
Profile Joined March 2015
1296 Posts
November 03 2016 22:09 GMT
#15809
On November 04 2016 07:02 spinesheath wrote:
Show nested quote +
On November 04 2016 06:50 travis wrote:
Lexicographic

TreeSet doc
Show nested quote +
iterator()
Returns an iterator over the elements in this set in ascending order.

Lexicographical order just means smallest to largest. You have an iterator that provides the items in this order. You don't need recursion for that at all.

I dont think travis is using the TreeSet from the standard library. They are writing their own LinkedList and the code he showed had methods called on the TreeSet which dont exist in the standard library.
But of course only travis can tell us what kind of TreeSet he is using.
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
November 03 2016 22:14 GMT
#15810
On November 04 2016 07:09 RoomOfMush wrote:
Show nested quote +
On November 04 2016 07:02 spinesheath wrote:
On November 04 2016 06:50 travis wrote:
Lexicographic

TreeSet doc
iterator()
Returns an iterator over the elements in this set in ascending order.

Lexicographical order just means smallest to largest. You have an iterator that provides the items in this order. You don't need recursion for that at all.

I dont think travis is using the TreeSet from the standard library. They are writing their own LinkedList and the code he showed had methods called on the TreeSet which dont exist in the standard library.
But of course only travis can tell us what kind of TreeSet he is using.


standard library TreeSet
so using the iterator would be fine
it's the linked list that is custom.
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
November 03 2016 22:18 GMT
#15811
On November 04 2016 07:05 travis wrote:
ok so if I do a for each to make each linked list node out of the treeset nodes, then how do I actually connect those nodes to form my linked list?

I'm pretty sure you already have something for that. It's probably called "add". Always look at what you have before trying to implement something new.
If you have a good reason to disagree with the above, please tell me. Thank you.
Blisse
Profile Blog Joined July 2010
Canada3710 Posts
November 03 2016 22:20 GMT
#15812
On November 04 2016 07:05 travis wrote:
ok so if I do a for each to make each linked list node out of the treeset nodes, then how do I actually connect those nodes to form my linked list?


well i think that's the entire assignment, learning how to create a linked list given some other data and connect the nodes together? just set the next variable to the correct value?
There is no one like you in the universe.
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
Last Edited: 2016-11-03 22:28:32
November 03 2016 22:25 GMT
#15813
On November 04 2016 07:18 spinesheath wrote:
Show nested quote +
On November 04 2016 07:05 travis wrote:
ok so if I do a for each to make each linked list node out of the treeset nodes, then how do I actually connect those nodes to form my linked list?

I'm pretty sure you already have something for that. It's probably called "add". Always look at what you have before trying to implement something new.


nono, i am making the add method for the linked list because I am writing the linked list so I can't do that

I guess I could write an add method and then call it in the for each
but it doesn't seem like that was the directions... eh I guess maybe it was LOL

On November 04 2016 07:20 Blisse wrote:
Show nested quote +
On November 04 2016 07:05 travis wrote:
ok so if I do a for each to make each linked list node out of the treeset nodes, then how do I actually connect those nodes to form my linked list?


well i think that's the entire assignment, learning how to create a linked list given some other data and connect the nodes together? just set the next variable to the correct value?


yes it is the assignment which is why I posted my (attempt at) code to do that. but then I was told to use the iterator which really doesn't solve the essential problem I was addressing, which is adding the TreeSet nodes to my linked list. it just gives me a easier(i guess) way to access the TreeSet nodes

I know how to make a linked list. the issue was taking a bunch of nodes at once and forming them into a linked list, instead of just a method to do it one at a time (which is what I am used to)

maybe I should have just written an add method...
RoomOfMush
Profile Joined March 2015
1296 Posts
November 03 2016 22:29 GMT
#15814
On November 04 2016 07:14 travis wrote:
Show nested quote +
On November 04 2016 07:09 RoomOfMush wrote:
On November 04 2016 07:02 spinesheath wrote:
On November 04 2016 06:50 travis wrote:
Lexicographic

TreeSet doc
iterator()
Returns an iterator over the elements in this set in ascending order.

Lexicographical order just means smallest to largest. You have an iterator that provides the items in this order. You don't need recursion for that at all.

I dont think travis is using the TreeSet from the standard library. They are writing their own LinkedList and the code he showed had methods called on the TreeSet which dont exist in the standard library.
But of course only travis can tell us what kind of TreeSet he is using.


standard library TreeSet
so using the iterator would be fine
it's the linked list that is custom.

Well in that case you iterate over the TreeSet with the iterator as already mentioned. Then you create a new Node of your LinkedList for each element within the TreeSet and append it to the last element of your list. It is always a good idea to link both the first and the last element of your list for easier adds to the end of the list.
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
Last Edited: 2016-11-03 22:39:51
November 03 2016 22:39 GMT
#15815
On November 04 2016 07:29 RoomOfMush wrote:
Show nested quote +
On November 04 2016 07:14 travis wrote:
On November 04 2016 07:09 RoomOfMush wrote:
On November 04 2016 07:02 spinesheath wrote:
On November 04 2016 06:50 travis wrote:
Lexicographic

TreeSet doc
iterator()
Returns an iterator over the elements in this set in ascending order.

Lexicographical order just means smallest to largest. You have an iterator that provides the items in this order. You don't need recursion for that at all.

I dont think travis is using the TreeSet from the standard library. They are writing their own LinkedList and the code he showed had methods called on the TreeSet which dont exist in the standard library.
But of course only travis can tell us what kind of TreeSet he is using.


standard library TreeSet
so using the iterator would be fine
it's the linked list that is custom.

Well in that case you iterate over the TreeSet with the iterator as already mentioned. Then you create a new Node of your LinkedList for each element within the TreeSet and append it to the last element of your list. It is always a good idea to link both the first and the last element of your list for easier adds to the end of the list.


ah so like for each one
for(T value : TreeSet<T>) {
tail.next = value;
tail = tail.next;
}

does this work?
it always confuses me conceptually
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
Last Edited: 2016-11-03 22:48:38
November 03 2016 22:46 GMT
#15816
You definitely should use the add method in the constructor. You will definitely need an add, and it does exactly what you need here. No point in inventing the wheel twice. That also would be code duplication, which you should avoid.

Generally, when you implement a container class like LinkedList, always start with the basic operations like add/remove/size and the constructor for an empty container and define everything else in terms of these basic operations. Especially operations that add/remove multiple elements.

Also if you want to know how it would look like if you implemented everything in the constructor, still write the single item add first, call it from within a loop and then replace the call to add with the implementation of add.
If you have a good reason to disagree with the above, please tell me. Thank you.
billy5000
Profile Blog Joined December 2010
United States865 Posts
November 03 2016 23:11 GMT
#15817
One of the things that bothers me is how I should break my code into functions, objects, etc. Basically how I should design my code. Not necessarily design patterns per se, but refactoring and OOP in general. Is there a good book or article that touches this topic? For the most part, I know how to do it, but I just don't know the best way to do it.
Tiger got to hunt, bird got to fly; Man got to sit and wonder, 'Why, why, why?' Tiger got to sleep, bird got to land; Man got to tell himself he understand. Vonnegut
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
Last Edited: 2016-11-04 00:42:24
November 03 2016 23:37 GMT
#15818
continuing on with next problem (sorry to spam the thread, exam is tomorrow )

I am provided

public class LinkedList<T> {
private class Node {
private T data;
private Node next;

private Node(T data) {
this.data = data;
next = null;
}
}
private Node head;
}



question:

write a method public void insertValueAfter(T value, T target)
the value must be inserted directly after the target
you must use recursion, you can use an auxiliary helper method
if you find it useful


my solution


public void insertValueAfter(T value, T target) {
if(head == null) {
return;
}
if(head.data.equals(target) {
result = new Node(value);
result.next = head.next;
head.next = result;
} else {
helperMethod(head, value, target);
}
}

private void helperMethod(Node thisnode, T value, T target) {
if(thisnode.next == null) {
return;
}
if(this.node.next.data.equals(targete) {
result = new Node(value);
result.next = thisnode.next.next;
thisnode.next.next = result;
} else {
helperMethod(thisnode.next, value, target);
}
}




my question: how in the world would I do this *without* a helper method?
Deleted User 3420
Profile Blog Joined May 2003
24492 Posts
Last Edited: 2016-11-04 00:42:53
November 04 2016 00:31 GMT
#15819
next review question
same problem but

public void insertValueBefore(T value, T target) {

and you *can't* use recursion

my solution:


public void insertValueBefore(T value, T target) {
Node temp = new Node(null);

if(head.data.equals(target)) {
temp.data = value;
temp.next = head;
head = temp;
} else {
temp = head;
while(temp.next != null) {
if(temp.next.data.equals(target)) {
Node result = new Node(value);
result.next = temp.next;
temp.next = result;
result.data = value;
return;
}
temp = temp.next;
}
}
}


edit: tested them in eclipse. besides some small errors it looks like they work. now for some tree problems
tofucake
Profile Blog Joined October 2009
Hyrule19029 Posts
Last Edited: 2016-11-04 01:41:40
November 04 2016 01:41 GMT
#15820
for the recursive one I'd just overload the function for something like


public void insertValueAfter(T value, T target) {
insertValueAfter(value, target, head);
}

public void insertValueAfter(T value, T target, Node start) {
// ...
}


but I'm not sure if that qualifies as a helper, or if you've covered overloading yet

as for non-recursive

public void insertValueBefore(T value, T target) {
Node temp = head;

while (temp != null) {
if (temp.data.equals(target)) {
Node result = new Node(value, temp.next);
temp.next = result;
return;
}

temp = temp.next;
}
}

is clean and simple
Liquipediaasante sana squash banana
Prev 1 789 790 791 792 793 1031 Next
Please log in or register to reply.
Live Events Refresh
Next event in 4h 54m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
mouzHeroMarine 677
Nina 308
BRAT_OK 90
ProTech63
ForJumy 31
MindelVK 26
StarCraft: Brood War
Calm 2152
Mini 396
EffOrt 140
Dewaltoss 136
sas.Sziky 44
MaD[AoV]21
Shine 11
Stormgate
NightEnD78
Dota 2
Gorgc8674
capcasts168
League of Legends
Dendi1767
Counter-Strike
fl0m2251
pashabiceps557
sgares145
Super Smash Bros
Mew2King170
Liquid`Ken77
Heroes of the Storm
Khaldor174
Liquid`Hasu102
Other Games
Grubby2570
Beastyqt582
ceh9485
ArmadaUGS99
Trikslyr65
Sick53
Organizations
StarCraft 2
angryscii 32
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 18 non-featured ]
StarCraft 2
• davetesta28
• LUISG 12
• IndyKCrew
• sooper7s
• Migwel
• AfreecaTV YouTube
• intothetv
• LaughNgamezSOOP
• Kozan
StarCraft: Brood War
• 80smullet 15
• STPLYoutube
• ZZZeroYoutube
• BSLYoutube
Dota 2
• WagamamaTV651
League of Legends
• Jankos2144
• Doublelift530
Other Games
• imaqtpie1010
• Shiphtur404
Upcoming Events
PiGosaur Monday
4h 54m
The PondCast
14h 54m
Replay Cast
1d 4h
RSL Revival
1d 14h
ByuN vs Classic
Clem vs Cham
WardiTV European League
1d 20h
Replay Cast
2 days
RSL Revival
2 days
herO vs SHIN
Reynor vs Cure
WardiTV European League
2 days
FEL
2 days
Korean StarCraft League
3 days
[ Show More ]
CranKy Ducklings
3 days
RSL Revival
3 days
FEL
3 days
Sparkling Tuna Cup
4 days
RSL Revival
4 days
FEL
4 days
BSL: ProLeague
4 days
Dewalt vs Bonyth
Replay Cast
6 days
Replay Cast
6 days
Liquipedia Results

Completed

Proleague 2025-06-28
HSC XXVII
Heroes 10 EU

Ongoing

JPL Season 2
BSL 2v2 Season 3
BSL Season 20
Acropolis #3
KCM Race Survival 2025 Season 2
CSL 17: 2025 SUMMER
Copa Latinoamericana 4
Championship of Russia 2025
RSL Revival: Season 1
Murky Cup #2
BLAST.tv Austin Major 2025
ESL Impact League Season 7
IEM Dallas 2025
PGL Astana 2025
Asian Champions League '25
BLAST Rivals Spring 2025
MESA Nomadic Masters
CCT Season 2 Global Finals
IEM Melbourne 2025
YaLLa Compass Qatar 2025

Upcoming

CSLPRO Last Chance 2025
CSLPRO Chat StarLAN 3
K-Championship
uThermal 2v2 Main Event
SEL Season 2 Championship
FEL Cracov 2025
Esports World Cup 2025
StarSeries Fall 2025
FISSURE Playground #2
BLAST Open Fall 2025
BLAST Open Fall Qual
Esports World Cup 2025
BLAST Bounty Fall 2025
BLAST Bounty Fall Qual
IEM Cologne 2025
FISSURE Playground #1
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2025 TLnet. All Rights Reserved.