我写好的第一个程序是一个只有一百多行的小游戏,”五子棋“。还依靠了ai改错,我是自己找网课学习的,所以很多基础都不懂,这个小游戏看了教程理解之后在自己写,写了一整天,以前我只知道C语言可以写代码来解决一下繁琐的数据类型问题,不知道C语言还能设计很多精美的游戏和动画图片。这次我的五子棋小游戏也有了背景,和音乐,尽管有些bug但是我还是很喜欢它。这游戏也挺无聊的,但是我就是喜欢它,我觉得自己创造的东西就算不完美,我也很喜欢它。它虽然比不上那些3D游戏,但是我第一个靠自己写的游戏。
我喜欢C语言,因为他给了我一个创造的空间,我会继续努力学习这门语言。第一次想学这门语言是因为我喜欢的一个女孩子,她在学习单片机,我就也跟着学习单片机,因为看不懂程序,所以来学C语言。哈哈哈,命运就是酱紫,莫名其妙。这个女孩子,或许还不知道,她身边有一个男孩子喜欢她呢。悄悄的喜欢就很好了,她很忙的。
下面是我的代码,请各位大神留下宝贵的意见。
#include<easyx.h>
#include<math.h>
#include<stdio.h>
#include<graphics.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")//多媒体音乐接口
//标记黑白
int biaoji = 0;
//存储棋子坐标使用
int ChessMap[20][20] = { 0 };
MOUSEMSG Msg; //定义鼠标变量
int ChessX = 0, ChessY = 0;//鼠标具体坐标
int MapX = 0, MapY = 0;//鼠标相对棋盘坐标
//HWND hwnd = GetHWnd(); //开棋盘
//画出棋盘
void Draw()
{
//定义图片
IMAGE img;
//加载图片,给好图片地址,与main.c文件同一个文件
loadimage(&img, "图片库/lv.jpg");
putimage(0, 0, &img);
//画出棋盘边框
setlinestyle(PS_SOLID, 2);//线条加厚
setlinecolor(BLACK);
line(50, 50, 550, 50);
line(50, 550, 550, 550);
line(50, 50, 50, 550);
line(550, 50, 550, 550);
//用循环画出里头的线条
setlinestyle(PS_SOLID, 1);
for (int i = 1; i < 20; i++)
{
for (int j = 1; j < 20; j++)
{
line(50, 50 + 25 * j, 550, 50 + 25 * j);
}
}
for (int i = 1; i < 20; i++)
{
for (int j = 1; j < 20; j++)
{
line(50 + 25 * j, 50, 50 + 25 * j, 550);
}
}
//写入棋盘基本信息
setbkmode(0);
//设置文字颜色
settextcolor(BLACK);
//由坐标输入文字
outtextxy(570, 50, "玩家1:黑棋");
outtextxy(570, 250, "玩家2:白棋");
//outtextxy(570, 500, "下棋者:");
/*if (biaoji % 2 == 0)
{
outtextxy(600, 500, "白棋");
}
else
{
outtextxy(600, 500, "黑棋");
}*/
}
//游戏判断条件
int judge(int MapX, int MapY)
{
int temp = ChessMap[MapX][MapY];
//判断是否相互连接
for (int i = MapX - 4, j = MapY; i <= MapX; i++)
{
if (i >= 0 && i <= 16 && temp == ChessMap[i][j] && temp == ChessMap[i + 1][j] && temp == ChessMap[i + 2][j] && temp == ChessMap[i + 3][j] && temp == ChessMap[i + 4][j])
{
//MessageBox(NULL, "黑棋获胜", "game over", MB_OK);
return 1;
}
}
// 垂直方向
for (int i = MapX , j = MapY - 4; i <= MapX; i++)
{
if (j >= 0 && j <= 16 && temp == ChessMap[i][j] && temp == ChessMap[i ][j+1] && temp == ChessMap[i][j + 2] && temp == ChessMap[i][j + 3] && temp == ChessMap[i][j + 4])
{
return 1;
}
}
// 主对角线
for (int i = MapX - 4, j = MapY + 4; i <= MapX; i++)
{
if (i >= 0 && i <= 16 && j >= 0 && j <= 16 && temp == ChessMap[i][j] && temp == ChessMap[i + 1][j - 1] && temp == ChessMap[i + 2][j - 2] && temp == ChessMap[i + 3 ][j - 3] && temp == ChessMap[i + 4][j - 4])
{
return 1;
}
}
// 副对角线
for (int i = MapX - 4, j = MapY - 4; i <= MapX; i++)
{
if (i >= 0 && i <= 16 && j >= 0 && j <= 16 && temp == ChessMap[i][j] && temp == ChessMap[i + 1][j + 1] && temp == ChessMap[i + 2][j + 2] && temp == ChessMap[i + 3][j + 3] && temp == ChessMap[i + 4][j + 4])
{
return 1;
}
}
return 0;
}
//基础功能,游戏初始化
void InitGame()
{
int judge(int MapX, int MapY);
HWND hwnd = GetHWnd();
while (1)
{
Msg = GetMouseMsg();
for (int i = 0; i <= 20; i++)
{
for (int j = 0; j <= 20; j++)
{
//12 为信号接收圆半径
if (abs(Msg.x - 50 - i * 25) < 12 && abs(Msg.y - 50 - j * 25) < 12)
{
ChessX = i * 25 + 50;
ChessY = j * 25 + 50;
MapX = i;
MapY = j;
}
}
}
if (Msg.uMsg == WM_LBUTTONDOWN && ChessMap[MapX][MapY] != 0)
{
MessageBox(NULL, "眼睛不用就捐了吧", "这儿不能下", MB_OK);
}
if (Msg.uMsg == WM_LBUTTONDOWN && ChessMap[MapX][MapY] == 0)
{
if(biaoji % 2 == 0)
{
setfillcolor(WHITE);
fillcircle(ChessX, ChessY, 12);
biaoji++;
//标记一下白子
ChessMap[MapX][MapY] = 2;
}
else
{
setfillcolor(BLACK);
fillcircle(ChessX, ChessY, 12);
biaoji++;
//标记黑子
ChessMap[MapX][MapY] = 1;
}
if (judge(MapX, MapY))
{
if (ChessMap[MapX][MapY] == 1)
{
MessageBox(NULL, "黑棋牛逼", "game over", MB_OK);
return;
}
if (ChessMap[MapX][MapY] == 2)
{
MessageBox(NULL, "白棋牛逼", "game over", MB_OK);
return;
}
}
setfillcolor(WHITE);
fillrectangle(570, 500, 700, 520);
outtextxy(570, 500, "下棋者:");
if (biaoji % 2 == 0)
{
outtextxy(650, 500, "白棋");
}
else
{
outtextxy(650, 500, "黑棋");
}
}
}
}
int main()
{
//创建窗口
initgraph(700,700);
mciSendString("play mus.mp3",0, 0 ,0);
//画出棋盘
Draw();
InitGame();
closegraph();
return 0;
}

676

被折叠的 条评论
为什么被折叠?



