基于Linux系统的SDL图形库记忆翻牌小游戏

这篇博客介绍了如何在Linux环境下使用SDL图形库开发一款翻牌记忆游戏。首先通过二维数组显示背景及小图片,然后实现鼠标点击翻转图片功能,并确保能自动翻回。接着,讲解了游戏逻辑翻转的实现,即根据游戏规则判断是否翻转图片。最后,通过SDL创建了动画界面来完成游戏。文章包含完整代码和运行效果图片。
摘要由CSDN通过智能技术生成

步骤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;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
SDL(Simple DirectMedia Layer)是一个跨平台的、开源的、C语言编写的图形库,用于游戏和多媒体应用程序的开发。下面是一个简单的SDL程序示例: 1. 导入SDL头文件: ``` #include <SDL2/SDL.h> ``` 2. 初始化SDL: ``` if (SDL_Init(SDL_INIT_VIDEO) != 0) { printf("SDL_Init Error: %s\n", SDL_GetError()); return 1; } ``` 3. 创建窗口: ``` SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); if (win == NULL) { printf("SDL_CreateWindow Error: %s\n", SDL_GetError()); return 1; } ``` 4. 创建渲染器: ``` SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (ren == NULL) { SDL_DestroyWindow(win); printf("SDL_CreateRenderer Error: %s\n", SDL_GetError()); SDL_Quit(); return 1; } ``` 5. 加载图片: ``` SDL_Surface *bmp = SDL_LoadBMP("hello.bmp"); if (bmp == NULL) { SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); printf("SDL_LoadBMP Error: %s\n", SDL_GetError()); SDL_Quit(); return 1; } ``` 6. 创建纹理: ``` SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp); SDL_FreeSurface(bmp); if (tex == NULL) { SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); printf("SDL_CreateTextureFromSurface Error: %s\n", SDL_GetError()); SDL_Quit(); return 1; } ``` 7. 渲染纹理: ``` SDL_RenderClear(ren); SDL_RenderCopy(ren, tex, NULL, NULL); SDL_RenderPresent(ren); ``` 8. 等待退出: ``` SDL_Delay(2000); ``` 9. 释放资源: ``` SDL_DestroyTexture(tex); SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit(); ``` 这是一个非常简单的SDL程序示例,但是它演示了如何使用SDL创建一个窗口、渲染图片和退出程序。更多高级的功能,如音频、输入、事件处理等,需要查阅SDL的文档和示例代码。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值