我的C++之旅---04

本文分享了一款使用C++编程语言实现的经典五子棋游戏源代码,支持双人对战,界面简洁,操作流畅。游戏采用标准的15x15棋盘,通过键盘方向键选择下棋位置,空格键落子。程序包含游戏初始化、运行、绘制棋盘、判断胜负等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的C++之旅—04

(原创)
gobang源代码

功能:

还原经典双人/五子棋/小游戏,两人对局,局数随意。

#define CHECKBOARDSIZE 15
#define _CRT_SECURE_NO_WARNINGS
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<cstdlib>
#include<iostream>
#include<Windows.h>
#include<mmsystem.h>
#include<graphics.h>
#pragma comment(lib, "winmm.lib")


using namespace std;


int g_checkboard[CHECKBOARDSIZE][CHECKBOARDSIZE];
int g_count;    //回合数
int g_x, g_y;       //标点的位置
int g_game;       //当前玩家  1.黑子 2.白子
char g_key;
int g_1, g_2;
HWND hwnd = NULL;



void init() {
	g_count = 0;
	memset(g_checkboard, 0, sizeof(g_checkboard));
	g_x = g_y = CHECKBOARDSIZE / 2;
	g_game = 1;
}

void RunGame() {
	g_key = _getch();
	switch (g_key)
	{
	case 32:
		if (g_checkboard[g_y][g_x] == 0) {
			if (g_game == 1) {
				g_checkboard[g_y][g_x] = 1;
				g_game = 2;
			}
			else {
				g_checkboard[g_y][g_x] = 2;
				g_game = 1;
			}
		}
		break;
	case 72:
		g_y--;
		if (g_y < 0) {
			g_y = CHECKBOARDSIZE - 1;
		}
		break;
	case 75:
		g_x--;
		if (g_x < 0) {
			g_x = CHECKBOARDSIZE - 1;
		}
		break;
	case 77:
		g_x++;
		if (g_x > CHECKBOARDSIZE) {
			g_x = 0;
		}
		break;
	case 80:
		g_y++;
		if (g_y > CHECKBOARDSIZE) {
			g_y = 0;
		}
		break;
	default:
		break;
	}
}

void DrawCheckboard() {
	system("cls");
	int i, j;
	for (i = 0;i < CHECKBOARDSIZE;i++) {
		for (j = 0;j < CHECKBOARDSIZE;j++) {
			if (g_checkboard[i][j] == 1) {
				printf("●");
			}
			else if (g_checkboard[i][j] == 2) {
				printf("○");
			}
			else if (i == g_y && j == g_x) {
				printf("╬ ");
			}
			else if (i == 0 && j == 0) {
				printf(" ┏ ");
			}
			else if (i == 0 && j == CHECKBOARDSIZE - 1) {
				printf("┓ ");
			}
			else if (j == 0 && i == CHECKBOARDSIZE - 1) {
				printf(" ┗ ");
			}
			else if (j == CHECKBOARDSIZE - 1 && i == CHECKBOARDSIZE - 1) {
				printf("┛ ");
			}
			else if (j == 0 && i < CHECKBOARDSIZE - 1 && i > 0) {
				printf(" ┣ ");
			}
			else if (i == 0 && j < CHECKBOARDSIZE - 1 && j > 0) {
				printf("┳ ");
			}
			else if (j == CHECKBOARDSIZE - 1 && i < CHECKBOARDSIZE - 1 && i > 0) {
				printf("┫");
			}
			else if (i == CHECKBOARDSIZE - 1 && j < CHECKBOARDSIZE - 1 && j > 0) {
				printf("┻ ");
			}
			else {
				printf("┼ ");
			}
		}
		printf("\n");
	}
}

int GameSuccess() {
	int i, j;
	for (i = 2;i < CHECKBOARDSIZE-2;i++) {
		for (j = 2;j < CHECKBOARDSIZE-2;j++) {
			if ((g_checkboard[i][j] == 1 && g_checkboard[i][j - 1] == 1 && g_checkboard[i][j - 2] == 1 && g_checkboard[i][j + 1] == 1 && g_checkboard[i][j + 2] == 1)
				|| (g_checkboard[i][j] == 1 && g_checkboard[i - 1][j] == 1 && g_checkboard[i - 2][j] == 1 && g_checkboard[i + 1][j] == 1 && g_checkboard[i + 2][j] == 1)
				|| (g_checkboard[i][j] == 1 && g_checkboard[i - 1][j - 1] == 1 && g_checkboard[i + 1][j + 1] == 1 && g_checkboard[i - 2][j - 2] == 1 && g_checkboard[i + 2][j + 2] == 1)
				|| (g_checkboard[i][j] == 1 && g_checkboard[i + 1][j - 1] == 1 && g_checkboard[i + 2][j - 2] == 1 && g_checkboard[i - 1][j + 1] == 1 && g_checkboard[i - 2][j + 2] == 1)) {
				return 1;
			}
			if ((g_checkboard[i][j] == 2 && g_checkboard[i][j - 1] == 2 && g_checkboard[i][j - 2] == 2 && g_checkboard[i][j + 1] == 2 && g_checkboard[i][j + 2] == 2)
				|| (g_checkboard[i][j] == 2 && g_checkboard[i - 1][j] == 2 && g_checkboard[i - 2][j] == 2 && g_checkboard[i + 1][j] == 2 && g_checkboard[i + 2][j] == 2)
				|| (g_checkboard[i][j] == 2 && g_checkboard[i - 1][j - 1] == 2 && g_checkboard[i + 1][j + 1] == 2 && g_checkboard[i - 2][j - 2] == 2 && g_checkboard[i + 2][j + 2] == 2)
				|| (g_checkboard[i][j] == 2 && g_checkboard[i + 1][j - 1] == 2 && g_checkboard[i + 2][j - 2] == 2 && g_checkboard[i - 1][j + 1] == 2 && g_checkboard[i - 2][j + 2] == 2)) {
				return 2;
			}
		}
	}
	return 0;
}

int main() {
	int e = 0;
	int o;
	//窗口标题
	SetConsoleTitle("五子棋");
	//设置窗口大小、颜色
	system("mode con cols=32 lines=18");
	system("color E0");
	//设置音乐
	mciSendString("open bkmusic.mp3 alias music", 0, 0, 0);
	mciSendString("play music repeat", 0, 0, 0);
	printf("请输入想玩多少局?");
	cin >> o;
	g_1 = g_2 = 0;
	while (e++ < o) {
		printf("第%d局游戏即将开始", e);
		Sleep(1500);
		system("cls");
		init();
		printf("初始化完成");
		Sleep(2000);
		DrawCheckboard();
		while (1) {
			if (_kbhit()) {
				RunGame();
				DrawCheckboard();
			}
			if (GameSuccess() == 1) {
				MessageBox(hwnd, "您完成了游戏!黑子获胜", "游戏结束", 0);
				g_1++;
				break;
			}
			else if (GameSuccess() == 2) {
				MessageBox(hwnd, "您完成了游戏!白子获胜", "游戏结束", 0);
				g_2++;
				break;
			}
		}
		printf("  黑子得分:%d;白字得分:%d。\n",g_1,g_2);
		Sleep(3000);
	}
	system("cls");
	if (g_1>g_2) {
		printf("黑子获胜!");
	}
	else if (g_1 < g_2) {
		printf("白字获胜!");
	}
	else {
		printf("平局!");
	}
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值