初学者耗时6h打造的五子棋

 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

以上是头文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值