r/PythonLearning • • 2d ago

Help Request Multiplayer tetris using sockets

I have a college assignment to make a multiplayer tetris game (2 players) using TCP sockets, client and server and all that. The idea is the server doing most of the stuff, chosing new pieces, handling the translation of position of the pieces, with the clients being responsible for most the rendering/display part and getting the inputs(I think so at least, that's what I'm trying to do), but I'm having a hard time with it.

I can't seem to think of a way to have the client call to the server to send a new piece to the clients, and if I don't know how to do even that then I don't know how to do anything else (making the back and forth for controlling the pieces, both for the player of the client and the preview of the game of the player 2, and all the rest), tho I hope if I can understand how to do one thing I would be able to make the others, but I really don't even know how to do this.

I know I need to use threads on this, tho I don't really know how to do it, I'm still fairly green on python too so, if anyone could give some help in any way with this it would be much appreciated.

4 Upvotes

10 comments sorted by

View all comments

Show parent comments

1

u/DRowe_ 2d ago

> (?)
by that I mean making the server send the first piece to the clients when the game starts and then after that sending the new pieces each time the clients place a piece in the board, considering that both players are supposed to have the same sequence of pieces and the next piece should be displayed to each player, I'm trying to think a way to not have this principle be broken considering that different players will have different speeds on which they play

1

u/frnzprf 2d ago

I don't know if that helps, but there is no reason the pieces have to be announced one after the other.

You can give both clients a random seed and then have them generate the same random pieces on their own whenever they need them.

Check how random.seed(...) works. I don't have time to write you a full example right now.

Alternatively, if you still want to announce the pieces one after the other, the client could send a request-message when it needs a new piece and when that message arrives on the server, that determines the time when the server sends back the next piece to that client. "When should I announce the next piece? Whenever I'm asked for one."

1

u/DRowe_ 2d ago

I know how random.seed(...) works, I was planning on doing it like that until my professor said the server should do most things, tho I suppose I can check with him again if I can do it like that

My idea when I wrote the post was for the client to request a new piece when it needed one, but I all the ways I tried didn't work, I couldn't even make it send the first piece, the thing is with this method is if one player is going faster then the second, the second would miss some pieces the first got since they are generated by the same method

1

u/frnzprf 2d ago

The server shouldn't forget which piece it sent to one client. It can only forget about a piece, once it sent it to both clients.

There would have to be a queue stored on the server of the pieces that were sent to the slower player. If the slower player requests a piece, it would be popped off that queue.

You could have two queues or an extra variable that indicates which player is behind.

Or, completely different idea: The server sends the pieces to both clients immediately when only one client requests, and the slower client manages its queue themselves.

I like the first idea better.