200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > C语言入门项目——扫雷游戏(ege图形库+codeblocks)

C语言入门项目——扫雷游戏(ege图形库+codeblocks)

时间:2020-12-08 20:36:26

相关推荐

C语言入门项目——扫雷游戏(ege图形库+codeblocks)

扫雷游戏适合C练手,会C基本语法就可以尝试。需要导入ege图形库(文章后半部分写了ege如何导入codeblocks,以及我用到的ege函数)

一、先介绍如何将ege图形库导入codeblocks:

1、下载codeblocks

2、下载ege图形库的文件包 官方网址:ege图形库主站

(1)打开下载好的压缩包,找到ege文件夹中的include中的内容。

将ege中include中的上述六个文件复制粘贴到codeblocks的include中。

(2)和上面(1)的操作相同,把ege文件夹中的lib中的内容复制粘贴到codeblocks的lib中。

注意:如果在有出现有64位的和32位的mingw,应选32位的,因为ege库本身是32位,添加64的会报错。

(3)点开codeblock,新建一个C++project,点击project---->build options---->选linker setting---->在link libraries中点add---->点打开文件夹的那个图标---->进入lib文件夹后,把这8个添加进去:"libgraphics.a""libgdi32.a" "libimm32.a" "libmsimg32.a""libole32.a" "liboleaut32.a" "libwinmm.a""libuuid.a"添加完成后点ok。

二、扫雷游戏源代码:

//头文件

#include <bits/stdc++.h>#include <graphics.h> //图形库//#pragma comment(lib,"winmm.lib")using namespace std;#define ROW 15//行#define COL 15//列#define NUM 15//雷的个数#define SIZE 20//图片大小50ege::MUSIC music1; //定义音乐ege::MUSIC music2;ege::MUSIC music3;int blank=0; //点开空白的个数ROW*COL-NUM==count 即获胜int mp[ROW+2][COL+2]; 分为辅助区和游戏区 (定义在全局的数组都是初始化了的(值全为0))PIMAGE img0;//定义图片PIMAGE img1;PIMAGE img2;PIMAGE img3;PIMAGE img4;PIMAGE img5;PIMAGE img6;PIMAGE img7;PIMAGE img8;PIMAGE img9;PIMAGE img10;PIMAGE img11;

//绘制函数

//绘制函数(打印二维数组)void gameDraw(){for(int i=1;i<=ROW;i++){for(int j=1;j<=COL;j++){printf("%02d ",mp[j][i]);}printf("\n");}}

//初始化游戏函数(新开始一局游戏重新设定)

//初始化函数void gameInit(){srand((unsigned int)time(NULL)); //随机数播种for(int i=0;i<ROW+2;i++){ //初始化数组for(int j=0;j<COL+2;j++){mp[i][j]=0;}}for(int i=0;i<NUM;i++){//布雷int r=rand()%ROW+1; //可设雷的行范围为1~ROWint c=rand()%COL+1; //列范围为1~COL 游戏区if(mp[r][c]==0) mp[r][c]=-1;}for(int i=1;i<ROW+1;i++){ //计算游戏区每个数所在的九宫格有几个雷for(int j=1;j<COL+1;j++){if(mp[i][j]==0){for(int m=i-1;m<=i+1;m++){for(int n=j-1;n<=j+1;n++){if(mp[m][n]==-1){mp[i][j]++;}}}}}}//简单加密+20for(int i=1;i<=ROW;i++){for(int j=1;j<=COL;j++){mp[i][j]+=20;}}}

//载入图片

void drawMap(){for(int i=0;i<ROW+1;i++){for(int j=0;j<COL+1;j++){// printf("%2d",mp[i][j]);/* ##################################################################元素图片-1(雷) img[9]0~8(数字) img[0]~img[8]19~28(空白) img[10]>30(标记) img[11]################################################################### */if(mp[i][j]==-1){putimage((i-1)*SIZE,(j-1)*SIZE,img9); //雷}else if(mp[i][j]==0){putimage((i-1)*SIZE,(j-1)*SIZE,img0); //数字0}else if(mp[i][j]==1){putimage((i-1)*SIZE,(j-1)*SIZE,img1); //数字1}else if(mp[i][j]==2){putimage((i-1)*SIZE,(j-1)*SIZE,img2); //数字2}else if(mp[i][j]==3){putimage((i-1)*SIZE,(j-1)*SIZE,img3); //数字3}else if(mp[i][j]==4){putimage((i-1)*SIZE,(j-1)*SIZE,img4); //数字4}else if(mp[i][j]==5){putimage((i-1)*SIZE,(j-1)*SIZE,img5); //数字5}else if(mp[i][j]==6){putimage((i-1)*SIZE,(j-1)*SIZE,img6); //数字6}else if(mp[i][j]==7){putimage((i-1)*SIZE,(j-1)*SIZE,img7); //数字7}else if(mp[i][j]==8){putimage((i-1)*SIZE,(j-1)*SIZE,img8); //数字8}else if(mp[i][j]>=19&&mp[i][j]<=28){putimage((i-1)*SIZE,(j-1)*SIZE,img10);//空白图片}else if(mp[i][j]>30){putimage((i-1)*SIZE,(j-1)*SIZE,img11); //标记}}}}

//翻开空白出现到0后展开九宫格

void openZero(int r,int c){//先打开这个0mp[r][c]-=20;blank++;for(int m=r-1;m<=r+1;m++){for(int n=c-1;n<=c+1;n++){if(m>=1&&m<=ROW&&n>=1&&n<=COL){ //确保0位于游戏区if(mp[m][n]>=19&&mp[m][n]<=28){if(mp[m][n]!=20){mp[m][n]-=20;blank++;}else{openZero(m,n);}}}}}}

//游戏开始

int playGame(){ //玩游戏//定义一个鼠标消息mouse_msg msg={0};int r,c;//定义鼠标的行和列while(1){//msg=getmouse(); //获取鼠标消息信息while(mousemsg()){msg=getmouse(); //获取鼠标消息信息if(msg.is_down()&&msg.is_left()){//左键按下:翻开 空白图片19~28r=msg.x/SIZE+1;c=msg.y/SIZE+1;if(mp[r][c]>=19&&mp[r][c]<=28){if(mp[r][c]==20){//翻开是0openZero(r,c);}else{mp[r][c]-=20;//-1~8blank++;}}return mp[r][c];break;}else if(msg.is_down()&&msg.is_right()){ //右键按下:标记一个空白图片,取消一个标记r=msg.x/SIZE+1;c=msg.y/SIZE+1;if(mp[r][c]>=19&&mp[r][c]<=28){mp[r][c]+=50;//标记>30}else if(mp[r][c]>30){mp[r][c]-=50;}return mp[r][c];break;}}}}

//主函数

int main(){//HWND hwnd=initgraph(ROW*SIZE,COL*SIZE,SHOWCONSOLE);initgraph(ROW*SIZE,COL*SIZE); //界面/*mciSendString("open \"pic\win.mp3\" alias music",NULL,0,NULL);mciSendString("play file",NULL,0,NULL);*/music1.OpenFile("bgm.mp3");music1.Play();img0=newimage();img1=newimage();img2=newimage();img3=newimage();img4=newimage();img5=newimage();img6=newimage();img7=newimage();img8=newimage();img9=newimage();img10=newimage();img11=newimage();/*for(int i=0;i<11;i++){getimage(imgi,"i.jpg"); //0~8为数字图片。9是雷。10是空白。11是标记图片}*/// loadimage(&img[0],L"0.jpg",50,50); 把0.jpg这张图片以50*50的大小保存到img[0]中getimage(img0,"pic/0.jpg");getimage(img1,"pic/1.jpg");getimage(img2,"pic/2.jpg");getimage(img3,"pic/3.jpg");getimage(img4,"pic/4.jpg");getimage(img5,"pic/5.jpg");getimage(img6,"pic/6.jpg");getimage(img7,"pic/7.jpg");getimage(img8,"pic/8.jpg");getimage(img9,"pic/9.jpg");getimage(img10,"pic/10.png");getimage(img11,"pic/11.png");gameInit();gameDraw();while(1){//防止闪退drawMap();/* if(playGame()==0){openZero(r,c);}*/if(playGame()==-1){ //点到雷music2.OpenFile("fail.mp3");music2.Play();drawMap();music1.Stop();MessageBox(NULL,"\t\tGame over!\n\n\t\t是否继续游戏?","提示",3);break;}if(ROW*COL-NUM==blank){music1.Stop();music3.OpenFile("win.mp3");music3.Play();MessageBox(NULL,"\t Congratulate,You win!\n\n\t是否继续游戏?","提示",4);break;}//closegraph();}return 0;}

三、我所用到的ege函数

头文件:#include <graphics.h>定义界面:intigraphy(size,size); // 界面鼠标:mouse_msg msg={0};//定义一个鼠标消息msg=getmouse(); //获取鼠标消息信息mousemsg(); // 有鼠标消息msg.is_down();// 鼠标按下msg.is_left();// 鼠标左键msg.is_right();// 鼠标右键图片:PIMAGE img0;//定义图片 img0=newimage();getimage(img0,"pic/0.jpg"); // 获取图片putimage(SIZE,SIZE,img0); // 载入图片音乐:ege::MUSIC music1; //定义音乐music2.OpenFile("fail.mp3"); // 打开音乐所在的文件music2.Play(); // 播放音乐music1.Pause(); // 暂停音乐music1.Stop();//停止音乐弹框(游戏获胜或失败后弹出):MessageBox(NULL,"\t\tGame over!\n\n\t\t是否继续游戏?","提示",3);

参考链接:ege图形库函数

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。