c语言五子棋心得(一天时间写出五子棋项目)
一天时间开发出老师说需要一星期的C语言游戏:五子棋项目!给大家分享一下~
为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验。所以在编程初期选择了控制台小游戏《单机五子棋》作为项目进行编码。
本项目定位:
控制台小程序,作为熟悉一个完整的项目流程存在。
游戏功能:
首先实现能够让双人进行对战,最后得出胜负(结果)。然后加入人机对战元素,也就是传统意义上一个人玩的单机游戏。
编码风格:
C语言面向过程编程,变量名与函数名全部使用驼峰命名法。
代码:
#include <stdio.h> // 标准库
#include <conio.h> // 按键
#include <Windows.h> // 屏幕刷新
#include <stdlib.h> // 随机数
static const int wArr = 15;
static const int hArr = 15;
int temp = 0;
int allRound = 0;
int iMap[wArr][hArr] = {};
void initMap();
void showMap();
void getUserInput();
void userInput(int width, int height);
void whoIsWin();
void aiInput(int w, int h);
bool notherUser = true; // 区分用户
int myChess = 0;
int whiteChess = 22;
int blackChess = 33;
int main()
{
int InputW = 0;
int InputH = 0;
initMap();
while (1)
{
showMap();
getUserInput();
system("CLS");
whoIsWin();
if (20000 == allRound)
break;
}
showMap();
if (notherUser)
{
printf("User2, Win\n");
}
else
{
printf("User1, Win\n");
}
return 0;
}
void initMap()
{
for (int i = 0; i < wArr; i)
{
for (int j = 0; j < hArr; j)
{
iMap[i][j] = NULL;
}
}
for (int i = 0; i < wArr; i)
{
iMap[i][0] = temp ;
}
temp = 0;
for (int i = 0; i < wArr; i)
{
iMap[0][i] = temp ;
}
temp = 0;
}
void showMap()
{
for (int i = 0; i < wArr; i)
{
for (int j = 0; j < hArr; j)
{
printf("%3.0d", iMap[i][j]);
}
printf("\n");
}
}
void getUserInput()
{
int w, h;
if (notherUser)
{
printf("User1:\n");
myChess = whiteChess;
// ============ 用户输入
scanf_s("%d %d", &w, &h);
userInput(w, h);
}
else
{
printf("User2:\n");
myChess = blackChess;
// 下面是 AI 部分
aiInput(rand()%wArr, rand()%hArr);
}
}
void userInput(int w, int h)
{
if (w >= wArr || w <= 0 || h >= hArr || h <= 0)
{
return;
}
else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess)
{
return;
}
iMap[w][h] = myChess;
notherUser = !notherUser;
}
void aiInput(int w, int h)
{
if (w >= wArr || w <= 0 || h >= hArr || h <= 0)
{
return;
}
else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess)
{
return;
}
iMap[w][h] = myChess;
notherUser = !notherUser;
}
void whoIsWin()
{
for (int i = 0; i < wArr; i)
{
for (int j = 0; j < hArr; j)
{
if(iMap[i][j] > 0)
// 竖排五个
if (iMap[i 0][j] == iMap[i 1][j]
&& iMap[i 1][j] == iMap[i 2][j]
&& iMap[i 2][j] == iMap[i 3][j]
&& iMap[i 3][j] == iMap[i 4][j]
//&& iMap[i 4][j] == iMap[i 5][j]
)
{
allRound = 20000;
}
// 右斜五个
else if (iMap[i 0][j 0] == iMap[i 1][j 1]
&& iMap[i 1][j 1] == iMap[i 2][j 2]
&& iMap[i 2][j 2] == iMap[i 3][j 3]
&& iMap[i 3][j 3] == iMap[i 4][j 4]
//&& iMap[i 4][j 4] == iMap[i 5][j 5]
)
{
allRound = 20000;
}
// 左斜五个
else if (iMap[i 0][j 0] == iMap[i - 1][j 1]
&& iMap[i - 1][j 1] == iMap[i - 2][j 2]
&& iMap[i - 2][j 2] == iMap[i - 3][j 3]
&& iMap[i - 3][j 3] == iMap[i - 4][j 4]
//&& iMap[i - 4][j 4] == iMap[i - 5][j 5]
)
{
allRound = 20000;
}
// 横排五个
else if (iMap[i][j 0] == iMap[i][j 1]
&& iMap[i][j 1] == iMap[i][j 2]
&& iMap[i][j 2] == iMap[i][j 3]
&& iMap[i][j 3] == iMap[i][j 4]
//&& iMap[i][j 4] == iMap[i][j 5]
)
{
allRound = 20000;
}
}
}
}
本次分享就到这里了,一起努力吧!
对于准备学习编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于C/C 感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C 的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com