Помогите с "Танками" в Turbo C++
Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<mouse.c>
#include<graphics.h>
#include<bios.h>
#include<iostream.h>
#include <dos.h>
int x=320,y=420,x1=80,y1=390;
void fireplayer(int x,int y)
{
do
{
setcolor(4);
setfillstyle(1,4);
fillellipse(x-25,y-50,5,5);
delay(40);
setfillstyle(1,0);
setcolor(0);
bar(x-30,y-56,x-20,y-44);
y=y-20;
if(getpixel(x-25,y-50)==15)
{
setcolor(4);
setfillstyle(1,4);
y=60;
fillellipse(x-25,y-10,50,50);
}
}
while(y!=60);
setcolor(15);
setfillstyle(1,15);
}
void tankcomputer(int x1,int y1)
{
bar(x1+7,y1-360,x1-7,y1-330);
pieslice(x1,y1-360,0,180,7);
pieslice(x1,y1-330,180,360,7);
//Gusinica 2
bar(x1-43,y1-360,x1-57,y1-330);
pieslice(x1-50,y1-360,0,180,7);
pieslice(x1-50,y1-330,180,360,7);
//BACHNA
ellipse(x1-25,y1-345,0,360,25,30);
setfillstyle(1,15);
floodfill(x1-25,y1-345,15);
bar(x1-30,y1-360,x1-20,y1-295);
setcolor(0);
ellipse(x1-25,y1-345,0,360,12,15);
setcolor(15);
pieslice(x1-25,y1-295,180,360,5);
}
void tankplayer(int x,int y)
{
setcolor(15);
//Ramka
rectangle(5,5,635,475);
//Gusinica 1
bar(x+7,y,x-7,y+30);
pieslice(x,y,0,180,7);
pieslice(x,y+30,180,360,7);
//Gusinica 2
bar(x-43,y,x-57,y+30);
pieslice(x-50,y,0,180,7);
pieslice(x-50,y+30,180,360,7);
//BACHNA
ellipse(x-25,y+15,0,360,25,30);
setfillstyle(1,15);
floodfill(x-25,y+15,15);
bar(x-30,y+15,x-20,y-35);
setcolor(0);
ellipse(x-25,y+15,0,360,12,15);
setcolor(15);
pieslice(x-25,y-35,0,180,5);
}
void control(int x,int y)
{
int key;
tankcomputer(x1,y1);
do
{
//key=0;
if(x1<x)
{
x1+=random(15);
}
else
{
x1-=random(15);
}
tankcomputer(x1,y1);
if (bioskey(1)!=0) key=bioskey(0);
if(key==19712)
{
cleardevice();
x=x+10;
y=y;
if(x>620)
{
x=620;
}
tankplayer(x,y);
}
if(key==14624)
{
cleardevice();
tankcomputer(x1,y1);
tankplayer(x,y);
fireplayer(x,y);
}
if(key==19200)
{
cleardevice();
x=x-10;
if(x<70)
{
x=70;
y=y;
}
tankplayer(x,y);
}
}
while(key!=283);
}
void main(void)
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
tankcomputer(x1,y1);
tankplayer(x,y);
control(x,y);
}
#include<stdlib.h>
#include<conio.h>
#include<mouse.c>
#include<graphics.h>
#include<bios.h>
#include<iostream.h>
#include <dos.h>
int x=320,y=420,x1=80,y1=390;
void fireplayer(int x,int y)
{
do
{
setcolor(4);
setfillstyle(1,4);
fillellipse(x-25,y-50,5,5);
delay(40);
setfillstyle(1,0);
setcolor(0);
bar(x-30,y-56,x-20,y-44);
y=y-20;
if(getpixel(x-25,y-50)==15)
{
setcolor(4);
setfillstyle(1,4);
y=60;
fillellipse(x-25,y-10,50,50);
}
}
while(y!=60);
setcolor(15);
setfillstyle(1,15);
}
void tankcomputer(int x1,int y1)
{
bar(x1+7,y1-360,x1-7,y1-330);
pieslice(x1,y1-360,0,180,7);
pieslice(x1,y1-330,180,360,7);
//Gusinica 2
bar(x1-43,y1-360,x1-57,y1-330);
pieslice(x1-50,y1-360,0,180,7);
pieslice(x1-50,y1-330,180,360,7);
//BACHNA
ellipse(x1-25,y1-345,0,360,25,30);
setfillstyle(1,15);
floodfill(x1-25,y1-345,15);
bar(x1-30,y1-360,x1-20,y1-295);
setcolor(0);
ellipse(x1-25,y1-345,0,360,12,15);
setcolor(15);
pieslice(x1-25,y1-295,180,360,5);
}
void tankplayer(int x,int y)
{
setcolor(15);
//Ramka
rectangle(5,5,635,475);
//Gusinica 1
bar(x+7,y,x-7,y+30);
pieslice(x,y,0,180,7);
pieslice(x,y+30,180,360,7);
//Gusinica 2
bar(x-43,y,x-57,y+30);
pieslice(x-50,y,0,180,7);
pieslice(x-50,y+30,180,360,7);
//BACHNA
ellipse(x-25,y+15,0,360,25,30);
setfillstyle(1,15);
floodfill(x-25,y+15,15);
bar(x-30,y+15,x-20,y-35);
setcolor(0);
ellipse(x-25,y+15,0,360,12,15);
setcolor(15);
pieslice(x-25,y-35,0,180,5);
}
void control(int x,int y)
{
int key;
tankcomputer(x1,y1);
do
{
//key=0;
if(x1<x)
{
x1+=random(15);
}
else
{
x1-=random(15);
}
tankcomputer(x1,y1);
if (bioskey(1)!=0) key=bioskey(0);
if(key==19712)
{
cleardevice();
x=x+10;
y=y;
if(x>620)
{
x=620;
}
tankplayer(x,y);
}
if(key==14624)
{
cleardevice();
tankcomputer(x1,y1);
tankplayer(x,y);
fireplayer(x,y);
}
if(key==19200)
{
cleardevice();
x=x-10;
if(x<70)
{
x=70;
y=y;
}
tankplayer(x,y);
}
}
while(key!=283);
}
void main(void)
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
tankcomputer(x1,y1);
tankplayer(x,y);
control(x,y);
}
А если ты хочешь просто сделать игру, то лучше для этого использовать DirectX или писАть на Flash'е
А если ты хочешь просто сделать игру, то лучше для этого использовать DirectX или писАть на Flash'е[/QUOTE]
Вероятно меня не правильно поняли. Необходимо написать курсовую "Тема: Танки". Пишется все под Dos и поэтому речь не идет не про DirectX не про OpegGL. А проблема заключается в том чтобы сделать так чтобы экран при движении танков не мерцал. Очень надо!!!!!!!!
Используй видеостраницы, рисуй по очереди в каждой и переключай их
Пример кода привести можешь? А то я не очень тебя понял.
Почитай хелп по graphics.h - там есть функции типа SetVisiblePage и SetActivePage (я сейчас точно не помню). Видимая страница - та, которая выводится на экран и которую видит пользователь, а активная - та, на которую производится рисование. Идея в том, чтобы пока на экране отображается старое содержимое, производить рисование на другой видеостранице, как только рисование закончено - сделать активную страницу видимой, таким образом картинка на экране сменяется мгновенно и пользователь не видит процесса рисования. Соответственно, бывшую видимую страницу делаешь активной и новый кадр рисуешь туда, и т. д.
Не знаю, у меня что не получается, я и с visualpage пробовал, отображается или черный экран или на экране смена кадров не происходит.
Скорее всего, у тебя выбран такой видеорежим, который не поддерживает несколько видеостраниц.