2015华为软件精英挑战赛 客户端源码 德州扑克

2015华为软件精英挑战赛于4月29日正式启动!请登录大赛官网:http://career-elite.huawei.com获取详细信息。
 2015华为软件精英挑战赛(2015 Huawei Software Elite Challenge)是华为公司面向全国高校学生举办的大型软件竞赛,致力于让参赛学生充分感受软件设计和写好代码的魅力,验证用软件设计和编程解决问题的能力,并通过比赛增强实战实践和与人沟通、协作的能力。
本次大赛口号“万码奔腾战江湖”,将在全国设8个赛区同时开展。大赛分区域线上初赛、区域现场复赛和全国总决赛共三轮,选手采用组队方式(1-3人)参赛。
本次大赛赛题于5月5日正式发布,题型将充满乐趣和挑战,我们期待和你共同感受coding的魔力。

一、参赛人员
只要你是
1、 全日制在校大学生(本、硕)
2、 喜爱写软件,满怀激情与梦想
3、 对自己和小伙伴有足够的信心
你就可以参与大赛报名!
你可以选择单枪匹马闯大赛(1人参赛),也可以选择强强联手(2人或3人组队参赛,可跨校组队,以组长所在学校所属区域作为参赛区域),英雄不问出处,竞技场上见分晓。

二、奖项设置
全国总决赛:
至尊天下奖(一等奖),1队,20万现金大奖
笑傲江湖奖(二等奖),2队,10万现金大奖
蟾宫折桂奖(三等奖),5队,5万现金大奖
区域现场复赛:
每区域前4名队伍获雄霸一方奖,晋级全国总决赛,并获得华为最新款手机,加入优才计划
区域线上初赛:
1、每区域前32名队伍获横扫千军奖,晋级本区域现场复赛,获得晋级奖品和证书
2、每区域前64名队伍获得独一无二的精美纪念品

三、赛程设置
4月底(预计4月29日)   启动报名
5月5日                  赛题发布
5月底(预计5月30日)   区域线上初赛
6月初(预计6月7日)    区域现场复赛
6月底或7月上旬(预计7月11日)   全国总决赛
具体日期以正式通知为准,大赛组委会对赛事日程保留最后解释权

四、优才计划
1、面试绿卡:免技术面,通过终面后给予高薪Special Offer
2、应届生实习直通车:国内实习机会任选、岗位工作地任选
3、精英导师贴身辅导:配备首席技术专家和人力资源主管进行一对一的技术指导和职业生涯指导

4、职业快车道:入职后高级主管、首席技术专家担任导师,有机会进入专家或管理者梯队培养计划

五、赛题示例代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<errno.h>
#include<string>
#include<sstream>

#include<iostream>
#include<vector>

using namespace std;

enum Color
{
	SPADES,//黑桃
	HEARTS,//红桃
	CLUBS,//梅花
	DIAMONDS//方片
};
enum HandPattern//牌型大小枚举类型
{
	HIGH_CARD,
	ONE_PAIR,
	TWO_PAIR,
	THREE_OF_A_KIND,
	STRAIGHT,
	FLUSH,
	FULL_HOUSE,
	FOUR_OF_A_KIND,
	STRAIGHT_FLUSH
};
enum TypeofMsg
{
	REG_MSG,//注册消息
	SEAT_MSG,//座次消息
	GAME_OVER_MSG,//游戏结束消息
	BLIND_MSG,//盲注消息
	HOLD_CARDS_MSG,//手牌消息
	INQUIRE_MSG,//询问消息
	ACTION_MSG,//行动消息
	FLOP_MSG,//公牌消息
	TURN_MSG,//转牌消息
	RIVER_MSG,//河牌消息
	SHOWDOWN_MSG,//摊牌消息
	POT_WIN_MSG//彩池分配消息
};
struct Poker
{
	int color;//花色
	int point;//点数
};
struct basicInfoforPlayer
{
	int id;//ID号
	int jetton;//筹码
	int money;//金币
};
struct SeatInfoMsg//座次表信息
{
	int totalNumofPlayer;//玩家数量
	struct basicInfoforPlayer button;//庄家
	struct basicInfoforPlayer smallBlind;//小盲注
	struct basicInfoforPlayer bigBlind;//大盲注
	struct basicInfoforPlayer otherPlayer[5];//其它玩家
};

enum ActionType//行动消息
{
	BLIND_DO,
	CHECK_DO,
	CALL_DO,
	RAISE_DO,
	ALL_IN_DO,
	FOLD_DO
};
struct InquireMsg//询问消息
{
	int pid;//ID号
	int jetton;//筹码
	int money;//金币
	int bet;//赌注
	int actionType;//行动消息
};
struct PokerClass//存放我的牌与公共牌取出5张牌的大小
{
	int keyBig;//记录组成最大牌型的最大点数
	int keySmall;//记录组成最大牌型的最小点数
	int varClass;//牌型类型
};
class Player
{
private:
	int PlayerID;
	int SocketID;
	struct sockaddr_in PlayerAddr;
	struct sockaddr_in ServerAddr;
	bool IsConnectSuccess;
	char varGetBuf[1024];
	bool varIsBufNull;//消息接收缓冲区是否有数据
	int rec_len;//接收的字符长度
	struct SeatInfoMsg varSeatInfo;//座次表信息
	struct Poker myPoker[7];//玩家扑克牌
	struct InquireMsg oneReturnMsg[8];//返回消息
	int stageofGame;//游戏所处阶段
	struct basicInfoforPlayer myMoney;//我的钱在这里
	struct PokerClass myPokerClass;//记录我的牌型大小
	bool varIsFold[8];//记录其它选手是否弃牌
public:
	Player(char *argv[])
	{
		/*******Player相关的IP、端口初始化********************/
		bzero(&PlayerAddr,sizeof(PlayerAddr));
		PlayerAddr.sin_family=AF_INET;
		PlayerAddr.sin_addr.s_addr=inet_addr(argv[3]);//IP
		PlayerAddr.sin_port=htons(atoi(argv[4]));//PORT
		/*******Server相关的IP、端口初始化********************/
		bzero(&ServerAddr,sizeof(ServerAddr));
		ServerAddr.sin_family=AF_INET;
		ServerAddr.sin_addr.s_addr=inet_addr(argv[1]);//Server IP
		ServerAddr.sin_port=htons(atoi(argv[2]));//Server Port
		
		PlayerID=atoi(argv[5]);//Player ID
		SocketID=-1;//
		IsConnectSuccess=false;
		
		for(int i=0;i<8;i++)
			bzero(&oneReturnMsg[i],sizeof(InquireMsg));
		
		stageofGame=REG_MSG;//游戏所处阶段初始化
		varIsBufNull=true;//消息接收缓冲区是否有数据
		rec_len=0;//接收的字符长度
	}
	
	~Player()//析构函数
	{
		if(SocketID>0)//关闭Socket连接
		{
			close(SocketID);
		}
			
	}
	
	/********************
	函数名称:DisplayInfo
	函数功能:用于调试输出
	********************/
	void DisplayInfo(void)
	{
		cout<<PlayerID<<endl;
	}
	
	/****************************************************
	函数名称:ConnecttoServer
	函数功能:用于Player连接Server服务器,发送注册消息
	****************************************************/
	bool ConnecttoServer()
	{
		int connect_max_num=5;//最大连接次数
		SocketID =socket(AF_INET,SOCK_STREAM,0);
		if(SocketID<0)
		{
			printf("init socket failed\n");
			return false;
		}
		int is_reuse_addr=1;
		setsockopt(SocketID,SOL_SOCKET,SO_REUSEADDR,(const char*)&is_reuse_addr,sizeof(is_reuse_addr));
		if(bind(SocketID,(struct sockaddr*)&PlayerAddr,sizeof(PlayerAddr))<0)
		{
			printf("blind failed ! \n");
			return false;
		}
		
		while(connect(SocketID,(struct sockaddr*)&ServerAddr,sizeof(ServerAddr))<0 && (connect_max_num--)>0)
		{
			usleep(100*1000);//睡眠100ms继续连接
			if(connect_max_num<=0)
			{
				printf("connect failed!\n");
				printf("connect error: %s(errno: %d)\n", strerror(errno), errno); 
				return false;
			}
		}
		
		char reg_msg[50] = {'\0'};
		snprintf(reg_msg, sizeof(reg_msg) - 1, "reg: %d %s \n",PlayerID, "tt"); 
		if( send(SocketID, reg_msg, strlen(reg_msg)+1, 0) < 0)//向服务器发送注册消息
		{  
			printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);  
			exit(0);  
		} 
		IsConnectSuccess=true;
		return true;
		
	}
	
	/***********************************
	函数名称:GetServerMessage
	函数功能:用于接收并处理服务器消息
	返回值:消息类型
	***********************************/
	int GetServerMessage()
	{
		int varMsgNuminSocket=0;
		string varMsgKind;
		int charStart,charEnd;
		int varMsgLength=0;//记录一个消息长度
		if(varIsBufNull)//消息缓冲区为空,准备接收数据
		{
			if((rec_len = recv(SocketID, varGetBuf, 1024,0)) == -1) 
			{  
				perror("recv error");  
				//continue;  
			}
			varGetBuf[rec_len]='\0';
		}
		
		string one_message(varGetBuf);
			
		
		//获取消息种类
		charStart=0;	charEnd=one_message.find('\n',0);
		varMsgKind=one_message.substr(charStart,charEnd);
		if(varMsgKind=="seat/ ")//座次消息
		{
			varSeatInfo.totalNumofPlayer=0;//将选手个数情况为零
			int lastEnd=one_message.find("/seat ",charStart);
			charStart=charEnd;	charEnd=one_message.find('\n',charStart+1);
			if(charEnd!=string::npos)
			{
				struct basicInfoforPlayer tmp_player;
				int spacepos=0;
				charStart=one_message.find("button: ",charStart+1);
				charStart+=8;
				spacepos=one_message.find(' ',charStart);
				tmp_player.id=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				charStart=spacepos+1;
				spacepos=one_message.find(' ',charStart);
				tmp_player.jetton=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				charStart=spacepos+1;
				spacepos=one_message.find(' ',charStart);
				tmp_player.money=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				varSeatInfo.button=tmp_player;//庄家信息
				varSeatInfo.totalNumofPlayer++;
				
				if(PlayerID==tmp_player.id)//获取我的money
				{
					myMoney=tmp_player;
				}
				charStart=charEnd;
			}
			
			charEnd=one_message.find('\n',charStart+1);
			if(charEnd!=string::npos)
			{
				struct basicInfoforPlayer tmp_player;
				int spacepos=0;
				charStart=one_message.find("small blind: ",charStart+1);
				charStart+=13;
				spacepos=one_message.find(' ',charStart);
				tmp_player.id=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				charStart=spacepos+1;
				spacepos=one_message.find(' ',charStart);
				tmp_player.jetton=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				charStart=spacepos+1;
				spacepos=one_message.find(' ',charStart);
				tmp_player.money=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				varSeatInfo.smallBlind=tmp_player;//小盲注信息
				varSeatInfo.totalNumofPlayer++;
				
				if(PlayerID==tmp_player.id)//获取我的money
				{
					myMoney=tmp_player;
				}
				charStart=charEnd;
			}
			
			charEnd=one_message.find('\n',charStart+1);
			if(charEnd!=string::npos && charEnd<lastEnd)
			{
				struct basicInfoforPlayer tmp_player;
				int spacepos=0;
				charStart=one_message.find("big blind: ",charStart+1);
				charStart+=11;
				spacepos=one_message.find(' ',charStart);
				tmp_player.id=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				charStart=spacepos+1;
				spacepos=one_message.find(' ',charStart);
				tmp_player.jetton=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				charStart=spacepos+1;
				spacepos=one_message.find(' ',charStart);
				tmp_player.money=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
				varSeatInfo.bigBlind=tmp_player;//大盲注信息
				varSeatInfo.totalNumofPlayer++;
				
				if(PlayerID==tmp_player.id)//获取我的money
				{
					myMoney=tmp_player;
				}
				charStart=charEnd;
				
			}
			
			for(int i=0;i<5;i++)
			{
				charEnd=one_message.find('\n',charStart+1);
				if(charEnd!=string::npos && charEnd<lastEnd)
				{
					struct basicInfoforPlayer tmp_player;
					int spacepos=0;
					charStart+=1;
					spacepos=one_message.find(' ',charStart);
					tmp_player.id=atoi(one_message.substr(charStart,spacepos-charStart).c_str());
					charStart=spacepos+1;
					sp
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值