目录
三子棋小游戏介绍:
一个三子棋小游戏,有两种模式:①是玩家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';
}
总结和说明:
一、代码可以直接正常运行,但是你如果多次测试可以发现又一些问题:
①进入界面,输入字母,*,+等也可以退出。
②在输入坐标时,输入字母,*,+等直接爆了。
二、关于自己:
①第一次写博客,没什么经验,希望大佬多多提点自己的不足,有问题就有进步!
②还需要继续努力,路途漫漫长,加油!