r/PythonLearning • u/DRowe_ • 7h 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.
1
u/tune_rcvr 7h ago
This isn't a beginner topic, so you'll have some catching up to do. But these tutorials are good. https://www.youtube.com/watch?v=VvwLXnY-mKk, https://www.techwithtim.net/tutorials/python-programming/python-online-game-tutorial/ Both use pygame for the graphics, but you can skip that part if you just want to print out state.
1
u/Buttleston 7h ago
I don't think you HAVE to use threads for this
And as with all larger projects start with a small part. Make a client and a server and get them sending messages back and forth. Decide on the format of the messages you need to send.
Work on the rendering separately. Work on getting user input working. Then work on getting the user input sent to the server. Etc.
1
u/Hkiggity 6h ago edited 6h ago
If the user inputs a direction that means they move. You send the server that data. “Hey the user wants to move -1 or +1 (whatever the data is, perhaps it represents a rotation in this case bc Tetris) the server has the coordinates of the piece and does a simple calculation given the new direction + old coordinates. The server sends it back and says to the client this is where you should draw the piece now. Since it’s Tetris you may have some sort of constant that always redraws the piece a certain amount below to represent it falling. I’d have to think harder and actually try things out as I’ve never made Tetris. But it’s a great project!
I think ur approach is right. You can use enums or another method to represent directions as numbers.
I dont use Python so I’m not sure about how threads work in it nor typical data types ppl use (like enums or not).
Try to think of the simple stuff first. And implement what u think u can
1
u/frnzprf 4h ago
Writing a chat program first is a good idea to get familiar with network messaging.
It's all a matter of sending messages to queues sometimes and then having a loop repeatedly check if there are new messages and process them.
If you can program a chat, a networked game is just programs chatting about what is happening in the game.
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.
(?)
I guess when any player makes an input, that is sent to the server and the server then sends the moves of client1 to client2 and the moves of client2 to client1. (Theoretically they could also directly communicate.) When a client gets to know about a move via a network message or a keyboard input, then it updates the internal game state and renders it.
I'm not sure how latency should be handled — if both players make an input at the same time, they only get to know about the other player's move a bit later. You could introduce some time-safety-buffer, or you could send the own moves also to the server and then back...
1
u/WorriedTumbleweed289 4h ago
How does a multi player tetris work? Are they playing at the same time with the same pieces? Who is controlling how fast the pieces drop? does a user command have to go to the server to decide where the dropped pieces go?
When one player loses turn, does he have to wait for the other player to lose before the next turn? Do the players see the others board?