五子棋代码C语言实现

本文分享了一款使用C语言编写的五子棋小游戏,包括人人对战、人机对战、悔棋和音乐开关功能。代码实现中,特别强调了悔棋功能只能悔一步,确保游戏规则的正确性。此外,还展示了游戏的不同界面截图。
摘要由CSDN通过智能技术生成

五子棋代码C语言实现(数据结构实训)

这是我大一时候组队合作写的五子棋小游戏代码,实现了人人对战,人机对战,悔棋(该功能真正做到不可多步悔棋,每次只能悔棋一步),音乐开关功能,当看到界面实现的那一刻,我掉落的头发都是值得的!!!下面贴上源代码(顺便附上我的美工之后的界面图嘻嘻嘻)

实现界面如下:

主界面
在这里插入图片描述

游戏说明界面

在这里插入图片描述
五子棋界面

在这里插入图片描述

人机对战

在这里插入图片描述
悔棋功能

在这里插入图片描述

代码如下:

#include<graphics.h>//图形库头文件

#include<math.h>

#include<mmsystem.h>//倒入声音头文件

#pragma comment(lib,"winmm.lib")//播放音乐库头文件

#include<windows.h>;

int flag = 0;//表示下棋次数

int board[15][15] = {
    0 };//初始化棋盘的状态

int score[15][15] = {
    0 };//初始化棋盘的分数

int rrhuiqi[2];

int rjhuiqi[2][2];

int judge(int a, int b);

void Chess_ai_naive(int& x, int& y);//电脑获取最优解位置

void evaluate_naive();

void youxishuoming();

void manvsmanplayChess();

void manvsaiplayChess();

void ChessBorad();
//游戏大厅设计

void initGame()

{
   
	
	HWND hWnd = GetHWnd();//获取窗口句柄,即窗口的唯一标识符
	SetWindowText(hWnd, "五子棋游戏");//改变窗口标题
	IMAGE backgrand;//创建一个图像对象
	loadimage(&backgrand, "背景1.jpg", 700, 700);//装载光标,图标,位图,此为装载游戏大厅背景图
	putimage(0, 0, &backgrand);//在屏幕上输出一个位图
	MOUSEMSG m;		// 定义鼠标消息 

	while (true)
	{
   
		// 获取一条鼠标消息
		m = GetMouseMsg();

		//避免黑屏
		//putimage(0, 0, &backgrand);

		switch (m.uMsg)
		{
   
		case WM_LBUTTONDOWN:     //当在“客户区”按下鼠标的消息
			if (m.x >= 250 && m.x <= 450 && m.y >= 270 && m.y <= 340)  //玩家对战区域		
			{
   
				ChessBorad();   //棋盘界面初始化
				manvsmanplayChess();//人人对战
			}
			if (m.x >= 250 && m.x <= 450 && m.y >= 370 && m.y <= 440)  //人机对战区域	
			{
   
				ChessBorad();
				manvsaiplayChess();//人机对战
			}
			if (m.x >= 430 && m.x <= 620 && m.y >= 520 && m.y <= 575)  //音乐开区域		
			{
   
				mciSendString("open 音乐.mp3", 0, 0, 0);//设置背景音乐  多媒体控制接口
				mciSendString("play  音乐.mp3", 0, 0, 0);
			}
			if (m.x >= 430 && m.x <= 620 && m.y >= 590 && m.y <=650)  //音乐关区域		
			{
   
				mciSendString("pause 音乐.mp3", NULL, 0, NULL);
			}
			if (m.x >= 150 && m.x <= 350 && m.y >= 520 && m.y <= 580) {
   //游戏说明
				youxishuoming();
			}
			if (m.x >= 150 && m.x <= 350 && m.y >= 600 && m.y <= 700) {
   //退出游戏
				exit(0);
			}

		}

	}
}
//游戏说明函数

void youxishuoming() {
   
	IMAGE h2;
	
	loadimage(&h2, "背景3.jpg", 700, 700);
	
	putimage(0, 0, &h2);
	
	MOUSEMSG mg;
	
	while (true) {
   
		mg = GetMouseMsg();
		//避免黑屏
		putimage(0, 0, &h2);

		switch (mg.uMsg)
		{
   
		case WM_LBUTTONDOWN:     
			if (mg.x >= 400 && mg.x <= 660 && mg.y >= 450 && mg.y <= 600)//返回大厅界面区域
			{
   
				initGame();
			}

		}

	}
}

//初始化游戏棋盘界面

void ChessBorad() {
   

	loadimage(NULL, "背景2.jpg", 700, 700);
	
	setlinecolor(BLACK);//画线条为黑色
	
	for (int i = 175; i <550; i += 25)//循环画线
	{
   
		line(i, 175, i, 525);//画线函数,画竖线:第一个点(i,175),第二个点(i,525)
		line(175, i, 525, i);//画横线,第一个点(175,i),第二个点(525,i)
		setfillcolor(BLACK);
		solidcircle(350, 350, 3);
		solidcircle(250, 250, 3);
		solidcircle(450, 250, 3);
		solidcircle(250, 450, 3);
		solidcircle(450, 450, 3);
		
	}
	
}


//人人对决函数

void manvsmanplayChess()
{
   

	MOUSEMSG m;//保存鼠标消息
	int x, y;
	int a = 
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值