Code Socket Trò chơi

Đây là bài tập về socket, về trò chơi hãy chọn giá đúng. Sever sẽ là trọng tài chọn số sản phẩm và lượt chơi. sau đó, người chơi sẽ nhận được tên sản phẩm và đoán giá chúng, sau gửi về sever, sever sẽ tìm ra giá ai gần đúng nhất sẽ là chiến thắng, cứ như vậy cho đến hết sản phẩm.

Code Sever

// server.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include "server.h"
#include "afxsock.h"
#include "stdlib.h"
#include "conio.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;


typedef struct
{
	char ten_sp[50];
	int gia,gia_nhan,diem;
}SP;// tạo cấu trúc dữ liệu tên SP (sản phẩm)


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// initialize MFC and print and error on failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// <span class="hljs-doctag">TODO: change error code to suit your needs
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else
	{
		// <span class="hljs-doctag">TODO: code your application's behavior here.
		AfxSocketInit(NULL);
		CSocket server,*s;
		s=new CSocket[3];
	do
	{
		char nhap[50],ten[20],ten1[20],ten2[20];
		int k,a,i,j,gia_lech[3],min,nhi,tam,n,dem=1; 
		SP sp[10],diem[3],gia[3];
		diem[0].diem=0; 
		diem[1].diem=0;
		diem[2].diem=0;
               //nhập trước giá 1 số sản phẩm.
		strcpy(sp[0].ten_sp,"Gau Teddy");
		sp[0].gia=504000;

		strcpy(sp[1].ten_sp,"Keroppi");
		sp[1].gia=270000;

		strcpy(sp[2].ten_sp,"Hoang Quy tran trau");
		sp[2].gia=430000;

		strcpy(sp[3].ten_sp,"Tep diamond");
		sp[3].gia=15780000;
		
		strcpy(sp[4].ten_sp,"Hiep si Lon");
		sp[4].gia=857000;

		strcpy(sp[5].ten_sp,"Gai kenDu");
		sp[5].gia=645000;
		
		strcpy(sp[6].ten_sp,"bupbe vanachi");
		sp[6].gia=10450;

		strcpy(sp[7].ten_sp,"N96");
		sp[7].gia=12550000;

		strcpy(sp[8].ten_sp,"SamSung E210");
		sp[8].gia=2750000;

		strcpy(sp[9].ten_sp,"sony ericsson P990i");
		sp[9].gia=5970000;


		
		server.Create(12345); //mở cổng 12345
		server.Listen();//lắng nghe


		printf("\n Dang mo ket noi");//chờ đủ 3 người chơi kết nối đầu tiên

	if (server.Accept(s[0]) && server.Accept(s[1]) && server.Accept(s[2]))
	{
		system("cls");
		printf("\n Mung qua' ha`,da ket noi day du roi");
		printf("\n gui thong diep moi client nhap ten:");
		gets(nhap);
		//nhận tên đầu tiên của người chơi đầu tiên
		s[0].Send(nhap,strlen(nhap),0);

		a=s[0].Receive(ten,20,0);
		ten[a]=0;
		s[0].Send(ten,strlen(ten),0);
                //nhận tên và kiếm tra người chơi 2 trùng tên hay không?
		do
		{
			s[1].Send(nhap,strlen(nhap),0);
			
			a=s[1].Receive(ten1,20,0);
			ten1[a]=0;
			k=stricmp(ten1,ten);
			
		}
		while (k==0);
		s[1].Send(ten1,strlen(ten1),0);
                //nhận và kiểm tra tên người chơi thứ 3 có trùng với 2 người chơi đầu hay k?
		do
		{
			s[2].Send(nhap,strlen(nhap),0);
			
			a=s[2].Receive(ten2,20,0);
			ten2[a]=0;
			k=stricmp(ten,ten2);
			i=stricmp(ten1,ten2);
		}
		while (k==0||i==0);
		s[2].Send(ten2,strlen(ten2),0);
                //kiêm tra xong thì in ra tên 3 người chơi
		system("cls");
		printf("\nten1:%s",ten);
		printf("\nten2:%s",ten1);
		printf("\nten3:%s",ten2);
		
		srand((unsigned)time(NULL));
		n = rand()%10;// random 1 trong 10 sản phẩm

		do
		{
			printf("\n Luot %d",dem);// nhập số lượt đoán
			printf ("\n san pham %s",sp[n].ten_sp);//hiển thị sản phẩm được random
			for(i=0;i<3;i++)
				s[i].Send(&sp[n].ten_sp,sizeof(sp[n].ten_sp),0);//gửi tên sản phẩm cho 3 người chơi

			for(i=0;i<3;i++)
			{
				s[i].Receive(&gia[i].gia_nhan,sizeof(gia[i].gia_nhan),0);// nhận đủ 3 giá của 3 người chơi đoán gửi về
				gia_lech[i] = abs(sp[n].gia - gia[i].gia_nhan);// tính giá lệch của 3 người chới
			}

			min = gia_lech[0] < gia_lech[1] ? gia_lech[0] : gia_lech[1];// lấy giá lệch thấp nhất của 3 người chơi
			min = min < gia_lech[2] ? min : gia_lech[2];

			
			nhi = gia_lech[0] < gia_lech[1] ? gia_lech[0] : gia_lech[1];
			tam = gia_lech[0] > gia_lech[1] ? gia_lech[0] : gia_lech[1];
			nhi = nhi > gia_lech[2] ? nhi : gia_lech[2];
			if (nhi == gia_lech[2])
				nhi =  gia_lech[2] < tam ? gia_lech[2] : tam;
                        // tính điểm cho các người chơi gần đúng nhất 5đ, nhì 3đ, ba 0đ.
			for(i=0;i<3;i++)
			{
				if(gia_lech[i]==min)
					diem[i].diem=diem[i].diem+5;
				if(gia_lech[i]==nhi)
					diem[i].diem=diem[i].diem+3;
			}


                        //gửi kết quả về cho người chơi
			for (i=0;i<3;i++)
			{
				s[i].Send(&sp[n].gia,sizeof(sp[n].gia),0);
			
				for(j=0;j<3;j++)
				{
					s[i].Send(&gia[j].gia_nhan,sizeof(gia[j].gia_nhan),0);
				}
			}
			n++;
			dem++;
		}
		while (dem<6);

                        // gửi số điểm cuối cùng cho người chơi
			for(i=0;i<3;i++)
				for(j=0;j<3;j++)
				{
					s[i].Send(&diem[j].diem,sizeof(diem[j].diem),0);
				}
	}
	else
		printf("\n Chan qua di,Khong ket noi duoc goy`");
	
	for (i=0;i<3;i++)
		s[i].Close();

	getch();
	system("cls");

	server.Close();
	
	
	}
	while (1);

}	

	return nRetCode;
}


**Code Client**
```C++
// client.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "client.h"
#include "afxsock.h"
#include "stdlib.h"
#include "conio.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;


typedef struct
{
	char ten_sp[50];
	int gia[4],diem[3];
}SP;


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// initialize MFC and print and error on failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// <span class="hljs-doctag">TODO: change error code to suit your needs
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else
	{
		// <span class="hljs-doctag">TODO: code your application's behavior here.
		AfxSocketInit(NULL);
		CSocket client;
		char nhap[30],ten[20],trung[20];
		int k,a,i,dem=1;
		SP sp;

		client.Create();

	if(client.Connect("127.0.0.1",12345))//tạo kết nối qua cổng 12345
		{
			printf("\n Da ket noi duoc voi server");
			a=client.Receive(nhap,30,0);//nhap tên
			nhap[a]=0;
			do
			{
			system("cls");
			printf("%s",nhap);
			gets(ten);
			client.Send(ten,strlen(ten),0);//gửi tên về cho sever

			a=client.Receive(trung,20,0);
			trung[a]=0;
			k=stricmp(trung,nhap);
			if(k==0)
			{
				printf("nickname bi trung,bam enter de nhap lai");
				getch();
			}
			else break;
			}
			while (k==0);

			printf ("\n Loading...");// chờ sever gửi tên sản phẩm về
			system("cls");

			do
			{
				
				client.Receive(&sp.ten_sp,sizeof(sp.ten_sp),0);// nhận tên sản phẩm và hiển thị ra
				printf("\n\n luot %d",dem);
				printf("\n");
				printf("\n SP can doan gia la: %s ",sp.ten_sp);//nhập giá đoán

				
				printf("\n\n Ban oi!doan gia di ne: ");
				scanf("%d",&sp.gia[1]);
				client.Send(&sp.gia[1],sizeof(sp.gia[1]),0);//gửi giá đoán cho sever

				client.Receive(&sp.gia[0],sizeof(sp.gia[0]),0);//nhận giá đúng về và hiển thị ra màn hình
				printf("\n Gia cua san pham tren la: %d VND",sp.gia[0]);
				printf("\n");
				printf("\n Gia doan cua Client la:");
				printf("\n\n");
                                // nhận giá của 3 người chơi
				for(i=1;i<4;i++)
				{
					client.Receive(&sp.gia[i],sizeof(sp.gia[i]),0);
					printf("\tClient %d: %d ",i,sp.gia[i]);
				}
				dem++;
				
			}
			while (dem<6);
                               //hiển thị điểm  3 người chơi
				for(i=0;i<3;i++)
				{
					client.Receive(&sp.diem[i],sizeof(sp.diem[i]),0);
					printf("\nDiem cua client %d: %d ",i+1,sp.diem[i]);
				}

		}
		else
			printf("\n Buon wa,ko ket noi dc goy`");
		client.Close();
	getch();
}

	return nRetCode;
}


Chủ đề liên quan
Code Socket Trò chơi

Cùng chuyên mục

Xem nhiều hôm nay