做这个游戏是为了交作业,另外需要制作一份作业报告,故顺便以日志的形式连载一下!!!
非专业写游戏高手,水平有限,望多多指教。
开发工具: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));
}
};
暂时到此为止!


大牛又开始写程序了,摄影热消退了?
谁说呢,我时不时都会写程序,时不时都会拍照片呢
作业也沙发!
终于看到代码了!
我最近经常写代码啊!
最近发现你的网站访问慢了很多啊,是换服务器了?还是怎么了?
换服务器了!主机仍然在美国。
你能开发音乐相关的软件吗?例如:录音软件,麦克混音软件。
你好!不好意思,我未进入过这些领域,以后或许会有兴趣吧!
目前能力有限……