步骤1:显示图片
用二维数组来显示8张90×90的配对图片,用来翻转的;首先显示的是背景图片。定义一个二维数组pic[4][4] 来表示每张小图片存放的位置,数组里面存放0~7的数字,当前位置存放是0,就表示该位置要显示image0小图片。这样就可以显示所有小图片了。
步骤2: 实现可以翻转
根据鼠标点击的位置,翻转指定的小图片,而且要自动的翻转回来,主要是鼠标的获取和定位;定义一个二维数组flag[mouse_y/90][mouse_x/90] 来标志有没有翻转,鼠标点击的坐标位置除以90就可以确定点击的是哪张小图片。
步骤3: 游戏逻辑翻转
所谓逻辑翻转就是根据游戏的规则翻转和不翻转图片,就是当鼠标点击次数为偶数时,判断前面的一张图片和当前这张图片是否相同,如果是相同的,这两张图片就不要翻转回背面,否则,就把这两张图片都翻转回背面。主要还是怎样判断两张图片是否相同,解决方法是根据一开始的二维数组pic[4][4]里面存放的数字是否是相同的来判断两张图片是否是相同的。直到所有的小图片都被翻转了游戏就结束。最后利用了SDL的强大功能弄了一个动画的界面来结束游戏。
下面是完整的代码:
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <string>
#include <stdio.h>
#include <time.h>
const int SCREEN_WIDTH = 360; //屏幕宽
const int SCREEN_HEIGHT = 360; //屏幕高
const int SCREEN_BPP = 32; //屏幕像素
const int FRAMES_PER_SECOND = 10;
const int FOO_WIDTH = 90; //小图片90*90
const int FOO_HEIGHT = 90;
SDL_Surface * foo = NULL;
SDL_Surface * screen = NULL;
SDL_Surface *image0 = NULL;
SDL_Surface *image1 = NULL;
SDL_Surface *image2 = NULL;
SDL_Surface *image3 = NULL;
SDL_Surface *image4 = NULL;
SDL_Surface *image5 = NULL;
SDL_Surface *image6 = NULL;
SDL_Surface *image7 = NULL;
SDL_Surface *Menu = NULL;
SDL_Surface *beginBg = NULL;
SDL_Surface * endBg = NULL;
SDL_Event event;
//定义一个二维数组,用来保存图片索引
int pic[4][4];
bool flag[4][4]; //标记图像是否翻开
bool mousecheck; //记录鼠标点击状态
int pic_x, pic_y; //图片索引
int mouse_x;
int mouse_y; //鼠标点击位置
bool quit = false;
bool lock;
int GameState;//游戏当前状态
const int BEGIN = 0;//开始状态
const int RUN = 1;//运行状态
const int END = 2;//结束状态
SDL_Rect MenuRect[2];
SDL_Rect EndRect[2];
int end_y;
class Foo
{
private:
int offSet;
int velocity;
int frame;
public:
Foo();
int handle_events();
void show();
};
Foo Show;
Foo::Foo()
{
offSet = 0;
velocity = 0;
}
//读入图片
SDL_Surface *load_image(std::string filename)
{
SDL_Surface * loadedImage = NULL;