c语言五子棋游戏教程,使用C语言编写简单的五子棋玩家对战游戏

这是一个使用C语言编写的五子棋游戏程序,适用于Ubuntu环境。代码包括打印棋盘、判断落子位置是否合法以及检查是否获胜的函数。游戏支持两名玩家轮流下棋,当一方连成五子时获胜,若所有棋位填满则为平局。未来计划增加图形化界面和玩家对战电脑的功能。

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

五子棋游戏

编写语言:C语言

运行环境:ubuntu

设计知识:函数,数组

本人亲设。

基本思路很简单,代码基本上在判断是否胜利函数长了点,共160+吧,希望可以帮助到你,有疑问或者好的思路可以发邮件,1916737159@qq.com或者留言

后期应该会出图形化版本,以及玩家与电脑对战版本

/*

*游戏名:五子棋游戏

*制作者:大熊

*/

#include

#include

void print(const int arr[15][15]);//打印棋盘0=+ ;1=X ;2=O ;

int chess_right(const int arr[15][15], int x, int y);//判断是否越界,重复

int victory(const int arr[15][15], int x, int y);//判断赢的条件

void print(const int arr[15][15])//打印棋盘

{

int i = 0, j = 0;

printf("0 1 2 3 4 5 6 7 8 9 A B C D E F\n");

for(i = 0; i < 15; i++)

{

printf("%X ", i + 1);

for(j = 0; j < 15; j++)

{

if(arr[i][j] == 0)

printf("+ ");

else if(arr[i][j] == 1)

printf("X ");

else

printf("O ");

}

printf("\n");

}

}

int chess_right(const int arr[15][15], int x, int y)//判断棋子是否正常

{

if(x < 0 || y < 0 || x > 15 || y > 15 || arr[x][y] != 0)

{

printf("error! please play chess again!\n");

return 0;

}

else

return 1;

}

int victory(const int arr[15][15], int x, int y)//是否胜利,return 1 yes,0 no

{

int i = 1;

int sum = 1;//sum记录棋子数

//横向记录棋子

for(i = 1; ; i++)

{

if(arr[x][y-i] == arr[x][y] && (y-i) >= 0)//向左

sum++;

else

break;

}

for(i = 1; ; i++)

{

if(arr[x][y+i] == arr[x][y] && (y+i) < 16)//向右

sum++;

else

break;

}

if(sum >= 5)

return 1;

//纵向记录棋子

sum = 1;//重新棋子数置1

for(i = 1; ; i++)

{

if(arr[x-i][y] == arr[x][y] && (x-i) >= 0)//向上

sum++;

else

break;

}

for(i = 1; ; i++)

{

if(arr[x+i][y] == arr[x][y] && (x+i) < 16)//向下

sum++;

else

break;

}

if(sum >= 5)

return 1;

//左上-右下方向记录棋子

sum = 1;//重新棋子数置1

for(i = 1; ; i++)

{

if(arr[x-i][y-i] == arr[x][y] && (x-i) >= 0 && (y-i) >= 0)//左上

sum++;

else

break;

}

for(i = 1; ; i++)

{

if(arr[x+i][y+i] == arr[x][y] && (x+i) < 16 && (y+i) < 16)//右下

sum++;

else

break;

}

if(sum >= 5)

return 1;

//右上-左下方向

sum = 1;//重新棋子数置1

for(i = 1; ; i++)

{

if(arr[x-i][y+i] == arr[x][y] && (x-i) >= 0 && (y+i) < 16)//左下

sum++;

else

break;

}

for(i = 1; ; i++)

{

if(arr[x+i][y-i] == arr[x][y] && (x+i) < 16 && (y-i) >= 0)//右上

sum++;

else

break;

}

if(sum >= 5)

return 1;

return 0;

}

int main()

{

//x-1,y-1为数组坐标

int n = 0, x = 0, y = 0, tmp = 1;

int arr[15][15] = {0};

system("clear");

print(arr);

for(n = 0; n < 225; n++)

{

if(n % 2 == 0)

printf("player 1 : ");

else

printf("player 2 : ");

scanf("%d,%d", &x, &y);

tmp = chess_right(arr, x-1, y-1);//下的棋子是否越界,重复,1正确,0错误

if(tmp == 0)//错误

n--;

else if(n % 2 == 0)

{

arr[x-1][y-1] = 1;//棋手1

system("clear");//清屏

print(arr);//更新棋盘

}

else

{

arr[x-1][y-1] = 2;//棋手2

system("clear");//清屏

print(arr);//更新棋盘

}

if(tmp == 1 && victory(arr, x-1, y-1) == 1)//判断棋子是否合理且是否胜利

{

printf("palyer %d victory!\n", n % 2 + 1);

break;

}

}

if(n == 225)

printf("和棋!\n");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值