带有图形的c / c ++赛车游戏
Racing game in c/c++ with graphics
我正在尝试使用图形在c/c ++中制作赛车游戏
到目前为止,我的问题是我无法在敌方汽车中获得颜色当我添加颜色时,它会闪烁
如何消除闪烁
这是我到目前为止制作的游戏。
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<process.h>
#include<stdlib.h>
void enemycar(int x, int y)
{
setcolor(15);
rectangle(x+1,y,x+49,y+100);
rectangle(x+1,y+25,x+49,y+75);
setfillstyle( SOLID_FILL,YELLOW);
floodfill((x+x+50)/2,(y+y+100)/2,15);
setfillstyle(1,YELLOW);
floodfill((x+x+50)/2,(y+y+40)/2,15);
floodfill((x+x+50)/2,(y+y+160)/2,15);
}
void mycar(int x, int y)
{
setcolor(15);
rectangle(x+1,y,x+49,y+100);
rectangle(x+1,y+25,x+49,y+75);
setfillstyle(5,RED);
floodfill((x+x+50)/2,(y+y+100)/2,15);
setfillstyle(2,BLUE);
floodfill((x+x+50)/2,(y+y+40)/2,15);
floodfill((x+x+50)/2,(y+y+160)/2,15);
}
void myclear(int x,int y)
{
setcolor(8);
rectangle(x+1,y,x+49,y+100);
rectangle(x+1,y+25,x+49,y+75);
setfillstyle(SOLID_FILL,8);
floodfill((x+x+50)/2,(y+y+100)/2,8);
floodfill((x+x+50)/2,(y+y+40)/2,8);
floodfill((x+x+50)/2,(y+y+160)/2,8);
}
void enemyclear(int x,int y)
{
setcolor(8);
rectangle(x+1,y,x+49,y+100);
rectangle(x+1,y+25,x+49,y+75);
// line(x+1,y,x+1,y+100);
// delay(500);
}
void main()
{
int gdriver = DETECT,gmode;
initgraph(&gdriver,&gmode,"C:\Turboc3\BGI");
int x=300,y=350,ch,life=3,score=0;
char choice;
cout<<"nnnnnttt* THUNDER RACER *";
cout<<"nttt ---------------";
cout<<"nntLong long ago the state of Valencia was attacked by the";
cout<<"nntenemies and were defeated. Every soldier and citizen was";
cout<<"nntkilled except the beautiful princess Cindrella and you";
cout<<"nntwho survived. Enemies want to kill her and she is in your";
cout<<"nntcar right now. If you have the guts save her from enemies'";
cout<<"nntcars and marry her.";
cout<<"nntSo all the best...";
delay(200);
for(int m=1;m<25;m++)
for(int n=1;n<80;n++) {
gotoxy(n,m);
cout<<" ";
}
setcolor(RED);
rectangle(20,60,200,120);
rectangle(20,300,200,420);
gotoxy(5,21);
cout<<"Only Aditya & Anshul";
gotoxy(5,22);
cout<<"have saved her till";
gotoxy(5,23);
cout<<"now. So you can be";
gotoxy(5,24);
cout<<"the 3-rd";
rectangle(249,0,401,getmaxy());
setfillstyle(SOLID_FILL,8);
floodfill(325,getmaxy()/2,RED);
setcolor(RED);
rectangle(20,200,200,250);
gotoxy(5,15);
cout<<"Press <Esc> to Exit";
for(int level=1;(level<=5)&&(life>0);level++){
if(level==1){
gotoxy(5,5);
cout<<"Your War Starts Now";
gotoxy(5,7);
cout<<"All the best";
delay(500);
gotoxy(5,5);
cout<<" ";
gotoxy(5,7);
cout<<" ";
}
else {
gotoxy(5,5);
cout<<"Next level.";
delay(500);
gotoxy(5,5);
cout<<" ";
}
for(int i=0;(i<15)&&(life>0);i++) {
if((level==5)&&(i==14)){
gotoxy(5,5);
cout<<"You have won";
gotoxy(5,6);
cout<<"Wanna continue <y/n>";
choice = getch();
if ((choice=='y')||(choice=='Y'))
main();
else
exit(0);
}
setcolor(RED);
rectangle(420,125,600,175);
gotoxy(55,10);
cout<<"Level = "<<level;
rectangle(420,250,600,300);
gotoxy(55,18);
cout<<"Lives = "<<life;
rectangle(420,350,600,400);
gotoxy(55,24);
cout<<"Score = "<<score;
int accident=0;
int y1=1,x1=250+((rand()%3)*50);
int y2=1,x2=250+((rand()%3)*50);
score += 10;
while(y1<getmaxy()-1)
{
enemyclear(x1,y1);
enemyclear(x2,y2);
y1++;
y2++;
if(accident == 1)
break;
enemycar(x1,y1);
enemycar(x2,y2);
mycar(x,y);
delay(5-level);
if(kbhit())
{
mycar(x,y);
ch=getch();
switch(ch) {
case 27: exit(0);
break;
case 75:myclear(x,y);
if(x>250)
x=x-50;
if((x==x1)||(x==x2))
if( ( ((y-y1)<100)&&((y-y1)>0) ) || ( ((y-y2)<100)&&((y-y2)>0) ) )
{
accident=1;
x=x+50;
mycar(x,y);
goto Next1;
}
mycar(x,y);
break;
case 77:myclear(x,y);
if(x<350)
x=x+50;
if((x==x1)||(x==x2))
if( ( ((y-y1)<100)&&((y-y1)>0) ) || ( ((y-y2)<100)&&((y-y2)>0) ) )
{
accident=1;
x=x-50;
mycar(x,y);
goto Next1;
}
mycar(x,y);
break;
case 72:myclear(x,y);
if(y>0)
y=y-5;
mycar(x,y);
break;
case 80:myclear(x,y);
if(y<getmaxy()-105)
y=y+5;
mycar(x,y);
break;
}
}
if((x==x1)||(x==x2))
if( ( ((y-y1)<100)&&((y-y1)>0) ) || ( ((y-y2)<100)&&((y-y2)>0) ) )
accident=1;
Next1:
if(accident==1){
life =life-1;
score -= 10;
if(life==0) {
gotoxy(5,5);
cout<<"GAME OVER ";
gotoxy(5,6);
cout<<"You could not save";
gotoxy(5,7);
cout<<"her";
break;
}
gotoxy(5,5);
cout<<"You have lost 1 life";
delay(500);
gotoxy(5,5);
cout<<" ";
}
}
}
}
getch();
}
我可以看到您通过将创建字符的调用分解为方法来模块化代码。这很好。
但是,由于您使用的是面向对象的语言C++,因此建议您尝试为每种字符类型创建一些类。
闪烁
闪烁可能是因为您的图形库不是为高性能而设计的。我建议您尝试使用精灵。事实上,你可能希望使用像Cocos2d-x这样的开源2D游戏/精灵库。
游戏引擎能给我带来什么?
像我上面描述的游戏引擎,使用了很多多年来开发的性能技术,比如纹理打包、查找表等,来提供实时性能。学习所有这些技术仍然有必要,但是您可能不想从头开始重新实现它们(除非您正在开发自己的游戏引擎(。
要消除此处的闪烁,您可以通过使用函数来使用图形页面的概念:设置活动页面( (;和设置可视化页面( (;
相关文章:
- C++图形类指针混淆
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 在C++游戏中与库存系统作斗争
- 换位表导致测试失败(但在游戏中运行良好)
- 这是实现图形的坏方法吗
- Craps游戏问题,忽略if语句
- 打印 ONNXRUNTIME::图形没有模型
- 如何将到达图形视图右侧(末端)的QGraphicsPixmapItem移动到左侧(开始)侧(就像在贪吃蛇游戏中发生的事情
- 我可以在视频游戏进入 GPU 之前记录图形数据吗?
- 游戏中图形和物理引擎之间共享数据
- 在C++中使我的游戏独立于图形 API
- 带有图形的c / c ++赛车游戏
- C++ 使用 GTK+ 制作 2D 游戏图形
- 抖音游戏图形设计
- 库的拆分界面(带图形的国际象棋游戏等)与删除每个指针的用户定律
- 简单的游戏图形使用Qt库
- 免费跨平台2D图形游戏引擎
- 一个易于使用的3D图形引擎,用于一款简单的游戏
- 在c++中创建一个井字游戏的图形界面