Python 在线多人游戏开发教程 Day01#做一个可以移动的方块
Python 在线多人游戏开发教程 Day02#做一个server 和 network
Python 在线多人游戏开发教程 Day03#两个client直接可以相互移动方块
Python 在线多人游戏开发教程 Day04#区分自己和别的玩家
Python 在线多人游戏开发教程 Day05#石头剪刀布游戏
效果图
client.py
import pygame
from network import Network
width = 500
height = 500
win = pygame.display.set_mode((width, height))
pygame.display.set_caption("client")
clientNumber = 0
class Player():
def __init__(self, x, y, width, height, color):
self.color = color
self.y = y
self.x = x
self.height = height
self.width = width
self.rect = (x, y, width, height)
self.vel = 3
def draw(self, win):
pygame.draw.rect(win, self.color, self.rect)
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.x -= self.vel
if keys[pygame.K_RIGHT]:
self.x += self.vel
if keys[pygame.K_UP]:
self.y -= self.vel
if keys[pygame.K_DOWN]:
self.y += self.vel
self.update()
def update(self):
self.rect = (self.x, self.y, self.width, self.height)
def read_pos(str):
str = str.split(",")
return int(str[0]), int(str[1])
def make_pos(tup):
return str(tup[0]) + "," + str(tup[1])
def redrawWindow(win, player, player2):
win.fill((255, 255, 255))
player.draw(win)
player2.draw(win)
pygame.display.update()
def main():
run = True
n = Network()
startPos = read_pos(n.getPos())
p = Player(startPos[0], startPos[1], 100, 100, (0, 255, 255))
p2 = Player(0, 0, 100, 100, (255,0,0))
clock = pygame.time.Clock()
while run:
clock.tick(60)
p2Pos = read_pos(n.send((make_pos((p.x, p.y)))))
p2.x = p2Pos[0]
p2.y = p2Pos[1]
p2.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
p.move()
redrawWindow(win, p, p2)
main()
network.py
import socket
import struct
class Network:
def __init__(self):
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server = "10.99.81.223"
self.port = 5555
self.addr = (self.server, self.port)
self.pos = self.connect()
def getPos(self):
return self.pos
def connect(self):
try:
self.client.connect(self.addr)
return self.client.recv(2048).decode()
except:
pass
def send(self, data):
try:
self.client.send(str.encode(data))
return self.client.recv(2048).decode()
except socket.error as e:
print(e)
server.py
import socket
import os
from _thread import *
import sys
server = "10.99.81.223" # 需要查看本机IP
port = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.bind((server, port))
except socket.error as e:
str(e)
s.listen(2) # 想要的数量
print("等待连接,服务启动")
def read_pos(str):
str = str.split(",")
return int(str[0]), int(str[1])
def make_pos(tup):
return str(tup[0]) + "," + str(tup[1])
pos = [(0, 0), (100, 100)]
def threaded_client(conn, player): # 在后台运行
print(player)
conn.send(str.encode(make_pos(pos[player])))
reply = ""
while True:
try:
data = read_pos(conn.recv(2048).decode())
pos[player] = data
if not data:
print("未连接")
break
else:
if player == 1:
reply = pos[0]
else:
reply = pos[1]
print("接收到:", data)
print("发送出:", reply)
conn.sendall(str.encode(make_pos(reply)))
except:
break
print("失去连接")
conn.close()
currentPlayer = 0
while True:
conn, addr = s.accept() # 接受来的任何连接
print("连接至:", addr)
start_new_thread(threaded_client, (conn, currentPlayer))
currentPlayer += 1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73562.html