五子棋程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*************************************
** 程序名称:五子棋 **
** 编译环境:vs2012 **
** 编辑作者:往事随风<1034882113> **
** 最后修改:2013-07-25 **
** 项目类型:win32控制台程序 **
**************************************/
#include
#include
/****************** 宏定义区 **********************/
#define BOARD_LEN 640 // 棋盘大小
#define BOARD_WIDTH 640
#define EXTRA_LEN 200 // 右边提示区域的长度
#define SIZE 40 // 棋盘小方格大小
#define ROW 14 // 棋盘为14*14
/****************** 数据类型定义区******************/
/****************** 全局变量区**********************/
IMAGE img_chessboard; // 背景
IMAGE img_box_black; // 黑色棋盒
IMAGE img_box_white; // 白色棋盒
IMAGE img_bkbox; // 右边区域背景
IMAGE img_time; // 显示时间
IMAGE img_count[11]; // 十个数字和一个冒号
int m_x = (BOARD_LEN - SIZE * ROW)/2; // 居中
int m_y = (BOARD_WIDTH - SIZE * ROW)/2;
byte gobang[ROW+1][ROW+1] = {0};// byte不能表示负数0:无子1:黑子2:白子byte type = 0; // 1: 白棋0:黑棋
bool replay = true; // false 游戏结束,true代表游戏运行中
DWORD b_oldtime; // 黑棋花费时间
DWORD w_oldtime; // 白棋花费时间
DWORD start_time; // 游戏起始时间
/****************** 函数声明区**********************/
void init_system();
void init_img();
void init_chessboard();
void getMouse(POINT *point);
void deal_mousemsg(POINT point);
void game_win(int x,int y);
void quit_game();
void print_msg();
void show_time(DWORD newtime);
void print_time(DWORD time);
/****************** 主函数区 **********************/ void main()
{
POINT point; // 存储坐标位置
while (true)
{
init_system();
while (replay)
{
getMouse(&point);
deal_mousemsg(point);
}
}
}
/****************** 函数定义区**********************/
void print_time(DWORD time)
{
int y = 0;
int minuteh = time / (600*1000); // 分钟十位
time %= (600*1000);
int minutel = time / (60*1000); // 分钟个位
time %= (60*1000);
int secondh = time / (10*1000); // 秒钟十位
int secondl = time % (10*1000); // 秒钟个位
int x = BOARD_LEN + 5 - m_x;
if (type) // 白棋
y = EXTRA_LEN + 5 - m_y;
else y = BOARD_WIDTH/2+EXTRA_LEN+5 - m_y; // 黑棋
putimage(x+80,y+45,&img_count[minuteh]); // 分钟十位
putimage(x+95,y+45,&img_count[minutel]); // 分钟个位
putimage(x+125,y+45,&img_count[secondh]); // 秒十位
putimage(x+140,y+45,&img_count[secondl/1000]); // 秒个位}
/* 显示倒计时 */
void show_time(DWORD newtime)
{
DWORD tmp = b_oldtime+w_oldtime + start_time; // 游戏运行的时间
if (type) // 白棋
{
w_oldtime += newtime - tmp; // 计算白棋用的时间
print_time(w_oldtime);
}
else// 黑棋
{
b_oldtime += newtime - tmp; // 计算黑棋用的时间
print_time(b_oldtime);
}
}
/* 打印右边游戏信息 */
void print_msg()
{
outtextxy(20,50,_T("倒计时:"));
putimage(80,45,&img_count[0]);
putimage(95,45,&img_count[0]);
putimage(110,45,&img_count[10]);
putimage(125,45,&img_count[0]);
putimage(140,45,&img_count[0]);
outtextxy(20,80,_T("比分:"));
outtextxy(80,80,_T("0"));
}
/* 结束游戏 */
void quit_game()
{
closegraph();
exit(0);
}
/* 判断胜利 */
void game_win(int x,int y)
{
int i = -5,j = -5;
int count = 0;
byte flag = gobang[x][y]; // 判断棋色