用C语言写的简易五子棋游戏

#include <graphics.h>
#include <conio.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")//多媒体库文件


/*
1.绘制窗口
2.背景图片
3.背景音乐
4.棋盘(划线)
5.判断输赢
*/
int jugdewin(int a,int b);
int flag=0;//判断当前下棋的是黑子还是白子
int board[21][21];

//绘制窗口
void initGame()
{
	//设置窗口大小
	initgraph(568,550);
	//加载背景图片,要放在.c文件下
	loadimage(NULL,"2.jpg");
	
	/*
	IMAGE img;
	loadimage(&img,"2.jpg",300,250);//设置图片大小
	putimage(100,100,&img);//设置图片放置的坐标
	*/
	
	mciSendString("open 庐州月.mp3",0,0,0);//打开音乐文件
	mciSendString("play 庐州月.mp3",0,0,0);//播放音乐文件
	
	//绘制棋盘
	setlinestyle(PS_SOLID,2);//线条加粗
	setlinecolor(BLACK);//设置线条颜色
	for(int i=1;i<=20;i++)//棋盘划线
	{
		line(i*20,0,i*20,400);
		line(0,i*20,400,i*20);
	}
	
	setbkmode(0);//使字样的背景颜色透明,显示北京颜色
	settextcolor(BLACK);
	outtextxy(450,120,"玩家1:黑棋");
	outtextxy(450,170,"玩家2:白棋");//文本输出字样
}

//判断输赢
int jugdewin(int a,int b)
{
	int i,j;
	for(i=a-4,j=b;i<=a;i++)
	{
		if(i>=1&&board[i][j]==1&&board[i+1][j]==1&&board[i+2][j]==1&&board[i+3][j]==1&&board[i+4][j]==1)
		{
			return 1;
		}
		else if(i>=1&&board[i][j]==2&&board[i+1][j]==2&&board[i+2][j]==2&&board[i+3][j]==2&&board[i+4][j]==2)
		{
			return 2;
		}
	}//横
	for(j=b-4,i=a;j<=b;j++)
	{
		if(j>=1&&board[i][j]==1&&board[i][j+1]==1&&board[i][j+2]==1&&board[i][j+3]==1&&board[i][j+4]==1)
		{
			return 1;
		}
		else if(j>=1&&board[i][j]==2&&board[i][j+1]==2&&board[i][j+2]==2&&board[i][j+3]==2&&board[i][j+4]==2)
		{
			return 2;
		}
	}//竖
	for(i=a-4,j=b-4;i<=a;i++,j++)
	{
		if(j>=1&&i>=1&&board[i][j]==1&&board[i+1][j+1]==1&&board[i+2][j+2]==1&&board[i+3][j+3]==1&&board[i+4][j+4]==1)
		{
			return 1;
		}
		else if(j>=1&&i>=1&&board[i][j]==2&&board[i+1][j+1]==2&&board[i+2][j+2]==2&&board[i+3][j+3]==2&&board[i+4][j+4]==2)
		{
			return 2;
		}
	}//左斜
	for(i=a-4,j=b+4;i<=a;i++,j--)
	{
		if(j>=1&&i>=1&&board[i][j]==1&&board[i+1][j-1]==1&&board[i+2][j-2]==1&&board[i+3][j-3]==1&&board[i+4][j-4]==1)
		{
			return 1;
		}
		else if(j>=1&&i>=1&&board[i][j]==2&&board[i+1][j-1]==2&&board[i+2][j-2]==2&&board[i+3][j-3]==2&&board[i+4][j-4]==2)
		{
			return 2;
		}
	}//右斜
	return 0;
}

//下棋
void playChess()
{
	MOUSEMSG m;
	HWND hwnd;//窗口句柄
	hwnd=GetHWnd();//窗口置前
	while(1)
	{
		m=GetMouseMsg();//获取鼠标消息
		int a;
		int b;
		int x;
		int y;
		for(int i=1;i<=20;i++)
		{
			for(int j=1;j<=20;j++)
			{
				if(abs(m.x-i*20)<10&&abs(m.y-j*20)<10)
				{
					a=i;
					b=j;//存进board
					x=i*20;
					y=j*20;//坐标
				}
			}
		}

		if(m.uMsg==WM_LBUTTONDOWN)//判断当前是否是鼠标左键按下
		{
			if(board[a][b]!=0)
			{
				MessageBox(hwnd,"这里已经有棋子,请重新选择下棋位置","五子棋",MB_OK);//弹出提示窗口,有确定按键
				continue;
			}
			if(flag%2==0)
			{
				setfillcolor(BLACK);//为棋子填充黑色
				solidcircle(x,y,5);//画棋子
				board[a][b]=1;
			}
			else
			{
				setfillcolor(WHITE);//为棋子填充白色
				solidcircle(x,y,5);//画棋子
				board[a][b]=2;
			}
			flag++;
		}
		if(jugdewin(a,b)==1)
		{
			MessageBox(hwnd,"游戏结束!黑方胜利!","五子棋",MB_OK);
			break;
		}
		else if(jugdewin(a,b)==2)
		{
			MessageBox(hwnd,"游戏结束!白方胜利!","五子棋",MB_OK);
			break;
		}
	}
}

int main()
{
	initGame();
	playChess();
	getch();
	return 0;
}

 

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的五子棋游戏的 C 语言代码。请注意,这个代码可能不是最优的,但它可以作为一个起点来理解五子棋游戏的实现方式。 ``` #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define BOARD_SIZE 15 // 棋盘大小 typedef enum { // 定义棋子类型 EMPTY, BLACK, WHITE } PieceType; PieceType board[BOARD_SIZE][BOARD_SIZE]; // 棋盘 void print_board() { // 打印棋盘 printf(" "); for (int i = 0; i < BOARD_SIZE; i++) { printf("%c ", 'A' + i); } printf("\n"); for (int i = 0; i < BOARD_SIZE; i++) { printf("%2d", i + 1); for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == EMPTY) { printf(" +"); } else if (board[i][j] == BLACK) { printf(" x"); } else { printf(" o"); } } printf("\n"); } } bool is_valid_move(int row, int col) { // 判断移动是否有效 return row >= 0 && row < BOARD_SIZE && col >= 0 && col < BOARD_SIZE && board[row][col] == EMPTY; } bool is_win(int row, int col, PieceType piece) { // 判断是否获胜 int count = 0; for (int i = row - 4; i <= row + 4; i++) { // 横向判断 if (i < 0 || i >= BOARD_SIZE) continue; if (board[i][col] == piece) { count++; if (count == 5) return true; } else { count = 0; } } count = 0; for (int j = col - 4; j <= col + 4; j++) { // 竖向判断 if (j < 0 || j >= BOARD_SIZE) continue; if (board[row][j] == piece) { count++; if (count == 5) return true; } else { count = 0; } } count = 0; for (int i = row - 4, j = col - 4; i <= row + 4; i++, j++) { // 左上到右下判断 if (i < 0 || i >= BOARD_SIZE || j < 0 || j >= BOARD_SIZE) continue; if (board[i][j] == piece) { count++; if (count == 5) return true; } else { count = 0; } } count = 0; for (int i = row - 4, j = col + 4; i <= row + 4; i++, j--) { // 右上到左下判断 if (i < 0 || i >= BOARD_SIZE || j < 0 || j >= BOARD_SIZE) continue; if (board[i][j] == piece) { count++; if (count == 5) return true; } else { count = 0; } } return

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值