猜数字游戏源码

来源:互联网 发布:淘宝大类目和小类目 编辑:程序博客网 时间:2024/05/28 15:06

client(玩家A)

#define  BUF_SZIE 64#include <stdio.h>#include <WinSock2.h>#pragma comment(lib,"Ws2_32")#include <iostream>#include <string>#include <conio.h>#include <Windows.h>using namespace std;char buf_rec[BUF_SZIE];char buf_send[BUF_SZIE];DWORD WINAPI funProc(LPVOID lpParameter);int retVal;int number;bool myturn=true;int result(int m,int num){int A=0,B=0;//数字对,位置对char ch1[5],ch2[5];itoa(m,ch1,10);itoa(num,ch2,10);for(int i=0;i<4;++i){for(int j=0;j<4;++j){if(ch1[i]==ch2[j]){A++;if(i==j)B++;}}}return 10*A+B;}SOCKET sHost;int main(int argc, char* argv[]){HANDLE hThread;hThread=CreateThread(NULL,0,funProc,NULL,0,NULL);CloseHandle(hThread);WSADATA wsd;if (WSAStartup(MAKEWORD(2,2), &wsd) != 0){printf("WSAStartup failed!\n");return -1;}/*创建套接字*/sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);   if(INVALID_SOCKET == sHost){WSACleanup();return  -1;}/*设置服务器地址*/SOCKADDR_IN     servAddr;servAddr.sin_family =AF_INET;servAddr.sin_addr.s_addr = inet_addr("219.245.81.15");servAddr.sin_port = htons((short)4999);int nServAddlen  = sizeof(servAddr);/*连接服务器*/while(1){retVal = connect(sHost, (LPSOCKADDR)&servAddr, sizeof(servAddr));   if(retVal==0)break;}if(SOCKET_ERROR == retVal){   closesocket(sHost);WSACleanup();return -1;}/*向服务器发送数据*/while(cin>>buf_send){if(*buf_send>'0'&&*buf_send<='9'&&myturn){//如果输入的是数字,且轮到自己retVal=send(sHost, buf_send, strlen(buf_send), 0);myturn=false;char buf[4]={*buf_send,*(buf_send+1),*(buf_send+2),*(buf_send+3)};if(atoi(buf)==number){//如果猜对了cout<<"You Win! The number is:"<<number<<endl;myturn=true;}elsecout<<result(atoi(buf),number)<<endl;}else if(*buf_send>'0'&&*buf_send<='9'&&!myturn){//是数字,轮不到自己cout<<"Not your turn!"<<endl;}elseretVal=send(sHost, buf_send, strlen(buf_send), 0);}closesocket(sHost);WSACleanup();getchar();return 0;}DWORD WINAPI funProc(LPVOID lpParameter){while (1){retVal = recv(sHost, buf_rec, BUF_SZIE, 0);if(*buf_rec!=0){if('0'<*buf_rec&&*buf_rec<='9'&&*(buf_rec+4)!='@'){//如果收到数字myturn=true;int m=1000*(*(buf_rec)-'0')+100*(*(buf_rec+1)-'0')+10*(*(buf_rec+2)-'0')+*(buf_rec+3)-'0';if(m==number){cout<<"You Lose! The number is:"<<m<<endl;myturn=false;}elsecout<<"---->"<<m<<'\t'<<result(m,number)<<endl;}else if(*(buf_rec+4)=='@'){char str[4]={*buf_rec,*(buf_rec+1),*(buf_rec+2),*(buf_rec+3)};number=atoi(str);cout<<"Begin:"<<endl;}else{cout<<"dct: ";char* cp=buf_rec;while(*cp!=0){cout<<*cp;cp++;}cout<<endl;ZeroMemory(buf_rec, BUF_SZIE);}}}return 0;}


server(玩家B)

#include <stdio.h>#define  BUF_SIZE    64#include<WinSock2.h>#pragma comment(lib, "ws2_32.lib")#include <iostream>#include<conio.h>#include <Windows.h>#include<ctime>using namespace std;char buf_rec[BUF_SIZE];char buf_send[BUF_SIZE];DWORD WINAPI funProc(LPVOID lpParameter);int retVal;SOCKET sClient;int number;bool myturn=false;int result(int m,int num){int A=0,B=0;//数字对,位置对char ch1[5],ch2[5];itoa(m,ch1,10);itoa(num,ch2,10);for(int i=0;i<4;++i){for(int j=0;j<4;++j){if(ch1[i]==ch2[j]){A++;if(i==j)B++;}}}return 10*A+B;}int rand_int(){srand(time(NULL));int a,b,c,d;while(1){a=rand()%10;if(a!=0)break;}while(1){b=rand()%10;if(b!=a)break;}while(1){c=rand()%10;if(c!=a&&c!=b)break;}while(1){d=rand()%10;if(d!=a&&d!=b&&d!=c)break;}return 1000*a+100*b+10*c+d;}int main(int argc, char* argv[]){HANDLE hThread;hThread=CreateThread(NULL,0,funProc,NULL,0,NULL);CloseHandle(hThread);/*初始化套结字动态库*/WSADATA  wsd;if (WSAStartup(MAKEWORD(2,2), &wsd) != 0){printf("WSAStartup failed!\n");return 1;}/*创建套接字*/SOCKET sServer;sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(INVALID_SOCKET == sServer){printf("socket failed!\n");WSACleanup();return  -1;}/*服务器套接字地址*/SOCKADDR_IN  addrServ;addrServ.sin_family = AF_INET;addrServ.sin_port = htons(4999);addrServ.sin_addr.s_addr = INADDR_ANY;      /*绑定套接字*/retVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));if (SOCKET_ERROR == retVal){   closesocket(sServer);WSACleanup();return -1;}/*开始监听*/retVal = listen(sServer, 1);if(SOCKET_ERROR == retVal){       closesocket(sServer);WSACleanup();return -1;}/*接受客户端请求*/sockaddr_in addrClient;int addrClientlen = sizeof(addrClient);sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen);if(INVALID_SOCKET == sClient){closesocket(sServer);WSACleanup();return -1;}/*接收客户端数据*/number=rand_int();cout<<"Begin:"<<endl;itoa(number,buf_send,10);*(buf_send+4)='@';retVal=send(sClient,buf_send,BUF_SIZE,0);ZeroMemory(buf_rec, BUF_SIZE);while (cin>>buf_send){if(*buf_send>'0'&&*buf_send<='9'&&myturn){//如果输入的是数字,且轮到自己retVal=send(sClient,buf_send,BUF_SIZE,0);myturn=false;char buf[4]={*buf_send,*(buf_send+1),*(buf_send+2),*(buf_send+3)};if(atoi(buf)==number){myturn=true;cout<<"You Win! The number is:"<<number<<endl;number=rand_int();cout<<"Begin:"<<endl;itoa(number,buf_send,10);*(buf_send+4)='@';retVal=send(sClient,buf_send,BUF_SIZE,0);}elsecout<<result(atoi(buf),number)<<endl;}else if(*buf_send>'0'&&*buf_send<='9'&&!myturn)cout<<"Not your turn!"<<endl;elseretVal=send(sClient,buf_send,BUF_SIZE,0);}/*退出*/closesocket(sServer);closesocket(sClient);WSACleanup();getchar();return 0;}DWORD WINAPI funProc(LPVOID lpParameter){while(1){retVal = recv(sClient, buf_rec, BUF_SIZE, 0);if(*buf_rec!=0){if('0'<*buf_rec&&*buf_rec<='9'){//如果收到数字myturn=true;int m=1000*((int)*(buf_rec)-'0')+100*((int)*(buf_rec+1)-'0')+10*((int)*(buf_rec+2)-'0')+(int)*(buf_rec+3)-'0';if(m==number){cout<<"You Lose! The number is:"<<m<<endl;myturn=false;number=rand_int();cout<<"New Begin:"<<endl;itoa(number,buf_send,10);*(buf_send+4)='@';retVal=send(sClient,buf_send,BUF_SIZE,0);}elsecout<<"---->"<<m<<'\t'<<result(m,number)<<endl;}else{cout<<"xct: ";char* cp=buf_rec;while(*cp!=0){cout<<*cp;cp++;}}cout<<endl;ZeroMemory(buf_rec, BUF_SIZE);}}return 0;}


0 0
原创粉丝点击