7月14日学习记录
运行结果
代码展示:main.c
//include
#include <stdio.h>
#include<conio.h>
//#define
#define size_s 19//定义宽度,其值必须<=5
#define size_l 19//定义长度,其值必须<=5
int qizi_data[size_l * size_s];//定义棋盘保存位置数组
int* p=qizi_data;
int winer,player=1 ,x=size_s/2+1,y=size_l/2+1;//定义光标坐标变量
char c;
//画棋盘函数
void wuziqipan(void) {
int i,j,k;
for (k = 0; k < size_s+1; k++) {
if (k == 0)printf(" ");
else if(k<10)printf("%d ", k);
else printf("%d", k);
}
printf("\n");
for (i = 1; i <= size_l; i++) {
if(i<10)printf("%d ",i);
else printf("%d", i);
for (j = 1; j <= size_s; j++) {
if (j == x&& i == y) {
if (j != size_s) printf("*─");
else printf("*");
}
else if (*p!=0) {
if (j != size_s) {
if (*p == 1)printf("●─");
else if (*p == 2)printf("○─");
}
else {
if (*p == 1)printf("●");
else if(*p == 2)printf("○");
}
}
else if (i == 1) {
if (j==1) {
printf("┌─");
}
else if (j == size_s) {
printf("┐");
}
else printf("┬─");
}
else if (i == size_l) {
if (j == 1) {
printf("└─");
}
else if (j == size_s) {
printf("┘");
}
else printf("┴─");
}
else {
if (j == 1) {
printf("├─");
}
else if (j == size_s) {
printf("┤");
}
else printf("┼─");
}
*(p++);
}
printf("\n");
}
p = qizi_data;
}
//玩家轮换函数
void player_bw(void) {
if (player == 1)player = 2;
else if (player == 2)player = 1;
}
//下子函数
void xiazi(char c) {
int i, j;
if (c == 'w') {
if (y > 1)y--;//光标位置定义向上
else printf("上面的区域以后再来探索吧\n");
}
else if (c == 's') {
if (y < size_l)y++;//光标位置定义向下
else printf("下面的区域以后再来探索吧\n");
}
else if (c == 'a') {
if (x > 1)x--;//光标位置定义向左
else printf("左边的区域以后再来探索吧\n");
}
else if (c == 'd') {
if (x < size_s)x++;//光标位置定义向右
else printf("右边的区域以后再来探索吧\n");
}
else if (c == 'q')printf("下子\n");
else printf("无效输入\n");
printf("当前坐标为 %d,%d\n", x, y);
for (i = 1; i <= size_l; i++) {
for (j = 1; j <= size_s; j++) {
if (c == 'q') {
if (i == y && j == x) {
if (player == 1 && *p != 1 && *p != 2)
*p = 1;
else if (player == 2 && *p != 1 && *p != 2)
*p = 2;
else printf("该坐标已被占用!\n");
player_bw();//玩家轮换
}
*p++;
}
}
}
p = qizi_data;
}
//胜利判断函数
int win() {
int i, j,qixing[size_l][size_s];
for (i = 1; i <= size_l; i++) {
for (j = 1; j <= size_s; j++) {
qixing[i-1][j-1] = 0;
}
}
for (i = 1; i <= size_l; i++) {
for (j = 1; j <= size_s; j++) {
qixing[i - 1][j - 1] = *p;
*p++;
/*printf("%d", qixing[i][j]);*/
}
}
//竖直方向判定
for (i = 0; i < size_l-4; i++) {
for (j = 0; j < size_s; j++) {
if (qixing[i][j] ==1&&qixing[i + 1][j] ==1 &&qixing[i + 2][j] ==1 &&qixing[i + 3][j] ==1&&qixing[i + 4][j] == 1) {
printf("白子玩家胜利");
return 1;
}
else if (qixing[i][j] == 2 && qixing[i + 1][j] == 2 && qixing[i + 2][j] == 2 && qixing[i + 3][j] == 2 && qixing[i + 4][j] == 2) {
printf("黑子玩家胜利");
return 2;
}
}
}
//水平方向判定
for (i = 0; i < size_l; i++) {
for (j = 0; j < size_s-4; j++) {
if (qixing[i][j] ==1&& qixing[i][j + 1] == 1&&qixing[i][j + 2] == 1&&qixing[i][j + 3] ==1&&qixing[i][j + 4] == 1) {
printf("白子玩家胜利");
return 1;
}
else if (qixing[i][j] == 2 && qixing[i][j + 1] == 2 && qixing[i][j + 2] == 2 && qixing[i][j + 3] == 2 && qixing[i][j + 4] == 2) {
printf("黑子玩家胜利");
return 2;
}
}
}
//左斜方向判定(撇)
for (i = 4; i < size_l; i++) {
for (j = 0; j < size_s - 4; j++) {
if (qixing[i][j] == 1 && qixing[i + 1][j - 1] == 1 && qixing[i + 2][j - 2] == 1 && qixing[i + 3][j - 3] == 1 && qixing[i + 4][j - 4] == 1){
printf("白子玩家胜利");
return 1;
}
else if (qixing[i][j] == 2 && qixing[i + 1][j - 1] == 2 && qixing[i + 2][j - 2] == 2 && qixing[i + 3][j - 3] == 2 && qixing[i + 4][j - 4] == 2){
printf("黑子玩家胜利");
return 2;
}
}
}
//右斜方向判定(捺)
for (i = 0; i < size_l-4; i++) {
for (j = 0; j < size_s - 4; j++) {
if (qixing[i][j] == 1 && qixing[i + 1][j + 1] == 1 && qixing[i + 2][j + 2] == 1 && qixing[i + 3][j + 3] == 1 && qixing[i + 4][j + 4] == 1) {
printf("白子玩家胜利");
return 1;
}
else if (qixing[i][j] == 2 && qixing[i + 1][j + 1] == 2 && qixing[i + 2][j + 2] == 2 && qixing[i + 3][j + 3] == 2 && qixing[i + 4][j + 4] == 2) {
printf("黑子玩家胜利");
return 2;
}
}
}
//调试程序,显示棋盘数组
//for (i = 1; i <= size_l; i++) {
// for (j = 1; j <= size_s; j++) {
// printf("%d ", qixing[i-1][j-1]);
// }
// printf("\n");
//}
p = qizi_data;
}
//初始化棋盘数组,使其全部元素置零
void data_init(void) {
int i, j;
for (i = 1; i <= size_l; i++) {
for (j = 1; j <= size_s; j++) {
*p = 0;
*p++;
}
}
}
//main
void main(void) {
printf(" 游戏开始");
data_init();//初始化棋盘
//使用while循环实现无限循环
while (1) {
printf("五子棋游戏 按p结束游戏");
printf("\n");
printf("当前玩家为%d\n",player);
wuziqipan();//调用画棋盘函数
c = _getch();//键入函数,输入结果保存在变量c
if (c == 'p')break;//退出
xiazi(c);//调用下子函数
winer = win();//判定获胜条件
if (winer == 1 || winer == 2)break;
}
printf(" 游戏结束\n\n");
}