求高手指教用c语言和sdl写的游戏代码出现的问题,急急急!!!

HELLO沃德 2012-05-19 03:13:57
#include "SDL/SDL.h"


const int SCREEN_WIDTH=800;
const int SCREEN_HEIFHT=750;
const int SCREEN_CPP=32;

const int PICTUREWIDTH=320;
const int PICTUREHEIGHT=240;

SDL_Surface *backgroundPtr=NULL;
SDL_Surface *screen=NULL;
SDL_Surface *brickptr=NULL;

typedef struct
{
short brick_x[4];
short brick_y[4];
}BRICK;
BRICK brick;
/************************************************************************/
/* 初始化sdl */
/************************************************************************/
bool InitSDL()
{
if(SDL_Init (SDL_INIT_EVERYTHING)==-1)
{
return false;
}

screen=SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIFHT,SCREEN_CPP,SDL_SWSURFACE|SDL_DOUBLEBUF);
if(screen==NULL)
{
return false;
}
SDL_WM_SetCaption("Tetris Game","software");
return true;

}

/************************************************************************/
/* 加载图片 */
/************************************************************************/
void InitImages()
{
SDL_Surface *temp;
char fileName[20];
/*int i;*/

//加载背景图片
sprintf(fileName,"bg.bmp");
temp=SDL_LoadBMP(fileName);
if (temp==NULL)
{
fprintf(stderr,"%s,%s\n",fileName,SDL_GetError());
return;
}
backgroundPtr=SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
//加载砖块的图片
sprintf(fileName,"1.bmp");
temp=SDL_LoadBMP(fileName);
if (temp==NULL)
{
fprintf(stderr,"%s,%s\n",fileName,SDL_GetError());
return;
}
backgroundPtr=SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
}
/************************************************************************/
/* show images */
/************************************************************************/
void ShowImage(SDL_Surface *source,int left,int top,int width,int height,SDL_Surface *destination)
{
SDL_Rect picPosition;

picPosition.x=left;
picPosition.y=top;
picPosition.w=(width==0)?source-> w:width;
picPosition.h=(height==0)?source->h:height;

SDL_BlitSurface(source,NULL,destination,&picPosition);

}
/************************************************************************/
/* 显示砖块和背景 */
/************************************************************************/
void showPic()
{
ShowImage (backgroundPtr,0,0,0,0,screen);
SDL_Flip(screen);
};


int main(int argc,char*arg[])
{
/*SDL_Event event;*/


showPic();
InitSDL();
InitImages();





}
以上的代码不知道哪里出错了,请大牛帮忙看一下,万分感谢!
1>------ 已启动生成: 项目: sdl, 配置: Debug Win32 ------
1>正在编译...
1>sdl.cpp
1>d:\c语言\code\代码\sdl\sdl\sdl.cpp(51) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\vs\vc\include\stdio.h(366) : 参见“sprintf”的声明
1>d:\c语言\code\代码\sdl\sdl\sdl.cpp(61) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\vs\vc\include\stdio.h(366) : 参见“sprintf”的声明
1>d:\c语言\code\代码\sdl\sdl\sdl.cpp(110) : error C4716: “SDL_main”: 必须返回一个值
1>生成日志保存在“file://d:\c语言\code\代码\sdl\sdl\Debug\BuildLog.htm”
1>sdl - 1 个错误,2 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
...全文
205 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
HELLO沃德 2012-08-27
  • 打赏
  • 举报
回复
《迷你电子书阅读器》

1. 设计目的
电子书代表人们所阅读的数字化出版物, 从而区别于以纸张为载体的传统出版物, 电子书是利用计算机技术将一定的文字、图片、声音、影像等信息, 通过数码方式记录在以光、电、磁为介质的设备中, 借助于特定的设备来读取、复制、传输 。”

现在人们的手机或者MP3中都已经集成了最基本的电子书阅读的功能,电子书的基本格式就是txt,就是我们电脑上的记事本的格式。本系统的目的是完成一个简单的txt电子书阅读的功能,采用C语言和SDL图形库,完成打开指定目录的电子书,能够分页显示电子书的内容,通过某个固定的键盘或者按钮可以实现电子书的翻页阅读等功能。
2. 设计意义
通过电子书阅读器可以让学生了解到C语言不只是控制台编程,通过加载SDL图形库也可以写出绚烂多彩的程序,激发学生进一步的学习兴趣、同时也锻炼学生分析问题、解决问题的能力,使学生具备初步系统设计、开发、文档编写能力。为今后的windows端的电子阅读,手机端的电子阅读等项目打下基础。
3. 主要功能
1)实现显示目录的级别,文件的列表(txt格式)。
2)可以通过单击选择要打开的文件,电子书分页显示。
3)打开此文件后可以进行文本内容的阅读,可以通过键盘或者按钮事件进行电子书的翻页。
求大神给解决思路。。。急
HELLO沃德 2012-05-19
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <SDL\sdl.h>
#include <sdl\sdl_image.h>
#include<sdl\SDL_mixer.h>


#pragma comment(lib,"SDL.lib")
#pragma comment(lib,"SDLmain.lib")
#pragma comment(lib,"SDL_image.lib")

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

const int BALL_WIDTH = 61;
const int BALL_HEIGHT = 56;
const int DICE_WIDTH =60;
const int DICE_HEIGHT =60;
const int x =(SCREEN_WIDTH - BALL_WIDTH) /2;
const int y = (SCREEN_HEIGHT - BALL_HEIGHT) /2;

SDL_Surface *screen = NULL;
SDL_Surface *background = NULL;
SDL_Surface *ball = NULL;
SDL_Surface *dice = NULL;
SDL_Event event;


typedef struct
{
short dice;
short status;
}DICE;


//色子改变
//void changeDice(){
// switch (DICE.status)
// {
// case 0:
// DICE.status=1;
// break;
// case 1:
// DICE.status=2;
// break;
// case 2:
// DICE.status=3;
// break;
// case 3:
// DICE.status=4;
// break;
// case 4:
// DICE.status=5;
// break;
//}
//初始化sdl
bool InitSDL()
{
if(SDL_Init (SDL_INIT_EVERYTHING)==-1)
{
return false;
}

screen=SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,SDL_SWSURFACE|SDL_DOUBLEBUF);
if(screen==NULL)
{
return false;
}
SDL_WM_SetCaption("Dafuwong Online","software");
return true;

}
/************************************************************************/
/* 加载图片 */
/************************************************************************/
SDL_Surface *loadImage(char *aFilename)
{
SDL_Surface* loadedImage = NULL;
SDL_Surface* temp = NULL;//临时绘图表面

//Load the image using SDL_image
loadedImage = IMG_Load( aFilename);//sdl图像载入函数

if( loadedImage != NULL )//If the image loaded
{
//将图像格式转换成屏幕格式
temp = SDL_DisplayFormat( loadedImage );
SDL_FreeSurface( loadedImage );//Free the old image
}
return temp;//返回图像文件的绘图表面的指针
}
//show images
/************************************************************************/
/* 拷貝繪圖頁 source 至屏幕位置 (x, y) */
/************************************************************************/
void show_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
SDL_Rect offset;
offset.x = x;
offset.y = y;

//Blit the surface
SDL_BlitSurface( source, NULL, destination, &offset );
}
void showbackground()
{
show_surface (0,0,background,screen);
SDL_Flip(screen);
}
void showball()
{
show_surface (0,0,ball,screen);
SDL_Flip(screen);
}
void showdice()
{
show_surface (0,0,dice,screen);
SDL_Flip(screen);
}



int main(int argc,char*arg[])
{
/*SDL_Event event;*/

char lionName[50] = {"bmp\\2668155_124753059357_211.bmp"};
char ballName[50] = {"bmp\\u=2557115173,62554154&fm=0&gp=0.bmp"};
char diceName[50] = {"bmp\\s1.bmp"};
background = loadImage(lionName);
ball = loadImage(ballName);
dice = loadImage(diceName);

InitSDL();

showbackground();
showball();
showdice();

SDL_Delay(30000);
SDL_Quit();//关闭SDL各个子系统
system("pause");



return 0;

}







之后自己改了改还是有问题,这到底是什么原因呢?具体。。。急急急
HELLO沃德 2012-05-19
  • 打赏
  • 举报
回复
#include "SDL/SDL.h"
#include <string.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

const int BALL_WIDTH = 61;
const int BALL_HEIGHT = 56;
const int DICE_WIDTH =60;
const int DICE_HEIGHT =60;
const int x =(SCREEN_WIDTH - BALL_WIDTH) /2;
const int y = (SCREEN_HEIGHT - BALL_HEIGHT) /2;

SDL_Surface *screen = NULL;
SDL_Surface *background = NULL;
SDL_Surface *ball = NULL;
SDL_Surface *dice = NULL;
SDL_Event event;


typedef struct
{
short dice;
short status;
}DICE;


//色子改变
//void changeDice(){
// switch (DICE.status)
// {
// case 0:
// DICE.status=1;
// break;
// case 1:
// DICE.status=2;
// break;
// case 2:
// DICE.status=3;
// break;
// case 3:
// DICE.status=4;
// break;
// case 4:
// DICE.status=5;
// break;
//}
//初始化sdl
bool InitSDL()
{
if(SDL_Init (SDL_INIT_EVERYTHING)==-1)
{
return false;
}

screen=SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,SDL_SWSURFACE|SDL_DOUBLEBUF);
if(screen==NULL)
{
return false;
}
SDL_WM_SetCaption("Dafuwong Online","software");
return true;

}
/************************************************************************/
/* 加载图片 */
/************************************************************************/
SDL_Surface *loadImage(char *aFilename)
{
SDL_Surface* loadedImage = NULL;
SDL_Surface* optimizedImage = NULL;//临时绘图表面

//Load the image using SDL_image
loadedImage = IMG_Load( aFilename);//sdl图像载入函数

if( loadedImage != NULL )//If the image loaded
{
//将图像格式转换成屏幕格式
optimizedImage = SDL_DisplayFormat( loadedImage );
SDL_FreeSurface( loadedImage );//Free the old image
}
return optimizedImage;//返回图像文件的绘图表面的指针
}
//show images
/************************************************************************/
/* 拷貝繪圖頁 source 至屏幕位置 (x, y) */
/************************************************************************/
void show_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
SDL_Rect offset;
offset.x = x;
offset.y = y;

//Blit the surface
SDL_BlitSurface( source, NULL, destination, &offset );
}
void showbackground()
{
show_surface (background,0,0,screen);
SDL_Flip(screen);
};
void showball()
{
show_surface (ball,0,0,screen);
SDL_Flip(screen);
};
void showdice()
{
show_surface (dice,0,0,screen);
SDL_Flip(screen);
}



int main(int argc,char*arg[])
{
/*SDL_Event event;*/

char lionName[50] = {"bmp\\2668155_124753059357_211.bmp"};
char ballName[50] = {"bmp\\u=2557115173,62554154&fm=0&gp=0.bmp"};
char diceName[50] = {"bmp\\s1.bmp"};
background = loadImage(lionName);
ball = loadImage(ballName);
dice = loadImage(diceName);

InitSDL();

showbackground();
showball();
showdice();



return 0;

}
是我写的大富翁初步代码,但是不能运行,求大神指教!





jiligululalala 2012-05-19
  • 打赏
  • 举报
回复
main函数里面,你按照这个顺序改一下

InitSDL();
InitImages();
showPic();


另外,你windows环境下,各项配置都正确吗?
羽飞 2012-05-19
  • 打赏
  • 举报
回复
不好意思,SDL应该是楼主用的一个第三方库,那这个是没法修改的了
等待用过SDL的人来回答吧
羽飞 2012-05-19
  • 打赏
  • 举报
回复
都是小毛病
一个是sprintf函数不安全,楼主可以护绿它,或者使用sprintf_s函数
C4716是没有返回值,楼主补一个吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧