拖拉机小程序
来源:互联网 发布:mac安装mysql数据库 编辑:程序博客网 时间:2024/04/25 04:25
/**************************************************
文件名: Porker.h
文件描述: 声明扑克类
创建人: 刘基伟 2007/3/24
版本号: 1.0
修改纪录: 暂无
**************************************************/
#include <List>
#include <ctime>
using namespace std;
class Viter;
#define FOUR 4
#define FIVE 5
#define THIRTEEN 13
#define TWENTY_SIX 26
/*====================================================
类 名 称: Porker
功能描述: 创建扑克类,对扑克进行处理
成员变量: List_porker // 存储扑克的数值
p_List_porker // 指向List_porker
// 用于查找
成员函数: Porker_create // 创建52张扑克
Porker_delete // 删除52张扑克
Porker_wash() // 由Viter对象来洗牌
Porker_wash() // 由Viter对象来将牌翻转
====================================================*/
class Porker
{
private:
list<int>::iterator p_List_porker;
public:
list<int> List_porker;
Porker();
bool Porker_create();
bool Porker_delete();
void Porker_wash();
void Porker_reverse();
void Porker_show();
};
/*****************************************************
文 件 名: Player.h
文件描述: 声明 Player 类
创 建 人: 刘基伟 2007/3/24
版 本 号: 1.0
修改纪录: 暂无
*****************************************************/
#include <List>
using namespace std;
/*=====================================================
结构体名: Player_node
功能描述: 实现一个扑克节点
成员变量: b_Turn // 判 断 是 否 轮
i_Player_porker[5] // 要 的 五 张 牌
sti_Player_money // 初 始 的 筹 码
sti_Money_min // 可 跟 最 小 值
sti_Money_sum // 下 注 的 总 和
ePorker_type // 扑 克 的 类 型
p_Node_next // 下 一 节 点 域
成员函数: Player_node // 扑 克 的 构 造
=====================================================*/
struct Player_node
{
bool b_Turn;
int i_Player_money;
list<int> List_porker_type;
list<int> List_porker_value;
static int sti_Money_min;
static int sti_Money_sum;
Player_node* p_Node_next;
Player_node();
Player_node(bool, int, Player_node*);
};
class Player
{
private:
int i_Count;
Porker &p_Player_porker;
Player_node *p_Player_head;
list<int>::iterator p_List_porker;
enum ePorker_type{Dan_zhang, Dui_zi, Tong_hua,
Lian_zi, Gang_lian, Bao_zi};
public:
Player(Porker &_ref_Player_porker);
void Player_insert();
void Player_delete();
int Player_size()const;
int Player_take_porker();
void Player_follow(int _i_Count);
void Player_porker_show();
bool Player_compare(const Player &_Player);
int Player_porker_type();
bool Player_porker_tonghua();
bool Player_porker_connect();
};
/*****************************************************
文件名: Tuolaji.cpp
文件描述: 定义控制台应用程序的入口点,实现一系列的
操作
创建者: 刘基伟 2007/3/24
版本号: 1.0
修改纪录: 暂无
*****************************************************/
#include "stdafx.h"
#include "Porker.h"
#include "Player.h"
using namespace std;
static const int csti_Array[FOUR][THIRTEEN]={{40,28,16,4,44,32,20,8,48,36,24,12,52},
{44,15,3,43,31,19,7,47,35,23,11,51,39},
{14,2,42,30,18,6,46,34,22,10,50,38,26},
{1,41,29,17,5,45,33,21,9,49,37,25,13}};
int Player_node::sti_Money_min = 1;
int Player_node::sti_Money_sum = 0;
Player_node::Player_node()
{
}
/*======================================================
函 数 名: Player_node
功能描述: 构造选手节点
参 数: bool b_Turn
int i_Player_money
int i_Player_porker[5]
Player_node* p_Node_next
返 回 值: 无
抛出异常: 无
作 者: 刘基伟 2007/3/25
======================================================*/
Player_node::Player_node(bool b_Turn,
int i_Player_money,
Player_node* p_Node_next)
{
this->b_Turn = b_Turn;
this->i_Player_money = i_Player_money;
this->p_Node_next = p_Node_next;
}
/*======================================================
函 数 名: Player
功能描述: 构造选手
参 数: 无
返 回 值: 无
抛出异常: 无
作 者: 刘基伟 2007/3/25
======================================================*/
Player::Player(Porker &_ref_Player_porker): i_Count(0),
p_Player_porker(_ref_Player_porker),
p_Player_head(NULL)
{
}
/*======================================================
函 数 名: Player
功能描述: 插入选手
参 数: _i_Array[5]
返 回 值: void
抛出异常: 无
作 者: 刘基伟 2007/3/25
======================================================*/
void Player::Player_insert()
{
Player_node *p_Privous, *p_New_player;
p_New_player = new Player_node(true, 500, p_Player_head);
if(p_New_player == NULL)
return;
if(i_Count == 0)
{
p_New_player->p_Node_next = p_New_player;
p_Player_head = p_New_player;
}
else
{
p_Privous = p_Player_head;
while(p_Privous->p_Node_next != p_Player_head)
{
p_Privous = p_Privous->p_Node_next;
}
p_Privous->p_Node_next = p_New_player;
p_Player_head = p_New_player;
}
i_Count++;
}
/*====================================================
函 数 名: Player_delete
功能描述: 将选手全部删除
参 数: 无
返 回 值: void
抛出异常: 无
作 者: 刘基伟 2007/3/25
====================================================*/
void Player::Player_delete()
{
Player_node *p_Privous = p_Player_head;
while(i_Count > 0)
{
p_Privous = p_Privous->p_Node_next;
p_Player_head->p_Node_next = p_Player_head->p_Node_next->p_Node_next;
delete p_Privous;
i_Count--;
}
}
/*====================================================
函 数 名: Player_size
功能描述: 统计选手的数目
参 数: 无
返 回 值: int
抛出异常: 无
作 者: 刘基伟 2007/3/25
====================================================*/
int Player::Player_size()const
{
return i_Count;
}
int Player::Player_take_porker()
{
int i_Count_player = 4;
Player_node *p_Via_node = p_Player_head;
p_List_porker = p_Player_porker.List_porker.begin();
for(int i_Out_circle = 0; i_Out_circle < 5; i_Out_circle++)
{
for(int i_In_circle = 0; i_In_circle < 4; i_In_circle++)
{
if(p_Via_node->b_Turn)
{
cout<<"请第 "<<i_In_circle<<" 位选择: 0不要 1要"<<endl;
bool b_Player_take;
cin>>b_Player_take;
if(b_Player_take)
{
p_Player_head->List_porker_type.push_back(*p_List_porker++);
p_Via_node->i_Player_money--;
p_Via_node->sti_Money_sum++;
p_List_porker++;
}
else
{
p_Via_node->b_Turn = false;
i_Count_player--;
}
}
p_Via_node = p_Via_node->p_Node_next;
}
}
return i_Count_player;
}
void Player::Player_follow(int _i_Count)
{
Player_node *p_Via_node = p_Player_head;
if(_i_Count == 1)
{
for(int i_Via = 0; i_Via < 5; i_Via++)
{
if(p_Via_node->b_Turn)
break;
p_Via_node = p_Via_node->p_Node_next;
}
p_Via_node->i_Player_money += p_Via_node->sti_Money_sum;
p_Via_node->sti_Money_sum = 0;
}
else
{
while( _i_Count > 1)
{
for(int i_Via = 0; i_Via < 4; i_Via++)
{
if(p_Via_node->b_Turn)
{
cout<<"请输入你要选择的方式: 0不跟 1比大 2跟 !"<<endl;
int i_Player_select;
cin>>i_Player_select;
if(i_Player_select == 0)
{
p_Via_node->b_Turn = false;
}
else if(i_Player_select == 1)
{
}
else
{
cout<<"请输入你要跟的筹码 ! "<<endl;
cout<<"最少得跟 "<<p_Via_node->sti_Money_min<<endl;
int i_Follow_money;
cin>>i_Follow_money;
p_Via_node->i_Player_money -= i_Follow_money;
p_Via_node->sti_Money_sum += i_Follow_money;
p_Via_node->sti_Money_min = i_Follow_money;
}
}
else
{}
}
}
}
}
void Player::Player_porker_show()
{
int i_Via;
p_List_porker = p_Player_head->List_porker_type.begin();
for(int i_Circle = 0; i_Circle < 3; i_Circle++)
{
switch(i_Via = *p_List_porker % 13, *p_List_porker % 4)// 按随机发牌顺序,分成四部分
{
case 0:
printf("/x3%d ", i_Via ? i_Via:13);
break;
case 1:
printf("/x4%d ", i_Via ? i_Via:13);
break;
case 2:
printf("/x5%d ", i_Via ? i_Via:13);
break;
case 3:
printf("/x6%d ", i_Via ? i_Via:13);
break;
}
}
}
bool Player::Player_porker_connect()
{
int i_Via = 0,a[3],i_Temp;
i_Temp = p_Player_porker.List_porker.front();
list<int> i_Porker_value;
p_List_porker = p_Player_porker.List_porker.begin();
for(int i_Circle = 0; i_Circle < 13; i_Circle++)
{
if(*p_List_porker == csti_Array[i_Temp][i_Circle])
{
i_Porker_value.push_back(i_Circle+1);
p_List_porker++;
}
}
i_Porker_value.sort();
p_List_porker = i_Porker_value.begin();
for(; p_List_porker != i_Porker_value.end(); p_List_porker++)
{
a[i_Via] = *p_List_porker;
i_Via++;
}
if(a[0]+1 == a[1])
{
if(a[1]+1 == a[2])
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
bool Player::Player_porker_tonghua()
{
int i_Via = 0,a[3];
p_List_porker = p_Player_head->List_porker_type.begin();
for(; p_List_porker != p_Player_head->List_porker_type.end(); p_List_porker++)
{
a[i_Via] = *p_List_porker;
i_Via++;
}
if(a[0] == a[1])
{
if(a[0] == a[1])
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
int Player::Player_porker_type()
{
p_List_porker = p_Player_head->List_porker_type.begin();
int i =0,a[3];
for(; p_List_porker != p_Player_head->List_porker_type.end(); p_List_porker++)
{
a[i] = *p_List_porker;
i++;
}
if(a[0] == a[1])
{
if(a[0] == a[2])
{
return Bao_zi;
}
else
{
return Dui_zi;
}
}
else
{
if(a[0] == a[2])
{
return Dui_zi;
}
else
{
if(a[1] == a[2])
{
return Dui_zi;
}
else
{
if(Player_porker_connect()&&Player_porker_tonghua())
return Gang_lian;
else if(Player_porker_tonghua())
return Tong_hua;
else if(Player_porker_connect())
return Lian_zi;
else
return Dan_zhang;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int i_Count = 0;
Porker porker;
porker.Porker_create();
porker.Porker_show();
porker.Porker_wash();
porker.Porker_show();
porker.Porker_reverse();
porker.Porker_show();
Player *player = new Player(porker);
player->Player_insert();
player->Player_insert();
player->Player_insert();
player->Player_insert();
i_Count = player->Player_take_porker();
return 0;
}
/******************************************************
文件名: Porker.cpp
文件描述: 用于扑克类的定义
创建人: 刘基伟 2007/3/24
版本号: 1.0
修改纪录: 暂无
******************************************************/
#include "stdafx.h"
#include "Porker.h"
/*====================================================
函 数 名: Porker
功能描述: 提供默认的构造函数
参 数: 无
返 回 值: 无
抛出异常: 无
作 者: 刘基伟 2007/3/24
====================================================*/
Porker::Porker()
{
}
/*====================================================
函 数 名: Porker_create
功能描述: 用于52张扑克的创建
参 数: 无
返 回 值: bool,如果List_porker.size() == 52返回true,
否则返回false.
抛出异常: 无
作 者: 刘基伟 2007/3/24
====================================================*/
bool Porker::Porker_create()
{
int i_Count, i_Via;
int i_Porker_value[52];
//为辅助数组赋值
for(i_Count = 0; i_Count < 52; ++i_Count)
i_Porker_value[i_Count] = i_Count + 1;
srand((unsigned int)time(NULL)); // 初始化随机数发生器
i_Count = 0;
while(i_Count < 52)
{
do{
i_Via = rand() % 52; //将有序的1--52变为无序
}
while(!i_Porker_value[i_Via]);
List_porker.push_back(i_Porker_value[i_Via]);
i_Porker_value[i_Via] = 0;
i_Count++;
}
if(List_porker.size() == 52)
{
return true;
}
else
{
return false;
}
}
/*======================================================
函 数 名: Porker_delete
功能描述: 将52张扑克全部删除
参 数: 无
返 回 值: bool,如果全部删除返回true,否则返回false
抛出异常: 无
作 者: 刘基伟 2007/3/24
======================================================*/
bool Porker::Porker_delete()
{
List_porker.clear();
if(List_porker.empty())
{
return true;
}
else
{
return false;
}
}
/*=====================================================
函 数 名: Porker_wash
功能描述: 打乱List_porker中顺序
参 数: 无
返 回 值: 无
抛出异常: 无
作 者: 刘基伟 2007/3/24
=====================================================*/
void Porker::Porker_wash()
{
int i_Count;
int i_Half_one[TWENTY_SIX],i_Half_tow[TWENTY_SIX];
p_List_porker = List_porker.begin();
for(i_Count = 0; i_Count < TWENTY_SIX; i_Count++)
{
i_Half_one[i_Count] = *p_List_porker; // 将奇数为存入数组i_Half_one
p_List_porker++;
i_Half_tow[i_Count] = *p_List_porker; // 将偶数位存入数组i_Half_tow
p_List_porker++;
}
p_List_porker = List_porker.begin();
for(int i = 0; i < TWENTY_SIX; i++)
{
*p_List_porker = i_Half_tow[i];
p_List_porker++;
*p_List_porker = i_Half_one[i];
p_List_porker++;
}
}
/******************************************************
函 数 名: Porker_reverse
功能描述: 将List_porker内的变量翻转
参 数: 无
返 回 值: void
抛出异常: 无
作 者: 刘基伟 2007/3/24
******************************************************/
void Porker::Porker_reverse()
{
List_porker.reverse();
}
void Porker::Porker_show()
{
int i_Via,i_Count = 0;
p_List_porker = List_porker.begin();
for(; p_List_porker != List_porker.end(); p_List_porker++)
{
if(i_Count%13 == 0)
cout<<"第 "<<i_Count+1<<" 行 "<<endl;
switch(i_Via = *p_List_porker % 13, *p_List_porker % 4)// 按随机发牌顺序,分成四部分
{
case 0:
printf("/x3%d ", i_Via ? i_Via:13);
break;
case 1:
printf("/x4%d ", i_Via ? i_Via:13);
break;
case 2:
printf("/x5%d ", i_Via ? i_Via:13);
break;
case 3:
printf("/x6%d ", i_Via ? i_Via:13);
break;
}
i_Count++;
}
}
- 拖拉机小程序
- 拖拉机判定C语言程序
- MFC写的单人拖拉机游戏程序
- 拖拉机比赛规则
- tractor 拖拉机
- 说说两副牌拖拉机
- 奔驰 宝马 拖拉机
- 拖拉机游戏玩法
- 以拖拉机论重载
- 拖拉机大战贺岁版发布
- 游戏更新-拖拉机&升级 Android
- 联想拖拉机逆向之旅
- 小程序
- 小程序
- 小程序
- 小程序
- 小程序
- 小程序
- SQL Server2000:使用数据库创建向导创建数据库
- 向程序员推荐一部好看的连续剧
- 聪明的女人 or 笨女人?
- 那么冷,蚊子却已经出来了
- SQL Server 安装:以前的某个程序安装已在安装计算机上创建挂起的文件操作
- 拖拉机小程序
- 我从编程中悟出的八个字
- 黑白颠倒
- 翻硬币
- 玩火柴
- AZ字符串
- 距阵的算法
- 拉丁方阵
- N*N 的方阵