最近自己折腾了下Codeblocks编译C的问题,然后突然想搞可视化界面,于是又安装ege,网上各种搜索,走了很多弯路,所以贴出来免得别人再走弯路,首先要用到ege的话,一定要下载codeblocks-12.11mingw-setup.exe这个版本,其他版本以及最新版本可以在装完这个版本后在这个上边覆盖,Codeblocks安装我选择D盘的路径,剩下的都是默认就好了,很快安装完,然后下载了ege15.04.zip,解压缩后将ege15.04\include目录下ege里边的*.h和ege.h,graphics.h都放入D:\CodeBlocks\MinGW\include里, 将ege15.04\lib\mingw4.7\lib下的*.a文件都放入D:\CodeBlocks\MinGW\lib下边,然后打开Codeblocks,新建file——New——project
一定要选C++项目,然后命名保存,打开project下边build options...
linker settings,左边add添加*.a文件,文件在 D:\CodeBlocks\MinGW\lib目录下
libgraphics.a
libgdi32.a
libimm32.a
libmsimg32.a
libole32.a
liboleaut32.a
libwinmm.a
libuuid.a
要按顺序添加进去,然后保存,运行你的程序
#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 50 //图片大小50
ege::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~ROW
int 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]++;
}
}
}
}
}
}
//简单加密+20
for(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){
//先打开这个0
mp[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~28
r=msg.x/SIZE+1;
c=msg.y/SIZE+1;
if(mp[r][c]>=19&&mp[r][c]<=28){
if(mp[r][c]==20){ //翻开是0
openZero(r,c);
}else{
mp[r][c]-=20; //-1~8
blank++;
}
}
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+50,0); //界面
//setrendermode(RENDER_MANUAL);
setbkcolor(WHITE);
setcolor(BLUE);
setfont(20, 0, "楷体");
setbkmode(TRANSPARENT);
//设置开始时间
double startTime = fclock();
//for (; is_run(); delay_fps(60)) {
// cleardevice();
//在帧循环中不断获取运行时间
double runTime = fclock();
//当前时间就等于两个时间差
double curTime = runTime - startTime;
xyprintf(300, 760, "运行总时间:%.3lf", runTime);
xyprintf(300, 780, "计时:%.3lf", curTime);
/*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,"D:/software/sourcecode/tx/pic/0.jpg");
getimage(img1,"D:/software/sourcecode/tx/pic/1.jpg");
getimage(img2,"D:/software/sourcecode/tx/pic/2.jpg");
getimage(img3,"D:/software/sourcecode/tx/pic/3.jpg");
getimage(img4,"D:/software/sourcecode/tx/pic/4.jpg");
getimage(img5,"D:/software/sourcecode/tx/pic/5.jpg");
getimage(img6,"D:/software/sourcecode/tx/pic/6.jpg");
getimage(img7,"D:/software/sourcecode/tx/pic/7.jpg");
getimage(img8,"D:/software/sourcecode/tx/pic/8.jpg");
getimage(img9,"D:/software/sourcecode/tx/pic/thunder.png");
getimage(img10,"D:/software/sourcecode/tx/pic/blue.png");
getimage(img11,"D:/software/sourcecode/tx/pic/flag.png");
gameInit();
gameDraw();
while(1){
delay_fps(60);
// for (; is_run(); delay_fps(60)) {
cleardevice();
//在帧循环中不断获取运行时间
double runTime = fclock();
//当前时间就等于两个时间差
double curTime = runTime - startTime;
xyprintf(300, 760, "运行总时间:%.3lf", runTime);
xyprintf(300, 780, "计时:%.3lf", curTime); //防止闪退
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;
}
运行后的界面,这个做完后我又想加一个计时的,所以又用到了线程pthread,发现又没有这个头文件,下载了这几个文件,*.h的文件放到include目录下,*.a的文件放到lib目录下,*.dll的文件放到C:\Windows\System32和C:\Windows\SysWOW64下边,程序既可以正常编译了。