`
rcfalcon
  • 浏览: 228029 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个SDL的实验——模拟分子的运动

阅读更多

今天(周六)加班。。。给别的公司做技术支持,于是乎必须呆着,但是没事的时候自己安排。

于是学学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 模拟时钟

    在本实验中,我们将探讨如何使用SDL2.0库来创建一个模拟时钟。SDL(Simple DirectMedia Layer)是一个跨平台的开发库,主要用于处理图形、音频和输入设备,广泛应用于游戏开发和教学环境中。SDL2.0是该库的一个更新...

    Race Through! OpenGL的第一个实验——一个简单的赛车游戏-开源.zip

    OpenGL的第一个实验——一个简单的赛车游戏-开源"项目,显然是一个旨在教授初学者如何使用OpenGL来开发游戏的教程。在这个项目中,我们将深入探讨OpenGL的基本概念和在构建赛车游戏中的应用。 首先,OpenGL是一个...

    SDL的经典书籍——协议设计类

    根据提供的文件信息,本书《Systems Engineering with SDL: Developing Performance-Critical Communication Systems》是一本关于系统工程与SDL(Specification and Description Language)在高性能通信系统开发中的...

    SDL —— 常用函数总结(持续更新).zip

    **SDL (Simple DirectMedia Layer)** 是一个跨平台的多媒体库,它主要用于开发游戏和其他需要高效图形处理的应用程序。SDL提供了一系列的低级API,让开发者能够便捷地处理窗口管理、事件处理、音频输出、图像渲染...

    信息安全_.第5讲.不同企业.SDL差异几何——不同企业的SDL建设Roadmap分析4.10.pptx

    从SDL到DevSecOps的转变意味着安全实践不再仅仅是开发过程的一个阶段,而是整个开发运维过程中的一个集成部分。DevSecOps强调在整个软件生命周期中持续集成安全,将安全测试和控制融入快速迭代的开发流程中,这需要...

    不同企业,SDL差异几何——不同企业的SDL建设Roadmap分析.pdf

    SDL(安全开发生命周期)是一个系统的方法,它在软件开发的整个过程中整合了安全实践。不同的企业会根据自身的特点和需要,实施不同策略的SDL建设Roadmap。本文将重点分析在移动安全、威胁建模、安全管控、安全架构...

    一个SDL游戏的基本示例

    这个基本示例将引导我们了解如何在SDL框架下创建一个简单的游戏,比如“GreenSnake”——一个可能类似经典游戏《贪吃蛇》的实现。 在SDL中,游戏开发的核心概念包括窗口管理、渲染、事件处理、时间和输入控制。以下...

    不同企业,SDL差异几何——不同企业的SDL建设Roadmap分析4.10.pdf

    【SDL(Software Development Life Cycle)】是软件开发生命周期的缩写,它是一种安全开发方法,旨在将安全措施融入软件开发的每个阶段,以降低安全风险。SDL通常包括多个实践领域,如策略与指标、合规性与政策、...

    SDL SDK + SDL Image

    SDL是一个跨平台的多媒体库,而SDL Image是SDL的一个附加组件,专门用于加载和处理各种图像格式。 首先,让我们深入了解SDL。SDL(Simple DirectMedia Layer)是一个开源的库,主要用于创建多媒体应用,如视频游戏...

    SDL2实现的粒子简单模拟-simulator.zip

    总的来说,通过SDL2实现粒子模拟是一个有趣且富有挑战性的实践项目,它涵盖了图形渲染、事件处理、面向对象编程和性能优化等多个方面。这个过程不仅可以提升你的编程技能,还能让你更好地理解和欣赏计算机图形学的...

    深度学习的概念、策略、效果及其启示——美国深度学习项目(SDL)的解读与分析.pdf

    深度学习作为人工智能领域的一个重要分支,是近年来推动IT行业发展的重要力量。它通过对大量数据进行训练,使计算机系统能够像人类一样,通过多层次的信息处理对数据进行解析和学习,以此实现对复杂任务的处理。从给...

    SDL_Demo.rar_DEMO_SDL example_sdl_sdl demo_sdl winmain

    描述中提到"SDL使用实例,该实例运行于PocketPC2002,窗口不停的显示彩色条纹",这表明这个程序是一个运行在Windows CE(如PocketPC 2002)设备上的SDL应用,它展示了一个基本的图形功能——绘制动态的彩色条纹。...

    SDL-1.3 SDL.lid SDL.dll SDL.h

    标题"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 Game Development 源码_基于SDL2.0

    在游戏开发领域,SDL(Simple DirectMedia Layer)是一个广泛使用的开源库,特别适用于2D游戏的开发。SDL2.0是其最新版本,提供了许多增强的功能和性能优化。本篇文章将深入探讨基于SDL2.0的源码开发,帮助你理解...

    SDL添加了文字显示

    标题提到的“SDL添加了文字显示”是指利用SDL的一个扩展库——SDL_ttf,实现了在SDL应用程序中动态显示Unicode文字的功能。SDL_ttf库是SDL的扩展,专门用于处理TrueType字体,使得开发者能够在程序中方便地渲染文本...

    SDL_net-1.2.7.rar_SDL_net-1.2.7_SDL_net.dll_sdl_sdl-ne_sdl_net

    总之,SDL_net-1.2.7是一个强大且易用的网络库,它为SDL应用提供了丰富的网络功能,帮助开发者高效地实现跨平台的网络通信,无论是在游戏开发还是其他多媒体应用中,都是一个不可或缺的组件。通过深入理解和使用SDL_...

    sdl1.2和sdl2.0_windows

    SDL(Simple DirectMedia Layer)是一个跨平台的开发库,主要用于处理图形、音频、输入设备等多媒体功能。在游戏开发和多媒体应用领域,SDL是开发者常用的工具之一。本篇将详细介绍SDL的两个主要版本——SDL 1.2和...

    SDL-1.2.0_sdl_

    标题“SDL-1.2.0_sdl_”和描述“sdl library for c++ on windows”提到了一个关键的软件开发库——Simple DirectMedia Layer (SDL)的1.2.0版本,这是一个专为C++编程语言设计,并在Windows操作系统上使用的库。SDL是...

    SDL_image-1.2.3.zip_SDL.zip_SDL1.2.3_SDL_image-1.2.3_sdl_image.h

    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-2.0.8.tar.gz_SDL ttf_SDL_ttf_linux_linux SDL_ttf.h

    SDL_ttf,全称为Simple DirectMedia Layer TTF(简单直接媒体层TrueType字体库),是SDL库的一个扩展,专为在Linux操作系统上处理TrueType字体而设计。这个版本,即SDL_ttf-2.0.8,提供了丰富的功能,让开发者能够...

Global site tag (gtag.js) - Google Analytics