Mise en œuvre simple des jeux LAN

courte introduction

Cet article utilisera simplement les modules socket et pygame pour implémenter des jeux dans le réseau local. Sous le même réseau, le client peut entrer la bonne adresse IP pour jouer à des jeux en ligne.

environnement d'exploitation

Compilateur : PyCharm 2021.2.1 Interprète : module d'installation
Anaconda 3.8

pip install pygame==2.1.0

Présentation et utilisation des sockets

présentation de la prise

Un socket est une abstraction d'un point de terminaison pour la communication bidirectionnelle entre les processus d'application sur différents hôtes du réseau. Un socket est une extrémité de la communication de processus sur le réseau, fournissant un mécanisme permettant aux processus de la couche application d'échanger des données à l'aide de protocoles réseau. Du point de vue de sa position, le socket se connecte au processus d'application et se connecte à la pile de protocoles réseau, qui est l'interface permettant au programme d'application de communiquer via le protocole réseau, et l'interface permettant au programme d'application d'interagir avec le protocole réseau. pile——Encyclopédie Baidu

Pour le dire simplement, il peut réaliser la communication entre différents hôtes, par exemple, nous naviguons sur le Web tous les jours, discutons sur QQ, envoyons et recevons des e-mails


utilisation de la prise

Serveur

import socket  
  
# socket.AF_INET 用于服务器之间的通信  
# socket.SOCK_STREAM tcp通信  
# 创建套接字  
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
# ip 表示本机ip地址  
# port 表示端口号  
address = ('ip', 'port')  
# 连接地址  
server.bind(address)  
# 监听数量  
server.listen(5)  
print('正在等待连接...')  
# client 连接对象  
# client_address 连接对象地址  
client, client_address = server.accept()  
  
# 发送数据  
client.send('hahah'.encode('gbk'))  
# 接受1024个字节数据  
data = client.recv(1024)  
print('服务器接受的数据', data.decode('gbk'))  
# 关闭连接  
client.close()

client

import socket  
  
# 创建socket  
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
  
# 连接服务器  
client_socket.connect(('ip', 'port'))  
  
# 发送的数据  
client_socket.send('收到'.encode("gbk"))  
  
# 接收对方发送过来的数据,最大接收1024个字节  
recv = client_socket.recv(1024)  
print('接收到的数据为:', recv.decode('gbk'))  
  
# 关闭套接字  
client_socket.close()


Certaines personnes ici ne savent pas comment vérifier l'adresse IP de cette machine. Ici, je vais vous apprendre à vérifier l'adresse IP.
Tout d'abord, win + r ouvrira une fenêtre, entrez cmd et cliquez sur OK
insérez la description de l'image ici

Après confirmation, une fenêtre noire apparaîtra, entrez ipconfig , et elle sortira
insérez la description de l'image ici

Socket réalise le principe du jeu LAN

L'essence des jeux en ligne est en fait d'envoyer et de recevoir des données, et comment envoyer, recevoir et définir des données est ce que nous devons considérer maintenant. Ce qui suit explique principalement l'envoi et la réception des données du client. Le serveur est similaire, et c'est presque le même. Commençons !

envoyer

Envoyer des données, lorsque l'utilisateur clique ou effectue une certaine action, le client envoie des données au serveur, et le serveur renvoie des informations pour répondre au client après avoir reçu les données.

def send_data():  
    global all_coordinate, sending  
    sending['checkerboard'] = all_coordinate  
    socket_client.send(json.dumps(sending).encode('gbk'))  
    sending['active'] = False  
    print('服务器发送的数据', sending)

accepter

Pour accepter des données, qu'il s'agisse d'un client ou d'un serveur, lorsque le client est connecté au serveur, il doit accepter des données tout le temps. Une boucle infinie est définie ici pour recevoir des données, bien sûr un thread doit être ouvert.

def accept_data():  
    global sending, all_coordinate  
    while True:  
        recv = socket_client.recv(4096)  
        sending = json.loads(recv.decode('gbk'))  
        all_coordinate = sending['checkerboard']  
        print('线程客户端接受的数据', sending)

Format de données

Ici, le format des données est défini sous la forme d'un dictionnaire.Lorsque le client envoie des données, un certain élément des données sera modifié, et il en va de même pour le serveur.

sending = {
    
    'checkerboard': all_coordinate,  
           'active': True,  
           'start': [False, False],  
           'time': False,  
           'flag': [False, 0, 0],  
           }

fin

Veuillez cliquer ici pour le code complet , tout le monde est le bienvenu, les montagnes sont hautes et la route est loin, au revoir ! ! !

Je suppose que tu aimes

Origine blog.csdn.net/qq_65898266/article/details/131074422
conseillé
Classement