使用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. php基础 简书,php基础
  2. IE8经常停止工作和显示异常
  3. 柳昀哲课题组在Nature Reviews Neuroscience上发表长篇综述提出表征富集理论
  4. 得到文件的服务器路径,如何获取服务器上的路径?
  5. mac版python连接mysql_Mac下Python连接MySQL · BlBana’s BlackHouse
  6. Quick BI 的模型设计与生成SQL原理剖析
  7. 计算机网络---非归零码、曼彻斯特编码和差分曼彻斯特编码
  8. AI理论知识基础(25)-机器学习常见损失函数, 共轭梯度法(1)
  9. PL/SQL - 03
  10. 1024电商项目的邮箱验证码与图形验证码功能模块
  11. 怎么解log方程_微观动力学解合成氨催化反应TOF
  12. ElasticSearch.js源码走一个大概
  13. 【mongoDB实战】mongoDB数据导入和导出
  14. 每个星座对应的天使。
  15. 拓端tecdat|R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
  16. CoinFLEX的基本情况以及与Bakkt
  17. 让网站支持RSS订阅
  18. 服务器保存qq群聊天图片无法显示,电脑中qq群聊天图片无法查看的解决方法
  19. 百度开源的 71 个炸天项目
  20. Java — 慎用Executors类中newFixedThreadPool()和newCachedThreadPool()

热门文章

  1. 【纯干货】你一定还不懂的,mysql缓存问题的解决方案
  2. rk3288 mipi 调试步骤
  3. Windows server 2008 Hyper-v下,玩转office communicator Server 2007 Enterprise
  4. 红旗linux上网本,红旗Linux系统下肿么改装windows系统 笔记本是sony
  5. java soap 增加命名空间_SOAP 命名空间 URI 要求
  6. Java的新项目学成在线笔记-day12(五)
  7. JavaScript实现音乐单曲循环
  8. wmts规范_Geoserver学习笔记-3、服务标准(WMTS详解)
  9. xxHash-Extremely fast Hash algorithm
  10. java计算机毕业设计计算机实验课程学习系统源码+mysql数据库+系统+lw文档+部署