c语言推箱子 扫雷项目
推箱子
两关的推箱子用到一个三维数组
用到的图片数据如下
https://pan.baidu.com/s/1IDE4GQLo46cxNywDqwxmlQ
密码:jdel
代码如下:
#include<stdio.h>#include<easyx.h>#include<conio.h>//getch不显示字母#include<mmsystem.h>#pragmacomment(lib,"winmm.lib")//PlaySound播放wav//mciSendString放mp3intmyMap[][][]={{//8行9列-->8行10列,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{//7行10列-->8行10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}};//初始地图intmap[][];//正在使用地图IMAGEimg[];intlevel=;intflag;//当前关卡是否结束intop[];//保存最近100次的操作inttimes=;//保存的操作次数现在可以回撤次数voidrecord(intre)//记录每次的操作用于每部操作之后放到数组中{op[times++]=re;}voidrecall(){if(times==)return;//无法撤回times--;intx,y;for(inti=;i<;i++){for(intj=;j<;j++){if(map[i][j]==||map[i][j]==)//人或者人在目的地上{x=i;y=j;}}}//用x,y来表示人的位置switch(op[times]){case://直接往下走map[x][y]-=;map[x+][y]+=;break;case://带箱子往下走map[x][y]+=;map[x+][y]+=;//箱子下去了map[x-][y]-=;break;case://直接往上走map[x][y]-=;map[x-][y]+=;break;case://带着箱子往上走map[x][y]+=;map[x+][y]-=;map[x-][y]+=;break;case://直接往右走map[x][y]-=;map[x][y+]+=;break;case:map[x][y]+=;map[x][y+]+=;map[x][y-]-=;break;case://直接往左走map[x][y]-=;map[x][y-]+=;break;case:map[x][y]+=;map[x][y-]+=;map[x][y+]-=;break;}}voidloadMap()//加载地图{for(inti=;i<;++i){for(intj=;j<;j++){map[i][j]=myMap[level][i][j];//把第几关的地图放进map}}}voiddrawMap()//利用数字进行贴图{BeginBatchDraw();//双缓冲贴图优化贴图效果putimage(,,&img[]);for(inti=;i<;++i){for(intj=;j<;++j){switch(map[i][j]){case://空地break;case://墙壁putimage(j*,i*,&img[]);break;case://putimage(j*,i*,&img[]);break;case:putimage(j*,i*,&img[]);break;case:putimage(j*,i*,&img[]);break;case:putimage(j*,i*,&img[]);break;case:putimage(j*,i*,&img[]);break;}}}EndBatchDraw();}voidplay(){intx,y;//保存人的位置for(inti=;i<;i++){for(intj=;j<;j++){if(map[i][j]==||map[i][j]==)//人或者人在目的地上{x=i;y=j;}}}//找到人开始操作getch直接读取键盘的一个字符头文件conio.h//getch直接按就有反应getchar按完需要回车才有反应switch(getch()){case'w':case'W':if(map[x-][y]==||map[x-][y]==)//上方可以走或者上面是目的地或者空地{map[x][y]-=;map[x-][y]+=;record();}elseif(map[x-][y]==||map[x-][y]==)//上方是箱子或者目的地箱子{if(map[x-][y]==||map[x-][y]==){map[x][y]-=;map[x-][y]-=;map[x-][y]+=;record();}}break;case'a':case'A':if(map[x][y-]==||map[x][y-]==){map[x][y]-=;map[x][y-]+=;record();}elseif(map[x][y-]==||map[x][y-]==){if(map[x][y-]==||map[x][y-]==){map[x][y]-=;map[x][y-]-=;map[x][y-]+=;record();}}break;case's':case'S':if(map[x+][y]==||map[x+][y]==){map[x][y]-=;map[x+][y]+=;record();}elseif(map[x+][y]==||map[x+][y]==){if(map[x+][y]==||map[x+][y]==){map[x][y]-=;map[x+][y]-=;map[x+][y]+=;record();}}break;case'd':case'D':if(map[x][y+]==||map[x][y+]==){map[x][y]-=;map[x][y+]+=;record();}elseif(map[x][y+]==||map[x][y+]==){if(map[x][y+]==||map[x][y+]==){map[x][y]-=;map[x][y+]-=;map[x][y+]+=;record();}}break;//如果方向键盘上下左右72807577case'r':case'R':recall();break;default:break;}}voidwin(){intboxNum=;for(inti=;i<;i++){for(intj=;j<;j++){if(map[i][j]==){boxNum++;if(map[i-][j]==||map[i+][j]==)//上下至少一睹墙{if(map[i][j-]==||map[i][j+]==){flag=-;return;}}}}}if(boxNum==){flag=;//所有的箱子都推到目的地上游戏赢return;}flag=;}intmain(){mciSendString(L"open遥远的你.mp3",,,);mciSendString(L"play遥远的你.mp3",,,);initgraph(,);loadimage(&img[],L"素材/背景.jpg",,);loadimage(&img[],L"素材/墙.jpg",,);loadimage(&img[],L"素材/人物.jpg",,);loadimage(&img[],L"素材/箱子.jpg",,);loadimage(&img[],L"素材/目的地.jpg",,);loadimage(&img[],L"素材/源氏.jpg",,);loadMap();//加载第一关while(){drawMap();//画图play();win();if(flag==)//没输没赢继续{}elseif(flag==)//赢{level++;//关卡加1下一关times=;//清空回撤记录drawMap();if(level==){MessageBox(GetHWnd(),L"游戏结束",L"恭喜",MB_OK);break;//结束}else{if(MessageBox(GetHWnd(),L"是否进入下一关?",L"恭喜",MB_OKCANCEL)==IDOK)//IDCANCEL要么好要么不好{loadMap();flag=;}elsebreak;}}else{drawMap();if(MessageBox(GetHWnd(),L"是否重新玩?",L"抱歉",MB_OKCANCEL)==IDOK){//level=0;//从最初的那关开始玩times=;loadMap();//重新加载新地图}elsebreak;}}//getchar();closegraph();return;}
推箱子代码
扫雷
扫雷素材:
https://pan.baidu.com/s/1oAAuPHCzfxiLggQuB7wFfw
密码:5rxd
#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
#include<mmsystem.h>
#pragma comment(lib,"WINMM.LIB") void drawMap(int map[][], IMAGE img[]);
void init(int map[][], IMAGE img[],int bobNum);
int play(int map[][]);
int open(int map[][], int x, int y);//打开0周围的一片
int main()
{
mciSendString(L"open 遥远的你.mp3", , , );
mciSendString(L"play 遥远的你.mp3", , , );
int map[][] = {};
srand((unsigned)time(NULL));
int bobNum = rand() % + ;
IMAGE img[];
init(map, img,bobNum);
initgraph(*, *);//图形库窗口 int num,sum=;
while ()
{
drawMap(map, img);
num=play(map);
sum += num;
if (num == -)
{
drawMap(map, img);
MessageBox(GetHWnd(), L"踩到雷了", L"BOOM", MB_OK);
break;
}
else if (sum==*-bobNum)//是不是踩完了 踩的总个数==地图大小-雷的个数
{
drawMap(map, img);
MessageBox(GetHWnd(), L"恭喜", L"GOOD", MB_OK);
break;
}
}
closegraph();
return ;
}
//画图函数 作用画图 是否需要返回值?
void drawMap(int map[][],IMAGE img[])
{
for (int i = ; i < ; ++i)
{
for (int j = ; j < ; ++j)
{
if (map[i][j] >= - && map[i][j] <= )//没有分开
{
putimage(j * , i * , &img[]);
}
else if (map[i][j]>)
{
putimage(j * , i * , &img[]);
}
else
switch (map[i][j])
{
case ://雷
putimage(j * , i * , &img[]);break;
case :putimage(j * , i * , &img[]); break;
case :putimage(j * , i * , &img[]); break;
case :putimage(j * , i * , &img[]); break;
case :putimage(j * , i * , &img[]); break;
case :putimage(j * , i * , &img[]); break;
case :putimage(j * , i * , &img[]); break;
case :putimage(j * , i * , &img[]); break;
case :putimage(j * , i * , &img[]); break;
case :putimage(j * , i * , &img[]); break;
default:
break;
}
}
}
}
void init(int map[][], IMAGE img[], int bobNum)
{ int x, y;
for (int i = ; i < bobNum;)
{
x = rand() % ;
y = rand() % ;
if (map[x][y] == )//这个位置没有雷
{
map[x][y] = -;//随机位置放一个雷
++i;
} }
for (int i = ; i < ; ++i)
{
for (int j = ; j < ; ++j)
{
if (map[i][j] == -)
{
//给上下左右加上1
for (int x = i - ; x <= i + ; ++x)
{
for (int y = j - ; y <= j + ; ++y)
{
if (x >= && x< && y >= && y < && map[x][y] != -)
{
map[x][y]++;//不是雷的位置加1
}
}
}
}
}
}
//for (int i = 0; i < 10; ++i)
//{
// for (int j = 0; j < 15; ++j)
// {
// printf("%d\t", map[i][j]);
// }
// printf("\n");
//}
loadimage(&img[], L"素材2/space.jpg", , );
loadimage(&img[], L"素材2/1.jpg", , );
loadimage(&img[], L"素材2/2.jpg", , );
loadimage(&img[], L"素材2/3.jpg", , );
loadimage(&img[], L"素材2/4.jpg", , );
loadimage(&img[], L"素材2/5.jpg", , );
loadimage(&img[], L"素材2/6.jpg", , );
loadimage(&img[], L"素材2/7.jpg", , );
loadimage(&img[], L"素材2/8.jpg", , );
loadimage(&img[], L"素材2/hitmine.jpg", , );//雷
loadimage(&img[], L"素材2/stone.jpg", , );//石头
loadimage(&img[], L"素材2/flag.jpg", , );//旗帜 }
//play 1.有没有踩到雷 2.点开几个位置(翻开了几次)
int play(int map[][])
{
MOUSEMSG msg;//保存鼠标信息
while ()
{
msg = GetMouseMsg();//获取鼠标信息
int i, j;
switch (msg.uMsg)
{
case WM_LBUTTONDOWN://左键按下
//左键按下的位置是属于数组的哪个元素
i = msg.y / ;
j = msg.x / ;
//-1~8之间的数字 表示没有翻开
//9~18之间的数字 表示翻开
//-1+10-->9
//写标记 只有没有翻开的位置才可以标记 标记+20
//19~28 表示这个位置是标记过的
if (map[i][j] == )
{
int num=open(map, i, j);
//for (int x = i - 1; x <= i + 1; ++x)
//{
// for (int y = j - 1; y <= j + 1; ++y)
// {
// if (x >= 0 && x < 10 && y >= 0 && y < 15)//判断是否越界
// {
// if (map[x][y] <= 8 && map[x][y] >= -1)//判断是否翻开
// {
// map[x][y] += 10;//翻开周围一片
// }
// }
// }
//}
return num;
}
if (map[i][j] <= && map[i][j] >= )//能不能点开
{
map[i][j] += ;
return ;
}//
else if (map[i][j] == -)
{
map[i][j] += ;
return -;
}
break;
case WM_RBUTTONDOWN://鼠标右键按下
i = msg.y / ;
j = msg.x / ;
//如果已经标记了的 可以取消标记
//如果是没有标记过 并且没有翻开的 点开标记
if (map[i][j] <= && map[i][j] >= -)
{
map[i][j] += ;
return ;
}
else if (map[i][j] >= )
{
map[i][j] -= ;
return ;
}
default:
break;
}
}
}
int open(int map[][], int x, int y)
{
int num = ;
map[x][y] += ;
for (int i = x - ; i <= x + ; ++i)
{
for (int j = y - ; j <= y + ; ++j)
{
if (i >= && i< && j>= && j < )
{
if (map[i][j] == )
{
num+=open(map, i, j);//如果周围有0那么翻开周围的0
}
else if (map[i][j] >= - && map[i][j] <= )
{
map[i][j] += ;
num++;
}
}
}
}
return num;
}
//获取鼠标信息方法
// WM_MOUSEMOVE 鼠标移动
// WM_MOUSEWHEEL 鼠标滚轮拨动
// WM_LBUTTONDOWN 左键按下
// WM_LBUTTONUP 左键弹起
// WM_LBUTTONDBLCLK 左键双击
// WM_MBUTTONDOWN 中键按下
// WM_MBUTTONUP 中键弹起
// WM_MBUTTONDBLCLK 中键双击
// WM_RBUTTONDOWN 右键按下
// WM_RBUTTONUP 右键弹起
// WM_RBUTTONDBLCLK 右键双击
c语言推箱子 扫雷项目的更多相关文章
- C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- C++学习(九)(C语言部分)之 项目 推箱子游戏
游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...
- C语言小程序——推箱子(窄字符和宽字符)
C语言小程序——推箱子(窄字符Version) 推箱子.c #include <stdio.h> #include <conio.h> #include <stdlib. ...
- C语言之推箱子游戏代码
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Yan_Less 正文 新手注意:如果你学习遇到问题找不到人解答,可以点 ...
- 012-C语言小游戏之推箱子
012-C语言小游戏之推箱子 一.创建游戏地图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #define ROWS 11 #define COLS 12 char ...
- C语言实现推箱子游戏完整代码
C语言实现推箱子游戏完整代码 前言 自己做的,可能有些代码不够工整,或者有些小问题,但游戏的基本操作是可以实现的 代码效果 代码一共分为8个部分,4个控制上下左右移动,2个判断输赢,1个统计归为的个数 ...
- c语言游戏推箱子
前两天做了推箱子小游戏,看似简单的一个小游戏背后却 有巨大的秘密,这秘密就是一大堆逻辑. 自从学习了函数过后,的确是解决了很多问题,而且调用很方便,尽管我现在都不是很会调用. 写完一个函数,准备测试一 ...
- C语言版推箱子
推箱子源代码初步: #include<stdio.h> #include<conio.h> #include<stdlib.h> #define boolean i ...
随机推荐
- python3.5学习笔记(说明)
本内容是自己在学习python过程中总结的知识点,只用于学习和交流,请勿用作商业用途,部分内容来自网络,如有侵权,联系删除.
- MySql的数据库优化到底优啥了都??(1)
嘟嘟最不愿意做的就是翻招聘信息. 因为一翻招聘信息,工作经历你写低于两年都不好意思,前后端必须炉火纯青融汇贯通,各式框架必须如数家珍不写精通咋的你也得熟练熟练, 对了你是985吗?你是211吗??你不 ...
- Redis持久化背后的故事
Redis持久化 Redis提供了不同的持久化选项: RDB持久化以指定的时间间隔保存那个时间点的数据快照. AOF持久化方法则会记录每一个服务器收到的写操作.在服务器启动时,这些记录的操作会逐条执行 ...
- [PTA] 数据结构与算法题目集 6-3 求链式表的表长
Length( List L ){ int res=0; while(L!=NULL){ res++; L=L->Next; } return res; }
- nginx CRLF(换行回车)注入漏洞复现
nginx CRLF(换行回车)注入漏洞复现 一.漏洞描述 CRLF是”回车+换行”(\r\n)的简称,其十六进制编码分别为0x0d和0x0a.在HTTP协议中,HTTP header与HTTP Bo ...
- python面向对象的继承-组合-02
*面向对象(OOP)的三大特征:**# 封装.继承.多态 继承 什么是继承 继承:# 是一种关系,描述两个对象之间什么是什么的什么的关系 例如:麦兜.佩奇.猪猪侠.猪刚鬣,都是猪 为什么要使用继承 继 ...
- java练习---12
public class L1106 { public static void main(String[] args) { // TODO Auto-generated method stub Tes ...
- flink入门实战总结
随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性.吞吐量.容错能力以及使用便 ...
- CSRF_TOKEN
目的是防御CSRF攻击. Token就是令牌,最大的特点就是随机性,不可预测. CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中, ...
- 0728 history
-- :: cd /etc/yum.repos.d/ -- :: wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox. ...