三子棋游戏之C语言

游戏菜单栏,
选择1;
进入游戏;
玩家下棋:
输入坐标:
电脑自动完成下棋;
玩家继续;
在这里插入图片描述
输入错误的坐标,提示棋子存在或输入坐标错误;
完成三子连珠,结束游戏;
返回菜单栏;

C语言实现代码:
源文件:

#include "game.h"


void Menu()
{
	printf("############################\n");
	printf("## 1.Play          2.Exit ##\n");
	printf("############################\n");
	printf("Plese Enter#");
}

void DrawBoard(char board[][COL], int row, int col)
{
	printf("  1 |  2 | 3\n");
	printf("--------------\n");
	for (int i = 0; i < row; i++){
		printf("%d|", i + 1);
		for (int j = 0; j < col; j++){
			printf(" %c |",board[i][j]);

		}
		printf("\n--------------\n");
		
	}
}

void PlayMove(char board[][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1){
		printf("Please Enter Your Pos#");
		scanf("%d %d", &x, &y);

		if (x<1 || x>3 || y<1 || y>3){
			printf("Pos Error\n");
			continue;
		}
		if (board[x - 1][y - 1] != ' '){
			printf("Chress Exist!\n");
			continue;
		}
		board[x - 1][y - 1] = P_COLOR;
		return;
	}
}


char Judge(char board[][COL], int row, int col)
{
	for (int i = 0; i < row; i++){
		if (board[i][0] == board[i][1] && \
			board[i][1] == board[i][2] && \
			board[i][0] != ' '){
			return board[i][0];
		}
	}
	for (int i = 0; i < col; i++){
		if (board[0][i] == board[1][i] && \
			board[1][i] == board[2][i] && \
			board[0][i] != ' '){
			return board[0][i];
		}
	}
	if (board[0][0] == board[1][1] && \
		board[1][1] == board[2][2] && \
		board[0][0] != ' '){
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && \
		board[1][1] == board[2][0] && \
		board[0][2] != ' '){
		return board[0][2];
	}
	for (int i = 0; i < row; i++){
		for (int j = 0; j < col; j++){
			if (board[i][j] == ' '){
				return 'N';
			}
		}
	}
	return 'P';
}




void ComputerMove(char board[][COL], int row, int col)
{
	
	while (1){
		int x = rand() % row;
		int y = rand() % col;
		if (board[x][y] == ' '){
			board[x][y] = C_COLOR;
			break;
		}
	}
}



void Game()
{
	srand((unsigned long)time(NULL));
	char board[ROW][COL];
	memset(board, ' ', sizeof(board));
	char win = '\0';
	do{
		DrawBoard(board,ROW,COL);
		PlayMove(board, ROW, COL);
		win = Judge(board, ROW, COL);
		if (win != 'N'){
			break;
		}
		ComputerMove(board, ROW, COL);
		win=Judge(board, ROW, COL);
		if (win != 'N'){
			break;
		}
	} while (1);
	switch (win){
	case P_COLOR:
		printf("you win!\n");
			break;
	case C_COLOR:
		printf("you lose!\n");
			break;
	case 'P':
		printf("pingju\n");
		break;
	default:
		break;
	}
	DrawBoard(board, ROW, COL);
}

主函数:

#include "game.h"



int main()
{
	int quit = 0;
	while (!quit){
		Menu();
		int select = 0;
		scanf("%d", &select);
		switch (select)
		{
		case 1:
			Game();
			break;
		case 2:
			printf("quit!\n");
			quit = 1;
			break;
		default:
			printf("Enter Error!Try Again!\n");
			break;
		}
	}
	printf("ByeBye!\n");
	system("pause");
	return 0;
}

头文件:

#ifndef _GAME_H_
#define _GAME_H_

#include <stdio.h>
#include <time.h>
#include <windows.h>

#define ROW 3
#define COL 3
#define P_COLOR 'X'
#define C_COLOR 'O'


#pragma warning(disable:4996)

void Menu();
void Game();




#endif // !_TEXT_H_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值