第一次自己写c语言

  我写好的第一个程序是一个只有一百多行的小游戏,”五子棋“。还依靠了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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值