easyx游戏编程:五子棋(C语言游戏开发)

easyx游戏编程:五子棋(C语言游戏开发)

五子棋:

本游戏用到了图形界面库graphics.h,图形界面库下载安装:

下载链接: https://easyx.cn/downloads/.
下方有源码。

功能实现:

玩家对战,人机对战,音乐播放,重开,悔棋,投降等。
在这里插入图片描述
所以要完成上面的功能,我们要:

  • 欢迎界面和游戏界面
  • 游戏场景绘制(棋盘绘画)
  • 玩家操作
  • 游戏功能(重开,悔棋等)
  • 对战模式(人机和双人)
  • AI算法

具体实现:

界面:

我们先设置窗口背景颜色,清理画布,然后设置文字颜色,设置窗口透明,设置文字大小,字体与内容
欢迎界面:

void hello() 
{
	initgraph(800, 600);    	//设置窗口大小
	setbkcolor(WHITE);		//设置背景为白色
	cleardevice();			//清理画布

	mciSendString(TEXT(" open 音乐.mp3 alias mysong"), NULL, 0, NULL);	//选择音乐
	mciSendString(TEXT("play mysong"), NULL, 0, NULL);			//播放音乐
}

游戏界面:

 initgraph(600, 800);
 cleardevice();
 settextcolor(RED);     			//设置文字颜色
 setbkmode(TRANSPARENT);    			//设置窗口透明
 settextstyle(128, 0, "宋体");  			//设置字体大小、宽度、字体
 outtextxy(100, 100, "五子棋");
 setlinecolor(RED);
 rectangle(150, 300, 450, 650);
 rectangle(160, 310, 440, 640);
 line(160, 420, 440, 420);
 line(160, 530, 440, 530);
 settextstyle(65, 0, "华文琥珀");
 outtextxy(170, 340, "人机大战");
 outtextxy(170, 450, "双人对战");
 outtextxy(170, 560, "联系作者");
 setlinecolor(WHITE);
 settextcolor(WHITE);
 settextstyle(23, 0, "华文琥珀");
 outtextxy(527, 37, "音乐");
 circle(550, 50, 25);

棋盘:

绘画出棋盘
棋盘绘制:

void board()
{
initgraph(1200, 800);			//设置窗口大小
setbkcolor(BLACK);
cleardevice();
setlinecolor(WHITE);
for (int i = 50; i <= 750; i += 50)	//使用for循环绘制棋盘
{
 	line(i, 50, i, 750);
  	line(50, i, 750, i);
}
for (int i = 200; i < 800; i += 400)
{
 	for (int j = 200; j < 800; j += 400)
	 fillcircle(i, j, 5);
}
}

棋子绘制:

setrop2(R2_COPYPEN); 		//二元光栅操作码:R2_COPYPEN当前颜色
setfillcolor(RED);		//红方棋子
fillcircle(m.x, m.y, 20);
setfillcolor(WHITE);		//白方棋子
fillcircle(m.x, m.y, 20);

玩家操作:

定义鼠标,使用鼠标来模拟落子操作

MOUSEMSG m; 			// 定义鼠标消息
m = GetMouseMsg();		//获取鼠标消息
if (m.uMsg == WM_LBUTTONDOWN)   // 使用鼠标左键进行操作
{
	int x,y;
	if (x >= 25)			//锁定鼠标,使落子在棋盘中心
  		m.x = m.x - x + 50;
  	else
  	 	m.x = m.x - x;
   	if (y >= 25)
  		m.y = m.y - y + 50;
  	else
  	  	m.y = m.y - y;

}

游戏功能:

重开:
即重绘棋盘,调用绘画棋盘函数board()即可。
悔棋:
使用数组定义落子位置,记录每次上次落子的位置,重新绘制即可。

	int red[15][15],white[15][15],stick[15][15];		//设置红方落子,白方落子以及该位置是否落子
	board();

投降:
判断现在是哪一方落子,点击投降即该方落败。
音乐播放/暂停:

int cont=0if (cont % 2 == 0)
    {
     mciSendString(TEXT("pause mysong"), NULL, 0, NULL);
     cont++;		//暂停音乐
    }
    else
    {
     mciSendString(TEXT("resume mysong"), NULL, 0, NULL);
     cont++;		//播放音乐
    }

胜利判断:
因为开始使用数组进行标记,由返回值判断五子是否连成一线。

int success(int x[15][15])
{
 int m, n;
 for (m = 0; m < 15; m++)
 {
  for (n = 0; n < 15; n++)
  {
   if (x[m][n] == 1 && x[m][n + 1] == 1 && x[m][n + 2] == 1 && x[m][n + 3] == 1 && x[m][n + 4] == 1)return 1;
   if (x[m][n] == 1 && x[m + 1][n] == 1 && x[m + 2][n] == 1 && x[m + 3][n] == 1 && x[m + 4][n] == 1)return 1;
   if (x[m][n] == 1 && x[m + 1][n + 1] == 1 && x[m + 2][n + 2] == 1 && x[m + 3][n + 3] == 1 && x[m + 4][n + 4] == 1)return 1;
   if (n > 3 && x[m][n] == 1 && x[m + 1][n - 1] == 1 && x[m + 2][n - 2] == 1 && x[m + 3][n - 3] == 1 && x[m + 4][n - 4] == 1)return 1;
  }
 }
 return 0;
}

人机算法:

我这个AI的算法只是比较简单的,或者说是呆,如果大家想写一些NB一点的,对五子棋感兴趣的可以使用权值判断来编写人机代码。

图片部分可自行获取

在这里插入图片描述

源码

  • 16
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值