#include "game.h"
void menu()
{
printf("##################################################\n");
printf("###### 1.PLAY #######\n");
printf("###### 0.EXIT #######\n");
printf("###### PLEASE SELECT : #######\n");
void menu()
{
printf("##################################################\n");
printf("###### 1.PLAY #######\n");
printf("###### 0.EXIT #######\n");
printf("###### PLEASE SELECT : #######\n");
}
void game()
{
char board[ROW][COL] = { 0 };
chushiqipan(board, ROW, COL);//初始化棋盘
displayboard(board, ROW, COL);//显示棋盘
while (1)
{
moveboard(board, ROW, COL);//玩家走
displayboard(board, ROW, COL);//显示棋盘
if (Iswin(board, ROW, COL) == 'X')
{
printf("玩家赢\n");
break;
}
if (IFull(board, ROW, COL) == 1)
{
printf("平局\n");
break;
}
dianmoveboard(board, ROW, COL);//电脑走
displayboard(board, ROW, COL);//显示棋盘
if (Iswin(board, ROW, COL) == '0')
{
printf("电脑赢\n");
break;
}
if (IFull(board, ROW, COL) == 1)
{
printf("平局\n");
break;
}
void game()
{
char board[ROW][COL] = { 0 };
chushiqipan(board, ROW, COL);//初始化棋盘
displayboard(board, ROW, COL);//显示棋盘
while (1)
{
moveboard(board, ROW, COL);//玩家走
displayboard(board, ROW, COL);//显示棋盘
if (Iswin(board, ROW, COL) == 'X')
{
printf("玩家赢\n");
break;
}
if (IFull(board, ROW, COL) == 1)
{
printf("平局\n");
break;
}
dianmoveboard(board, ROW, COL);//电脑走
displayboard(board, ROW, COL);//显示棋盘
if (Iswin(board, ROW, COL) == '0')
{
printf("电脑赢\n");
break;
}
if (IFull(board, ROW, COL) == 1)
{
printf("平局\n");
break;
}
}
}
int main()
{
int select = 0;
do {
menu();
printf("请输入>:");
scanf("%d", &select);
switch (select)
{
case 1:
game();
break;
case 0:
exit(0);
break;
default:
printf("输入错误,请重新输入>:");
break;
}
}
int main()
{
int select = 0;
do {
menu();
printf("请输入>:");
scanf("%d", &select);
switch (select)
{
case 1:
game();
break;
case 0:
exit(0);
break;
default:
printf("输入错误,请重新输入>:");
break;
}
} while (select);
system("pause");
return 0;
}
test.c//游戏的主函数
system("pause");
return 0;
}
test.c//游戏的主函数
#include"game.h"
void chushiqipan(char board[ROW][COL], int row, int col)//初始化棋盘
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
void displayboard(char board[ROW][COL], int row, int col)//显示棋盘
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
if (i < row - 1)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
}
}
}
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
void displayboard(char board[ROW][COL], int row, int col)//显示棋盘
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
if (i < row - 1)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
}
}
}
void moveboard(char board[ROW][COL], int row, int col)//玩家走
{
int i = 0;
int j = 0;
while (1)
{
printf("玩家走;请输入坐标:");
scanf("%d %d", &i, &j);
if (((i >= 1) && (i <= row + 1)) && ((j >= 1) && (j <= col + 1)))
{
if (board[i-1][j-1] == ' ')
{
board[i-1][j-1] = 'X';
break;
}
else
{
printf("地方已下过");
}
}
else
{
printf("输出过界");
}
}
}
{
int i = 0;
int j = 0;
while (1)
{
printf("玩家走;请输入坐标:");
scanf("%d %d", &i, &j);
if (((i >= 1) && (i <= row + 1)) && ((j >= 1) && (j <= col + 1)))
{
if (board[i-1][j-1] == ' ')
{
board[i-1][j-1] = 'X';
break;
}
else
{
printf("地方已下过");
}
}
else
{
printf("输出过界");
}
}
}
void dianmoveboard(char board[ROW][COL], int row, int col)//电脑走
{
srand((unsigned int)time(NULL));
do
{
int i = 0;
int j = 0;
i = rand() % row;
j = rand() % col;
if (board[i][j] == ' ')
{
board[i][j] = '0';
break;
}
} while (1);
}
{
srand((unsigned int)time(NULL));
do
{
int i = 0;
int j = 0;
i = rand() % row;
j = rand() % col;
if (board[i][j] == ' ')
{
board[i][j] = '0';
break;
}
} while (1);
}
char Iswin(char board[ROW][COL], int row, int col)//判断输赢
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)//判断横
{
int sum = 1;
for (j = 0; j < col - num + 1; j++)
{
if ((board[i][j] == board[i][j + 1]) && (board[i][j] == ' '))
{
sum++;
if (sum == num)
{
return board[i][j];
}
}
}
}
for (j = 0; j < col; j++)//判断竖
{
int sum = 1;
for (i = 0; i < col - num + 1; i++)
{
if ((board[i][j] == board[i + 1][j]) && (board[i][j] == ' '))
{
sum++;
if (sum == num)
{
return board[i][j];
}
}
}
}
for (i = 0; i <= row - num; i++)
{
int count = 0;
int n = i;
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)//判断横
{
int sum = 1;
for (j = 0; j < col - num + 1; j++)
{
if ((board[i][j] == board[i][j + 1]) && (board[i][j] == ' '))
{
sum++;
if (sum == num)
{
return board[i][j];
}
}
}
}
for (j = 0; j < col; j++)//判断竖
{
int sum = 1;
for (i = 0; i < col - num + 1; i++)
{
if ((board[i][j] == board[i + 1][j]) && (board[i][j] == ' '))
{
sum++;
if (sum == num)
{
return board[i][j];
}
}
}
}
for (i = 0; i <= row - num; i++)
{
int count = 0;
int n = i;
for (j = 0; j <= col - num + 1; j++)//判段斜
{
for (int t = j; t <= col - num + 1; t++)
{
if (board[n][t] == board[n + 1][t + 1] && board[n][t] != ' ')
{
n++;
count++;
if (count == num - 1)
{
return board[n - 1][t];
}
}
}
}
}
{
for (int t = j; t <= col - num + 1; t++)
{
if (board[n][t] == board[n + 1][t + 1] && board[n][t] != ' ')
{
n++;
count++;
if (count == num - 1)
{
return board[n - 1][t];
}
}
}
}
}
}
int IFull(char board[ROW][COL], int row, int col)判断满盘
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
game.c/游戏所需要函数的实现
#ifndef _GAME_H_
#define _GAME_H_
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define ROW 3 //控制行数
#define COL 3 //控制列数
#define num 3//判断是几子棋
void game();
void chushiqipan(char board[ROW][COL], int row, int col);//初始化棋盘
void displayboard(char board[ROW][COL], int row, int col);//显示棋盘
void moveboard(char board[ROW][COL], int row, int col);//玩家走
void dianmoveboard(char board[ROW][COL], int row, int col);//电脑走
char Iswin(char board[ROW][COL], int row, int col);//判断输赢
int IFull(char board[ROW][COL], int row, int col);//判断满盘
#endif
//game.游戏所需要的头文件以及函数的声明,控制棋盘的大小以及几子棋
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define ROW 3 //控制行数
#define COL 3 //控制列数
#define num 3//判断是几子棋
void game();
void chushiqipan(char board[ROW][COL], int row, int col);//初始化棋盘
void displayboard(char board[ROW][COL], int row, int col);//显示棋盘
void moveboard(char board[ROW][COL], int row, int col);//玩家走
void dianmoveboard(char board[ROW][COL], int row, int col);//电脑走
char Iswin(char board[ROW][COL], int row, int col);//判断输赢
int IFull(char board[ROW][COL], int row, int col);//判断满盘
#endif
//game.游戏所需要的头文件以及函数的声明,控制棋盘的大小以及几子棋
这段代码的优点就是可以多子棋大小棋盘的切换比较简单,缺点电脑下的比较无厘头,主要是没咋仔细研究五子棋的必胜走法。如果有兴趣的化可以去研究一下五子棋的走法,在电脑走的那个函数实习里优化一下。(没办法提交两次在c++,都给我把代码缩在一团只能用这种方法)