本例中的源代码如下:

#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"

void Slock(SDL_Surface *screen)
{
if ( SDL_MUSTLOCK(screen) )
{
if ( SDL_LockSurface(screen) < 0 )
{
return;
}
}
}
void Sulock(SDL_Surface *screen)
{
if ( SDL_MUSTLOCK(screen) )
{
SDL_UnlockSurface(screen);
}
}
void DrawPixel(SDL_Surface *screen, int x, int y,
Uint8 R, Uint8 G, Uint8 B)
{
Uint32 color = SDL_MapRGB(screen->format, R, G, B);
switch (screen->format->BytesPerPixel)
{
case 1: // Assuming 8-bpp
{
Uint8 *bufp;
bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
*bufp = color;
}
break;
case 2: // Probably 15-bpp or 16-bpp
{
Uint16 *bufp;
bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
*bufp = color;
}
break;
case 3: // Slow 24-bpp mode, usually not used
{
Uint8 *bufp;
bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3;
if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
{
bufp[0] = color;
bufp[1] = color >> 8;
bufp[2] = color >> 16;
} else {
bufp[2] = color;
bufp[1] = color >> 8;
bufp[0] = color >> 16;
}
}
break;
case 4: // Probably 32-bpp
{
Uint32 *bufp;
bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
*bufp = color;
}
break;
}
}
void DrawScene(SDL_Surface *screen)
{
Slock(screen);
for(int x=0;x<640;x++)
{
for(int y=0;y<480;y++)
{
DrawPixel(screen, x,y,y/2,y/2,x/3);
}
}
Sulock(screen);
SDL_Flip(screen);
}

int main(int argc, char *argv[])
{
if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 )
{
printf("Unable to init SDL: %s"n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
SDL_Surface *screen;
screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
if ( screen == NULL )
{
printf("Unable to set 640x480 video: %s"n", SDL_GetError());
exit(1);
}
int done=0;
while(done == 0)
{
SDL_Event event;
while ( SDL_PollEvent(&event) )
{
if ( event.type == SDL_QUIT ) { done = 1; }
if ( event.type == SDL_KEYDOWN )
{
if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
}
}
DrawScene(screen);
}
return 0;
}

程序运行结果如下:

更多内容请看游戏开发、网络游戏攻略、Solaris基础知识入门专题,或进入讨论组讨论。

转载于:https://www.cnblogs.com/Henrya2/archive/2009/03/24/1420868.html

使用SDL打造游戏世界之入门篇 - 6相关推荐

  1. 使用SDL打造游戏世界之入门篇 - 1

    来源:天极开发 作者:维维编译 出处:巧巧读书 2007-07-17 进入讨论组 简介 Simple DirectMedia Layer, 简称SDL,是一个自由的跨平台的多媒体开 发包,主要通过Op ...

  2. 使用SDL打造游戏世界之入门篇 - 4

    简单的象素绘制 下文从使用SDL的编程函数开始,介绍了如何使用SDL在屏幕上进行象素绘制的基本知识,并给出了一个简单的例子. 如果要在VC中用SDL库,必须在源文件头部包含以下头文件: #includ ...

  3. 使用SDL打造游戏世界之入门篇 - 2

    VC6下SDL的安装和初步使用 首先,我们为所有的工程创建一个文件夹tutorial,将下载的开发库SDL-devel-1.2.8-VC6.zip拷贝到tutorial下并解压,并保证如下的文件夹层次 ...

  4. 使用SDL打造游戏世界之入门篇 - 5

    同时,由于绘制的屏幕不能同时接受两个函数的同时操作,我们需要其他两个辅助函数,用于在绘制前对屏幕进行锁定,以及在绘制完成之后解除锁定.这两个 工作一般由SDL_MUSTLOK(SDL_Surface ...

  5. 使用SDL打造游戏世界之入门篇 - 7

    打开和显示图片 在这个例子里我们将学习如何使用SDL程序中打开和显示图片.示例程序将绘制一个漂亮的背景,上面显示一个正方形图案,并可以使用键盘的方向键移动它.如果比较熟悉"推箱子" ...

  6. 移动游戏数据分析(入门篇)

    作者:GRG专栏作家 刘异 网龙公司 产品分析经理,专注移动互联网数据分析 前言: 最近一段时间在做部门网游业务的分析沉淀和框架培训,刚好应网大的需求在公司内开设游戏产品数据分析师认证的课程,因此开始 ...

  7. 我们的游戏世界(背包【仓库】,交易,任务,简单经济系统,装备)实现(基于仙剑demo聊聊游戏世界)第一篇谈谈交易

    一直不知道应该把下一步我们要更新的代码怎么归类,在网上看了下这个分类,我觉得这个完全是针对玩家体验的,比如说,装备系统,(背包)仓库系统,交易系统这些都是相辅相成的,分开真的好吗?而这里的世界系统仅仅 ...

  8. 3D游戏开发套件指南(入门篇)

    今天将介绍最新的3D游戏开发套件.不论是使用2D还是3D游戏开发套件,都可以在不编写任何代码的情况下,通过设置与拖放便能快捷的实现游戏创意. 指南简介 本指南将引导开发者设置一个空的场景,使用3D游戏 ...

  9. Unity-3D游戏开发套件指南(入门篇)-免费资源

    目录 指南简介 创建新场景 添加移动平台 使用指令开门 敌人对象 造成对象伤害 装饰 石块和植被绘画器 传送玩家 我们为大家介绍过Unity Brighton的内容团队推出的2D游戏开发套件,今天将介 ...

最新文章

  1. 求字符串中汉字的个数
  2. ArcGIS API for Silverlight 点沿着线流动
  3. ubuntu错误 “cp: omitting directory”解决办法
  4. 程序员刚结婚3天,老婆疑似骗婚?聊天记录曝光,网友:拜金实锤
  5. l洛谷P4779 【模板】单源最短路径(标准版)(dijkstra)
  6. shell date常用运算命令
  7. mysql高可用方案MHA介绍
  8. 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)
  9. pandas中inplace_pandas回顾小结(二)
  10. 一起来学SpringBoot | 第四篇:整合Thymeleaf模板
  11. Multi-thread--提高C++性能的编程技术笔记:多线程内存池+测试代码
  12. 从C#中通过Windows窗体添加信息到数据库 (添加学生信息)
  13. 移远EC20串口使用阻塞问题
  14. vue 圆形 水波_vuejs 水波纹框架
  15. Skywalking概述
  16. 国开电大 管理心理学 形考任务1-4
  17. PostgreSQL向量计算插件——vops
  18. ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决
  19. Linux的markdown笔记软件,3款免费好用的Markdown笔记应用,可以替代印象笔记
  20. PyG搭建GAT实现节点分类

热门文章

  1. 病案编码员需要计算机的什么知识,前辈分享:优秀编码员必须经历的成长过程,你到哪一级了?...
  2. 您有一份阿里云云原生直播攻略待查收
  3. 用python录入成绩储存程序_用Python创建成绩计算器的程序
  4. centos7 没有pip命令_Linux(CentOS7)部署系列---Docker编排应用部署方案
  5. java表示新年快乐,2017新年快乐:三种和新年相关的地道表达
  6. python apply_async数据量大不执行_apply_async里面的函数不执行
  7. 什么是用户与计算机硬件之间的桥梁,计算机应用基础简答题(附答案)
  8. 如何让页面停止加载_Axure 案例:数值加载效果
  9. Python之web开发(三):python使用django框架搭建网站之SQLserver数据库连接
  10. 图像降噪算法——高斯低通滤波