Socket modülünü kullanarak iki kişilik ve farklı bilgisayarlardan oynanan bir oyun yaptım ancak bu oyun konsoldan oynanıyor. Oyuncuların yaptığı tek şey input vermek ve onların ve printlerin pygame’de gözükmesini istiyorum.
Kod burda:
Server.py
import socket
import pickle
def artıeksi(tahmin, sayı):
result = []
skor = []
for i in range(len(sayı)):
if sayı[i] == tahmin[i]:
result.append("+")
elif sayı[i] in tahmin:
result.append("-")
for i in range(4):
if "+" in result:
skor.append("+")
result.remove("+")
for i in range(4):
if "-" in result:
skor.append("-")
result.remove("-")
for i in range(2):
if ("+" in skor) and ("-" in skor):
skor.remove("+")
skor.remove("-")
return skor
def main():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 5000))
server_socket.listen(2)
print("Oyuncular bekleniyor...")
player1, player1_address = server_socket.accept()
print("1. oyuncu bağlandı:", player1_address)
player2, player2_address = server_socket.accept()
print("2. oyuncu bağlandı:", player2_address)
# 1. oyuncunun sayısını al
player1.send("Sayınızı girin: ".encode())
a = player1.recv(1024).decode()
# 2. oyuncunun sayısını al
player2.send("Sayınızı girin: ".encode())
b = player2.recv(1024).decode()
while True:
# 1. oyuncunun tahminini al
player1.send("Tahmininizi girin: ".encode())
tahmin1 = player1.recv(1024).decode()
skor = artıeksi(tahmin1, b)
serialized_skor = pickle.dumps(skor)
player1.send(serialized_skor)
print("1. oyuncunun tahmini:", tahmin1)
# Tahmini kontrol et, oyunu sonlandırma koşullarını kontrol et
if tahmin1 == b:
player1.send("Tebrikler! 1. oyuncu kazandı!".encode())
player2.send("Maalesef! 1. oyuncu senin sayını tahmin etti!".encode())
break
# 2. oyuncunun tahminini al
player2.send(tahmin1.encode())
player2.send("Tahmininizi girin: ".encode())
tahmin2 = player2.recv(1024).decode()
skor = artıeksi(tahmin2, a)
serialized_skor = pickle.dumps(skor)
player2.send(serialized_skor)
print("2. oyuncunun tahmini:", tahmin2)
# Tahmini kontrol et, oyunu sonlandırma koşullarını kontrol et
if tahmin2 == a:
player1.send("Maalesef! 2. oyuncu senin sayını tahmin etti!".encode())
player2.send("Tebrikler! 2. oyuncu kazandı!".encode())
break
server_socket.close()
if __name__ == "__main__":
main()
- Oyuncu.py
import socket
import pickle
def main():
a = []
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5000))
print(client_socket.recv(1024).decode())
a = input(">")
client_socket.send(a.encode())
while True:
tahmin1 = []
print(client_socket.recv(1024).decode())
tahmin1 = input(">")
client_socket.send(tahmin1.encode())
serialzed_skor = client_socket.recv(1024)
skor = pickle.loads(serialzed_skor)
print("Skorun: ", skor)
if __name__ == "__main__":
main()
- Oyuncu.py
import socket
import pickle
def main():
b = []
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5000))
print(client_socket.recv(1024).decode())
b = input(">")
client_socket.send(b.encode())
while True:
tahmin2 = []
print("Diğer kişinin tahmini: ", (client_socket.recv(1024).decode()))
print(client_socket.recv(1024).decode())
tahmin2 = input(">")
client_socket.send(tahmin2.encode())
serialzed_skor = client_socket.recv(1024)
skor = pickle.loads(serialzed_skor)
print("Skorun: ", skor)
if __name__ == "__main__":
main()