使用C语言+EasyX完成消灭星星游戏(2)

上一篇简单介绍一下项目和创建游戏界面
本篇介绍如何达到消除方块的功能。具体思路,代码都有详细注释。
下一篇消除同色方块后其他方块的下落。

#include<stdio.h>
#include<graphics.h>
#include<time.h>
#include <conio.h>
#include <mmsystem.h>
#pragma comment(lib,"Winmm.lib")
#pragma warning(disable:4996)
#define N 40
IMAGE bgImage;//游戏页面背景图片
IMAGE RegbgImage;//注册页面背景图片
IMAGE nowImage;  //当前
MOUSEMSG m;    //鼠标
COLORREF colorArr[6] = { RGB(200, 0, 0), RGB(0, 200, 0),RGB(0, 200, 200), RGB(200, 0, 200),RGB(200,200,0) };//颜色池
typedef struct position
{int x;int y;
}posType;          //位置信息
posType mou;    //鼠标位置结构体
posType sameArr[100];   //同色方块坐标
int index = 0;    //同色方块个数
void game(void);    //初始化游戏界面
void playgame(void);   //游戏玩法
void getsameclolr(posType, COLORREF);//获取同颜色的方块
int isValid(posType, COLORREF);   //判断方块附近颜色是否一样
int main() {initgraph(700, 700);//初始化窗口game();playgame();system("pause");return 0;
}
void game() {loadimage(&bgImage, "../Project2/bg2.2.jpg", 700, 700);//取背景图putimage(0, 0, &bgImage);//放置背景图setfillcolor(RGB(0, 0, 0));fillrectangle(150, 0, 550, 700);//黑色背景settextstyle(15, 0, _T(""));settextcolor(RGB(255, 255, 255));outtextxy(10, 10, "hello,");srand((unsigned)time(NULL));for (int i = 0; i < 10; i++) {   //生成方块for (int j = 0; j < 10; j++) {COLORREF cl = colorArr[rand() % 5];     //产生0~5六个随机数在随即颜色池中取颜色                      setfillcolor(cl);setlinecolor(RGB(0, 0, 0));fillroundrect(150 + j * N, 150 + i * N, 150 + N + j * N, 150 + (i + 1)*N, 10, 10);settextstyle(30, 0, _T(""));setbkmode(TRANSPARENT);settextcolor(RGB(255, 255, 255));outtextxy(155 + j * N, 155 + i * N, "☆");}}
}
void playgame() {       //游戏玩法  COLORREF c2 = RGB(0, 0, 0);while (true){m = GetMouseMsg(); //获取鼠标位置switch (m.uMsg){case WM_LBUTTONDOWN:mou.x = m.x;mou.y = m.y;int a = 0;for (int i = 0; i < 5; i++) {if (getpixel(mou.x, mou.y) == colorArr[i])//点击位置的颜色是否在颜色池a = 1;}if (a == 1) {getsameclolr(mou, getpixel(mou.x, mou.y));//查找附近相同颜色格子if (index > 1) {int j = 0;for (j = 0; j < index; j++){setlinecolor(RGB(0, 0, 0));setfillcolor(RGB(0, 0, 0));fillroundrect(sameArr[j].x - 20, sameArr[j].y - 20, sameArr[j].x + 20, sameArr[j].y + 20, 10, 10);//将相同颜色填充成黑色}Sleep(150);}index = 0;break;}}}
}
void getsameclolr(posType mou, COLORREF cl) {  int k = 0;posType temp;mou.x = (mou.x - 150) / N * N + 150 + 20;//定位位置到格子中点mou.y = (mou.y - 150) / N * N + 150 + 20;sameArr[index].x = (mou.x);//将格子存入相同颜色的数组sameArr[index].y = (mou.y);index++;for (k = 0; k < 4; k++) {//递归查找相邻相同颜色的格子switch (k){case 0:temp.x = mou.x; temp.y = mou.y - N; break; //上case 1:temp.x = mou.x; temp.y = mou.y + N; break; //下case 2:temp.x = mou.x - N; temp.y = mou.y; break; //左case 3:temp.x = mou.x + N; temp.y = mou.y; break; //右}if (isValid(temp, cl) == 1) {getsameclolr(temp, cl);}}
}
int isValid(posType mou, COLORREF cl)//判断查找到的格子是否合法
{if (getpixel(mou.x, mou.y) != cl)//不在颜色池不合法{return 0;                                                    //不合法}else{int i = 0;for (i = 0; i < index; i++){if (mou.x == sameArr[i].x && mou.y == sameArr[i].y)//已经存在同色方块里 不合法{return 0;                                            //不合法}}return 1;                                                    //合法}
}


使用C语言+EasyX完成消灭星星游戏(3)
使用C语言+EasyX完成消灭星星游戏(1)

使用C语言+EasyX完成消灭星星游戏(2)相关推荐

  1. 使用C语言+EasyX完成消灭星星游戏(1)

    使用C语言+EasyX完成消灭星星游戏(1) 给大家介绍一个自己做的消灭星星小游戏项目,主要是基于C语言+EasyX实现,我使用的是vs2017编写.项目实现登陆,注册,游戏基本的玩法等功能. 项目展 ...

  2. 使用C语言+EasyX完成消灭星星游戏(3)

    使用C语言+EasyX完成消灭星星游戏(3) 本篇介绍方块消除后,方块下落移动. #include<stdio.h> #include<graphics.h> #include ...

  3. 2021级C语言大作业 - 消灭星星

    分享21级同学大一上学期用C语言(及少量C++)实现的消灭星星游戏.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https://pan.baidu. ...

  4. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第一篇(界面)

    背景: 来自星星的你电视剧很火,消灭星星游戏也很火,好像星星都很火,笔者就以星星为主题开始这篇博文.消除类的游戏挺受欢迎的,从2013年度app store最赚钱的游戏--粉碎糖果传奇,到总是可以在游 ...

  5. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第三篇(分数)

    背景: 经过消灭星星第二篇算法,最高的山峰已经过去了,剩下的都是小沟小河,没什么难度了.这一节笔者继续完成消灭星星的分数篇,这节主要包括:触摸提示得分 比如4 blocks 80 points,然后产 ...

  6. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植—第一篇(界面)

    背景: 来自星星的你电视剧很火,消灭星星游戏也很火,好像星星都很火,笔者就以星星为主题开始这篇博文.消除类的游戏挺受欢迎的,从2013年度app store最赚钱的游戏–粉碎糖果传奇,到总是可以在游戏 ...

  7. 纯js 消灭星星游戏,js 消灭星星游戏实现原理,有道具的消灭星星

    消灭星星游戏的几个核心逻辑 用10*10的数组nums保存星星,1-5表示有星星,0表示已经消去 1.初始化,5种颜色的星星分配. 1-5 这个最容易,随机分配就好,产生1-100的随机数num,nu ...

  8. 做游戏,学编程(C语言) 13 消灭星星

    <消灭星星>是由Brian Baek公司开发的一款消除类休闲娱乐手机游戏,于2014年发行.本作特点是易上手,点击两个或两个以上颜色相同的方块即可消除,没有时间限制. 具体游戏的规则非常简 ...

  9. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第四篇(关卡)

    背景: 本来打算把第三篇和第四篇合并都一起,但以前计划分开,就还是分来吧:一般的游戏涉及到关卡的话,一般都会建立一个数组来存放各种定义参数,消灭星星关卡比较容易,不需要建立数组,只有两个参数level ...

最新文章

  1. 图论之拓扑排序 poj 2367 Genealogical tree
  2. Python的subprocess子进程和管道进行交互
  3. 统计学习笔记(2)——感知机模型
  4. 拥抱 Java 8 并行流吧,速度飞起!
  5. 解决com.xpand.. starter-canal 依赖引入问题
  6. HDFS写数据的流程图
  7. linux使用lftp文件自动认证上传下载
  8. 【LOJ】 #2540. 「PKUWC2018」随机算法
  9. Newbe.Claptrap 0.9.4 发布,全新构建
  10. MailMail升级到1.0.2.4
  11. 微博机器学习平台云上最佳实践
  12. Android笔记 android 7.0 动态申请权限
  13. 计算机图形学E10——Bezier曲线
  14. C# .NET 使用DotNetZip开源类库 处理 压缩/解压 Zip 处理乱码情况
  15. RIA and volta
  16. prometheus 筛选不同的cpu核心
  17. asp.net中实现登陆的时候用SSL
  18. 树莓派3B+安装JupyterLab
  19. IT男的神级吐槽 || 我们IT人的心声(_)
  20. 二分查找理论(三种问题类型、两种算法形式)

热门文章

  1. 如何从外贸B2B平台中开发出更多客户
  2. skynet源码分析之lua层消息处理
  3. ios微信本地视频上传到服务器,小程序 ios上传视频的问题
  4. 可靠性测试设备技术含量_可靠性测试技术文件.doc
  5. 农业数字化:谁来进行数据整合?
  6. oracle+12c+大表,ORACLE 12C新特性-在线迁移表或分区 | 信春哥,系统稳,闭眼上线不回滚!...
  7. 数据库主键 4种类型及6种约束
  8. ubuntu 11.10安装及配置
  9. 单片机拟真电路图软件_单片机最小系统电路图,以及单片机的应用分类
  10. 【算法专题】环状图(置换群)