C语言五子棋全部源程序

  • 格式:docx
  • 大小:19.82 KB
  • 文档页数:19

#include

#include

#include

#include//使用getch()函数

#include

#include

int startchoice, winner, player, Q[200][200] = { 0 };//Q数组记录旗子

char button;//读入键盘输入的指令,如→

struct Point //点坐标的结构体

{

int x, y;

} point, game_xy;

struct Piece //棋子的坐标记录

{

struct Point coord;

struct Piece *fore;

};

struct Piece *head, *p, *ptr, *ptr1;

void goto_xy(int x, int y) //光标移动函数

{

COORD c;

c.X = 2 * x;

c.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);

}

void Init() //初始化函数,将记录棋子的数组初始化

{

int i, j; for (i = 0; i<200; i++)

for (j = 0; j<200; j++)

Q[i][j] = 0;

startchoice = 0;

player = 1;

p = (struct Piece *)malloc(sizeof(struct Piece));

head = p;

}

void Welcome() //欢迎界面

{

system("color 2F"); //#include 2 背景绿色 F 字体亮白色

goto_xy(10, 3);

printf("—→");

goto_xy(17, 1);

printf("主菜单");

goto_xy(13, 3);

printf(" ***人人对战***\n");

goto_xy(13, 4);

printf(" ***退出***");

point.x = 12;

point.y = 3;

goto_xy(0, 0);

}

void ShowWho() //显示轮到哪一方下棋

{

goto_xy(17, 22); if (player == 0)

printf("轮到甲方落子");

else

printf("轮到乙方落子");

goto_xy(point.x, point.y);

}

void Draw() //绘画游戏界面

{

int k1, k2, i = 8, j = 19, k = 3;

game_xy.x = 10;

game_xy.y = 3;

system("cls");

system("color 30"); //3 湖蓝色 0 黑色 湖蓝色为背景,黑色为字体颜色

goto_xy(15, 1);

printf("欢迎使用国民扬哥五子棋!");

/*goto_xy(29,22);

printf("重新开始 r");*/

goto_xy(1, 22);

printf("悔棋 b");

goto_xy(1, 23);

printf("退出 ESC");

goto_xy(game_xy.x - i, game_xy.y + k); //输出甲方的下棋方法

printf("甲方: ●");

goto_xy(game_xy.x - i, game_xy.y + k + 2); printf("移动: 上 ↑");

goto_xy(game_xy.x - i, game_xy.y + k + 4);

printf(" 下 ↓");

goto_xy(game_xy.x - i, game_xy.y + k + 6);

printf(" 左 ←");

goto_xy(game_xy.x - i, game_xy.y + k + 8);

printf(" 右 →");

goto_xy(game_xy.x - i, game_xy.y + k + 10);

printf("落子: Enter");

goto_xy(game_xy.x + j, game_xy.y + k); //输出乙方的下棋方法

printf("乙方: ○");

goto_xy(game_xy.x + j, game_xy.y + k + 2);

printf("移动: 上 ↑");

goto_xy(game_xy.x + j, game_xy.y + k + 4);

printf(" 下 ↓");

goto_xy(game_xy.x + j, game_xy.y + k + 6);

printf(" 左 ←");

goto_xy(game_xy.x + j, game_xy.y + k + 8);

printf(" 右 →");

goto_xy(game_xy.x + j, game_xy.y + k + 10);

printf("落子: Enter");

for (k1 = 0; k1<200; k1++) //初始化棋子记录,在第二局时有明确的作用

for (k2 = 0; k2<200; k2++) Q[k1][k2] = 0;

for (i = 0; i<18; i++) //画棋盘

{

if (i == 0) //画第一行

{

goto_xy(10, i + 3);

printf("┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐");

}

if (i != 0 && i != 17) //画出中间16行

{

goto_xy(10, i + 3);

printf("├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤");

}

if (i == 17) //画最后一行

{

goto_xy(10, i + 3);

printf("└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘");

}

}

point.x = 19;

point.y = 12;

goto_xy(19, 12);

}

void Clean() //清除—→运动的轨迹

{

goto_xy(10, 3);

printf(" ");

goto_xy(24, 3);

printf(" ");

goto_xy(10, 4);

printf(" ");

goto_xy(24, 4);

printf(" ");

}

void menu_choose(char press) //选择游戏还是退出

{

if (press == 72) //↑的ASCLL码

{

if (point.y == 3)

point.y = 4;

else

point.y = 3;

Clean();

goto_xy(10, point.y);

printf("—→");

}

if (press == 80) //↓的ASCLL码

{

if (point.y == 4)

point.y = 3;

else point.y = 4;

Clean();

goto_xy(10, point.y);

printf("—→");

}

if (press == 13) // 13:回车键的ASCLL码

{

startchoice = point.y - 2; //startchoice 为1或2

}

}

void go_back(int x1, int y1) //悔棋函数

{

goto_xy(x1, y1);

if (x1 == 10)

{

if (y1 == 3)

{

printf("┌");

}

else if (y1 == 20)

{

printf("└");

}

else

{

printf("├"); }

}

else if (x1 == 27)

{

if (y1 == 3)

{

printf("┐");

}

else if (y1 == 20)

{

printf("┘");

}

else

{

printf("┤");

}

}

else

{

if (y1 == 3)

{

printf("┬");

}

else if (y1 == 20)

{

printf("┴");

}

else

{