基于ARM和WinSock的多人对战游戏平台设计

[09-08 11:42:43]   来源:http://www.88dzw.com  其它电路   阅读:8895

文章摘要: 事先定义针对每个点、每个方向的8个整型数组(初始值赋为0): 对于坐标点(i,j),搜索过程中若遇到具有相同状态的点(m,n),则对应方向数组的[i][j]成员的值增加,遇到不同状态点则减小。保存8个中绝对值最大的。 上述操作完后,比较所有点存的值,绝对值最大的说明以该点起始的某个方向己方棋子相连较多,或者对方棋子相连较多,最适合落子。3.3 双人游戏 从游戏开始到结束,客户端与服务器的交互过程如图6所示。3.3.1 服务器端程序 创建基于对话框的MFC工程。 在App类的BOOL InitInstance()中加载套接字库:AfxSocketIni

基于ARM和WinSock的多人对战游戏平台设计,标签:电路设计,http://www.88dzw.com
    事先定义针对每个点、每个方向的8个整型数组(初始值赋为0):
   g.JPG
    对于坐标点(i,j),搜索过程中若遇到具有相同状态的点(m,n),则对应方向数组的[i][j]成员的值增加,遇到不同状态点则减小。保存8个中绝对值最大的。
    上述操作完后,比较所有点存的值,绝对值最大的说明以该点起始的某个方向己方棋子相连较多,或者对方棋子相连较多,最适合落子。
3.3 双人游戏
    从游戏开始到结束,客户端与服务器的交互过程如图6所示。

h.JPG


3.3.1 服务器端程序
    创建基于对话框的MFC工程。
    在App类的BOOL InitInstance()中加载套接字库:AfxSocketInit();
    在Dlg类的BOOL OnInitDialog()中初始化套接字,包括新建和绑定套接字:socket()、bind();
    在对话框上画两个按钮控件:“连接用户”和“开始游戏”。
    开发流程如图7所示。

www.88dzw.com

i.JPG


    对于某些步骤需要作详细说明:
    1)开辟线程
    如果让服务器一直recvfrom(),则主线程将一直执行此函数,造成消息拥堵,从而导致其他事件难以响应,因此选择开辟新线程在后台接收客户端信息,合理分配系统资源。
    开辟线程的过程如下:
    ①定义要传送给线程的全局性质的结构体RECVPARAM,成员为Dlg类指针类型变量。
    ②定义RECVPARAM结构体变量pRecvParam,并把当前工程的Dlg类指针赋给其成员;创建线程,把pRecvParam传递给线程;然后关闭线程。
    ③在线程回调函数中接收传递来的变量pRecvParam,然后就可以调用Dlg类的成员来实现功能。
    2)信息格式
    ①客户端连接信息
     格式随意的字符串,目的是让服务器端接收到数据,从而发现客户端IP地址。我们发的是“0000”。
    ②客户端下棋信息
    信息格式:用户标识(1位)、落子横坐标(2位)、落子纵坐标(2位)。
    其中,用户标识位1代表先手(白方),0代表后手(黑方)。
    ③服务器端发送信息
    指导客户端画棋子以及显示状态。
    信息格式:用户标识(1位)、落子横坐标(2位)、落子纵坐标(2位)、游戏状态(1位)。
    其中,前5位与从客户端接收的相同:游戏状态位1表示游戏结束,0表示游戏未结束。
3.3.2 客户端程序
    创建基于单文档的MFC工程。
    在App类的BOOL InitInstance()中加载套接字库:AfxSocketInit();
    添加对话框资源CDlgMode,用于选择游戏模式:
    添加对话框资源CDlgLink,用于连接服务器;并在其上画一个IP地址控件,用于填写服务器IP;在确定按钮的响应函数中初始化套接字socket()、bind(),并向服务器发送连接请求sendto();

上一页  [1] [2] [3] [4]  下一页


Tag:其它电路电路设计家电维修 - 单元电路介绍 - 其它电路