三子棋小游戏

目录

三子棋小游戏介绍:

玩法演示效果:

头文件代码部分:

主函数部分:

函数实现部分:

总结和说明:


三子棋小游戏介绍:

一个三子棋小游戏,有两种模式:①是玩家VS电脑 ②是玩家VS玩家

只需要输入两个数字 表示横,纵坐标即可下棋。

C/C++类型的,都是基本语句,简单粗暴,好上手,一起来玩丫!

代码可以直接复制粘贴可以直接跑!

建议阅读代码方式:先看头文件代码部分,再看主函数部分和函数实现部分结合着看!

玩法演示效果:

 

 

头文件代码部分:

#define ROW 3		//行
#define COL 3		//列

#pragma once
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
void menu();		//打印界面
void InitBoard(char board[ROW][COL],int  row, int col);			//初始化棋盘状态
void DisplayBoard(char board[ROW][COL], int  row, int col);		//打印棋盘
void PlayerMove(char board[ROW][COL], int  row, int col);		//玩家移动
void PlayerMove1(char board[ROW][COL], int  row, int col);		//①号玩家移动
void PlayerMove2(char board[ROW][COL], int  row, int col);		//②号玩家移动
void ComputerMover(char board[ROW][COL], int  row, int col);	//电脑移动
int IsFull(char board[ROW][COL], int row, int col);				//判断棋盘是否为空
char IsWin(char board[ROW][COL], int  row, int col);			//判断是否胜利

主函数部分:

#include "game.h"

/*玩家VS电脑*/
void game1() {
	char end=0;
	char board[ROW][COL] = { 0 };
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);
	while (1) {
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		end = IsWin(board, ROW, COL);
		if (end != 'C') {
			break;
		}
		ComputerMover(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		end = IsWin(board, ROW, COL);
		if (end != 'C') {
			break;
		}
	}
	if (end == '*')
		cout << "玩家赢!" << endl;
	else if (end == '#')
		cout << "电脑赢!" << endl;
	else
		cout << "平局!" << endl;
}

/*玩家VS玩家*/
void game2() {
	cout << "①号玩家用:*" << endl;
	cout << "②号玩家用:#" << endl;
	char end = 0;
	char board[ROW][COL] = { 0 };
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);
	while (1) {
		PlayerMove1(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		end = IsWin(board, ROW, COL);
		if (end != 'C') {
			break;
		}
		PlayerMove2(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		end = IsWin(board, ROW, COL);
		if (end != 'C') {
			break;
		}
	}
	if (end == '*')
		cout << "玩家①赢!" << endl;
	else if (end == '#')
		cout << "玩家②赢!" << endl;
	else
		cout << "平局!" << endl;
}

void test() {
	int input = -1;
	srand((unsigned int)time(NULL));
	do {
		menu();
		cout << "请选择:>" << endl;
		cin >> input;
		switch (input)
		{
		case 1:
			game1();
			break;
		case 2:
			game2();
			break;
		case 0:
			cout << "退出游戏!" << endl;
			break;
		default:
			cout << "选择错误,请重新选择!" << endl;
			break;
		}
	} while (input);
}


int main() {
	test();
	return 0;
}

函数实现部分:

#include"game.h"

/*打印界面*/
void menu() {
	cout << "*****************************" << endl;
	cout << "********1.玩家VS电脑*********" << endl;
	cout << "********2.玩家VS玩家*********" << endl;
	cout << "********0. 退出游戏  ********" << endl;
	cout << "*****************************" << endl;
}

/*初始化棋盘状态*/
void InitBoard(char board[ROW][COL], int  row, int col) {
	for (int i = 0; i < row; ++i) {
		for (int j = 0; j < col; ++j) {
			board[i][j] = ' ';
		}
	}
}

/*打印棋盘*/
void DisplayBoard(char board[ROW][COL], int  row, int col) {
	for (int i = 0; i < row; ++i) {
		for (int j = 0; j < col; ++j) {
			cout << " " << board[i][j];
			if (j < col - 1) cout << " |";
		}
		cout << endl;
		if (i < col-1) {
			for (int j = 0; j < col; ++j) {
				cout << "---";
				if (j < col - 1)cout << "|";
			}
			cout << endl;
		}
	}
	
}

/*玩家移动*/
void PlayerMove(char board[ROW][COL], int  row, int col) {
	int x = 0, y = 0;
	cout << "玩家走:" << endl;
	while (1) {
		cout << "请输入要下的坐标:";
		cin >> x >> y;
		if (x >= 1 && x <= row && y >= 1 && y <= col) {
			if (board[x - 1][y - 1] == ' ') {
				board[x - 1][y - 1] = '*';
				break;
			}
			else {
				cout << "该坐标被占用,请重新输入!" << endl;
			}
		}
		else {
			cout << "非法输入,请重新出入!" << endl;
		}
	}
}

/*①号玩家移动*/
void PlayerMove1(char board[ROW][COL], int  row, int col) {
	int x = 0, y = 0;
	cout << "①玩家走:" << endl;
	while (1) {
		cout << "请输入要下的坐标:";
		cin >> x >> y;
		if (x >= 1 && x <= row && y >= 1 && y <= col) {
			if (board[x - 1][y - 1] == ' ') {
				board[x - 1][y - 1] = '*';
				break;
			}
			else {
				cout << "该坐标被占用,请重新输入!" << endl;
			}
		}
		else {
			cout << "非法输入,请重新出入!" << endl;
		}
	}
}

/*②号玩家移动*/
void PlayerMove2(char board[ROW][COL], int  row, int col) {
	int x = 0, y = 0;
	cout << "②玩家走:" << endl;
	while (1) {
		cout << "请输入要下的坐标:";
		cin >> x >> y;
		if (x >= 1 && x <= row && y >= 1 && y <= col) {
			if (board[x - 1][y - 1] == ' ') {
				board[x - 1][y - 1] = '#';
				break;
			}
			else {
				cout << "该坐标被占用,请重新输入!" << endl;
			}
		}
		else {
			cout << "非法输入,请重新出入!" << endl;
		}
	}
}

/*电脑移动*/
void ComputerMover(char board[ROW][COL], int  row, int col) {
	int x = 0, y = 0;
	cout << "电脑走:" << endl;;
	while (1) {
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ') {
			board[x][y] = '#';
			break;
		}
	}
}

/*判断棋盘是否为空*/
int IsFull(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;
}

/*判断是否胜利*/
char IsWin(char board[ROW][COL], int  row, int col) {
	int i = 0;
	for (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 (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
			return board[1][i];
	}

	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
		return board[1][1];

	if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')
		return board[1][1];

	if (1 == IsFull(board, ROW, COL)) return 'Q';
	return 'C';
}


总结和说明:

        一、代码可以直接正常运行,但是你如果多次测试可以发现又一些问题:

                 ①进入界面,输入字母,*,+等也可以退出。

                 ②在输入坐标时,输入字母,*,+等直接爆了。

        二、关于自己:

                 ①第一次写博客,没什么经验,希望大佬多多提点自己的不足,有问题就有进步!

                ②还需要继续努力,路途漫漫长,加油!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值