今天(周六)加班。。。给别的公司做技术支持,于是乎必须呆着,但是没事的时候自己安排。
于是学学SDL,我用它写了一个可视化的C随机函数发生器的小程序。
刚开始所有点都位于同一点,然后随机的向周围移动。模拟分子的运动情况。
很有意思,这里分享一下代码,用的两个线程(一个线程刷新屏幕,一个线程用于计算)——这也是一个游戏采用的结构。
代码,貌似TAB缩进出了点问题。。
#pragma comment(lib,"SDL/SDL.lib")
#pragma comment(lib,"SDL/SDLmain.lib")
#include"include/SDL.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<iostream>
using namespace std;
SDL_Surface *screen;
SDL_Surface *image1;
SDL_Surface *image2;
SDL_Surface *image3;
int const MAX = 30;
int const fps = 75;
int const datarefresh = 1;
SDL_Rect offsect[MAX];
SDL_Thread *thread = NULL;
void work();
void cls();
void drawscreen();
void init();
void quit();
int my_thread( void *data );
int main(int argc, char **argv)
{
init();
while(1)
{
cls();
SDL_Delay( 1000 / fps );
drawscreen();
}
quit();
return 0;
}
void init()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
srand( time( 0 ) );
image1 = SDL_LoadBMP("res/test3.bmp");
image2 = SDL_LoadBMP("res/test2.bmp");
image3 = SDL_LoadBMP("res/back.bmp");
Uint32 colorkey = SDL_MapRGB( image1->format, 0xFF, 0xFF, 0xFF );
SDL_SetColorKey( image1, SDL_SRCCOLORKEY, colorkey );
SDL_SetColorKey( image2, SDL_SRCCOLORKEY, colorkey );
SDL_SetColorKey( image3, SDL_SRCCOLORKEY, colorkey );
for( int i=0; i < MAX; i++ )
{
offsect[i].x = 300;
offsect[i].y = 200;
offsect[i].w = image1->w;
offsect[i].h = image1->h;
}
thread = SDL_CreateThread( my_thread, NULL );
}
void cls()
{
SDL_Rect tmp;
tmp.x = 0;
tmp.y = 0;
tmp.w = 640;
tmp.h = 480;
SDL_BlitSurface( image3, 0, screen, &tmp );
}
void drawscreen()
{
SDL_UpdateRect(screen, 0, 0, 640, 480);
}
void work()
{
static bool turn = false;
SDL_Rect offsectnew;
for( int i=0; i < MAX; i++ )
{
offsectnew = offsect[i];
int x_delta,y_delta;
do
{
x_delta = ( (rand()%3) -1 )*1;
y_delta = ( (rand()%3) -1 )*1;
}
while( (offsectnew.x+x_delta)<0 && (offsectnew.x+x_delta)>640
&& (offsectnew.y+y_delta)<0 && (offsectnew.y+y_delta)>480 );
offsectnew.x += x_delta ;
offsectnew.y += y_delta ;
turn = !turn;
SDL_Surface *image;
if(turn)
image = image1;
else
image = image2;
SDL_BlitSurface(image, 0, screen, &offsectnew);
offsect[i] = offsectnew;
}
}
int my_thread( void *data )
{
while( 1 )
{
work();
SDL_Delay( datarefresh );
}
return 0;
}
void quit()
{
SDL_FreeSurface(image1);
SDL_FreeSurface(image2);
SDL_FreeSurface(image3);
SDL_KillThread( thread );
SDL_Quit();
}
分享到:
相关推荐
在本实验中,我们将探讨如何使用SDL2.0库来创建一个模拟时钟。SDL(Simple DirectMedia Layer)是一个跨平台的开发库,主要用于处理图形、音频和输入设备,广泛应用于游戏开发和教学环境中。SDL2.0是该库的一个更新...
OpenGL的第一个实验——一个简单的赛车游戏-开源"项目,显然是一个旨在教授初学者如何使用OpenGL来开发游戏的教程。在这个项目中,我们将深入探讨OpenGL的基本概念和在构建赛车游戏中的应用。 首先,OpenGL是一个...
根据提供的文件信息,本书《Systems Engineering with SDL: Developing Performance-Critical Communication Systems》是一本关于系统工程与SDL(Specification and Description Language)在高性能通信系统开发中的...
**SDL (Simple DirectMedia Layer)** 是一个跨平台的多媒体库,它主要用于开发游戏和其他需要高效图形处理的应用程序。SDL提供了一系列的低级API,让开发者能够便捷地处理窗口管理、事件处理、音频输出、图像渲染...
从SDL到DevSecOps的转变意味着安全实践不再仅仅是开发过程的一个阶段,而是整个开发运维过程中的一个集成部分。DevSecOps强调在整个软件生命周期中持续集成安全,将安全测试和控制融入快速迭代的开发流程中,这需要...
SDL(安全开发生命周期)是一个系统的方法,它在软件开发的整个过程中整合了安全实践。不同的企业会根据自身的特点和需要,实施不同策略的SDL建设Roadmap。本文将重点分析在移动安全、威胁建模、安全管控、安全架构...
这个基本示例将引导我们了解如何在SDL框架下创建一个简单的游戏,比如“GreenSnake”——一个可能类似经典游戏《贪吃蛇》的实现。 在SDL中,游戏开发的核心概念包括窗口管理、渲染、事件处理、时间和输入控制。以下...
【SDL(Software Development Life Cycle)】是软件开发生命周期的缩写,它是一种安全开发方法,旨在将安全措施融入软件开发的每个阶段,以降低安全风险。SDL通常包括多个实践领域,如策略与指标、合规性与政策、...
SDL是一个跨平台的多媒体库,而SDL Image是SDL的一个附加组件,专门用于加载和处理各种图像格式。 首先,让我们深入了解SDL。SDL(Simple DirectMedia Layer)是一个开源的库,主要用于创建多媒体应用,如视频游戏...
总的来说,通过SDL2实现粒子模拟是一个有趣且富有挑战性的实践项目,它涵盖了图形渲染、事件处理、面向对象编程和性能优化等多个方面。这个过程不仅可以提升你的编程技能,还能让你更好地理解和欣赏计算机图形学的...
深度学习作为人工智能领域的一个重要分支,是近年来推动IT行业发展的重要力量。它通过对大量数据进行训练,使计算机系统能够像人类一样,通过多层次的信息处理对数据进行解析和学习,以此实现对复杂任务的处理。从给...
描述中提到"SDL使用实例,该实例运行于PocketPC2002,窗口不停的显示彩色条纹",这表明这个程序是一个运行在Windows CE(如PocketPC 2002)设备上的SDL应用,它展示了一个基本的图形功能——绘制动态的彩色条纹。...
标题"SDL-1.3 SDL.lid SDL.dll SDL.h"中,"SDL-1.3"代表这是一个关于Simple DirectMedia Layer(SDL)库的版本1.3的相关内容。"SDL.lid"、"SDL.dll"和"SDL.h"是SDL库在Windows环境下开发和运行时所需的三个关键文件...
在游戏开发领域,SDL(Simple DirectMedia Layer)是一个广泛使用的开源库,特别适用于2D游戏的开发。SDL2.0是其最新版本,提供了许多增强的功能和性能优化。本篇文章将深入探讨基于SDL2.0的源码开发,帮助你理解...
标题提到的“SDL添加了文字显示”是指利用SDL的一个扩展库——SDL_ttf,实现了在SDL应用程序中动态显示Unicode文字的功能。SDL_ttf库是SDL的扩展,专门用于处理TrueType字体,使得开发者能够在程序中方便地渲染文本...
总之,SDL_net-1.2.7是一个强大且易用的网络库,它为SDL应用提供了丰富的网络功能,帮助开发者高效地实现跨平台的网络通信,无论是在游戏开发还是其他多媒体应用中,都是一个不可或缺的组件。通过深入理解和使用SDL_...
SDL(Simple DirectMedia Layer)是一个跨平台的开发库,主要用于处理图形、音频、输入设备等多媒体功能。在游戏开发和多媒体应用领域,SDL是开发者常用的工具之一。本篇将详细介绍SDL的两个主要版本——SDL 1.2和...
标题“SDL-1.2.0_sdl_”和描述“sdl library for c++ on windows”提到了一个关键的软件开发库——Simple DirectMedia Layer (SDL)的1.2.0版本,这是一个专为C++编程语言设计,并在Windows操作系统上使用的库。SDL是...
SDL_image是用于游戏开发和图形编程的一个开源库,它为Simple DirectMedia Layer (SDL) 提供了图像加载和渲染的功能。这个"SDL_image-1.2.3.zip_SDL.zip_SDL1.2.3_SDL_image-1.2.3_sdl_image.h"文件组合包含了SDL_...
SDL_ttf,全称为Simple DirectMedia Layer TTF(简单直接媒体层TrueType字体库),是SDL库的一个扩展,专为在Linux操作系统上处理TrueType字体而设计。这个版本,即SDL_ttf-2.0.8,提供了丰富的功能,让开发者能够...