C语言---day05-五子棋项目开发

五子棋

开发工具:VS2012 头文件:

第一步:画出棋盘。

第二步:黑白双方落子

第三步:判断是不是已经五子连接
#include 
#include 
#include 
#include

void initBoard();//棋盘的初始化 void printBoard();//棋盘的打印 void startGame();//开始游戏

void whitePlayer();//白色 void blackPlayer();//黑色

int checkWin(int x, int y);//检测游戏胜负 //判断水平方向-----左边

while (temp == board[x][y - i] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

//判断水平方向---右边
i = 1;
while (temp == board[x][y + i] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

//判断垂直方向----上方
i = 1;
count = 1;
while (temp == board[x - i][y] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

//判断垂直方向----下方
i = 1;
while (temp == board[x + i][y] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

//判断斜着的左上方----上方 i = 1;
j = 1;
count = 1;

while (temp == board[x - i][y - j] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

//判断斜着的左上方----下方
i = 1;
j = 1;
while (temp == board[x + i][y + j] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

//判断斜着的右上方----上方 i = 1;
j = 1;
count = 1;

while (temp == board[x - i][y + j] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

//判断斜着的----右下方
i = 1;
j = 1;
while (temp == board[x + i][y - j] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

第四步:优化

int displayWhoWin();//显示谁赢了 第五步:由一个转变为多文件编程---extern

#include  #include  #include  #include 

///////////////全局变量///////////////////////

char board[20][20];
int x, y;//代表是棋盘的行x和列y一个交点

///////////////函数的声明/////////////////////// void initBoard();//棋盘的初始化
void printBoard();//棋盘的打印
void Pos(int x, int y);//设置光标的位置

void printNum();//设置打印的棋盘数字 void whitePlayer();//白色

void blackPlayer();//黑色

int displayWhoWin();//显示谁赢了
void startGame();//开始游戏
int checkWin(int x, int y);//检测游戏胜负

///////////////函数的使用/////////////////////// //设置光标的位置-----了解
void Pos(int x, int y)
{

COORD pos;
HANDLE hOutput;//句柄
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOutput, pos);

}

//设置打印的棋盘数字 void printNum()
{

int i;
Pos(2, 0);
for (i = 0; i < 20; i++) {

printf("%2d", i); }

for (i = 0; i < 20; i++) {

Pos(0, 1 + i);

printf("%2d", i); }

}

//棋盘的初始化 void initBoard() {

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

for(j=0;j <20;j++) {

} }

}

//棋盘的打印
void printBoard() {

int i, j; printNum();//打印 for (i = 0; i < 20; {

} }

board[i][j]

= '*';

i++)

//printf("\n");
Pos(2, 1+i);
for(j=0;j <20;j++) {

printf(" %c", board[i][j]); }

int displayWhoWin() {

int overRev = 0;// 1代表结束 int rev;//用来接收到底是谁赢了

rev = checkWin(x, y); if (rev == 1)
{

overRev = 1; system("cls");//清屏 printBoard();//打印棋盘 printf("\n白色赢了!!\n"); system("pause");

}
if (rev == 2) {

overRev = 1; system("cls"); printBoard(); printf("\n黑色赢了!\n"); system("pause");

}

return overRev; }

//白色
void whitePlayer() {

printf("\n请落白色棋子,输入行,列坐标:"); scanf_s("%d%d",&x, &y);
/*
board[x][y] = 'W';

printBoard();

system("cls");
*/ //做判断,解决的问题:1.不能一个位置上重复落子; //2.下子不能超出棋盘范围
while (1)
{

if (board[x][y] == '*') {

board[x][y] = 'W';

break; }else

{
printf("您落子错误\n"); printf("\n请落白色棋子,输入行,列坐标:"); scanf_s("%d%d", &x, &y);

} }

printBoard(); }

//黑色
void blackPlayer() {

printBoard(); printf("\n请落黑色棋子,输入行,列坐标:"); scanf_s("%d%d",&x, &y);
/*
board[x][y] = 'B';
printBoard();

system("cls");*/ while (1)
{

if (board[x][y] == '*') {

board[x][y] = 'B';

break; }else

{
printf("您落子错误\n"); printf("\n请落黑色棋子,输入行,列坐标:");

}

scanf_s("%d%d", &x, &y); }

printBoard(); }

//检测游戏胜负

int checkWin(int x, int y) {

char temp;//保存黑色或者白色的棋子 ‘W’, ‘B’ int count = 1;//统计个数
int i = 1;//走一个格子
int j = 1;

int whoWin = 0;//白赢 1 temp = board[x][y];

黑赢 2

//判断水平方向-----左边
while (temp == board[x][y - i] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5) {

i++;
count++;
if (count == 5)//必须是连接了5个棋子的时候 {

if (temp == 'W') {

//白色赢了
whoWin = 1; //printf("12312312"); //system("pause");

}else {

} }

}

} }

}

whoWin = 2;
// //printf("黑色赢了");

//判断水平方向---右边
i = 1;
while (temp == board[x][y + i] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5) {

i++;
count++;
if (count == 5)//必须是连接了5个棋子的时候 {

if (temp == 'W') {

//白色赢了
whoWin = 1; printf("12312312"); system("pause");

}else {

whoWin = 2;
// //printf("黑色赢了");

//判断垂直方向----上方
i = 1;
count = 1;
while (temp == board[x - i][y] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5) {

i++;
count++;
if (count == 5)//必须是连接了5个棋子的时候 {

if (temp == 'W') {

//白色赢了
whoWin = 1; //printf("12312312"); //system("pause");

}else {

whoWin = 2;
// //printf("黑色赢了");

} }

}
//判断垂直方向----下方
i = 1;
while (temp == board[x + i][y] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5)

{
i++;

count++;
if (count == 5)//必须是连接了5个棋子的时候 {

if (temp == 'W') {

//白色赢了
whoWin = 1; //printf("12312312"); //system("pause");

}else {

} }

}

whoWin = 2;
// //printf("黑色赢了");

//判断斜着的左上----上方 i = 1;
j = 1;
count = 1;

while (temp == board[x - i][y - j] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5) {

i++;
count++;
if (count == 5)//必须是连接了5个棋子的时候 {

if (temp == 'W') {

//白色赢了
whoWin = 1; //printf("12312312"); //system("pause");

}else {

whoWin = 2;
// //printf("黑色赢了");

} }

}
//判断斜着的左上的----下方
i = 1;
j = 1;
while (temp == board[x + i][y + j] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5) {

i++;
count++;
if (count == 5)//必须是连接了5个棋子的时候 {

if (temp == 'W') {

//白色赢了
whoWin = 1; //printf("12312312"); //system("pause");

}else {

whoWin = 2;
// //printf("黑色赢了");

} }

}
//判断斜着的右上----右上方
i = 1;
j = 1;
count = 1;
while (temp == board[x - i][y + j] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5) {

i++;
count++;
if (count == 5)//必须是连接了5个棋子的时候 {

if (temp == 'W') {

//白色赢了

whoWin = 1; //printf("12312312"); //system("pause");

}else {

whoWin = 2;
// //printf("黑色赢了");

} }

}
//判断斜着的----右下方
i = 1;
j = 1;
while (temp == board[x + i][y - j] && x >= 0 && x <= 20 && y >= 0 && y <= 20 && count < 5) {

i++;
count++;
if (count == 5)//必须是连接了5个棋子的时候 {

if (temp == 'W') {

//白色赢了
whoWin = 1; //printf("12312312"); //system("pause");

}else {

} }

}

whoWin = 2;
// //printf("黑色赢了");

return whoWin; }

void startGame() {

initBoard(); printBoard();

while (1) {

whitePlayer();
if (displayWhoWin() == 1) {

break; }

system("cls");//不重复

blackPlayer();
if (displayWhoWin() == 1) {

break; }

system("cls"); printBoard(); /*
int temp;//1 2

temp = checkWin(x, y); //printf("temp = %d", temp); if (temp == 1)
{

printf("白色赢了6666666666666");

system("pause"); }

*/ }

}

int main() {

startGame();

return 0; }

 

你可能感兴趣的:(C语言)