easyX实践上手操作小项目


在这里插入图片描述

这里我们学习过easyX的基础知识后,看看是否能实践操作一下,制作一个属于自己的游戏界面呢?

基础知识入口:
链接: 基础知识哦

效果展示

在这里插入图片描述
点击选项也可以进入其对应的界面

注意:这里只是实现了点击切换界面以及一点装饰的功能

主菜单的装饰

这是总的函数
在这里插入图片描述
其中png图片我是放在了该项目文件夹里

// 主菜单界面渲染
void menu()
{

    //设置背景颜色,清屏
    setbkcolor(WHITE);
    cleardevice();

    //加载背景图片
    IMAGE img_bk,img_kunkun,img_kun1;
    loadimage(&img_bk, "./kun_bk.png", 800, 640);
    putimage(0, 0, &img_bk);
    loadimage(&img_kunkun, "./kunkun.png", 200, 300);
    putimage(100, 100,&img_kunkun);
    loadimage(&img_kun1, "./kun1.png", 250, 500);
    putimage(300, 120, &img_kun1);

    // 绘制开始界面,菜单
    setfillcolor(LIGHTGRAY);
    setlinecolor(BLACK);
    setbkmode(TRANSPARENT);
    fillrectangle(500, 110, 720, 180); // 220  70
    fillrectangle(500, 210, 720, 280);
    fillrectangle(500, 310, 720, 380);
    fillrectangle(500, 410, 720, 480);
    fillrectangle(500, 510, 720, 580);
    char arr1[] = "开始游戏";
    char arr2[] = "玩法介绍";
    char arr3[] = "排行榜";
    char arr4[] = "制作团队";
    char arr5[] = "退出游戏";

    // 文字居中
    int width = 220 / 2 - textwidth(arr1) / 2;
    int heigh = 70 / 2 - textheight(arr1) / 2;

    //打印文字
    settextcolor(BLACK);
    outtextxy(width + 500, heigh + 110, arr1);
    outtextxy(width + 500, heigh + 210, arr2);
    outtextxy(width + 500, heigh + 310, arr3);
    outtextxy(width + 500, heigh + 410, arr4);
    outtextxy(width + 500, heigh + 510, arr5);

    //音乐开关的按钮
    setfillcolor(LIGHTRED);
    fillcircle(80, 70, 30);
    settextcolor(YELLOW);
    settextstyle(20, 0, "楷体");
    outtextxy(55, 65, "音乐");

    //鼠标键位操作
    while (1)
    {
        if (MouseHit())
        {
            MOUSEMSG msg = GetMouseMsg();
            // 左键点击播放音乐  右键停止播放
            if (msg.x > 65 && msg.x < 95 && msg.y> 55 && msg.y < 85)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    mciSendString("open giegie.mp3 alias BGM", 0, 0, 0);
                    mciSendString("play BGM repeat", 0, 0, 0);
                    break;
                case WM_RBUTTONDOWN://右键
                    mciSendString("pause BGM", 0, 0, 0);
                    break;
                }
            }
            // 制作团队界面
            if (msg.x > 500 && msg.x < 720 && msg.y> 410 && msg.y < 480)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    make_team();
                    break;
                }
            }
            // 开始游戏界面
            if (msg.x > 500 && msg.x < 720 && msg.y> 110 && msg.y < 180)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    game_begin();
                    break;
                }
            }
            // 玩法介绍界面
            if (msg.x > 500 && msg.x < 720 && msg.y> 210 && msg.y < 280)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    game_introduce();
                    break;
                }
            }
            // 排行榜界面
            if (msg.x > 500 && msg.x < 720 && msg.y> 310 && msg.y < 380)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    ranking();
                    break;
                }
            }
            // 退出游戏
            if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    closegraph();
                    exit(0);
                }
            }
        }
    }
    getchar();
    closegraph;
}

玩法介绍界面

void game_introduce()
{
    // 设置背景颜色为白色,清屏
    setbkcolor(WHITE);
    cleardevice();

    // 返回 框的创建
    setfillcolor(LIGHTGRAY);
    setlinecolor(BLACK);
    setbkmode(TRANSPARENT);
    fillrectangle(500, 510, 720, 580);
    char arr3[] = "返回";
    // 文字居中
    int width = 220 / 2 - textwidth(arr3) / 2;
    int heigh = 70 / 2 - textheight(arr3) / 2;
    // 打印文字
    settextcolor(BLACK);
    outtextxy(width + 500, heigh + 510, arr3);
    // 返回 框的点击操作
    while (1)
    {
        if (MouseHit())
        {
            MOUSEMSG msg = GetMouseMsg();
            if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    menu();
                    break;
                }
            }
        }
    }
}

开始游戏界面

void game_begin()
{
    // 设置背景颜色为白色,清屏
    setbkcolor(WHITE);
    cleardevice();

    // 三个 框的创建
    setfillcolor(LIGHTGRAY);
    setlinecolor(BLACK);
    setbkmode(TRANSPARENT);
    fillrectangle(500, 110, 720, 180); // 220  70
    fillrectangle(500, 210, 720, 280);
    fillrectangle(500, 510, 720, 580);
    char arr1[] = "新的游戏";
    char arr2[] = "读取文档";
    char arr3[] = "返回";
    // 文字居中
    int width = 220 / 2 - textwidth(arr3) / 2;
    int heigh = 70 / 2 - textheight(arr3) / 2;
    // 打印文字
    settextcolor(BLACK);
    outtextxy(width + 500, heigh + 110, arr1);
    outtextxy(width + 500, heigh + 210, arr2);
    outtextxy(width + 500, heigh + 510, arr3);
    // 返回 框的点击操作
    while (1)
    {
        if (MouseHit())
        {
            MOUSEMSG msg = GetMouseMsg();
            //返回 操作
            if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    menu();
                    break;
                }
            }
            // 新的游戏界面
            if (msg.x > 500 && msg.x < 720 && msg.y> 110 && msg.y < 180)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    role_select();
                    break;
                }
            }
        }
    }
}

制作团队界面

void make_team()
{
    // 设置背景颜色为白色,清屏
    setbkcolor(WHITE);
    cleardevice();

    // kunkun图片加载
    IMAGE img_kunkun2;
    loadimage(&img_kunkun2, "./kunkun2.png", 200, 200);
    putimage(50, 70, &img_kunkun2);

    // 返回 框的创建
    setfillcolor(LIGHTGRAY);
    setlinecolor(BLACK);
    setbkmode(TRANSPARENT);
    fillrectangle(500, 510, 720, 580);
    char arr[] = "返回";
    // 文字居中
    int width = 220 / 2 - textwidth(arr) / 2;
    int heigh = 70 / 2 - textheight(arr) / 2;
    // 打印文字
    settextcolor(BLACK);
    outtextxy(width + 500, heigh + 510, arr);
    // 返回 框的点击操作
    while (1)
    {
        if (MouseHit())
        {
            MOUSEMSG msg = GetMouseMsg();
            if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    menu();
                    break;
                }
            }
        }
    }

}

排行榜界面

void ranking()
{
    // 设置背景颜色为白色,清屏
    setbkcolor(WHITE);
    cleardevice();

    // 返回 框的创建
    setfillcolor(LIGHTGRAY);
    setlinecolor(BLACK);
    setbkmode(TRANSPARENT);
    fillrectangle(500, 510, 720, 580);
    char arr3[] = "返回";
    // 文字居中
    int width = 220 / 2 - textwidth(arr3) / 2;
    int heigh = 70 / 2 - textheight(arr3) / 2;
    // 打印文字
    settextcolor(BLACK);
    outtextxy(width + 500, heigh + 510, arr3);
    // 返回 框的点击操作
    while (1)
    {
        if (MouseHit())
        {
            MOUSEMSG msg = GetMouseMsg();
            if (msg.x > 500 && msg.x < 720 && msg.y> 510 && msg.y < 580)
            {
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN://左键
                    menu();
                    break;
                }
            }
        }
    }
}

注:main()函数

int main()
{
    initgraph(800, 640);//创建一个窗口800×640
    menu();
    closegraph();
    return 0;
}

注:
若你的窗口每次点击就会发生窗口闪动,就是因为每个函数之内都有一个创建窗口操作
在整个程序中,只能有一个创建窗口的操作

拓展数据库

举例:展示排行榜信息 第一关

void rank_mysql()
{

	setbkcolor(BROWN);
	cleardevice();
	setbkmode(TRANSPARENT);
	settextcolor(BLACK);
	settextstyle(25, 0, "宋体");

	MYSQL mysql;//一个数据库结构体
	MYSQL_RES* res;//一个结果集结构体
	MYSQL_ROW row;//char** 二维数组,存放一条记录
	//初始化数据库
	mysql_init(&mysql);
	mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");;//设置编码方式
	//连接数据库
	//判断 如果连接失败就输出连接失败
	if (mysql_real_connect(&mysql, "localhost", "root", "xie123123", "c_mysql", 3306, NULL, 0))
	{                               //伍什凯电脑ip  数据库名   密码         
		printf("连接成功\n");
	}
	else
	{
		printf("连接失败:%s\n", mysql_error(&mysql));
	}

	//步数排行榜
	//执行sql语句  查询整张表的信息
	
	//以下,username,step,rank是我建立的steps_rank1表单的列
	
	if (mysql_query(&mysql, "SELECT username,step, @rank:=@rank+1 `rank` from steps_rank1 s,(select @rank:=0) q ORDER BY step ;")) {
		printf("%s\n", mysql_error(&mysql));
		//return -1;
	}
	//得到结果集
	res = mysql_use_result(&mysql);
	//一行一行的将数据读出来
	while ((row = mysql_fetch_row(res)) != NULL) {
		int count = res->field_count;//得到一行中,有多少列
		int rows = mysql_num_rows(res);
		for (int i = 0; i < count; i++) {
			outtextxy(100 + i * 150, 130 + rows * 30, row[i]);
		}
		outtextxy(0, 130 + rows * 30, "");
	}

	//打印到easyX创建的窗口上
	outtextxy(100, 110, "用户名");
	outtextxy(240, 110, "步数");
	outtextxy(380, 110, "排行");
	int q = mysql_num_rows(res) + 1;
	rectangle(95, 105, 435, 130 + q * 30);

	//释放结果集
	mysql_free_result(res);
	//关闭数据库
	mysql_close(&mysql);
	//停留等待
	system("pause");
}

小结

通过这些练习,我们可以感觉到:

  • easyX渲染的代码重复率较高
    我们可以创建一个函数,每次都去调用这个函数,省去好多重复的操作
  • 几乎所以都是以基础知识为支撑,看着知识讲解就可以

之后,自己就可以尝试着做一款基础easyX窗口的游戏了

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汴京城下君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值