我想要使用vs2010的c++进行编程一个开车小游戏,但是在使用图像批处理函数时发生了内存冲突问题。
我发现他原本运行的好好的,突然就卡住了。点击关闭按钮就弹出来一个窗口,如下图。
我检查了多遍代码,发现去掉图像批处理函数后可以运行,但是会出现闪烁的问题。这令我很头大。
我现在急切的需要一个有效的解决方案,让程序能够正常运行且不发生闪烁。
如果有可以解决问题的方案请分享出来,让其他的遇到同样问题的网友得到解决,谢谢了。
我的代码如下。
#include <graphics.h>
#include <conio.h>
#include<ctime>
#include "ShowPrint.h"
#include<cmath>
#include<iostream>
using namespace std;
struct car{
int x;
int y;
int width;
int hight;
};
struct BK{
int x;
int y;
IMAGE img;
};
const int m=6;
int textx=0,score=0,speed=6,i=-5,r=5,sbx,b[m],clocks,clocko,zzz=144;
char s[9];
bool bool_;
ExMessage em;
IMAGE img,bg,sbl;
car c1;
car c2[m];
bool aaaaaa(int ax1,int ay1,int ax2,int ay2,int bx1,int by1,int bx2,int by2){
if(ax1<=bx1&&bx1<=ax2&&ay1<=by1&&by1<=ay2 || ax1<=bx2&&bx2<=ax2&&ay1<=by2&&by2<=ay2)return 1;
return 0;
}
void initset(){
c1.hight=200;
c1.width=100;
c1.x=0;
srand((unsigned)time(0));
initgraph(800, 800,EX_SHOWCONSOLE);
loadimage(&img,_T("C:\\Users\\jiang\\Desktop\\tt.png"),100,200);
loadimage(&bg,_T("C:\\Users\\jiang\\Desktop\\ttt.png"),800,800);
loadimage(&sbl,_T("C:\\Users\\jiang\\Desktop\\123.jpg"));
for(int j=0;j<m;j++){
b[j]=rand()%800;
c2[j].y=-201;
c2[j].x=(rand()%8)*100;
c2[j].width=100;
c2[j].hight=200;
}
}
void draw(){
cleardevice();
BeginBatchDraw();
putimage(0,i%800,&bg);
putimage(0,i%800-800,&bg);
for(int x=0;x<m;x++){
if(i==b[x] && c2[x].y<-200)c2[x].y=-200;
putimage(c2[x].x,c2[x].y,&img);
}
for(int j=0;j<m;j++){
if(c2[j].y>-201)c2[j].y+=speed;
}
i++;
for(int v=0;v<m;v++){
if(c2[v].y>=800){
c2[v].x=rand()%800+5;
c2[v].y=-200;
i=0-r;
}if(aaaaaa(c2[v].x,c2[v].y,c2[v].x+c2[v].width,c2[v].y+c2[v].hight,c1.x,800-300,c1.x+c1.width,800-300+200)){
print("%d",193894243);
exit(0);
}
}
sprintf(s, "%d", score);
settextcolor(RGB(rand()%256,rand()%256,rand()%256));
outtextxy(textx, 0, s);
bool_=peekmessage(&em);
sbx=em.x;
if(sbx<700)c1.x=sbx;
if(score%5500==5499)speed++;
putimage(c1.x,800-300,&img);
EndBatchDraw();
}int main()
{
initset();
while(1){
clocks=clock();
textx++;
if(textx>=780)textx=0;
score++;
draw();
clocko=clock();
Sleep(1000/zzz-(clocko-clocks));
}
_getch(); // 按任意键继续
closegraph(); // 关闭绘图窗口
return 0;
}