做这个游戏是为了交作业,另外需要制作一份作业报告,故顺便以日志的形式连载一下!!!
非专业写游戏高手,水平有限,望多多指教。
开发工具:codelite v2.9
图形库:libSDL
开发平台:Windows
游戏类型:即时战略游戏
〇、游戏要求:
一、环境搭建
1、安装codelite。
2、到libsdl.org下载libSDL for windows编译好的动态链接库和头文件,复制到codelite下对应的目录。
二、游戏框架
1、游戏主循环的一般模型
for(; !end; ){ /* Do Input 处理鼠标键盘的事件响应*/ /* Do Move 游戏物体运动*/ /* Do Output 把物体输出到屏幕*/ }
2、我写的TombGame的框架
#include "cstdio" #include "SDL/SDL.h" int main(int argc, char **argv) { printf("game begin.\n"); /* SDL初始化 */ SDL_Init(SDL_INIT_VIDEO); atexit(SDL_Quit); /* 你懂的 */ SDL_WM_SetCaption("XX Tomb Raider", NULL); /* 设置窗口大小,返回一个surface,可以用来画东西 */ SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_ANYFORMAT); for(bool end = false; !end;){ /* 处理输入的键盘、鼠标等事件响应 */ SDL_Event event; while(SDL_PollEvent(&event)){ switch(event.type){ case SDL_KEYDOWN: switch(event.key.keysym.sym){ case SDLK_UP: break; case SDLK_DOWN: break; case SDLK_LEFT: break; case SDLK_RIGHT: break; case SDLK_SPACE: break; case SDLK_ESCAPE: end = true; break; } break; case SDL_QUIT: end = true; break; } } /* Movement */ /* Output */ /* 用黑色刷新屏幕 */ SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0)); /* 显示出来 */ SDL_Flip(screen); /* FPS Control,控制游戏进展的快慢 */ SDL_Delay(50); } printf("game end.\n"); return 0; }
运行以上代码,可以得到一个白色的窗体。
用鼠标点击窗体的关闭按钮“X”,会产生SDL_QUIT事件。与按下键盘上的ESC一样,调出程序的循环以结束游戏。
使用printf输出的,被SDL重定位到当前目录下的stdout.txt。
三、数据结构
游戏中常用到的两个计算对象,矩形Rect和运算向量Vector。
还有一些基本的数据结构由STL提供,例如vector, queue, stack, map等。
struct Rect{ int x1, x2; int y1, y2; bool operator==(const Rect& b) const{ if(x1==b.x1 && x2==b.x2 && y1==b.y1 && y2==b.y2) return true; else return false; } bool operator!=(const Rect& b) const{ return !(*this==b); } }; struct Vector{ float x; float y; Vector(){ zero(); } Vector( float mx, float my ){ x = mx, y = my; } float getMagnitude(){ return sqrtf(x*x+y*y); } void zero(){ x = y = 0.0; } void normalize(){ float m = getMagnitude(); x /= m; y /= m; } Vector operator*(float m){ Vector tmp(x*m, y*m); return tmp; } Vector operator+(Vector& v){ Vector tmp(v.x+x, v.y+y); if( fabs(tmp.x) < 0.1) tmp.x = 0.0; if( fabs(tmp.y) < 0.1) tmp.y = 0.0; return tmp; } Vector operator-(Vector& v){ Vector tmp(v.x-x, v.y-y); if( fabs(tmp.x) < 0.1) tmp.x = 0.0; if( fabs(tmp.y) < 0.1) tmp.y = 0.0; return tmp; } Vector& operator+=(Vector& v){ return (*this=*this+v); } Vector& operator*=(float m){ x*=m; y*=m; return *this; } Vector& operator-=(Vector& v){ return (*this=*this-v); } float getDistanceFrom(const Vector& v){ return sqrt((x-v.x)*(x-v.x)+(y-v.y)*(y-v.y)); } };
暂时到此为止!
大牛又开始写程序了,摄影热消退了?
谁说呢,我时不时都会写程序,时不时都会拍照片呢
作业也沙发!
终于看到代码了!
我最近经常写代码啊!
最近发现你的网站访问慢了很多啊,是换服务器了?还是怎么了?
换服务器了!主机仍然在美国。
你能开发音乐相关的软件吗?例如:录音软件,麦克混音软件。
你好!不好意思,我未进入过这些领域,以后或许会有兴趣吧!
目前能力有限……