1.由于开发时间超出预期所以懒得实现平局判断功能
2.目前没有想到好方法使得电脑更加聪明
#define _CRT_SECURE_NO_WARNINGS
//这是一个五子棋游戏
// 制作用时 6h
//还没有实现平局判断功能,不过我认为应该很难遇到平局的情况
#include "game.h"
int main() {
int input;
srand((unsigned int)time(NULL));
char board[ROW][COL];
//initialize array
initialize(board, ROW, COL);
printf("作者的话:还没有实现平局判断功能,不过我认为应该很难遇到平局的情况\n");
printf("目前电脑下棋是随机的,还没有想到好方法使电脑智能、 ");
do
{
//打印游戏界面
menu();
printf("please input your choice:");
scanf("%d", &input);
switch (input)
{
case 1:game(board,ROW,COL);//enter game function
break;
case 0:printf("\nnice to see you again!\n");
break;
default:printf("wrong input!please input again\n");
break;
}
} while (input);
}
以上是测试代码
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void initialize(char board[ROW][COL], int row, int col) {//initialize array
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
board[i][j] = ' ';
}
}
}
void menu() {//打印游戏界面函数
printf("----------------------------\n");
printf("| welcome the game ! |\n");
printf("| 1.start 0.exit |\n");
printf("----------------------------\n");
}
void game(char board[ROW][COL], int row, int col) {//game process function
//1.print board of chess of function
print_board(board, row, col);
//2.start play chess
while (1) {
player_move(board, row, col);
//3.print present board
print_board(board, row, col);
//4.judge winner
//judge return
if (is_Win(board, row, col) != 'C') {
break;
}
//5.computer play chess
computer_move(board, row, col);
//6.print present board
print_board(board, row, col);
}
}
void print_board(char board[ROW][COL], int row, int col) {//print board of chess of function
for (int i = 0; i < col; i++) {
if (i == 0)printf("|");
printf("---|");
}
printf("\n");
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (j == 0)printf("|");
printf(" %c ",board[i][j]);
printf("|");
}
printf("\n");
for (int j = 0; j < col; j++) {
if (j == 0)printf("|");
printf("---|");
}
printf("\n");
}
printf("$$$$$$$$$$$$$\n");
}
void player_move(char board[ROW][COL], int row, int col) {
int x;
int y;
printf("please select a coordinate where you want chess:");
scanf("%d %d", &x, &y);
while (1) {
if (board[x - 1][y - 1] == ' ') {
board[x - 1][y - 1] = '*';
break;
}
else printf("This position is taken , please select another:");
}
}
void computer_move(char board[ROW][COL], int row, int col) {
int x, y;
while (1) {
x = rand() % ROW;
y = rand() % ROW;
if (board[x][y] == ' ') {
board[x][y] = '#';
break;
}
else continue;
}
}
char is_Win(char board[ROW][COL], int row, int col) {
//judge row
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (board[i][j] != ' ') {
for (int n = 0; n < FIVE - 1; n++) {
if ((board[i][j + n] == board[i][j + 1 + n])&& board[i][j + n] != ' ') {
if (n == FIVE - 2) {
if (board[i][j + n] == '*') {
printf("player is winner!\n");
return 'A';
}
else {
printf("computer is winner!\n");
return 'B';
}
}
}
else break;
}
}
else continue;
}
}
//judge col
for (int i = 0; i < col; i++) {
for (int j = 0; j < col; j++) {
if (board[j][i] != ' ') {//找到一颗棋子
for (int n = 0; n < FIVE - 1; n++) {//通过循环看他与他后面的字符是否相等
if ((board[j + n][i] == board[j + 1 + n][i])&& board[j + n][i] != ' ') {
if (n == FIVE - 2) {//判断函数是否完整执行,如果完整执行那么说明有优胜者
if (board[j + n][i] == '*') {
printf("player is winner!");
return 'A';
}
else {
printf("computer is winner!\n");
return 'B';
}
}
}
else break;
}
}
else continue;
}
}
//judge diagonal left
for (int i = 0; i < 6; i++) {//i 为行,由于第六行已经没有五连对角,所以只考虑前面的
for (int j = 4; j < 10; j++) {
for (int n = 0; n < FIVE - 1; n++) {
if ((board[i + n][j - n] == board[i + 1 + n][j - 1 - n]) && board[i + n][j - n] != ' ') {//用n来递推相等关系
if (n == FIVE - 2) {
if (board[i + n][j - n] == '*') {
printf("player is winner!\n");
return 'A';
}
else {
printf("computer is winner!\n");
return 'B';
}
}
}
else break;
}
}
}
//judge diagonal right
for (int i = 0; i < 6; i++) {//i 为行,由于第六行已经没有五连对角,所以只考虑前面的
for (int j = 5; j >= 0; j--) {
for (int n = 0; n < FIVE - 1; n++) {
if ( (board[i + n][j + n] == board[i + 1 + n][j + 1 + n]) && board[i + n][j + n] != ' ') {//用n来递推相等关系
if (n == FIVE - 2) {
if (board[i + n][j + n] == '*') {
printf("player is winner!\n");
return 'A';
}
else {
printf("computer is winner!\n");
return 'B';
}
}
}
else break;
}
}
}
return 'C';
}
以上是函数定义
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 10
#define COL 10
#define FIVE 5
void initialize(char board[ROW][COL], int row, int col);//initialize array function
void menu();//打印游戏界面
void game(char board[ROW][COL],int row,int col);//游戏进行函数
void print_board(char board[ROW][COL], int row, int col);
void player_move(char board[ROW][COL], int row, int col);
void computer_move(char board[ROW][COL], int row, int col);
char is_Win(char board[ROW][COL], int row, int col);//judge winner
//if player is winner ,return A
以上是头文件